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 d454ab8e..af2919e2 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 @@ -74,12 +74,12 @@ fun LobstersApp( val savedPosts by viewModel.savedPosts.collectAsState(emptyMap()) LobstersTheme( + dynamicColor = true, providedValues = arrayOf( LocalUriHandler provides urlLauncher, LocalHTMLConverter provides htmlConverter, ), - colorScheme = decideColorScheme(LocalContext.current), ) { val currentUiMode = LocalConfiguration.current.uiMode val systemBarsColor = MaterialTheme.colorScheme.surfaceColorAtNavigationBarElevation() diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/ext.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/ext.kt index 239711fb..fea8f083 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/ext.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/ext.kt @@ -2,20 +2,13 @@ package dev.msfjarvis.claw.android.ui import android.content.Context import android.content.ContextWrapper -import android.os.Build import androidx.activity.ComponentActivity -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 androidx.compose.runtime.remember import androidx.navigation.NavController import dev.msfjarvis.claw.android.ui.navigation.Destinations import dev.msfjarvis.claw.android.viewmodel.ClawViewModel import dev.msfjarvis.claw.common.posts.PostActions -import dev.msfjarvis.claw.common.theme.DarkThemeColors -import dev.msfjarvis.claw.common.theme.LightThemeColors import dev.msfjarvis.claw.common.urllauncher.UrlLauncher import dev.msfjarvis.claw.database.local.SavedPost import java.time.LocalDateTime @@ -37,24 +30,6 @@ fun String.toLocalDateTime(): LocalDateTime { return LocalDateTime.from(DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse(this)) } -@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 - } - } -} - @Composable fun rememberPostActions( urlLauncher: UrlLauncher, diff --git a/common/src/main/kotlin/dev/msfjarvis/claw/common/theme/Theme.kt b/common/src/main/kotlin/dev/msfjarvis/claw/common/theme/Theme.kt index b845f8cd..2e9c7a08 100644 --- a/common/src/main/kotlin/dev/msfjarvis/claw/common/theme/Theme.kt +++ b/common/src/main/kotlin/dev/msfjarvis/claw/common/theme/Theme.kt @@ -1,15 +1,19 @@ package dev.msfjarvis.claw.common.theme -import androidx.compose.material3.ColorScheme +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.CompositionLocalProvider import androidx.compose.runtime.ProvidedValue +import androidx.compose.ui.platform.LocalContext import com.halilibo.richtext.ui.material3.SetupMaterial3RichText -val LightThemeColors = +internal val LightThemeColors = lightColorScheme( primary = md_theme_light_primary, onPrimary = md_theme_light_onPrimary, @@ -38,7 +42,7 @@ val LightThemeColors = inverseSurface = md_theme_light_inverseSurface, ) -val DarkThemeColors = +internal val DarkThemeColors = darkColorScheme( primary = md_theme_dark_primary, onPrimary = md_theme_dark_onPrimary, @@ -69,10 +73,23 @@ val DarkThemeColors = @Composable fun LobstersTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + dynamicColor: Boolean = false, providedValues: Array> = emptyArray(), - colorScheme: ColorScheme, content: @Composable () -> Unit, ) { + val colorScheme = + when { + dynamicColor && Build.VERSION.SDK_INT >= 31 -> { + val context = LocalContext.current + if (darkTheme) { + dynamicDarkColorScheme(context) + } else { + dynamicLightColorScheme(context) + } + } + else -> if (darkTheme) DarkThemeColors else LightThemeColors + } CompositionLocalProvider(*providedValues) { MaterialTheme(colorScheme = colorScheme, typography = AppTypography) { SetupMaterial3RichText { content() }