diff --git a/manager/src/main/java/org/lsposed/lspatch/ui/page/SettingsScreen.kt b/manager/src/main/java/org/lsposed/lspatch/ui/page/SettingsScreen.kt
index 9402e4e..e590dc7 100644
--- a/manager/src/main/java/org/lsposed/lspatch/ui/page/SettingsScreen.kt
+++ b/manager/src/main/java/org/lsposed/lspatch/ui/page/SettingsScreen.kt
@@ -30,8 +30,8 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import com.ramcosta.composedestinations.annotation.Destination
-import kotlinx.coroutines.launch
import org.lsposed.lspatch.R
+import kotlinx.coroutines.launch
import org.lsposed.lspatch.config.Configs
import org.lsposed.lspatch.config.MyKeyStore
import org.lsposed.lspatch.lspApp
@@ -61,7 +61,7 @@ fun SettingsScreen() {
KeyStore()
DetailPatchLogs()
StorageDirectory()
- SwitchInstallPackage()
+ InstallActivity()
}
}
}
@@ -251,7 +251,6 @@ private fun DetailPatchLogs() {
icon = Icons.Outlined.BugReport,
title = stringResource(R.string.settings_detail_patch_logs)
)
- )
}
@Composable
@@ -261,54 +260,48 @@ private fun StorageDirectory() {
val scope = rememberCoroutineScope()
val errorText = stringResource(R.string.patch_select_dir_error)
val launcher = rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) {
- try {
- if (it.resultCode == Activity.RESULT_CANCELED) return@rememberLauncherForActivityResult
- val uri = it.data?.data ?: throw IOException("No data")
- val takeFlags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
- context.contentResolver.takePersistableUriPermission(uri, takeFlags)
- Configs.storageDirectory = uri.toString()
- Log.i(TAG, "Storage directory: ${uri.path}")
- } catch (e: Exception) {
- Log.e(TAG, "Error when requesting saving directory", e)
- scope.launch { snackbarHost.showSnackbar(errorText) }
- }
+ try {
+ if (it.resultCode == Activity.RESULT_CANCELED) return@rememberLauncherForActivityResult
+ val uri = it.data?.data ?: throw IOException("No data")
+ val takeFlags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
+ context.contentResolver.takePersistableUriPermission(uri, takeFlags)
+ Configs.storageDirectory = uri.toString()
+ Log.i(TAG, "Storage directory: ${uri.path}")
+ } catch (e: Exception) {
+ Log.e(TAG, "Error when requesting saving directory", e)
+ scope.launch { snackbarHost.showSnackbar(errorText) }
+ }
}
- AnywhereDropdown(
- expanded = false,
- onDismissRequest = { },
- onClick = {
- launcher.launch(Intent(Intent.ACTION_OPEN_DOCUMENT_TREE))
- },
- surface = {
- SettingsItem(
- title = stringResource(R.string.settings_storage_directory),
- desc = Configs.storageDirectory ?: "undefined",
- icon = Icons.Outlined.Folder
- )
- }) {}
+ SettingsItem(
+ title = stringResource(R.string.settings_storage_directory),
+ desc = Configs.storageDirectory ?: "undefined",
+ icon = Icons.Outlined.Folder,
+ modifier = Modifier.clickable { launcher.launch(Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)) }
+ )
}
@Composable
-private fun SwitchInstallPackage() {
- val context = LocalContext.current
- val packageName = context.packageName
- val componentName = ComponentName(packageName, "$packageName.InstallPackageActivity")
- val checked = remember { mutableStateOf(Configs.installPackage) }
+private fun InstallActivity() {
+ val pm = lspApp.packageManager
+ val componentName = ComponentName(lspApp, "org.lsposed.lspatch.ui.activity.InstallActivity")
+ var enabled by remember {
+ mutableStateOf(pm.getComponentEnabledSetting(componentName) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED)
+ }
+ val titleText = stringResource(id = R.string.enable_install_activity_title)
SettingsSwitch(
+ checked = enabled,
+ title = titleText,
modifier = Modifier.clickable {
- val isEnabled = !checked.value
- context.packageManager.setComponentEnabledSetting(
+ pm.setComponentEnabledSetting(
componentName,
- if (isEnabled) PackageManager.COMPONENT_ENABLED_STATE_ENABLED else PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+ if (enabled)
+ PackageManager.COMPONENT_ENABLED_STATE_DISABLED
+ else
+ PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP
)
- Configs.installPackage = isEnabled
- checked.value = isEnabled
- },
- checked = checked.value,
- icon = Icons.Outlined.Ballot,
- title = stringResource(R.string.settings_switch_install_package),
- desc = stringResource(if (checked.value) R.string.settings_switch_install_package_enabled else R.string.settings_switch_install_package_disabled)
+ enabled = !enabled
+ }
)
}
\ No newline at end of file
diff --git a/manager/src/main/res/values-zh-rCN/strings.xml b/manager/src/main/res/values-zh-rCN/strings.xml
index 74a10dc..5c539de 100644
--- a/manager/src/main/res/values-zh-rCN/strings.xml
+++ b/manager/src/main/res/values-zh-rCN/strings.xml
@@ -87,6 +87,7 @@
别名错误
别名密码错误
详细修补日志
+ 启用 install activity
注入加载器 Dex
对那些需要孤立服务进程的应用程序,譬如说浏览器的渲染引擎,请勾选此选项以确保他们正常运行
diff --git a/manager/src/main/res/values-zh-rTW/strings.xml b/manager/src/main/res/values-zh-rTW/strings.xml
index 46f2432..2bfa9f1 100644
--- a/manager/src/main/res/values-zh-rTW/strings.xml
+++ b/manager/src/main/res/values-zh-rTW/strings.xml
@@ -87,6 +87,7 @@
別名錯誤
別名密碼錯誤
詳細打包日誌
+ 啓用 install activity
注入加載器 Dex
對那些需要孤立服務進程的應用程序,譬如說瀏覽器的渲染引擎,請勾選此選項以確保他們正常運行
diff --git a/manager/src/main/res/values/strings.xml b/manager/src/main/res/values/strings.xml
index 1f43a59..6d91809 100644
--- a/manager/src/main/res/values/strings.xml
+++ b/manager/src/main/res/values/strings.xml
@@ -90,6 +90,7 @@
Wrong keystore password
Wrong alias name
Wrong alias password
+ Enable install activity
Detail patch logs
Inject loader dex
For applications with isolated services, such as the render engines of browsers, please turn on this option to ensure that they work properly.