From c1427f658aa84dfdb6d2a62803d18d9a2c832b8b Mon Sep 17 00:00:00 2001 From: tiann Date: Tue, 16 May 2023 16:31:56 +0800 Subject: [PATCH] manager: Add working mode UI --- .../weishu/kernelsu/ui/screen/AppProfile.kt | 59 +++++++++++++++---- .../src/main/res/values-zh-rCN/strings.xml | 2 + manager/app/src/main/res/values/strings.xml | 3 + 3 files changed, 52 insertions(+), 12 deletions(-) diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/AppProfile.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/AppProfile.kt index 03ed4cc1..41ae849c 100644 --- a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/AppProfile.kt +++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/AppProfile.kt @@ -12,20 +12,14 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack -import androidx.compose.material.icons.filled.DeveloperMode import androidx.compose.material.icons.filled.Group -import androidx.compose.material.icons.filled.Groups -import androidx.compose.material.icons.filled.Groups2 import androidx.compose.material.icons.filled.Groups3 import androidx.compose.material.icons.filled.List -import androidx.compose.material.icons.filled.PermDeviceInformation import androidx.compose.material.icons.filled.PermIdentity import androidx.compose.material.icons.filled.Rule -import androidx.compose.material.icons.filled.RuleFolder import androidx.compose.material.icons.filled.SafetyDivider import androidx.compose.material.icons.filled.Security import androidx.compose.material3.Divider -import androidx.compose.material3.DropdownMenu import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton @@ -45,22 +39,18 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import coil.compose.AsyncImage import coil.request.ImageRequest -import com.alorma.compose.settings.ui.SettingsGroup import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.navigation.DestinationsNavigator import kotlinx.coroutines.launch import me.weishu.kernelsu.Natives import me.weishu.kernelsu.R import me.weishu.kernelsu.ui.component.AboutDialog -import me.weishu.kernelsu.ui.component.ConfirmResult import me.weishu.kernelsu.ui.component.LoadingDialog -import me.weishu.kernelsu.ui.util.LocalDialogHost import me.weishu.kernelsu.ui.util.LocalSnackbarHost /** @@ -96,6 +86,17 @@ fun AppProfileScreen( val context = LocalContext.current val scope = rememberCoroutineScope() + GroupTitle(stringResource(id = R.string.app_profile_title0)) + + var allowlistMode by rememberSaveable { + mutableStateOf(true) + } + WorkingMode(allowlistMode) { checked -> + allowlistMode = !allowlistMode + } + + Divider(thickness = Dp.Hairline) + GroupTitle(stringResource(id = R.string.app_profile_title1)) ListItem( @@ -140,7 +141,11 @@ fun AppProfileScreen( AppSwitch( icon = Icons.Filled.List, - title = stringResource(id = R.string.app_profile_allowlist), + title = if (allowlistMode) { + stringResource(id = R.string.app_profile_allowlist) + } else { + stringResource(id = R.string.app_profile_denylist) + }, checked = true ) { @@ -166,7 +171,7 @@ fun AppProfileScreen( @Composable private fun GroupTitle(title: String) { Row(modifier = Modifier.padding(12.dp)) { - Spacer(modifier = Modifier.width(30.dp)) + Spacer(modifier = Modifier.width(16.dp)) Text( text = title, color = MaterialTheme.colorScheme.primary, @@ -177,6 +182,36 @@ private fun GroupTitle(title: String) { } } +@Composable +private fun WorkingMode(allowlistMode: Boolean, onCheckedChange: (Boolean) -> Unit) { + var showDropdown by remember { mutableStateOf(false) } + val mode = if (allowlistMode) { + stringResource(id = R.string.app_profile_allowlist) + } else { + stringResource(id = R.string.app_profile_denylist) + } + ListItem( + modifier = Modifier.clickable(onClick = { + showDropdown = true + }), + headlineText = { + Text(stringResource(id = R.string.app_profile_mode)) + }, + supportingText = { + Text(mode) + }, + leadingContent = { + Icon( + Icons.Filled.List, + contentDescription = stringResource(id = R.string.app_profile_mode) + ) + }, + trailingContent = { + Switch(checked = allowlistMode, onCheckedChange = onCheckedChange) + } + ) +} + @Composable private fun AppSwitch( icon: ImageVector, 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 7c3791e4..471c2371 100644 --- a/manager/app/src/main/res/values-zh-rCN/strings.xml +++ b/manager/app/src/main/res/values-zh-rCN/strings.xml @@ -63,4 +63,6 @@ 加入我们的 %2$s 频道
加入我们的 QQ 频道]]>
应用 Root 权限 + Denylist + 全局 diff --git a/manager/app/src/main/res/values/strings.xml b/manager/app/src/main/res/values/strings.xml index 46601de7..e4a3a3ff 100644 --- a/manager/app/src/main/res/values/strings.xml +++ b/manager/app/src/main/res/values/strings.xml @@ -70,4 +70,7 @@ Root Profile Grant Root Allowlist + Denylist + Global + Working Mode