[WIP] Compose appearance preference screen

This commit is contained in:
MM20 2021-09-27 14:27:27 +02:00
parent e513ecb887
commit 9fe2f0f347
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
3 changed files with 55 additions and 5 deletions

View File

@ -25,10 +25,7 @@ import de.mm20.launcher2.ui.locals.LocalColorScheme
import de.mm20.launcher2.ui.locals.LocalNavController
import de.mm20.launcher2.ui.locals.LocalWindowSize
import de.mm20.launcher2.ui.screens.LauncherMainScreen
import de.mm20.launcher2.ui.screens.settings.SettingsAboutScreen
import de.mm20.launcher2.ui.screens.settings.SettingsBadgesScreen
import de.mm20.launcher2.ui.screens.settings.SettingsLicenseScreen
import de.mm20.launcher2.ui.screens.settings.SettingsMainScreen
import de.mm20.launcher2.ui.screens.settings.*
import de.mm20.launcher2.ui.theme.WallpaperColors
import de.mm20.launcher2.ui.theme.colors.DefaultColorScheme
import de.mm20.launcher2.ui.theme.colors.WallpaperColorScheme
@ -110,6 +107,9 @@ class ComposeActivity : AppCompatActivity() {
composable("settings/badges") {
SettingsBadgesScreen()
}
composable("settings/appearance") {
SettingsAppearanceScreen()
}
composable(
"settings/license?library={libraryName}",
arguments = listOf(navArgument("libraryName") {

View File

@ -0,0 +1,47 @@
package de.mm20.launcher2.ui.screens.settings
import androidx.compose.runtime.*
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import de.mm20.launcher2.preferences.Settings
import de.mm20.launcher2.preferences.dataStore
import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.component.preferences.ListPreference
import de.mm20.launcher2.ui.component.preferences.PreferenceCategory
import de.mm20.launcher2.ui.component.preferences.PreferenceScreen
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
@Composable
fun SettingsAppearanceScreen() {
val context = LocalContext.current
val dataStore = context.dataStore
val scope = rememberCoroutineScope()
PreferenceScreen(title = stringResource(id = R.string.preference_screen_appearance)) {
item {
PreferenceCategory {
val theme by remember {
dataStore.data.map { it.appearance.theme }
}.collectAsState(initial = Settings.AppearanceSettings.Theme.System)
ListPreference(
title = stringResource(id = R.string.preference_theme),
items = listOf(
stringResource(id = R.string.preference_theme_system) to Settings.AppearanceSettings.Theme.System,
stringResource(id = R.string.preference_theme_light) to Settings.AppearanceSettings.Theme.Light,
stringResource(id = R.string.preference_theme_dark) to Settings.AppearanceSettings.Theme.Dark,
),
value = theme,
onValueChanged = { newValue ->
scope.launch {
dataStore.updateData {
it.toBuilder()
.setAppearance(it.appearance.toBuilder().setTheme(newValue))
.build()
}
}
}
)
}
}
}
}

View File

@ -22,7 +22,10 @@ fun SettingsMainScreen() {
Preference(
icon = Icons.Rounded.Palette,
title = stringResource(id = R.string.preference_screen_appearance),
summary = stringResource(id = R.string.preference_screen_appearance_summary)
summary = stringResource(id = R.string.preference_screen_appearance_summary),
onClick = {
navController?.navigate("settings/appearance")
}
)
Preference(
icon = Icons.Rounded.Search,