| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| package com.google.ai.edge.gallery.ui.theme
|
|
|
| import android.app.Activity
|
| import androidx.compose.foundation.isSystemInDarkTheme
|
| import androidx.compose.material3.MaterialTheme
|
| import androidx.compose.material3.darkColorScheme
|
| import androidx.compose.material3.lightColorScheme
|
| import androidx.compose.runtime.Composable
|
| import androidx.compose.runtime.CompositionLocalProvider
|
| import androidx.compose.runtime.Immutable
|
| import androidx.compose.runtime.ReadOnlyComposable
|
| import androidx.compose.runtime.SideEffect
|
| import androidx.compose.runtime.staticCompositionLocalOf
|
| import androidx.compose.ui.graphics.Color
|
| import androidx.compose.ui.platform.LocalView
|
| import androidx.core.view.WindowCompat
|
| import com.google.ai.edge.gallery.proto.Theme
|
|
|
| private val lightScheme =
|
| lightColorScheme(
|
| primary = primaryLight,
|
| onPrimary = onPrimaryLight,
|
| primaryContainer = primaryContainerLight,
|
| onPrimaryContainer = onPrimaryContainerLight,
|
| secondary = secondaryLight,
|
| onSecondary = onSecondaryLight,
|
| secondaryContainer = secondaryContainerLight,
|
| onSecondaryContainer = onSecondaryContainerLight,
|
| tertiary = tertiaryLight,
|
| onTertiary = onTertiaryLight,
|
| tertiaryContainer = tertiaryContainerLight,
|
| onTertiaryContainer = onTertiaryContainerLight,
|
| error = errorLight,
|
| onError = onErrorLight,
|
| errorContainer = errorContainerLight,
|
| onErrorContainer = onErrorContainerLight,
|
| background = backgroundLight,
|
| onBackground = onBackgroundLight,
|
| surface = surfaceLight,
|
| onSurface = onSurfaceLight,
|
| surfaceVariant = surfaceVariantLight,
|
| onSurfaceVariant = onSurfaceVariantLight,
|
| outline = outlineLight,
|
| outlineVariant = outlineVariantLight,
|
| scrim = scrimLight,
|
| inverseSurface = inverseSurfaceLight,
|
| inverseOnSurface = inverseOnSurfaceLight,
|
| inversePrimary = inversePrimaryLight,
|
| surfaceDim = surfaceDimLight,
|
| surfaceBright = surfaceBrightLight,
|
| surfaceContainerLowest = surfaceContainerLowestLight,
|
| surfaceContainerLow = surfaceContainerLowLight,
|
| surfaceContainer = surfaceContainerLight,
|
| surfaceContainerHigh = surfaceContainerHighLight,
|
| surfaceContainerHighest = surfaceContainerHighestLight,
|
| )
|
|
|
| private val darkScheme =
|
| darkColorScheme(
|
| primary = primaryDark,
|
| onPrimary = onPrimaryDark,
|
| primaryContainer = primaryContainerDark,
|
| onPrimaryContainer = onPrimaryContainerDark,
|
| secondary = secondaryDark,
|
| onSecondary = onSecondaryDark,
|
| secondaryContainer = secondaryContainerDark,
|
| onSecondaryContainer = onSecondaryContainerDark,
|
| tertiary = tertiaryDark,
|
| onTertiary = onTertiaryDark,
|
| tertiaryContainer = tertiaryContainerDark,
|
| onTertiaryContainer = onTertiaryContainerDark,
|
| error = errorDark,
|
| onError = onErrorDark,
|
| errorContainer = errorContainerDark,
|
| onErrorContainer = onErrorContainerDark,
|
| background = backgroundDark,
|
| onBackground = onBackgroundDark,
|
| surface = surfaceDark,
|
| onSurface = onSurfaceDark,
|
| surfaceVariant = surfaceVariantDark,
|
| onSurfaceVariant = onSurfaceVariantDark,
|
| outline = outlineDark,
|
| outlineVariant = outlineVariantDark,
|
| scrim = scrimDark,
|
| inverseSurface = inverseSurfaceDark,
|
| inverseOnSurface = inverseOnSurfaceDark,
|
| inversePrimary = inversePrimaryDark,
|
| surfaceDim = surfaceDimDark,
|
| surfaceBright = surfaceBrightDark,
|
| surfaceContainerLowest = surfaceContainerLowestDark,
|
| surfaceContainerLow = surfaceContainerLowDark,
|
| surfaceContainer = surfaceContainerDark,
|
| surfaceContainerHigh = surfaceContainerHighDark,
|
| surfaceContainerHighest = surfaceContainerHighestDark,
|
| )
|
|
|
| @Immutable
|
| data class CustomColors(
|
| val appTitleGradientColors: List<Color> = listOf(),
|
| val tabHeaderBgColor: Color = Color.Transparent,
|
| val taskCardBgColor: Color = Color.Transparent,
|
| val taskBgColors: List<Color> = listOf(),
|
| val taskBgGradientColors: List<List<Color>> = listOf(),
|
| val taskIconColors: List<Color> = listOf(),
|
| val taskIconShapeBgColor: Color = Color.Transparent,
|
| val homeBottomGradient: List<Color> = listOf(),
|
| val userBubbleBgColor: Color = Color.Transparent,
|
| val agentBubbleBgColor: Color = Color.Transparent,
|
| val linkColor: Color = Color.Transparent,
|
| val successColor: Color = Color.Transparent,
|
| val recordButtonBgColor: Color = Color.Transparent,
|
| val waveFormBgColor: Color = Color.Transparent,
|
| val modelInfoIconColor: Color = Color.Transparent,
|
| )
|
|
|
| val LocalCustomColors = staticCompositionLocalOf { CustomColors() }
|
|
|
| val lightCustomColors =
|
| CustomColors(
|
| appTitleGradientColors = listOf(Color(0xFF85B1F8), Color(0xFF3174F1)),
|
| tabHeaderBgColor = Color(0xFF3174F1),
|
| taskCardBgColor = surfaceContainerLowestLight,
|
| taskBgColors =
|
| listOf(
|
|
|
| Color(0xFFFFF5F5),
|
|
|
| Color(0xFFF4FBF6),
|
|
|
| Color(0xFFF1F6FE),
|
|
|
| Color(0xFFFFFBF0),
|
| ),
|
| taskBgGradientColors =
|
| listOf(
|
|
|
| listOf(Color(0xFFE25F57), Color(0xFFDB372D)),
|
|
|
| listOf(Color(0xFF41A15F), Color(0xFF128937)),
|
|
|
| listOf(Color(0xFF669DF6), Color(0xFF3174F1)),
|
|
|
| listOf(Color(0xFFFDD45D), Color(0xFFCAA12A)),
|
| ),
|
| taskIconColors =
|
| listOf(
|
|
|
| Color(0xFFDB372D),
|
|
|
| Color(0xFF128937),
|
|
|
| Color(0xFF3174F1),
|
|
|
| Color(0xFFCAA12A),
|
| ),
|
| taskIconShapeBgColor = Color.White,
|
| homeBottomGradient = listOf(Color(0x00F8F9FF), Color(0xffFFEFC9)),
|
| agentBubbleBgColor = Color(0xFFe9eef6),
|
| userBubbleBgColor = Color(0xFF32628D),
|
| linkColor = Color(0xFF32628D),
|
| successColor = Color(0xff3d860b),
|
| recordButtonBgColor = Color(0xFFEE675C),
|
| waveFormBgColor = Color(0xFFaaaaaa),
|
| modelInfoIconColor = Color(0xFFCCCCCC),
|
| )
|
|
|
| val darkCustomColors =
|
| CustomColors(
|
| appTitleGradientColors = listOf(Color(0xFF85B1F8), Color(0xFF3174F1)),
|
| tabHeaderBgColor = Color(0xFF3174F1),
|
| taskCardBgColor = surfaceContainerHighDark,
|
| taskBgColors =
|
| listOf(
|
|
|
| Color(0xFF181210),
|
|
|
| Color(0xFF131711),
|
|
|
| Color(0xFF191924),
|
|
|
| Color(0xFF1A1813),
|
| ),
|
| taskBgGradientColors =
|
| listOf(
|
|
|
| listOf(Color(0xFFE25F57), Color(0xFFDB372D)),
|
|
|
| listOf(Color(0xFF41A15F), Color(0xFF128937)),
|
|
|
| listOf(Color(0xFF669DF6), Color(0xFF3174F1)),
|
|
|
| listOf(Color(0xFFFDD45D), Color(0xFFCAA12A)),
|
| ),
|
| taskIconColors =
|
| listOf(
|
|
|
| Color(0xFFE25F57),
|
|
|
| Color(0xFF41A15F),
|
|
|
| Color(0xFF669DF6),
|
|
|
| Color(0xFFCAA12A),
|
| ),
|
| taskIconShapeBgColor = Color(0xFF202124),
|
| homeBottomGradient = listOf(Color(0x00F8F9FF), Color(0x1AF6AD01)),
|
| agentBubbleBgColor = Color(0xFF1b1c1d),
|
| userBubbleBgColor = Color(0xFF1f3760),
|
| linkColor = Color(0xFF9DCAFC),
|
| successColor = Color(0xFFA1CE83),
|
| recordButtonBgColor = Color(0xFFEE675C),
|
| waveFormBgColor = Color(0xFFaaaaaa),
|
| modelInfoIconColor = Color(0xFFCCCCCC),
|
| )
|
|
|
| val MaterialTheme.customColors: CustomColors
|
| @Composable @ReadOnlyComposable get() = LocalCustomColors.current
|
|
|
| |
| |
| |
|
|
| @Composable
|
| fun StatusBarColorController(useDarkTheme: Boolean) {
|
| val view = LocalView.current
|
| val currentWindow = (view.context as? Activity)?.window
|
|
|
| if (currentWindow != null) {
|
| SideEffect {
|
| WindowCompat.setDecorFitsSystemWindows(currentWindow, false)
|
| val controller = WindowCompat.getInsetsController(currentWindow, view)
|
| controller.isAppearanceLightStatusBars = !useDarkTheme
|
| }
|
| }
|
| }
|
|
|
| @Composable
|
| fun GalleryTheme(content: @Composable () -> Unit) {
|
| val themeOverride = ThemeSettings.themeOverride
|
| val darkTheme: Boolean =
|
| (isSystemInDarkTheme() || themeOverride.value == Theme.THEME_DARK) &&
|
| themeOverride.value != Theme.THEME_LIGHT
|
|
|
| StatusBarColorController(useDarkTheme = darkTheme)
|
|
|
| val colorScheme =
|
| when {
|
| darkTheme -> darkScheme
|
| else -> lightScheme
|
| }
|
|
|
| val customColorsPalette = if (darkTheme) darkCustomColors else lightCustomColors
|
|
|
| CompositionLocalProvider(LocalCustomColors provides customColorsPalette) {
|
| MaterialTheme(colorScheme = colorScheme, typography = AppTypography, content = content)
|
| }
|
| }
|
|
|