From 1f23d8a995017be63ca1cd11dbaea57ccb716490 Mon Sep 17 00:00:00 2001 From: Nullptr Date: Fri, 21 Oct 2022 20:11:37 +0800 Subject: [PATCH] Fix opening module settings --- .../ui/page/manage/ModuleManagePage.kt | 8 +++---- .../lsposed/lspatch/util/LSPPackageManager.kt | 21 +++++++++++++++++-- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/manager/src/main/java/org/lsposed/lspatch/ui/page/manage/ModuleManagePage.kt b/manager/src/main/java/org/lsposed/lspatch/ui/page/manage/ModuleManagePage.kt index 3ac1c48..d7c5c32 100644 --- a/manager/src/main/java/org/lsposed/lspatch/ui/page/manage/ModuleManagePage.kt +++ b/manager/src/main/java/org/lsposed/lspatch/ui/page/manage/ModuleManagePage.kt @@ -51,11 +51,11 @@ fun ModuleManageBody() { key = { it.first.app.packageName } ) { var expanded by remember { mutableStateOf(false) } - val launchIntent = remember { LSPPackageManager.getLaunchIntentForPackage(it.first.app.packageName) } + val settingsIntent = remember { LSPPackageManager.getSettingsIntent(it.first.app.packageName) } AnywhereDropdown( expanded = expanded, onDismissRequest = { expanded = false }, - onClick = { launchIntent?.let { context.startActivity(it) } }, + onClick = { settingsIntent?.let { context.startActivity(it) } }, onLongClick = { expanded = true }, surface = { AppItem( @@ -85,10 +85,10 @@ fun ModuleManageBody() { text = { Text(text = it.first.label, color = MaterialTheme.colorScheme.primary) }, onClick = {}, enabled = false ) - if (launchIntent != null) { + if (settingsIntent != null) { DropdownMenuItem( text = { Text(stringResource(R.string.manage_module_settings)) }, - onClick = { context.startActivity(launchIntent) } + onClick = { context.startActivity(settingsIntent) } ) } DropdownMenuItem( diff --git a/manager/src/main/java/org/lsposed/lspatch/util/LSPPackageManager.kt b/manager/src/main/java/org/lsposed/lspatch/util/LSPPackageManager.kt index 4daccb5..09efbff 100644 --- a/manager/src/main/java/org/lsposed/lspatch/util/LSPPackageManager.kt +++ b/manager/src/main/java/org/lsposed/lspatch/util/LSPPackageManager.kt @@ -34,6 +34,9 @@ import kotlin.coroutines.suspendCoroutine object LSPPackageManager { private const val TAG = "LSPPackageManager" + private const val SETTINGS_CATEGORY = "de.robv.android.xposed.category.MODULE_SETTINGS" + + const val STATUS_USER_CANCELLED = -2 @Parcelize class AppInfo(val app: ApplicationInfo, val label: String) : Parcelable { @@ -41,8 +44,6 @@ object LSPPackageManager { get() = app.metaData?.get("xposedminversion") != null } - const val STATUS_USER_CANCELLED = -2 - var appList by mutableStateOf(listOf()) private set @@ -210,4 +211,20 @@ object LSPPackageManager { ris[0].activityInfo.name ) } + + fun getSettingsIntent(packageName: String): Intent? { + val intentToResolve = Intent(Intent.ACTION_MAIN) + intentToResolve.addCategory(SETTINGS_CATEGORY) + intentToResolve.setPackage(packageName) + val ris = lspApp.packageManager.queryIntentActivities(intentToResolve, 0) + + if (ris.size <= 0) return getLaunchIntentForPackage(packageName) + + return Intent(intentToResolve) + .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + .setClassName( + ris[0].activityInfo.packageName, + ris[0].activityInfo.name + ) + } }