manager: Add working mode UI

This commit is contained in:
tiann
2023-05-16 16:31:56 +08:00
parent eccce7b31f
commit c1427f658a
3 changed files with 52 additions and 12 deletions

View File

@@ -12,20 +12,14 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack 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.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.Groups3
import androidx.compose.material.icons.filled.List 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.PermIdentity
import androidx.compose.material.icons.filled.Rule 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.SafetyDivider
import androidx.compose.material.icons.filled.Security import androidx.compose.material.icons.filled.Security
import androidx.compose.material3.Divider import androidx.compose.material3.Divider
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
@@ -45,22 +39,18 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import coil.compose.AsyncImage import coil.compose.AsyncImage
import coil.request.ImageRequest import coil.request.ImageRequest
import com.alorma.compose.settings.ui.SettingsGroup
import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator import com.ramcosta.composedestinations.navigation.DestinationsNavigator
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.AboutDialog 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.component.LoadingDialog
import me.weishu.kernelsu.ui.util.LocalDialogHost
import me.weishu.kernelsu.ui.util.LocalSnackbarHost import me.weishu.kernelsu.ui.util.LocalSnackbarHost
/** /**
@@ -96,6 +86,17 @@ fun AppProfileScreen(
val context = LocalContext.current val context = LocalContext.current
val scope = rememberCoroutineScope() 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)) GroupTitle(stringResource(id = R.string.app_profile_title1))
ListItem( ListItem(
@@ -140,7 +141,11 @@ fun AppProfileScreen(
AppSwitch( AppSwitch(
icon = Icons.Filled.List, 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 checked = true
) { ) {
@@ -166,7 +171,7 @@ fun AppProfileScreen(
@Composable @Composable
private fun GroupTitle(title: String) { private fun GroupTitle(title: String) {
Row(modifier = Modifier.padding(12.dp)) { Row(modifier = Modifier.padding(12.dp)) {
Spacer(modifier = Modifier.width(30.dp)) Spacer(modifier = Modifier.width(16.dp))
Text( Text(
text = title, text = title,
color = MaterialTheme.colorScheme.primary, 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 @Composable
private fun AppSwitch( private fun AppSwitch(
icon: ImageVector, icon: ImageVector,

View File

@@ -63,4 +63,6 @@
<string name="about_source_code"><![CDATA[在 %1$s 查看源码<br/>加入我们的 %2$s 频道<br/>加入我们的 <b><a href="https://pd.qq.com/s/8lipl1brp">QQ 频道</a></b>]]></string> <string name="about_source_code"><![CDATA[在 %1$s 查看源码<br/>加入我们的 %2$s 频道<br/>加入我们的 <b><a href="https://pd.qq.com/s/8lipl1brp">QQ 频道</a></b>]]></string>
<string name="app_profile_title1">应用</string> <string name="app_profile_title1">应用</string>
<string name="app_profile_root_switch">Root 权限</string> <string name="app_profile_root_switch">Root 权限</string>
<string name="app_profile_denylist">Denylist</string>
<string name="app_profile_title0">全局</string>
</resources> </resources>

View File

@@ -70,4 +70,7 @@
<string name="app_profile_title2" translatable="false">Root Profile</string> <string name="app_profile_title2" translatable="false">Root Profile</string>
<string name="app_profile_root_switch">Grant Root</string> <string name="app_profile_root_switch">Grant Root</string>
<string name="app_profile_allowlist">Allowlist</string> <string name="app_profile_allowlist">Allowlist</string>
<string name="app_profile_denylist">Denylist</string>
<string name="app_profile_title0">Global</string>
<string name="app_profile_mode">Working Mode</string>
</resources> </resources>