kernel/manager/ksud: Add switch functionality to sulog

Signed-off-by: ShirkNeko <109797057+ShirkNeko@users.noreply.github.com>
This commit is contained in:
ShirkNeko
2025-11-16 16:53:55 +08:00
parent c8020b2066
commit c4d8c49e5c
11 changed files with 135 additions and 11 deletions

View File

@@ -118,6 +118,15 @@ object Natives {
external fun isEnhancedSecurityEnabled(): Boolean
external fun setEnhancedSecurityEnabled(enabled: Boolean): Boolean
/**
* Su Log can be enabled/disabled.
* 0: disabled
* 1: enabled
* negative : error
*/
external fun isSuLogEnabled(): Boolean
external fun setSuLogEnabled(enabled: Boolean): Boolean
external fun isKPMEnabled(): Boolean
external fun getHookType(): String

View File

@@ -270,6 +270,49 @@ fun SettingScreen(navigator: DestinationsNavigator) {
}
)
var kernelSuLogMode by rememberSaveable {
mutableIntStateOf(
run {
val currentEnabled = Natives.isSuLogEnabled()
val savedPersist = prefs.getInt("kernel_sulog_mode", 0)
if (savedPersist == 2) 2 else if (!currentEnabled) 1 else 0
}
)
}
SuperDropdown(
icon = Icons.Rounded.RemoveCircle,
title = stringResource(id = R.string.settings_disable_sulog),
summary = stringResource(id = R.string.settings_disable_sulog_summary),
items = modeItems,
selectedIndex = kernelSuLogMode,
onSelectedIndexChange = { index ->
when (index) {
// Default: enable and save to persist
0 -> if (Natives.setSuLogEnabled(true)) {
execKsud("feature save", true)
prefs.edit { putInt("kernel_sulog_mode", 0) }
kernelSuLogMode = 0
}
// Temporarily disable: save enabled state first, then disable
1 -> if (Natives.setSuLogEnabled(true)) {
execKsud("feature save", true)
if (Natives.setSuLogEnabled(false)) {
prefs.edit { putInt("kernel_sulog_mode", 0) }
kernelSuLogMode = 1
}
}
// Permanently disable: disable and save
2 -> if (Natives.setSuLogEnabled(false)) {
execKsud("feature save", true)
prefs.edit { putInt("kernel_sulog_mode", 2) }
kernelSuLogMode = 2
}
}
}
)
// 卸载模块开关
var umountChecked by rememberSaveable { mutableStateOf(Natives.isDefaultUmountModules()) }
SwitchItem(
@@ -284,7 +327,6 @@ fun SettingScreen(navigator: DestinationsNavigator) {
}
)
// 强制签名验证开关
var forceSignatureVerification by rememberSaveable {
mutableStateOf(prefs.getBoolean("force_signature_verification", false))
@@ -403,14 +445,16 @@ fun SettingScreen(navigator: DestinationsNavigator) {
// 查看使用日志
KsuIsValid {
SettingItem(
icon = Icons.Filled.Visibility,
title = stringResource(R.string.log_viewer_view_logs),
summary = stringResource(R.string.log_viewer_view_logs_summary),
onClick = {
navigator.navigate(LogViewerScreenDestination)
}
)
if (Natives.isSuLogEnabled()) {
SettingItem(
icon = Icons.Filled.Visibility,
title = stringResource(R.string.log_viewer_view_logs),
summary = stringResource(R.string.log_viewer_view_logs_summary),
onClick = {
navigator.navigate(LogViewerScreenDestination)
}
)
}
}
val lkmMode = Natives.isLkmMode
KsuIsValid {