diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/SuperUser.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/SuperUser.kt
index 0ee32ebd..ebaa6427 100644
--- a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/SuperUser.kt
+++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/SuperUser.kt
@@ -24,7 +24,10 @@ import com.ramcosta.composedestinations.annotation.Destination
import kotlinx.coroutines.launch
import me.weishu.kernelsu.Natives
import me.weishu.kernelsu.R
+import me.weishu.kernelsu.ui.component.ConfirmDialog
+import me.weishu.kernelsu.ui.component.DialogResult
import me.weishu.kernelsu.ui.component.SearchAppBar
+import me.weishu.kernelsu.ui.util.LocalDialogHost
import me.weishu.kernelsu.ui.util.LocalSnackbarHost
import me.weishu.kernelsu.ui.viewmodel.SuperUserViewModel
import java.util.*
@@ -91,6 +94,8 @@ fun SuperUserScreen() {
}
) { innerPadding ->
+ ConfirmDialog()
+
val refreshState = rememberPullRefreshState(
refreshing = viewModel.isRefreshing,
onRefresh = { scope.launch { viewModel.fetchAppList() } },
@@ -105,12 +110,32 @@ fun SuperUserScreen() {
LazyColumn(Modifier.fillMaxSize()) {
items(viewModel.appList, key = { it.packageName }) { app ->
var isChecked by rememberSaveable(app) { mutableStateOf(app.onAllowList) }
+ val dialogHost = LocalDialogHost.current
+ val content =
+ stringResource(id = R.string.superuser_allow_root_confirm, app.label)
+ val confirm = stringResource(id = android.R.string.ok)
+ val cancel = stringResource(id = android.R.string.cancel)
+
AppItem(app, isChecked) { checked ->
- val success = Natives.allowRoot(app.uid, checked)
- if (success) {
- isChecked = checked
- } else scope.launch {
- snackbarHost.showSnackbar(failMessage.format(app.uid))
+ scope.launch {
+ if (checked) {
+ val dialogResult = dialogHost.showDialog(
+ app.label,
+ content = content,
+ confirm = confirm,
+ dismiss = cancel
+ )
+ if (dialogResult != DialogResult.Confirmed) {
+ return@launch
+ }
+ }
+
+ val success = Natives.allowRoot(app.uid, checked)
+ if (success) {
+ isChecked = checked
+ } else {
+ snackbarHost.showSnackbar(failMessage.format(app.uid))
+ }
}
}
}
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 e4e63384..4db2282e 100644
--- a/manager/app/src/main/res/values-zh-rCN/strings.xml
+++ b/manager/app/src/main/res/values-zh-rCN/strings.xml
@@ -23,6 +23,7 @@
未知
超级用户
无法为 %d 授予 Root
+ 确定要授予 %s ROOT 权限吗?
无法启用模块: %s
无法禁用模块: %s
没有安装模块
diff --git a/manager/app/src/main/res/values/strings.xml b/manager/app/src/main/res/values/strings.xml
index e14c5d05..ac4c4f8d 100644
--- a/manager/app/src/main/res/values/strings.xml
+++ b/manager/app/src/main/res/values/strings.xml
@@ -26,6 +26,7 @@
Unknown
Superuser
Failed to grant root for %d
+ Are you sure to grant root access to %s?
Failed to enable module: %s
Failed to disable module: %s
No module installed