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.