From 01199470f26060fccc760b26b7ebf8ed902d5776 Mon Sep 17 00:00:00 2001 From: ShirkNeko <109797057+ShirkNeko@users.noreply.github.com> Date: Tue, 13 May 2025 21:44:42 +0800 Subject: [PATCH] [manager]: Add KPM function display options and related settings - Eruda injection web UI X will not be displayed when the modification is not enabled. Signed-off-by: ShirkNeko <109797057+ShirkNeko@users.noreply.github.com> --- .../java/com/sukisu/ultra/ui/MainActivity.kt | 8 +++- .../java/com/sukisu/ultra/ui/screen/Home.kt | 40 +++++++++++------- .../sukisu/ultra/ui/screen/MoreSettings.kt | 26 ++++++++++++ .../com/sukisu/ultra/ui/screen/Settings.kt | 41 +++++++++++-------- .../sukisu/ultra/ui/webui/WebUIXActivity.kt | 1 - .../src/main/res/values-zh-rCN/strings.xml | 4 ++ manager/app/src/main/res/values/strings.xml | 4 ++ 7 files changed, 92 insertions(+), 32 deletions(-) diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/MainActivity.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/MainActivity.kt index 7426443d..96c2425c 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/MainActivity.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/MainActivity.kt @@ -1,5 +1,6 @@ package com.sukisu.ultra.ui +import android.content.Context import android.database.ContentObserver import android.os.Build import android.os.Bundle @@ -13,6 +14,7 @@ import androidx.compose.foundation.layout.* import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.navigation.NavBackStackEntry import androidx.navigation.NavHostController @@ -167,6 +169,10 @@ private fun BottomBar(navController: NavHostController) { val containerColor = MaterialTheme.colorScheme.surfaceVariant val cardColor = MaterialTheme.colorScheme.surfaceVariant + // 检查是否显示KPM + val showKpmInfo = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE) + .getBoolean("show_kpm_info", true) + NavigationBar( modifier = Modifier.windowInsetsPadding( WindowInsets.navigationBars.only(WindowInsetsSides.Horizontal) @@ -179,7 +185,7 @@ private fun BottomBar(navController: NavHostController) { ) { BottomBarDestination.entries.forEach { destination -> if (destination == BottomBarDestination.Kpm) { - if (kpmVersion.isNotEmpty() && !kpmVersion.startsWith("Error")) { + if (kpmVersion.isNotEmpty() && !kpmVersion.startsWith("Error") && showKpmInfo) { if (!fullFeatured && destination.rootRequired) return@forEach val isCurrentDestOnBackStack by navController.isRouteOnBackStackAsState(destination.direction) NavigationBarItem( 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 47d660c2..d4c0d600 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 @@ -133,6 +133,7 @@ fun HomeScreen(navigator: DestinationsNavigator) { var isHideOtherInfo by rememberSaveable { mutableStateOf(false) } var isHideSusfsStatus by rememberSaveable { mutableStateOf(false) } var isHideLinkCard by rememberSaveable { mutableStateOf(false) } + var showKpmInfo by rememberSaveable { mutableStateOf(true) } // 从 SharedPreferences 加载简洁模式状态 LaunchedEffect(Unit) { @@ -150,6 +151,9 @@ fun HomeScreen(navigator: DestinationsNavigator) { isHideLinkCard = context.getSharedPreferences("settings", Context.MODE_PRIVATE) .getBoolean("is_hide_link_card", false) + + showKpmInfo = context.getSharedPreferences("settings", Context.MODE_PRIVATE) + .getBoolean("show_kpm_info", true) } val kernelVersion = getKernelVersion() @@ -487,6 +491,9 @@ private fun StatusCard( val isHideSusfsStatus = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE) .getBoolean("is_hide_susfs_status", false) + val showKpmInfo = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE) + .getBoolean("show_kpm_info", true) + Icon( Icons.Outlined.CheckCircle, contentDescription = stringResource(R.string.home_working), @@ -526,7 +533,7 @@ private fun StatusCard( ) val kpmVersion = getKpmVersion() - if (kpmVersion.isNotEmpty() && !kpmVersion.startsWith("Error")) { + if (kpmVersion.isNotEmpty() && !kpmVersion.startsWith("Error") && showKpmInfo) { Spacer(Modifier.height(4.dp)) Text( text = stringResource(R.string.home_kpm_module, getKpmModuleCount()), @@ -790,6 +797,8 @@ private fun InfoCard() { val context = LocalContext.current val isSimpleMode = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE) .getBoolean("is_simple_mode", false) + val showKpmInfo = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE) + .getBoolean("show_kpm_info", true) ElevatedCard( colors = getCardColors(MaterialTheme.colorScheme.surfaceContainerHighest), @@ -891,22 +900,25 @@ private fun InfoCard() { val kpmVersion = getKpmVersion() val isKpmConfigured = checkKpmConfigured() - val displayVersion = if (kpmVersion.isEmpty() || kpmVersion.startsWith("Error")) { - val statusText = if (isKpmConfigured) { - stringResource(R.string.kernel_patched) + // 根据showKpmInfo决定是否显示KPM信息 + if (showKpmInfo) { + val displayVersion = if (kpmVersion.isEmpty() || kpmVersion.startsWith("Error")) { + val statusText = if (isKpmConfigured) { + stringResource(R.string.kernel_patched) + } else { + stringResource(R.string.kernel_not_enabled) + } + "${stringResource(R.string.not_supported)} ($statusText)" } else { - stringResource(R.string.kernel_not_enabled) + "${stringResource(R.string.supported)} ($kpmVersion)" } - "${stringResource(R.string.not_supported)} ($statusText)" - } else { - "${stringResource(R.string.supported)} ($kpmVersion)" - } - InfoCardItem( - stringResource(R.string.home_kpm_version), - displayVersion, - icon = Icons.Default.Code - ) + InfoCardItem( + stringResource(R.string.home_kpm_version), + displayVersion, + icon = Icons.Default.Code + ) + } } } 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 0502ef78..2afb2127 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 @@ -176,6 +176,17 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) { isHideOtherInfo = newValue } + // 显示KPM开关状态 + var isShowKpmInfo by remember { + mutableStateOf(prefs.getBoolean("show_kpm_info", true)) + } + + // 更新显示KPM开关状态 + val onShowKpmInfoChange = { newValue: Boolean -> + prefs.edit { putBoolean("show_kpm_info", newValue) } + isShowKpmInfo = newValue + } + // 隐藏SuSFS状态开关状态 var isHideSusfsStatus by remember { mutableStateOf(prefs.getBoolean("is_hide_susfs_status", false)) @@ -642,6 +653,21 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) { color = MaterialTheme.colorScheme.outlineVariant ) + // 显示KPM开关 + SwitchItem( + icon = Icons.Filled.VisibilityOff, + title = stringResource(R.string.show_kpm_info), + summary = stringResource(R.string.show_kpm_info_summary), + checked = isShowKpmInfo + ) { + onShowKpmInfoChange(it) + } + + HorizontalDivider( + modifier = Modifier.padding(horizontal = 16.dp), + color = MaterialTheme.colorScheme.outlineVariant + ) + // 隐藏链接信息 SwitchItem( icon = Icons.Filled.VisibilityOff, 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 f4609283..f095f9da 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 @@ -6,6 +6,11 @@ import android.net.Uri import android.widget.Toast import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.expandVertically +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.shrinkVertically import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.isSystemInDarkTheme @@ -81,7 +86,6 @@ fun SettingScreen(navigator: DestinationsNavigator) { AboutDialog(it) } val loadingDialog = rememberLoadingDialog() - // endregion Column( modifier = Modifier @@ -89,12 +93,8 @@ fun SettingScreen(navigator: DestinationsNavigator) { .nestedScroll(scrollBehavior.nestedScrollConnection) .verticalScroll(rememberScrollState()) ) { - // region 上下文与协程 val context = LocalContext.current val scope = rememberCoroutineScope() - // endregion - - // region 日志导出功能 val exportBugreportLauncher = rememberLauncherForActivityResult( ActivityResultContracts.CreateDocument("application/gzip") ) { uri: Uri? -> @@ -184,7 +184,7 @@ fun SettingScreen(navigator: DestinationsNavigator) { } } - // 设置分组卡片 - 应用设置 + // 应用设置 Card( modifier = Modifier .fillMaxWidth() @@ -240,6 +240,7 @@ fun SettingScreen(navigator: DestinationsNavigator) { ) } + // Web X 开关 var useWebUIX by rememberSaveable { mutableStateOf( prefs.getBoolean("use_webuix", false) @@ -258,22 +259,30 @@ fun SettingScreen(navigator: DestinationsNavigator) { useWebUIX = it } } + + // Web X Eruda 开关 var useWebUIXEruda by rememberSaveable { mutableStateOf( prefs.getBoolean("use_webuix_eruda", false) ) } KsuIsValid { - SwitchItem( - beta = true, - enabled = Platform.isAlive && useWebUIX && enableWebDebugging, - icon = Icons.Filled.FormatListNumbered, - title = stringResource(id = R.string.use_webuix_eruda), - summary = stringResource(id = R.string.use_webuix_eruda_summary), - checked = useWebUIXEruda + AnimatedVisibility( + visible = useWebUIX && enableWebDebugging, + enter = fadeIn() + expandVertically(), + exit = fadeOut() + shrinkVertically() ) { - prefs.edit { putBoolean("use_webuix_eruda", it) } - useWebUIXEruda = it + SwitchItem( + beta = true, + enabled = Platform.isAlive && useWebUIX && enableWebDebugging, + icon = Icons.Filled.FormatListNumbered, + title = stringResource(id = R.string.use_webuix_eruda), + summary = stringResource(id = R.string.use_webuix_eruda_summary), + checked = useWebUIXEruda + ) { + prefs.edit { putBoolean("use_webuix_eruda", it) } + useWebUIXEruda = it + } } } @@ -289,7 +298,7 @@ fun SettingScreen(navigator: DestinationsNavigator) { } } - // 设置分组卡片 - 工具 + // 工具 Card( modifier = Modifier .fillMaxWidth() diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/webui/WebUIXActivity.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/webui/WebUIXActivity.kt index edd28dd6..fe585442 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/webui/WebUIXActivity.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/webui/WebUIXActivity.kt @@ -8,7 +8,6 @@ import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf diff --git a/manager/app/src/main/res/values-zh-rCN/strings.xml b/manager/app/src/main/res/values-zh-rCN/strings.xml index e78f6271..83c7f839 100644 --- a/manager/app/src/main/res/values-zh-rCN/strings.xml +++ b/manager/app/src/main/res/values-zh-rCN/strings.xml @@ -320,6 +320,10 @@ 背景设置成功 已移除自定义背景 需要 root 权限 + + 显示 KPM 功能 + 在主页和底栏显示 KPM 相关功能和信息 (需要重新打开应用 + 使用 WebUI X 使用支持更多 API 的 WebUI X 而不是 WebUI 将 Eruda 注入 WebUI X diff --git a/manager/app/src/main/res/values/strings.xml b/manager/app/src/main/res/values/strings.xml index c47b2e3d..6434432e 100644 --- a/manager/app/src/main/res/values/strings.xml +++ b/manager/app/src/main/res/values/strings.xml @@ -324,6 +324,10 @@ Background set successfully Removed custom backgrounds Requires root privileges + + Display KPM Function + Display KPM information and Function in home and bottom bar (Need to reopen the app) + Use WebUI X Use WebUI X instead of WebUI which supports more API\'s Inject Eruda into WebUI X