Add package name and class name to custom intent search action

This commit is contained in:
MM20
2025-09-27 13:12:59 +02:00
parent 17cf32e72f
commit 5d022d0a5f
3 changed files with 75 additions and 4 deletions

View File

@@ -789,6 +789,30 @@ fun CustomizeCustomIntent(viewModel: EditSearchActionSheetVM) {
singleLine = true, singleLine = true,
) )
val packageName = action.baseIntent.component?.packageName ?: action.baseIntent.`package`
OutlinedTextField(
modifier = Modifier
.fillMaxWidth()
.padding(top = 8.dp),
value = packageName ?: "",
onValueChange = { viewModel.setIntentPackage(it) },
label = { Text("Package") },
singleLine = true,
)
AnimatedVisibility(packageName != null) {
OutlinedTextField(
modifier = Modifier
.fillMaxWidth()
.padding(top = 8.dp),
value = action.baseIntent.component?.className ?: "",
onValueChange = { viewModel.setIntentClassName(it) },
label = { Text("Class name") },
singleLine = true,
)
}
var showAdvanced by remember { var showAdvanced by remember {
mutableStateOf(false) mutableStateOf(false)

View File

@@ -521,6 +521,49 @@ class EditSearchActionSheetVM : ViewModel(), KoinComponent {
} }
} }
fun setIntentPackage(pkg: String) {
val searchAction = searchAction.value ?: return
this.searchAction.value = when (searchAction) {
is CustomIntentActionBuilder -> searchAction.copy(
baseIntent = searchAction.baseIntent.cloneFilter().also {
val extras = searchAction.baseIntent.extras?.deepCopy() ?: Bundle()
it.replaceExtras(extras)
if (pkg.isBlank()) {
it.`package` = null
it.component = null
} else if (it.component != null) {
it.component = ComponentName(pkg, it.component!!.className)
} else {
it.`package` = pkg
}
},
)
else -> searchAction
}
}
fun setIntentClassName(className: String) {
val searchAction = searchAction.value ?: return
this.searchAction.value = when (searchAction) {
is CustomIntentActionBuilder -> searchAction.copy(
baseIntent = searchAction.baseIntent.cloneFilter().also {
val extras = searchAction.baseIntent.extras?.deepCopy() ?: Bundle()
it.replaceExtras(extras)
val pkg = it.component?.packageName ?: it.`package`
if (className.isBlank()) {
it.`package` = pkg
it.component = null
} else if (pkg != null) {
it.`package` = null
it.component = ComponentName(pkg, className)
}
},
)
else -> searchAction
}
}
fun setQueryKey(key: String?) { fun setQueryKey(key: String?) {
val action = searchAction.value ?: return val action = searchAction.value ?: return
searchAction.value = when (action) { searchAction.value = when (action) {

View File

@@ -130,10 +130,8 @@ as data (URI) or as an extra:
that that
is used is used
to store the search term in the intent's extras. For example, you could use the key to store the search term in the intent's extras. For example, you could use the key
`android.intent.extra.TEXT` to create an intent that shares the search term as text. You can `android.intent.extra.TEXT`. You can also provide a template to format the extra value. Again, use
also the placeholder `${1}` to include the search term in the template.
provide a template to format the extra value. Again, use the placeholder `${1}` to include the
search term in the template.
#### Base intent #### Base intent
@@ -151,6 +149,12 @@ The base intent defines the action.
- **Data**: - **Data**:
The [data URI](https://developer.android.com/reference/android/content/Intent#setData(android.net.Uri)) The [data URI](https://developer.android.com/reference/android/content/Intent#setData(android.net.Uri))
of the intent. Only used if the search term is not passed as data. of the intent. Only used if the search term is not passed as data.
- **Package**:
The [package](https://developer.android.com/reference/android/content/Intent#setPackage(java.lang.String))
of the intent.
- **Class name**:
The [component class name](https://developer.android.com/reference/android/content/Intent#setClassName(java.lang.String,%20java.lang.String), java.lang.String))
of the intent. Requires a package to be set.
#### Advanced settings #### Advanced settings