From dd4cb3af40058f0ee8bc37404effb1330e08454f Mon Sep 17 00:00:00 2001 From: lisonge Date: Fri, 3 Nov 2023 21:56:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E9=85=8D=E8=89=B2=20(#224)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/li/songe/gkd/ui/theme/Theme.kt | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/li/songe/gkd/ui/theme/Theme.kt b/app/src/main/java/li/songe/gkd/ui/theme/Theme.kt index 1f165d872..a851a1b4b 100644 --- a/app/src/main/java/li/songe/gkd/ui/theme/Theme.kt +++ b/app/src/main/java/li/songe/gkd/ui/theme/Theme.kt @@ -1,13 +1,17 @@ package li.songe.gkd.ui.theme +import android.os.Build import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material3.MaterialTheme import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.platform.LocalContext import li.songe.gkd.util.map import li.songe.gkd.util.storeFlow @@ -16,15 +20,19 @@ val DarkColorScheme = darkColorScheme() @Composable fun AppTheme( - useDarkTheme: Boolean = isSystemInDarkTheme(), content: @Composable () -> Unit, ) { + // https://developer.android.com/jetpack/compose/designsystems/material3?hl=zh-cn val scope = rememberCoroutineScope() val enableDarkTheme by storeFlow.map(scope) { s -> s.enableDarkTheme }.collectAsState() - val colorScheme = if (enableDarkTheme ?: useDarkTheme) { - DarkColorScheme - } else { - LightColorScheme + val systemInDarkTheme = isSystemInDarkTheme() + val darkTheme = enableDarkTheme ?: systemInDarkTheme + val dynamicColor = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S + val colorScheme = when { + dynamicColor && darkTheme -> dynamicDarkColorScheme(LocalContext.current) + dynamicColor && !darkTheme -> dynamicLightColorScheme(LocalContext.current) + darkTheme -> DarkColorScheme + else -> LightColorScheme } MaterialTheme( colorScheme = colorScheme, content = content