From a77faa1fe28a926f3dfc4bfb8c50d271ede557b3 Mon Sep 17 00:00:00 2001 From: ShirkNeko <109797057+ShirkNeko@users.noreply.github.com> Date: Fri, 19 Sep 2025 22:04:14 +0800 Subject: [PATCH] Manager: Added functionality to clean up the user-mode scanning environment after execution fmt ksud --- .../com/sukisu/ultra/ui/screen/Settings.kt | 33 +++++++++++++++++++ .../java/com/sukisu/ultra/ui/util/KsuCli.kt | 10 ++++++ .../src/main/res/values-zh-rCN/strings.xml | 6 ++++ manager/app/src/main/res/values/strings.xml | 6 ++++ userspace/ksud/src/uid_scanner.rs | 3 +- 5 files changed, 56 insertions(+), 2 deletions(-) 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 2a38c5ab..c84b8897 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 @@ -47,6 +47,7 @@ import com.sukisu.ultra.ui.theme.CardConfig.cardAlpha import com.sukisu.ultra.ui.theme.getCardColors import com.sukisu.ultra.ui.theme.getCardElevation import com.sukisu.ultra.ui.util.LocalSnackbarHost +import com.sukisu.ultra.ui.util.cleanRuntimeEnvironment import com.sukisu.ultra.ui.util.getBugreportFile import com.sukisu.ultra.ui.util.setUidAutoScan import com.sukisu.ultra.ui.util.setUidMultiUserScan @@ -252,6 +253,38 @@ fun SettingScreen(navigator: DestinationsNavigator) { } ) } + // 清理运行环境 + AnimatedVisibility( + visible = uidAutoScanEnabled, + enter = fadeIn() + expandVertically(), + exit = fadeOut() + shrinkVertically() + ) { + val confirmDialog = rememberConfirmDialog() + val scope = rememberCoroutineScope() + + SettingItem( + icon = Icons.Filled.CleaningServices, + title = stringResource(R.string.clean_runtime_environment), + summary = stringResource(R.string.clean_runtime_environment_summary), + onClick = { + scope.launch { + val result = confirmDialog.awaitConfirm( + title = context.getString(R.string.clean_runtime_environment), + content = context.getString(R.string.clean_runtime_environment_confirm) + ) + if (result == ConfirmResult.Confirmed) { + uidAutoScanEnabled = false + prefs.edit { putBoolean("uid_auto_scan", false) } + + uidMultiUserScanEnabled = false + prefs.edit { putBoolean("uid_multi_user_scan", false) } + + snackBarHost.showSnackbar(context.getString(R.string.clean_runtime_environment_success)) + } + } + } + ) + } } } ) diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/util/KsuCli.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/util/KsuCli.kt index 1c1b0709..f6acea8f 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/util/KsuCli.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/util/KsuCli.kt @@ -614,3 +614,13 @@ fun setUidMultiUserScan(enabled: Boolean): Boolean { val result = ShellUtils.fastCmdResult(shell, cmd) return result } + +fun cleanRuntimeEnvironment(): Boolean { + val shell = getRootShell() + val cmd = "$targetPath stop && rm -f /data/misc/user_uid && rm -rf $targetPath && rm -rf /data/adb/ksu/bin/user_uid && rm -rf /data/adb/service.d/uid_scanner.sh" + return try { + ShellUtils.fastCmdResult(shell, cmd) + } catch (_: Exception) { + false + } +} 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 3c7602ef..21413349 100644 --- a/manager/app/src/main/res/values-zh-rCN/strings.xml +++ b/manager/app/src/main/res/values-zh-rCN/strings.xml @@ -660,4 +660,10 @@ 开启后将扫描所有用户的应用,包括工作资料等 设置失败,请检查权限 设置失败: %s + 清理运行环境 + 清理运行时文件并停止扫描服务 + 您确定要清理运行环境吗?这将停止扫描服务并删除相关文件 + 运行环境清理成功 + 运行环境清理失败 + 清理运行环境时出错:%s diff --git a/manager/app/src/main/res/values/strings.xml b/manager/app/src/main/res/values/strings.xml index 35988549..f796ada5 100644 --- a/manager/app/src/main/res/values/strings.xml +++ b/manager/app/src/main/res/values/strings.xml @@ -668,4 +668,10 @@ Important Note:\n When enabled, scans applications for all users, including work profiles Setting failed, please check permissions Setting failed: %s + Clean Runtime Environment + Clean up runtime files and stop the scanner service + Are you sure you want to clean the runtime environment? This will stop the scanner service and remove related files. + Runtime environment cleaned successfully + Failed to clean runtime environment + Error cleaning runtime environment: %s \ No newline at end of file diff --git a/userspace/ksud/src/uid_scanner.rs b/userspace/ksud/src/uid_scanner.rs index 0a5ea1b1..7083d774 100644 --- a/userspace/ksud/src/uid_scanner.rs +++ b/userspace/ksud/src/uid_scanner.rs @@ -1,5 +1,4 @@ -use crate::utils; -use anyhow::{Context, Result}; +use anyhow::Result; use log::{info, warn}; use std::{ fs,