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 8b84cb02..aa95ccee 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 @@ -26,6 +26,7 @@ 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.theme.WallpaperColors @@ -106,6 +107,9 @@ class ComposeActivity : AppCompatActivity() { composable("settings/about") { SettingsAboutScreen() } + composable("settings/badges") { + SettingsBadgesScreen() + } composable( "settings/license?library={libraryName}", arguments = listOf(navArgument("libraryName") { diff --git a/ui/src/main/java/de/mm20/launcher2/ui/screens/settings/SettingsBadgesScreen.kt b/ui/src/main/java/de/mm20/launcher2/ui/screens/settings/SettingsBadgesScreen.kt new file mode 100644 index 00000000..b6135d61 --- /dev/null +++ b/ui/src/main/java/de/mm20/launcher2/ui/screens/settings/SettingsBadgesScreen.kt @@ -0,0 +1,102 @@ +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.dataStore +import de.mm20.launcher2.ui.R +import de.mm20.launcher2.ui.component.preferences.PreferenceCategory +import de.mm20.launcher2.ui.component.preferences.PreferenceScreen +import de.mm20.launcher2.ui.component.preferences.SwitchPreference +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.launch + +@Composable +fun SettingsBadgesScreen() { + val dataStore = LocalContext.current.dataStore + val scope = rememberCoroutineScope() + PreferenceScreen( + title = stringResource(id = R.string.preference_screen_badges) + ) { + item { + PreferenceCategory { + val notificationBadges by remember { + dataStore.data.map { it.badges.notificationBadges } + }.collectAsState(initial = false) + SwitchPreference( + title = stringResource(id = R.string.preference_notification_badges), + summary = stringResource(id = R.string.preference_notification_badges_summary), + value = notificationBadges, + onValueChanged = { newValue -> + scope.launch { + dataStore.updateData { + it.toBuilder() + .setBadges( + it.badges.toBuilder().setNotificationBadges(newValue) + ) + .build() + } + } + } + ) + val suspendedBadges by remember { + dataStore.data.map { it.badges.suspendBadges } + }.collectAsState(initial = false) + SwitchPreference( + title = stringResource(id = R.string.preference_suspended_badges), + summary = stringResource(id = R.string.preference_suspended_badges_summary), + value = suspendedBadges, + onValueChanged = { newValue -> + scope.launch { + dataStore.updateData { + it.toBuilder() + .setBadges( + it.badges.toBuilder().setSuspendBadges(newValue) + ) + .build() + } + } + } + ) + val cloudBadges by remember { + dataStore.data.map { it.badges.cloudBadges } + }.collectAsState(initial = false) + SwitchPreference( + title = stringResource(id = R.string.preference_cloud_badges), + summary = stringResource(id = R.string.preference_cloud_badges_summary), + value = cloudBadges, + onValueChanged = { newValue -> + scope.launch { + dataStore.updateData { + it.toBuilder() + .setBadges( + it.badges.toBuilder().setCloudBadges(newValue) + ) + .build() + } + } + } + ) + val shortcutBadges by remember { + dataStore.data.map { it.badges.shortcutBadges } + }.collectAsState(initial = false) + SwitchPreference( + title = stringResource(id = R.string.preference_shortcut_badges), + summary = stringResource(id = R.string.preference_shortcut_badges_summary), + value = shortcutBadges, + onValueChanged = { newValue -> + scope.launch { + dataStore.updateData { + it.toBuilder() + .setBadges( + it.badges.toBuilder().setShortcutBadges(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 10466f2d..d12c344c 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 @@ -32,7 +32,10 @@ fun SettingsMainScreen() { Preference( icon = Icons.Rounded.NotificationBadge, title = stringResource(id = R.string.preference_screen_badges), - summary = stringResource(id = R.string.preference_screen_badges_summary) + summary = stringResource(id = R.string.preference_screen_badges_summary), + onClick = { + navController?.navigate("settings/badges") + } ) Preference( icon = Icons.Rounded.LightMode,