manager: show confirm dialog when grant root to app.

This commit is contained in:
tiann
2023-04-17 18:18:14 +08:00
parent 9a5e36c0a4
commit d41354e1d7
3 changed files with 32 additions and 5 deletions

View File

@@ -24,7 +24,10 @@ import com.ramcosta.composedestinations.annotation.Destination
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import me.weishu.kernelsu.Natives import me.weishu.kernelsu.Natives
import me.weishu.kernelsu.R 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.component.SearchAppBar
import me.weishu.kernelsu.ui.util.LocalDialogHost
import me.weishu.kernelsu.ui.util.LocalSnackbarHost import me.weishu.kernelsu.ui.util.LocalSnackbarHost
import me.weishu.kernelsu.ui.viewmodel.SuperUserViewModel import me.weishu.kernelsu.ui.viewmodel.SuperUserViewModel
import java.util.* import java.util.*
@@ -91,6 +94,8 @@ fun SuperUserScreen() {
} }
) { innerPadding -> ) { innerPadding ->
ConfirmDialog()
val refreshState = rememberPullRefreshState( val refreshState = rememberPullRefreshState(
refreshing = viewModel.isRefreshing, refreshing = viewModel.isRefreshing,
onRefresh = { scope.launch { viewModel.fetchAppList() } }, onRefresh = { scope.launch { viewModel.fetchAppList() } },
@@ -105,16 +110,36 @@ fun SuperUserScreen() {
LazyColumn(Modifier.fillMaxSize()) { LazyColumn(Modifier.fillMaxSize()) {
items(viewModel.appList, key = { it.packageName }) { app -> items(viewModel.appList, key = { it.packageName }) { app ->
var isChecked by rememberSaveable(app) { mutableStateOf(app.onAllowList) } 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 -> AppItem(app, isChecked) { checked ->
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) val success = Natives.allowRoot(app.uid, checked)
if (success) { if (success) {
isChecked = checked isChecked = checked
} else scope.launch { } else {
snackbarHost.showSnackbar(failMessage.format(app.uid)) snackbarHost.showSnackbar(failMessage.format(app.uid))
} }
} }
} }
} }
}
PullRefreshIndicator( PullRefreshIndicator(
refreshing = viewModel.isRefreshing, refreshing = viewModel.isRefreshing,

View File

@@ -23,6 +23,7 @@
<string name="selinux_status_unknown">未知</string> <string name="selinux_status_unknown">未知</string>
<string name="superuser">超级用户</string> <string name="superuser">超级用户</string>
<string name="superuser_failed_to_grant_root">无法为 %d 授予 Root</string> <string name="superuser_failed_to_grant_root">无法为 %d 授予 Root</string>
<string name="superuser_allow_root_confirm">确定要授予 %s ROOT 权限吗?</string>
<string name="module_failed_to_enable">无法启用模块: %s</string> <string name="module_failed_to_enable">无法启用模块: %s</string>
<string name="module_failed_to_disable">无法禁用模块: %s</string> <string name="module_failed_to_disable">无法禁用模块: %s</string>
<string name="module_empty">没有安装模块</string> <string name="module_empty">没有安装模块</string>

View File

@@ -26,6 +26,7 @@
<string name="selinux_status_unknown">Unknown</string> <string name="selinux_status_unknown">Unknown</string>
<string name="superuser">Superuser</string> <string name="superuser">Superuser</string>
<string name="superuser_failed_to_grant_root">Failed to grant root for %d</string> <string name="superuser_failed_to_grant_root">Failed to grant root for %d</string>
<string name="superuser_allow_root_confirm">Are you sure to grant root access to %s?</string>
<string name="module_failed_to_enable">Failed to enable module: %s</string> <string name="module_failed_to_enable">Failed to enable module: %s</string>
<string name="module_failed_to_disable">Failed to disable module: %s</string> <string name="module_failed_to_disable">Failed to disable module: %s</string>
<string name="module_empty">No module installed</string> <string name="module_empty">No module installed</string>