diff --git a/ui/src/main/java/de/mm20/launcher2/ui/activity/ComposeActivity.kt b/ui/src/main/java/de/mm20/launcher2/ui/activity/ComposeActivity.kt index aa95ccee..a724ac05 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/activity/ComposeActivity.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/activity/ComposeActivity.kt @@ -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") { diff --git a/ui/src/main/java/de/mm20/launcher2/ui/screens/settings/SettingsAppearanceScreen.kt b/ui/src/main/java/de/mm20/launcher2/ui/screens/settings/SettingsAppearanceScreen.kt new file mode 100644 index 00000000..a8541b1b --- /dev/null +++ b/ui/src/main/java/de/mm20/launcher2/ui/screens/settings/SettingsAppearanceScreen.kt @@ -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() + } + } + } + ) + } + } + } +} \ No newline at end of file diff --git a/ui/src/main/java/de/mm20/launcher2/ui/screens/settings/SettingsMainScreen.kt b/ui/src/main/java/de/mm20/launcher2/ui/screens/settings/SettingsMainScreen.kt index d12c344c..47358a19 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/screens/settings/SettingsMainScreen.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/screens/settings/SettingsMainScreen.kt @@ -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,