From bb2d8fd7e08278e7b7ca1cb6533aaeb595fe9b0b Mon Sep 17 00:00:00 2001 From: ShirkNeko <109797057+ShirkNeko@users.noreply.github.com> Date: Mon, 12 May 2025 00:06:17 +0800 Subject: [PATCH] Refactoring the KsuIsValid Check Logic Signed-off-by: ShirkNeko <109797057+ShirkNeko@users.noreply.github.com> Co-authored-by: rsuntk Co-authored-by: ShirkNeko <109797057+ShirkNeko@users.noreply.github.com> Co-authored-by: Rifat Azad <33044977+rifsxd@users.noreply.github.com> --- .../src/main/java/com/sukisu/ultra/Natives.kt | 8 -------- .../ultra/ui/component/KsuIsValidCheck.kt | 17 ++++++++++++++++ .../java/com/sukisu/ultra/ui/screen/Home.kt | 20 ++++++++++--------- .../java/com/sukisu/ultra/ui/screen/Module.kt | 1 - .../sukisu/ultra/ui/screen/MoreSettings.kt | 4 ++-- .../com/sukisu/ultra/ui/screen/Settings.kt | 10 +++++----- 6 files changed, 35 insertions(+), 25 deletions(-) create mode 100644 manager/app/src/main/java/com/sukisu/ultra/ui/component/KsuIsValidCheck.kt diff --git a/manager/app/src/main/java/com/sukisu/ultra/Natives.kt b/manager/app/src/main/java/com/sukisu/ultra/Natives.kt index ed65fed8..cce79b47 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/Natives.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/Natives.kt @@ -90,14 +90,6 @@ object Natives { fun requireNewKernel(): Boolean { return version < MINIMAL_SUPPORTED_KERNEL } - - fun isKsuValid(pkgName: String?): Boolean { - if (becomeManager(pkgName)) { - return true - } else { - return false - } - } @Immutable @Parcelize diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/component/KsuIsValidCheck.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/component/KsuIsValidCheck.kt new file mode 100644 index 00000000..5adf6087 --- /dev/null +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/component/KsuIsValidCheck.kt @@ -0,0 +1,17 @@ +package com.sukisu.ultra.ui.component + +import androidx.compose.runtime.Composable +import com.sukisu.ultra.Natives +import com.sukisu.ultra.ksuApp + +@Composable +fun KsuIsValid( + content: @Composable () -> Unit +) { + val isManager = Natives.becomeManager(ksuApp.packageName) + val ksuVersion = if (isManager) Natives.version else null + + if (ksuVersion != null) { + content() + } +} \ No newline at end of file diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Home.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Home.kt index 39bea950..47d660c2 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Home.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Home.kt @@ -95,6 +95,7 @@ import com.sukisu.ultra.Natives import com.sukisu.ultra.R import com.sukisu.ultra.getKernelVersion import com.sukisu.ultra.ksuApp +import com.sukisu.ultra.ui.component.KsuIsValid import com.sukisu.ultra.ui.component.rememberConfirmDialog import com.sukisu.ultra.ui.theme.CardConfig import com.sukisu.ultra.ui.theme.CardConfig.cardElevation @@ -400,17 +401,18 @@ private fun TopBar( } var showDropdown by remember { mutableStateOf(false) } - if (Natives.isKsuValid(ksuApp.packageName)) { - IconButton(onClick = { showDropdown = true }) { + KsuIsValid { + IconButton(onClick = { + showDropdown = true + }) { Icon( - Icons.Filled.Refresh, - contentDescription = stringResource(R.string.reboot), + imageVector = Icons.Filled.Refresh, + contentDescription = stringResource(id = R.string.reboot) ) - DropdownMenu( - expanded = showDropdown, - onDismissRequest = { showDropdown = false } - ) { + DropdownMenu(expanded = showDropdown, onDismissRequest = { + showDropdown = false + }) { RebootDropdownItem(id = R.string.reboot) val pm = LocalContext.current.getSystemService(Context.POWER_SERVICE) as PowerManager? @@ -652,7 +654,7 @@ fun WarningCard( @Composable fun ContributionCard() { val uriHandler = LocalUriHandler.current - val links = listOf("https://github.com/zako", "https://github.com/udochina") + val links = listOf("https://github.com/ShirkNeko", "https://github.com/udochina") ElevatedCard( colors = getCardColors(MaterialTheme.colorScheme.surfaceContainerHigh), diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Module.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Module.kt index 409577cb..ca9b1e83 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Module.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Module.kt @@ -69,7 +69,6 @@ import java.io.InputStreamReader import java.util.zip.ZipInputStream import androidx.core.content.edit import androidx.core.net.toUri -import com.sukisu.ultra.ui.theme.ThemeConfig import com.sukisu.ultra.R import com.sukisu.ultra.ui.theme.CardConfig.cardElevation diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/MoreSettings.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/MoreSettings.kt index 787fc55d..0502ef78 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/MoreSettings.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/MoreSettings.kt @@ -85,6 +85,7 @@ import com.sukisu.ultra.Natives import com.sukisu.ultra.R import com.sukisu.ultra.ksuApp import com.sukisu.ultra.ui.component.ImageEditorDialog +import com.sukisu.ultra.ui.component.KsuIsValid import com.sukisu.ultra.ui.component.SwitchItem import com.sukisu.ultra.ui.theme.CardConfig import com.sukisu.ultra.ui.theme.ThemeColors @@ -267,7 +268,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) { ) var showThemeColorDialog by remember { mutableStateOf(false) } - val ksuIsValid = Natives.isKsuValid(ksuApp.packageName) // 图片选择器 val pickImageLauncher = rememberLauncherForActivityResult( @@ -674,7 +674,7 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) { ) { Column { // SELinux 开关 - if (ksuIsValid) { + KsuIsValid { SwitchItem( icon = Icons.Filled.Security, title = stringResource(R.string.selinux), diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Settings.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Settings.kt index 80d220b8..96c52ed4 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Settings.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Settings.kt @@ -57,6 +57,7 @@ import com.sukisu.ultra.ui.util.LocalSnackbarHost import com.sukisu.ultra.ui.util.getBugreportFile import java.time.LocalDateTime import java.time.format.DateTimeFormatter +import com.sukisu.ultra.ui.component.KsuIsValid @OptIn(ExperimentalMaterial3Api::class) @@ -65,7 +66,6 @@ import java.time.format.DateTimeFormatter fun SettingScreen(navigator: DestinationsNavigator) { val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()) val snackBarHost = LocalSnackbarHost.current - val ksuIsValid = Natives.isKsuValid(ksuApp.packageName) Scaffold( topBar = { @@ -130,7 +130,7 @@ fun SettingScreen(navigator: DestinationsNavigator) { // 配置文件模板入口 val profileTemplate = stringResource(id = R.string.settings_profile_template) - if (ksuIsValid) { + KsuIsValid { SettingItem( icon = Icons.Filled.Fence, title = profileTemplate, @@ -146,7 +146,7 @@ fun SettingScreen(navigator: DestinationsNavigator) { mutableStateOf(Natives.isDefaultUmountModules()) } - if (ksuIsValid) { + KsuIsValid { SwitchSettingItem( icon = Icons.Filled.FolderDelete, title = stringResource(id = R.string.settings_umount_modules_default), @@ -161,7 +161,7 @@ fun SettingScreen(navigator: DestinationsNavigator) { } // SU 禁用开关(仅在兼容版本显示) - if (ksuIsValid) { + KsuIsValid { if (Natives.version >= Natives.MINIMAL_SUPPORTED_SU_COMPAT) { var isSuDisabled by rememberSaveable { mutableStateOf(!Natives.isSuEnabled()) @@ -226,7 +226,7 @@ fun SettingScreen(navigator: DestinationsNavigator) { prefs.getBoolean("enable_web_debugging", false) ) } - if (Natives.isKsuValid(ksuApp.packageName)) { + KsuIsValid { SwitchSettingItem( icon = Icons.Filled.DeveloperMode, title = stringResource(id = R.string.enable_web_debugging),