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