From cdaec764cbcba47cac40b6a3b8a1bbd9d1863502 Mon Sep 17 00:00:00 2001 From: Ushie Date: Tue, 16 Aug 2022 04:57:14 +0300 Subject: [PATCH] feat: improve settings page --- .../manager/ui/screen/SettingsScreen.kt | 65 ++++++++++++++----- app/src/main/res/values/strings.xml | 4 +- 2 files changed, 53 insertions(+), 16 deletions(-) diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screen/SettingsScreen.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screen/SettingsScreen.kt index bca6839..c049eb6 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/screen/SettingsScreen.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/screen/SettingsScreen.kt @@ -9,13 +9,15 @@ import androidx.compose.animation.* import androidx.compose.foundation.* import androidx.compose.foundation.layout.* import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.NavigateBefore -import androidx.compose.material.icons.filled.Style +import androidx.compose.material.icons.filled.* import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import com.aliucord.manager.R @@ -29,9 +31,14 @@ fun SettingsScreen( viewModel: SettingsViewModel = getViewModel(), onClickBack: () -> Unit ) { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior( + decayAnimationSpec = rememberSplineBasedDecay(), + state = rememberTopAppBarState() + ) Scaffold( + modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - MediumTopAppBar( + LargeTopAppBar( title = { Text(stringResource(R.string.settings)) }, navigationIcon = { IconButton(onClick = onClickBack) { @@ -40,7 +47,8 @@ fun SettingsScreen( contentDescription = stringResource(R.string.back) ) } - } + }, + scrollBehavior = scrollBehavior ) } ) { paddingValues -> @@ -61,10 +69,13 @@ fun SettingsScreen( ) } + GroupHeader(stringResource(R.string.appearance)) + ListItem( modifier = Modifier.clickable(onClick = viewModel::showThemeDialog), headlineText = { Text(stringResource(R.string.theme)) }, supportingText = { Text(stringResource(R.string.theme_setting_description)) }, + leadingContent = { Icon(Icons.Default.Style, null) }, trailingContent = { FilledTonalButton(onClick = viewModel::showThemeDialog) { Text(preferences.theme.displayName) @@ -75,10 +86,18 @@ fun SettingsScreen( SwitchSetting( checked = preferences.dynamicColor, title = { Text(stringResource(R.string.dynamic_color)) }, - onCheckedChange = { preferences.dynamicColor = it } + onCheckedChange = { preferences.dynamicColor = it }, + icon = { Icon(Icons.Default.Palette, null) } ) - Divider() + GroupHeader(stringResource(R.string.advanced)) + + SwitchSetting( + checked = preferences.replaceBg, + title = { Text(stringResource(R.string.replace_bg)) }, + onCheckedChange = { preferences.replaceBg = it }, + icon = { Icon(Icons.Default.AppShortcut, null) } + ) OutlinedTextField( modifier = Modifier @@ -91,16 +110,11 @@ fun SettingsScreen( singleLine = true ) - SwitchSetting( - checked = preferences.replaceBg, - title = { Text(stringResource(R.string.replace_bg)) }, - onCheckedChange = { preferences.replaceBg = it } - ) - SwitchSetting( checked = preferences.devMode, - title = { Text(stringResource(R.string.advanced_options)) }, - onCheckedChange = { preferences.devMode = it } + title = { Text(stringResource(R.string.developer_options)) }, + onCheckedChange = { preferences.devMode = it }, + icon = { Icon(Icons.Default.Code, null) } ) AnimatedVisibility( @@ -136,7 +150,8 @@ fun SettingsScreen( checked = preferences.debuggable, title = { Text(stringResource(R.string.debuggable)) }, description = { Text(stringResource(R.string.debuggable_description)) }, - onCheckedChange = { preferences.debuggable = it } + onCheckedChange = { preferences.debuggable = it }, + icon = { Icon(Icons.Default.BugReport, null) } ) } } @@ -232,3 +247,23 @@ fun ThemeDialog( } ) } + +@Composable +fun GroupHeader( + title: String, + color: Color = MaterialTheme.colorScheme.primary +) { + Box( + Modifier + .padding(start = 12.dp) + .fillMaxWidth(), + contentAlignment = Alignment.CenterStart + ) { + Text( + title, + color = color, + fontSize = LocalTextStyle.current.fontSize.times(0.95f), + fontWeight = FontWeight.SemiBold + ) + } +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 02ca692..3191ea0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -22,7 +22,7 @@ Install Reinstall Update - Show advanced options + Developer options Debuggable Enable debuggable flag About @@ -49,4 +49,6 @@ Uninstall Version Dynamic color + Appearance + Advanced