Implement badge preferences in compose
This commit is contained in:
parent
47214c2ae2
commit
2f691863c1
@ -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") {
|
||||
|
||||
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user