manager: hide root related features if kernelsu not available (#2555)

Without KernelSU installed, root-related features did not take any
effect. So, better to hide it.

Improving this pr:
https://github.com/tiann/KernelSU/pull/2483

Also attempt to address this:
https://github.com/tiann/KernelSU/pull/2483#issuecomment-2692048907

Tested-by: Faris <90097027+rsuntk@users.noreply.github.com>

Co-authored-by: Rifat Azad <33044977+rifsxd@users.noreply.github.com>

---------

Signed-off-by: Faris <90097027+rsuntk@users.noreply.github.com>
Co-authored-by: Rifat Azad <33044977+rifsxd@users.noreply.github.com>
This commit is contained in:
Faris
2025-05-03 21:07:47 +07:00
committed by GitHub
parent 1946876626
commit 2d6890ce05
3 changed files with 106 additions and 73 deletions

View File

@@ -0,0 +1,17 @@
package me.weishu.kernelsu.ui.component
import androidx.compose.runtime.Composable
import me.weishu.kernelsu.Natives
import me.weishu.kernelsu.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()
}
}

View File

@@ -39,6 +39,7 @@ import kotlinx.coroutines.withContext
import me.weishu.kernelsu.*
import me.weishu.kernelsu.R
import me.weishu.kernelsu.ui.component.rememberConfirmDialog
import me.weishu.kernelsu.ui.component.KsuIsValid
import me.weishu.kernelsu.ui.util.*
import me.weishu.kernelsu.ui.util.module.LatestVersionInfo
@@ -180,6 +181,7 @@ private fun TopBar(
}
var showDropdown by remember { mutableStateOf(false) }
KsuIsValid() {
IconButton(onClick = {
showDropdown = true
}) {
@@ -205,6 +207,7 @@ private fun TopBar(
RebootDropdownItem(id = R.string.reboot_edl, reason = "edl")
}
}
}
IconButton(onClick = onSettingsClick) {
Icon(

View File

@@ -85,6 +85,7 @@ import me.weishu.kernelsu.ui.component.AboutDialog
import me.weishu.kernelsu.ui.component.ConfirmResult
import me.weishu.kernelsu.ui.component.DialogHandle
import me.weishu.kernelsu.ui.component.SwitchItem
import me.weishu.kernelsu.ui.component.KsuIsValid
import me.weishu.kernelsu.ui.component.rememberConfirmDialog
import me.weishu.kernelsu.ui.component.rememberCustomDialog
import me.weishu.kernelsu.ui.component.rememberLoadingDialog
@@ -150,6 +151,7 @@ fun SettingScreen(navigator: DestinationsNavigator) {
}
val profileTemplate = stringResource(id = R.string.settings_profile_template)
KsuIsValid() {
ListItem(
leadingContent = { Icon(Icons.Filled.Fence, profileTemplate) },
headlineContent = { Text(profileTemplate) },
@@ -158,10 +160,13 @@ fun SettingScreen(navigator: DestinationsNavigator) {
navigator.navigate(AppProfileTemplateScreenDestination)
}
)
}
var umountChecked by rememberSaveable {
mutableStateOf(Natives.isDefaultUmountModules())
}
KsuIsValid() {
SwitchItem(
icon = Icons.Filled.FolderDelete,
title = stringResource(id = R.string.settings_umount_modules_default),
@@ -172,7 +177,9 @@ fun SettingScreen(navigator: DestinationsNavigator) {
umountChecked = it
}
}
}
KsuIsValid() {
if (Natives.version >= Natives.MINIMAL_SUPPORTED_SU_COMPAT) {
var isSuDisabled by rememberSaveable {
mutableStateOf(!Natives.isSuEnabled())
@@ -189,6 +196,7 @@ fun SettingScreen(navigator: DestinationsNavigator) {
}
}
}
}
val prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
var checkUpdate by rememberSaveable {
@@ -211,6 +219,8 @@ fun SettingScreen(navigator: DestinationsNavigator) {
prefs.getBoolean("enable_web_debugging", false)
)
}
KsuIsValid() {
SwitchItem(
icon = Icons.Filled.DeveloperMode,
title = stringResource(id = R.string.enable_web_debugging),
@@ -220,6 +230,7 @@ fun SettingScreen(navigator: DestinationsNavigator) {
prefs.edit().putBoolean("enable_web_debugging", it).apply()
enableWebDebugging = it
}
}
var showBottomsheet by remember { mutableStateOf(false) }
@@ -332,6 +343,7 @@ fun SettingScreen(navigator: DestinationsNavigator) {
val shrink = stringResource(id = R.string.shrink_sparse_image)
val shrinkMessage = stringResource(id = R.string.shrink_sparse_image_message)
KsuIsValid() {
ListItem(
leadingContent = {
Icon(
@@ -351,6 +363,7 @@ fun SettingScreen(navigator: DestinationsNavigator) {
}
}
)
}
val lkmMode = Natives.version >= Natives.MINIMAL_SUPPORTED_KERNEL_LKM && Natives.isLkmMode
if (lkmMode) {