From c8e6ccc0c09de9ae7c05e0b58849ecaa250faaba Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Fri, 3 Feb 2023 15:50:10 -0400 Subject: [PATCH] Add extended colors to SignalTheme. --- .../main/java/org/signal/core/ui/Buttons.kt | 2 +- .../signal/core/ui/theme/ExtendedColors.kt | 58 +++++++++++++++ .../org/signal/core/ui/theme/SignalTheme.kt | 71 +++++++++++++++++-- 3 files changed, 125 insertions(+), 6 deletions(-) create mode 100644 core-ui/src/main/java/org/signal/core/ui/theme/ExtendedColors.kt diff --git a/core-ui/src/main/java/org/signal/core/ui/Buttons.kt b/core-ui/src/main/java/org/signal/core/ui/Buttons.kt index 7f294cf88..c55947ccc 100644 --- a/core-ui/src/main/java/org/signal/core/ui/Buttons.kt +++ b/core-ui/src/main/java/org/signal/core/ui/Buttons.kt @@ -130,7 +130,7 @@ object Buttons { enabled: Boolean = true, shape: Shape = ButtonDefaults.shape, colors: ButtonColors = ButtonDefaults.buttonColors( - containerColor = MaterialTheme.colorScheme.secondaryContainer, // TODO -- need extended colors + containerColor = SignalTheme.colors.colorSurface2, contentColor = MaterialTheme.colorScheme.onSurface ), elevation: ButtonElevation? = ButtonDefaults.buttonElevation(), diff --git a/core-ui/src/main/java/org/signal/core/ui/theme/ExtendedColors.kt b/core-ui/src/main/java/org/signal/core/ui/theme/ExtendedColors.kt new file mode 100644 index 000000000..7c7a8db8a --- /dev/null +++ b/core-ui/src/main/java/org/signal/core/ui/theme/ExtendedColors.kt @@ -0,0 +1,58 @@ +package org.signal.core.ui.theme + +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.graphics.Color + +@Immutable +data class ExtendedColors( + val neutralSurface: Color, + val colorOnCustom: Color, + val colorOnCustomVariant: Color, + val colorSurface1: Color, + val colorSurface2: Color, + val colorSurface3: Color, + val colorSurface4: Color, + val colorSurface5: Color, + val colorTransparent1: Color, + val colorTransparent2: Color, + val colorTransparent3: Color, + val colorTransparent4: Color, + val colorTransparent5: Color, + val colorNeutral: Color, + val colorNeutralVariant: Color, + val colorTransparentInverse1: Color, + val colorTransparentInverse2: Color, + val colorTransparentInverse3: Color, + val colorTransparentInverse4: Color, + val colorTransparentInverse5: Color, + val colorNeutralInverse: Color, + val colorNeutralVariantInverse: Color +) + +val LocalExtendedColors = staticCompositionLocalOf { + ExtendedColors( + neutralSurface = Color.Unspecified, + colorOnCustom = Color.Unspecified, + colorOnCustomVariant = Color.Unspecified, + colorSurface1 = Color.Unspecified, + colorSurface2 = Color.Unspecified, + colorSurface3 = Color.Unspecified, + colorSurface4 = Color.Unspecified, + colorSurface5 = Color.Unspecified, + colorTransparent1 = Color.Unspecified, + colorTransparent2 = Color.Unspecified, + colorTransparent3 = Color.Unspecified, + colorTransparent4 = Color.Unspecified, + colorTransparent5 = Color.Unspecified, + colorNeutral = Color.Unspecified, + colorNeutralVariant = Color.Unspecified, + colorTransparentInverse1 = Color.Unspecified, + colorTransparentInverse2 = Color.Unspecified, + colorTransparentInverse3 = Color.Unspecified, + colorTransparentInverse4 = Color.Unspecified, + colorTransparentInverse5 = Color.Unspecified, + colorNeutralInverse = Color.Unspecified, + colorNeutralVariantInverse = Color.Unspecified + ) +} diff --git a/core-ui/src/main/java/org/signal/core/ui/theme/SignalTheme.kt b/core-ui/src/main/java/org/signal/core/ui/theme/SignalTheme.kt index 3bb9fa8c7..d1fe0df9d 100644 --- a/core-ui/src/main/java/org/signal/core/ui/theme/SignalTheme.kt +++ b/core-ui/src/main/java/org/signal/core/ui/theme/SignalTheme.kt @@ -5,6 +5,7 @@ import androidx.compose.material3.Typography import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontStyle @@ -85,6 +86,56 @@ private val lightColorScheme = lightColorScheme( outline = Color(0xFF808389) ) +private val lightExtendedColors = ExtendedColors( + neutralSurface = Color(0x99FFFFFF), + colorOnCustom = Color(0xFFFFFFFF), + colorOnCustomVariant = Color(0xB3FFFFFF), + colorSurface1 = Color(0xFFF2F5F9), + colorSurface2 = Color(0xFFEDF0F6), + colorSurface3 = Color(0xFFE8ECF4), + colorSurface4 = Color(0xFFE6EAF3), + colorSurface5 = Color(0xFFE3E7F1), + colorTransparent1 = Color(0x14FFFFFF), + colorTransparent2 = Color(0x29FFFFFF), + colorTransparent3 = Color(0x8FFFFFFF), + colorTransparent4 = Color(0xB8FFFFFF), + colorTransparent5 = Color(0xF5FFFFFF), + colorNeutral = Color(0xFFFFFFFF), + colorNeutralVariant = Color(0xB8FFFFFF), + colorTransparentInverse1 = Color(0x0A000000), + colorTransparentInverse2 = Color(0x14000000), + colorTransparentInverse3 = Color(0x66000000), + colorTransparentInverse4 = Color(0xB8000000), + colorTransparentInverse5 = Color(0xE0000000), + colorNeutralInverse = Color(0xFF121212), + colorNeutralVariantInverse = Color(0xFF5C5C5C) +) + +private val darkExtendedColors = ExtendedColors( + neutralSurface = Color(0x14FFFFFF), + colorOnCustom = Color(0xFFFFFFFF), + colorOnCustomVariant = Color(0xB3FFFFFF), + colorSurface1 = Color(0xFF23242A), + colorSurface2 = Color(0xFF272A31), + colorSurface3 = Color(0xFF2C2F37), + colorSurface4 = Color(0xFF2E3039), + colorSurface5 = Color(0xFF31343E), + colorTransparent1 = Color(0x0AFFFFFF), + colorTransparent2 = Color(0x1FFFFFFF), + colorTransparent3 = Color(0x29FFFFFF), + colorTransparent4 = Color(0x7AFFFFFF), + colorTransparent5 = Color(0xB8FFFFFF), + colorNeutral = Color(0xFF121212), + colorNeutralVariant = Color(0xFF5C5C5C), + colorTransparentInverse1 = Color(0x0A000000), + colorTransparentInverse2 = Color(0x14000000), + colorTransparentInverse3 = Color(0x29000000), + colorTransparentInverse4 = Color(0xB8000000), + colorTransparentInverse5 = Color(0xF5000000), + colorNeutralInverse = Color(0xE0FFFFFF), + colorNeutralVariantInverse = Color(0xA3FFFFFF) +) + private val darkColorScheme = darkColorScheme( primary = Color(0xFFB6C5FA), primaryContainer = Color(0xFF464B5C), @@ -110,9 +161,19 @@ fun SignalTheme( isDarkMode: Boolean, content: @Composable () -> Unit ) { - MaterialTheme( - colorScheme = if (isDarkMode) darkColorScheme else lightColorScheme, - typography = typography, - content = content - ) + val extendedColors = if (isDarkMode) darkExtendedColors else lightExtendedColors + + CompositionLocalProvider(LocalExtendedColors provides extendedColors) { + MaterialTheme( + colorScheme = if (isDarkMode) darkColorScheme else lightColorScheme, + typography = typography, + content = content + ) + } +} + +object SignalTheme { + val colors: ExtendedColors + @Composable + get() = LocalExtendedColors.current }