From 55602f1f1662307dc4b79f1086c3bb41e065fa23 Mon Sep 17 00:00:00 2001 From: tiann Date: Mon, 13 Feb 2023 22:41:32 +0800 Subject: [PATCH] manager: ui state for safemode --- manager/app/src/main/cpp/jni.cc | 6 ++ manager/app/src/main/cpp/ksu.cc | 5 ++ manager/app/src/main/cpp/ksu.h | 2 + .../main/java/me/weishu/kernelsu/Natives.java | 2 + .../me/weishu/kernelsu/ui/screen/Module.kt | 60 +++++++++++-------- .../app/src/main/res/values-ja/strings.xml | 3 +- .../app/src/main/res/values-ru/strings.xml | 1 + .../app/src/main/res/values-vi/strings.xml | 1 + .../src/main/res/values-zh-rCN/strings.xml | 1 + .../src/main/res/values-zh-rHK/strings.xml | 1 + .../src/main/res/values-zh-rTW/strings.xml | 1 + manager/app/src/main/res/values/strings.xml | 1 + 12 files changed, 59 insertions(+), 25 deletions(-) diff --git a/manager/app/src/main/cpp/jni.cc b/manager/app/src/main/cpp/jni.cc index 165ba7b2..86258709 100644 --- a/manager/app/src/main/cpp/jni.cc +++ b/manager/app/src/main/cpp/jni.cc @@ -61,3 +61,9 @@ Java_me_weishu_kernelsu_Natives_allowRoot(JNIEnv *env, jclass clazz, jint uid, j } + +extern "C" +JNIEXPORT jboolean JNICALL +Java_me_weishu_kernelsu_Natives_isSafeMode(JNIEnv *env, jclass clazz) { + return is_safe_mode(); +} \ No newline at end of file diff --git a/manager/app/src/main/cpp/ksu.cc b/manager/app/src/main/cpp/ksu.cc index 6cb083f1..f743ff29 100644 --- a/manager/app/src/main/cpp/ksu.cc +++ b/manager/app/src/main/cpp/ksu.cc @@ -19,6 +19,7 @@ #define CMD_DENY_SU 4 #define CMD_GET_ALLOW_LIST 5 #define CMD_GET_DENY_LIST 6 +#define CMD_CHECK_SAFEMODE 9 static bool ksuctl(int cmd, void* arg1, void* arg2) { int32_t result = 0; @@ -51,4 +52,8 @@ bool get_allow_list(int *uids, int *size) { bool get_deny_list(int *uids, int *size) { return ksuctl(CMD_GET_DENY_LIST, uids, size); +} + +bool is_safe_mode() { + return ksuctl(CMD_CHECK_SAFEMODE, nullptr, nullptr); } \ No newline at end of file diff --git a/manager/app/src/main/cpp/ksu.h b/manager/app/src/main/cpp/ksu.h index 6a6758cc..96841de8 100644 --- a/manager/app/src/main/cpp/ksu.h +++ b/manager/app/src/main/cpp/ksu.h @@ -15,4 +15,6 @@ bool get_allow_list(int *uids, int *size); bool get_deny_list(int *uids, int *size); +bool is_safe_mode(); + #endif //KERNELSU_KSU_H diff --git a/manager/app/src/main/java/me/weishu/kernelsu/Natives.java b/manager/app/src/main/java/me/weishu/kernelsu/Natives.java index a8e8cfa4..bed5713a 100644 --- a/manager/app/src/main/java/me/weishu/kernelsu/Natives.java +++ b/manager/app/src/main/java/me/weishu/kernelsu/Natives.java @@ -21,4 +21,6 @@ public final class Natives { public static native int[] getDenyList(); public static native boolean allowRoot(int uid, boolean allow); + + public static native boolean isSafeMode(); } diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Module.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Module.kt index 10e3b19b..c4b29375 100644 --- a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Module.kt +++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Module.kt @@ -52,36 +52,42 @@ fun ModuleScreen(navigator: DestinationsNavigator) { } } + val isSafeMode = Natives.isSafeMode() + Scaffold( topBar = { TopBar() }, - floatingActionButton = { - val moduleInstall = stringResource(id = R.string.module_install) - val selectZipLauncher = rememberLauncherForActivityResult( - contract = ActivityResultContracts.StartActivityForResult() - ) { - if (it.resultCode != RESULT_OK) { - return@rememberLauncherForActivityResult + floatingActionButton = if (isSafeMode) { + { /* Empty */ } + } else { + { + val moduleInstall = stringResource(id = R.string.module_install) + val selectZipLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.StartActivityForResult() + ) { + if (it.resultCode != RESULT_OK) { + return@rememberLauncherForActivityResult + } + val data = it.data ?: return@rememberLauncherForActivityResult + val uri = data.data ?: return@rememberLauncherForActivityResult + + navigator.navigate(InstallScreenDestination(uri)) + + Log.i("ModuleScreen", "select zip result: ${it.data}") } - val data = it.data ?: return@rememberLauncherForActivityResult - val uri = data.data ?: return@rememberLauncherForActivityResult - navigator.navigate(InstallScreenDestination(uri)) - - Log.i("ModuleScreen", "select zip result: ${it.data}") + ExtendedFloatingActionButton( + onClick = { + // select the zip file to install + val intent = Intent(Intent.ACTION_GET_CONTENT) + intent.type = "application/zip" + selectZipLauncher.launch(intent) + }, + icon = { Icon(Icons.Filled.Add, moduleInstall) }, + text = { Text(text = moduleInstall) }, + ) } - - ExtendedFloatingActionButton( - onClick = { - // select the zip file to install - val intent = Intent(Intent.ACTION_GET_CONTENT) - intent.type = "application/zip" - selectZipLauncher.launch(intent) - }, - icon = { Icon(Icons.Filled.Add, moduleInstall) }, - text = { Text(text = moduleInstall) }, - ) } ) { innerPadding -> val failedEnable = stringResource(R.string.module_failed_to_enable) @@ -96,6 +102,12 @@ fun ModuleScreen(navigator: DestinationsNavigator) { } return@Scaffold } + if (isSafeMode) { + Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + Text(stringResource(R.string.safe_mode_disable_module)) + } + return@Scaffold + } SwipeRefresh( state = swipeState, onRefresh = { @@ -123,7 +135,7 @@ fun ModuleScreen(navigator: DestinationsNavigator) { } else { LazyColumn( verticalArrangement = Arrangement.spacedBy(15.dp), - contentPadding = remember { PaddingValues(bottom = 16.dp + 56.dp /* Scaffold Fab Spacing + Fab container height */ ) } + contentPadding = remember { PaddingValues(bottom = 16.dp + 56.dp /* Scaffold Fab Spacing + Fab container height */) } ) { items(viewModel.moduleList) { module -> var isChecked by rememberSaveable(module) { mutableStateOf(module.enabled) } diff --git a/manager/app/src/main/res/values-ja/strings.xml b/manager/app/src/main/res/values-ja/strings.xml index 95ac4e0c..5f43f565 100644 --- a/manager/app/src/main/res/values-ja/strings.xml +++ b/manager/app/src/main/res/values-ja/strings.xml @@ -1,6 +1,7 @@  - KernelSU + セーフモード、すべてのモッドが無効になっています! + KernelSU ホーム 未インストール タップでインストール diff --git a/manager/app/src/main/res/values-ru/strings.xml b/manager/app/src/main/res/values-ru/strings.xml index 0091a018..24a5a376 100644 --- a/manager/app/src/main/res/values-ru/strings.xml +++ b/manager/app/src/main/res/values-ru/strings.xml @@ -52,5 +52,6 @@ Показать системные приложения Скрыть системные приложения Отправить лог + Безопасный режим, все моды отключены! diff --git a/manager/app/src/main/res/values-vi/strings.xml b/manager/app/src/main/res/values-vi/strings.xml index b149d66f..340504be 100644 --- a/manager/app/src/main/res/values-vi/strings.xml +++ b/manager/app/src/main/res/values-vi/strings.xml @@ -48,4 +48,5 @@ Làm mới Hiển thị ứng dụng hệ thống Ẩn ứng dụng hệ thống + Chế độ an toàn, tất cả các mod đều bị tắt! 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 3dd542f5..731eae5a 100644 --- a/manager/app/src/main/res/values-zh-rCN/strings.xml +++ b/manager/app/src/main/res/values-zh-rCN/strings.xml @@ -50,4 +50,5 @@ 显示系统应用 隐藏系统应用 发送日志 + 安全模式,所有模块已被禁用! diff --git a/manager/app/src/main/res/values-zh-rHK/strings.xml b/manager/app/src/main/res/values-zh-rHK/strings.xml index 449660a8..0424c32c 100644 --- a/manager/app/src/main/res/values-zh-rHK/strings.xml +++ b/manager/app/src/main/res/values-zh-rHK/strings.xml @@ -46,4 +46,5 @@ 版本 作者 內核不支持 overlayfs,模塊功能無法運作! + 安全模式,所有模塊已被禁用! diff --git a/manager/app/src/main/res/values-zh-rTW/strings.xml b/manager/app/src/main/res/values-zh-rTW/strings.xml index ad3cfc24..a3f25429 100644 --- a/manager/app/src/main/res/values-zh-rTW/strings.xml +++ b/manager/app/src/main/res/values-zh-rTW/strings.xml @@ -49,4 +49,5 @@ 重新整理 顯示系統應用程式 隱藏系統應用程式 + 安全模式,所有模塊已被禁用! diff --git a/manager/app/src/main/res/values/strings.xml b/manager/app/src/main/res/values/strings.xml index d19ce355..190699d6 100644 --- a/manager/app/src/main/res/values/strings.xml +++ b/manager/app/src/main/res/values/strings.xml @@ -54,5 +54,6 @@ Show system apps Hide system apps Send Log + Safe mode, all module are disabled