Apply theme preference to compose screens

This commit is contained in:
MM20
2021-09-27 14:31:29 +02:00
parent 9fe2f0f347
commit a2cf713b56
@@ -4,14 +4,22 @@ import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.* import androidx.compose.material.*
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.Font
import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import de.mm20.launcher2.preferences.Settings
import de.mm20.launcher2.preferences.Settings.AppearanceSettings.Theme
import de.mm20.launcher2.preferences.dataStore
import de.mm20.launcher2.ui.locals.LocalColorScheme import de.mm20.launcher2.ui.locals.LocalColorScheme
import kotlinx.coroutines.flow.map
val lightPalette = lightColors( val lightPalette = lightColors(
primary = Color(0, 114, 255) primary = Color(0, 114, 255)
@@ -225,9 +233,17 @@ val Colors.weatherFog: Color
@Composable @Composable
fun LauncherTheme(content: @Composable () -> Unit) { fun LauncherTheme(content: @Composable () -> Unit) {
val dataStore = LocalContext.current.dataStore
val theme by remember {
dataStore.data.map { it.appearance.theme }
}.collectAsState(initial = Theme.System)
val darkTheme = theme == Theme.Dark || theme == Theme.System && isSystemInDarkTheme()
val colorScheme = LocalColorScheme.current val colorScheme = LocalColorScheme.current
val colors = if (isSystemInDarkTheme()) { val colors = if (darkTheme) {
darkColors( darkColors(
onSurface = colorScheme.neutral2.shade10, onSurface = colorScheme.neutral2.shade10,
surface = colorScheme.neutral2.shade800, surface = colorScheme.neutral2.shade800,