Add material 3 high contrast theme

This commit is contained in:
MM20
2025-06-10 18:41:18 +02:00
parent e503a003e0
commit 5525609355
5 changed files with 100 additions and 0 deletions
@@ -4,6 +4,7 @@ import java.util.UUID
val DefaultThemeId = UUID(0L, 0L)
val HighContrastThemeId = UUID(0L, 2L)
val BlackAndWhiteThemeId = UUID(0L, 1L)
val ExtraRoundShapesId = UUID(0L, 1L)
val CutShapesId = UUID(0L, 2L)
@@ -87,6 +88,83 @@ val DefaultDarkColorScheme = ColorScheme<Color>(
scrim = ColorRef(CorePaletteColor.Neutral, 0),
)
val HighContrastLightColorScheme = ColorScheme<Color>(
primary = ColorRef(CorePaletteColor.Primary, 20),
onPrimary = ColorRef(CorePaletteColor.Primary, 100),
primaryContainer = ColorRef(CorePaletteColor.Primary, 30),
onPrimaryContainer = ColorRef(CorePaletteColor.Primary, 100),
secondary = ColorRef(CorePaletteColor.Secondary, 20),
onSecondary = ColorRef(CorePaletteColor.Secondary, 100),
secondaryContainer = ColorRef(CorePaletteColor.Secondary, 30),
onSecondaryContainer = ColorRef(CorePaletteColor.Secondary, 100),
tertiary = ColorRef(CorePaletteColor.Tertiary, 20),
onTertiary = ColorRef(CorePaletteColor.Tertiary, 100),
tertiaryContainer = ColorRef(CorePaletteColor.Tertiary, 30),
onTertiaryContainer = ColorRef(CorePaletteColor.Tertiary, 100),
error = ColorRef(CorePaletteColor.Error, 20),
onError = ColorRef(CorePaletteColor.Error, 100),
errorContainer = ColorRef(CorePaletteColor.Error, 30),
onErrorContainer = ColorRef(CorePaletteColor.Error, 100),
surfaceDim = ColorRef(CorePaletteColor.Neutral, 87),
surface = ColorRef(CorePaletteColor.Neutral, 98),
surfaceBright = ColorRef(CorePaletteColor.Neutral, 98),
surfaceContainerLowest = ColorRef(CorePaletteColor.Neutral, 100),
surfaceContainerLow = ColorRef(CorePaletteColor.Neutral, 96),
surfaceContainer = ColorRef(CorePaletteColor.Neutral, 94),
surfaceContainerHigh = ColorRef(CorePaletteColor.Neutral, 92),
surfaceContainerHighest = ColorRef(CorePaletteColor.Neutral, 90),
onSurface = ColorRef(CorePaletteColor.Neutral, 0),
onSurfaceVariant = ColorRef(CorePaletteColor.NeutralVariant, 0),
outline = ColorRef(CorePaletteColor.NeutralVariant, 20),
outlineVariant = ColorRef(CorePaletteColor.NeutralVariant, 30),
inverseSurface = ColorRef(CorePaletteColor.Neutral, 20),
inverseOnSurface = ColorRef(CorePaletteColor.Neutral, 100),
inversePrimary = ColorRef(CorePaletteColor.Primary, 80),
surfaceVariant = ColorRef(CorePaletteColor.NeutralVariant, 90),
surfaceTint = ColorRef(CorePaletteColor.Primary, 20),
background = ColorRef(CorePaletteColor.Neutral, 98),
onBackground = ColorRef(CorePaletteColor.Neutral, 0),
scrim = ColorRef(CorePaletteColor.Neutral, 0),
)
val HighContrastDarkColorScheme = ColorScheme<Color>(
primary = ColorRef(CorePaletteColor.Primary, 95),
onPrimary = ColorRef(CorePaletteColor.Primary, 0),
primaryContainer = ColorRef(CorePaletteColor.Primary, 80),
onPrimaryContainer = ColorRef(CorePaletteColor.Primary, 0),
secondary = ColorRef(CorePaletteColor.Secondary, 95),
onSecondary = ColorRef(CorePaletteColor.Secondary, 0),
secondaryContainer = ColorRef(CorePaletteColor.Secondary, 80),
onSecondaryContainer = ColorRef(CorePaletteColor.Secondary, 0),
tertiary = ColorRef(CorePaletteColor.Tertiary, 95),
onTertiary = ColorRef(CorePaletteColor.Tertiary, 0),
tertiaryContainer = ColorRef(CorePaletteColor.Tertiary, 80),
onTertiaryContainer = ColorRef(CorePaletteColor.Tertiary, 0),
error = ColorRef(CorePaletteColor.Error, 95),
onError = ColorRef(CorePaletteColor.Error, 0),
errorContainer = ColorRef(CorePaletteColor.Error, 80),
onErrorContainer = ColorRef(CorePaletteColor.Error, 0),
surfaceDim = ColorRef(CorePaletteColor.Neutral, 6),
surface = ColorRef(CorePaletteColor.Neutral, 6),
surfaceBright = ColorRef(CorePaletteColor.Neutral, 24),
surfaceContainerLowest = ColorRef(CorePaletteColor.Neutral, 4),
surfaceContainerLow = ColorRef(CorePaletteColor.Neutral, 10),
surfaceContainer = ColorRef(CorePaletteColor.Neutral, 12),
surfaceContainerHigh = ColorRef(CorePaletteColor.Neutral, 17),
surfaceContainerHighest = ColorRef(CorePaletteColor.Neutral, 22),
onSurface = ColorRef(CorePaletteColor.Neutral, 100),
onSurfaceVariant = ColorRef(CorePaletteColor.NeutralVariant, 100),
outline = ColorRef(CorePaletteColor.NeutralVariant, 95),
outlineVariant = ColorRef(CorePaletteColor.NeutralVariant, 80),
inverseSurface = ColorRef(CorePaletteColor.Neutral, 90),
inverseOnSurface = ColorRef(CorePaletteColor.Neutral, 0),
inversePrimary = ColorRef(CorePaletteColor.Primary, 20),
surfaceVariant = ColorRef(CorePaletteColor.NeutralVariant, 30),
surfaceTint = ColorRef(CorePaletteColor.Primary, 95),
background = ColorRef(CorePaletteColor.Neutral, 6),
onBackground = ColorRef(CorePaletteColor.Neutral, 100),
scrim = ColorRef(CorePaletteColor.Neutral, 0),
)
val BlackAndWhiteLightColorScheme = ColorScheme<Color?>(
primary = StaticColor(0xFF000000.toInt()),
@@ -34,6 +34,7 @@ class ThemeRepository(
fun getColors(id: UUID): Flow<Colors?> {
if (id == DefaultThemeId) return flowOf(getDefaultColors())
if (id == HighContrastThemeId) return flowOf(getHighContrastColors())
if (id == BlackAndWhiteThemeId) return flowOf(getBlackAndWhiteColors())
return database.themeDao().getColors(id).map { it?.let { Colors(it) } }.flowOn(Dispatchers.Default)
}
@@ -52,6 +53,7 @@ class ThemeRepository(
fun getColorsOrDefault(theme: ColorsDescriptor?): Flow<Colors> {
return when(theme) {
is ColorsDescriptor.HighContrast -> flowOf(getHighContrastColors())
is ColorsDescriptor.BlackAndWhite -> flowOf(getBlackAndWhiteColors())
is ColorsDescriptor.Custom -> {
val id = UUID.fromString(theme.id)
@@ -64,6 +66,7 @@ class ThemeRepository(
private fun getBuiltInColors(): List<Colors> {
return listOf(
getDefaultColors(),
getHighContrastColors(),
getBlackAndWhiteColors(),
)
}
@@ -79,6 +82,17 @@ class ThemeRepository(
)
}
private fun getHighContrastColors(): Colors {
return Colors(
id = HighContrastThemeId,
builtIn = true,
name = context.getString(R.string.preference_colors_high_contrast),
corePalette = EmptyCorePalette,
lightColorScheme = HighContrastLightColorScheme,
darkColorScheme = HighContrastDarkColorScheme,
)
}
private fun getBlackAndWhiteColors(): Colors {
return Colors(
id = BlackAndWhiteThemeId,