Implement badge preferences in compose

This commit is contained in:
MM20 2021-09-26 23:34:31 +02:00
parent 47214c2ae2
commit 2f691863c1
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
3 changed files with 110 additions and 1 deletions

View File

@ -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") {

View File

@ -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()
}
}
}
)
}
}
}
}

View File

@ -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,