From bac7611bee662e4c0a5591d0ae436b39faa307cc Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Fri, 31 Dec 2021 01:16:31 +0530 Subject: [PATCH] all: add support for dynamic colors --- .../msfjarvis/claw/android/ui/ColorUtils.kt | 29 +++++++++++++++++++ .../msfjarvis/claw/android/ui/LobstersApp.kt | 4 +-- .../dev/msfjarvis/claw/common/theme/Theme.kt | 16 ++++------ desktop/src/jvmMain/kotlin/main.kt | 11 ++++++- 4 files changed, 46 insertions(+), 14 deletions(-) create mode 100644 android/src/main/kotlin/dev/msfjarvis/claw/android/ui/ColorUtils.kt diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/ColorUtils.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/ColorUtils.kt new file mode 100644 index 00000000..e1c266ce --- /dev/null +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/ColorUtils.kt @@ -0,0 +1,29 @@ +package dev.msfjarvis.claw.android.ui + +import android.content.Context +import android.os.Build +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material3.ColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.runtime.Composable +import dev.msfjarvis.claw.common.theme.DarkThemeColors +import dev.msfjarvis.claw.common.theme.LightThemeColors + +@Composable +fun decideColorScheme(context: Context): ColorScheme { + val isDarkTheme = isSystemInDarkTheme() + return if (Build.VERSION.SDK_INT >= 31) { + if (isDarkTheme) { + dynamicDarkColorScheme(context) + } else { + dynamicLightColorScheme(context) + } + } else { + if (isDarkTheme) { + DarkThemeColors + } else { + LightThemeColors + } + } +} diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/LobstersApp.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/LobstersApp.kt index 617f5d47..9a21be8b 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/LobstersApp.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/LobstersApp.kt @@ -1,6 +1,5 @@ package dev.msfjarvis.claw.android.ui -import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme @@ -18,6 +17,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.input.nestedscroll.NestedScrollConnection import androidx.compose.ui.input.nestedscroll.NestedScrollSource import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalUriHandler import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.compose.NavHost @@ -92,12 +92,12 @@ fun LobstersApp( currentDestination = destination.route ?: Destinations.Hottest } LobstersTheme( - darkTheme = isSystemInDarkTheme(), providedValues = arrayOf( LocalUriHandler provides urlLauncher, LocalHTMLConverter provides htmlConverter, ), + colorScheme = decideColorScheme(LocalContext.current), ) { ProvideWindowInsets { val statusBarColor = MaterialTheme.colorScheme.background diff --git a/common/src/commonMain/kotlin/dev/msfjarvis/claw/common/theme/Theme.kt b/common/src/commonMain/kotlin/dev/msfjarvis/claw/common/theme/Theme.kt index 41db93a2..7b093a65 100644 --- a/common/src/commonMain/kotlin/dev/msfjarvis/claw/common/theme/Theme.kt +++ b/common/src/commonMain/kotlin/dev/msfjarvis/claw/common/theme/Theme.kt @@ -1,6 +1,6 @@ package dev.msfjarvis.claw.common.theme -import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material3.ColorScheme import androidx.compose.material3.MaterialTheme import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme @@ -11,7 +11,7 @@ import androidx.compose.ui.graphics.Color val titleColor = Color(0xFF7395D9) -private val LightThemeColors = +val LightThemeColors = lightColorScheme( primary = md_theme_light_primary, onPrimary = md_theme_light_onPrimary, @@ -40,7 +40,7 @@ private val LightThemeColors = inverseSurface = md_theme_light_inverseSurface, ) -private val DarkThemeColors = +val DarkThemeColors = darkColorScheme( primary = md_theme_dark_primary, onPrimary = md_theme_dark_onPrimary, @@ -71,17 +71,11 @@ private val DarkThemeColors = @Composable fun LobstersTheme( - darkTheme: Boolean = isSystemInDarkTheme(), providedValues: Array> = emptyArray(), + colorScheme: ColorScheme, content: @Composable () -> Unit, ) { - val colors = - if (!darkTheme) { - LightThemeColors - } else { - DarkThemeColors - } CompositionLocalProvider(*providedValues) { - MaterialTheme(colorScheme = colors, typography = AppTypography, content = content) + MaterialTheme(colorScheme = colorScheme, typography = AppTypography, content = content) } } diff --git a/desktop/src/jvmMain/kotlin/main.kt b/desktop/src/jvmMain/kotlin/main.kt index 7efa8b1d..d68703de 100644 --- a/desktop/src/jvmMain/kotlin/main.kt +++ b/desktop/src/jvmMain/kotlin/main.kt @@ -1,3 +1,4 @@ +import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize @@ -18,6 +19,8 @@ import dev.msfjarvis.claw.api.LobstersApi import dev.msfjarvis.claw.common.posts.LobstersCard import dev.msfjarvis.claw.common.posts.PostActions import dev.msfjarvis.claw.common.posts.toDbModel +import dev.msfjarvis.claw.common.theme.DarkThemeColors +import dev.msfjarvis.claw.common.theme.LightThemeColors import dev.msfjarvis.claw.common.theme.LobstersTheme import dev.msfjarvis.claw.common.urllauncher.UrlLauncher import dev.msfjarvis.claw.database.local.SavedPost @@ -59,8 +62,14 @@ fun main() = auroraApplication { undecorated = true, onCloseRequest = ::exitApplication, ) { + val colorScheme = + if (isSystemInDarkTheme()) { + DarkThemeColors + } else { + LightThemeColors + } LobstersTheme( - darkTheme = false, + colorScheme = colorScheme, providedValues = arrayOf(LocalUriHandler provides urlLauncher), ) { Box(