Recolor the built-in chat wallpaper schemes (light, dark, black)

Replace the six presets' light/dark/black colors with the new
oklch-based scheme: incoming and outgoing bubbles are made clearly
distinct — incoming get maximum contrast for readability, outgoing
carry the theme's color (deeper and more saturated on dark and black).
Preset colors are now Color values instead of hex strings, so they
render in Display P3; user theme overrides and theme export are
unchanged (still hex).

Second of two commits for the new wallpaper schemes, paired with the
pattern commit — the colors are tuned to those patterns.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
another-simple-pixel
2026-07-07 10:05:59 -07:00
co-authored by Claude Opus 4.8
parent 4f5b982a5e
commit 98ac977cb3
2 changed files with 220 additions and 178 deletions
@@ -219,6 +219,14 @@ data class ThemeColors(
}
}
/** Resolved preset colors — Color objects, not strings. Used for presets defined in code. */
data class ThemeColorsP3(
val sentMessage: Color? = null,
val sentQuote: Color? = null,
val receivedMessage: Color? = null,
val receivedQuote: Color? = null,
)
// Spec: spec/services/theme.md#ThemeWallpaper
@Serializable
data class ThemeWallpaper (
@@ -299,6 +307,20 @@ data class ThemesFile(
val themes: List<ThemeOverrides> = emptyList()
)
// Theme color priority: per-chat → per-user → this override's own colors →
// preset-wallpaper-derived theme → base palette. Used by toColors / toAppColors
// for every non-bubble field; bubble colors have wallpaper-aware logic that
// can't share this chain.
private fun resolveColor(
perChatColor: String?,
perUserColor: String?,
ownColor: String?,
baseColor: Color,
): Color = perChatColor?.colorFromReadableHex()
?: perUserColor?.colorFromReadableHex()
?: ownColor?.colorFromReadableHex()
?: baseColor
// Spec: spec/services/theme.md#ThemeOverrides
@Serializable
data class ThemeOverrides (
@@ -340,7 +362,7 @@ data class ThemeOverrides (
)
}
fun toColors(base: DefaultTheme, perChatTheme: ThemeColors?, perUserTheme: ThemeColors?, presetWallpaperTheme: ThemeColors?): Colors {
fun toColors(base: DefaultTheme, perChatTheme: ThemeColors?, perUserTheme: ThemeColors?, presetWallpaperTheme: ThemeColorsP3?): Colors {
val baseColors = when (base) {
DefaultTheme.LIGHT -> LightColorPalette
DefaultTheme.DARK -> DarkColorPalette
@@ -348,16 +370,16 @@ data class ThemeOverrides (
DefaultTheme.BLACK -> BlackColorPalette
}
return baseColors.copy(
primary = perChatTheme?.primary?.colorFromReadableHex() ?: perUserTheme?.primary?.colorFromReadableHex() ?: colors.primary?.colorFromReadableHex() ?: presetWallpaperTheme?.primary?.colorFromReadableHex() ?: baseColors.primary,
primaryVariant = perChatTheme?.primaryVariant?.colorFromReadableHex() ?: perUserTheme?.primaryVariant?.colorFromReadableHex() ?: colors.primaryVariant?.colorFromReadableHex() ?: presetWallpaperTheme?.primaryVariant?.colorFromReadableHex() ?: baseColors.primaryVariant,
secondary = perChatTheme?.secondary?.colorFromReadableHex() ?: perUserTheme?.secondary?.colorFromReadableHex() ?: colors.secondary?.colorFromReadableHex() ?: presetWallpaperTheme?.secondary?.colorFromReadableHex() ?: baseColors.secondary,
secondaryVariant = perChatTheme?.secondaryVariant?.colorFromReadableHex() ?: perUserTheme?.secondaryVariant?.colorFromReadableHex() ?: colors.secondaryVariant?.colorFromReadableHex() ?: presetWallpaperTheme?.secondaryVariant?.colorFromReadableHex() ?: baseColors.secondaryVariant,
background = perChatTheme?.background?.colorFromReadableHex() ?: perUserTheme?.background?.colorFromReadableHex() ?: colors.background?.colorFromReadableHex() ?: presetWallpaperTheme?.background?.colorFromReadableHex() ?: baseColors.background,
surface = perChatTheme?.surface?.colorFromReadableHex() ?: perUserTheme?.surface?.colorFromReadableHex() ?: colors.surface?.colorFromReadableHex() ?: presetWallpaperTheme?.surface?.colorFromReadableHex() ?: baseColors.surface,
primary = resolveColor(perChatTheme?.primary, perUserTheme?.primary, colors.primary, baseColors.primary),
primaryVariant = resolveColor(perChatTheme?.primaryVariant, perUserTheme?.primaryVariant, colors.primaryVariant, baseColors.primaryVariant),
secondary = resolveColor(perChatTheme?.secondary, perUserTheme?.secondary, colors.secondary, baseColors.secondary),
secondaryVariant = resolveColor(perChatTheme?.secondaryVariant, perUserTheme?.secondaryVariant, colors.secondaryVariant, baseColors.secondaryVariant),
background = resolveColor(perChatTheme?.background, perUserTheme?.background, colors.background, baseColors.background),
surface = resolveColor(perChatTheme?.surface, perUserTheme?.surface, colors.surface, baseColors.surface),
)
}
fun toAppColors(base: DefaultTheme, perChatTheme: ThemeColors?, perChatWallpaperType: WallpaperType?, perUserTheme: ThemeColors?, perUserWallpaperType: WallpaperType?, presetWallpaperTheme: ThemeColors?): AppColors {
fun toAppColors(base: DefaultTheme, perChatTheme: ThemeColors?, perChatWallpaperType: WallpaperType?, perUserTheme: ThemeColors?, perUserWallpaperType: WallpaperType?, presetWallpaperTheme: ThemeColorsP3?): AppColors {
val baseColors = when (base) {
DefaultTheme.LIGHT -> LightColorPaletteApp
DefaultTheme.DARK -> DarkColorPaletteApp
@@ -365,13 +387,13 @@ data class ThemeOverrides (
DefaultTheme.BLACK -> BlackColorPaletteApp
}
val sentMessageFallback = colors.sentMessage?.colorFromReadableHex() ?: presetWallpaperTheme?.sentMessage?.colorFromReadableHex() ?: baseColors.sentMessage
val sentQuoteFallback = colors.sentQuote?.colorFromReadableHex() ?: presetWallpaperTheme?.sentQuote?.colorFromReadableHex() ?: baseColors.sentQuote
val receivedMessageFallback = colors.receivedMessage?.colorFromReadableHex() ?: presetWallpaperTheme?.receivedMessage?.colorFromReadableHex() ?: baseColors.receivedMessage
val receivedQuoteFallback = colors.receivedQuote?.colorFromReadableHex() ?: presetWallpaperTheme?.receivedQuote?.colorFromReadableHex() ?: baseColors.receivedQuote
val sentMessageFallback = colors.sentMessage?.colorFromReadableHex() ?: presetWallpaperTheme?.sentMessage ?: baseColors.sentMessage
val sentQuoteFallback = colors.sentQuote?.colorFromReadableHex() ?: presetWallpaperTheme?.sentQuote ?: baseColors.sentQuote
val receivedMessageFallback = colors.receivedMessage?.colorFromReadableHex() ?: presetWallpaperTheme?.receivedMessage ?: baseColors.receivedMessage
val receivedQuoteFallback = colors.receivedQuote?.colorFromReadableHex() ?: presetWallpaperTheme?.receivedQuote ?: baseColors.receivedQuote
return baseColors.copy(
title = perChatTheme?.title?.colorFromReadableHex() ?: perUserTheme?.title?.colorFromReadableHex() ?: colors.title?.colorFromReadableHex() ?: presetWallpaperTheme?.title?.colorFromReadableHex() ?: baseColors.title,
primaryVariant2 = perChatTheme?.primaryVariant2?.colorFromReadableHex() ?: perUserTheme?.primaryVariant2?.colorFromReadableHex() ?: colors.primaryVariant2?.colorFromReadableHex() ?: presetWallpaperTheme?.primaryVariant2?.colorFromReadableHex() ?: baseColors.primaryVariant2,
title = resolveColor(perChatTheme?.title, perUserTheme?.title, colors.title, baseColors.title),
primaryVariant2 = resolveColor(perChatTheme?.primaryVariant2, perUserTheme?.primaryVariant2, colors.primaryVariant2, baseColors.primaryVariant2),
sentMessage = if (perChatTheme?.sentMessage != null) perChatTheme.sentMessage.colorFromReadableHex()
else if (perUserTheme != null && (perChatWallpaperType == null || perUserWallpaperType == null || perChatWallpaperType.sameType(perUserWallpaperType))) perUserTheme.sentMessage?.colorFromReadableHex() ?: sentMessageFallback
else sentMessageFallback,
@@ -416,7 +438,7 @@ data class ThemeOverrides (
)
}
fun withFilledColors(base: DefaultTheme, perChatTheme: ThemeColors?, perChatWallpaperType: WallpaperType?, perUserTheme: ThemeColors?, perUserWallpaperType: WallpaperType?, presetWallpaperTheme: ThemeColors?): ThemeColors {
fun withFilledColors(base: DefaultTheme, perChatTheme: ThemeColors?, perChatWallpaperType: WallpaperType?, perUserTheme: ThemeColors?, perUserWallpaperType: WallpaperType?, presetWallpaperTheme: ThemeColorsP3?): ThemeColors {
val c = toColors(base, perChatTheme, perUserTheme, presetWallpaperTheme)
val ac = toAppColors(base, perChatTheme, perChatWallpaperType, perUserTheme, perUserWallpaperType, presetWallpaperTheme)
return ThemeColors(
@@ -13,7 +13,6 @@ import androidx.compose.ui.unit.*
import chat.simplex.common.model.ChatController.appPrefs
import chat.simplex.common.platform.*
import chat.simplex.common.ui.theme.*
import chat.simplex.common.ui.theme.ThemeManager.colorFromReadableHex
import chat.simplex.res.MR
import dev.icerock.moko.resources.ImageResource
import dev.icerock.moko.resources.StringResource
@@ -30,215 +29,233 @@ enum class PresetWallpaper(
val scaleDesktop: Float,
val background: Map<DefaultTheme, Color>,
val tint: Map<DefaultTheme, Color>,
val colors: Map<DefaultTheme, ThemeColors>,
val colors: Map<DefaultTheme, ThemeColorsP3>,
) {
CATS(MR.images.wallpaper_cats, MR.images.wallpaper_cats_desktop, "cats", 0.5f, 0.8f,
wallpaperBackgrounds(light = "#ffF8F6EA"),
CATS(res = MR.images.wallpaper_cats, resDesktop = MR.images.wallpaper_cats_desktop, filename = "cats", scale = 0.5f, scaleDesktop = 0.8f,
wallpaperBackgrounds(
light = oklch(0.9838867f, 0.021334622f, 95.39152f),
dark = oklch(0.1800f, 0.0250f, 77f),
),
tint = mapOf(
DefaultTheme.LIGHT to "#ffefdca6".colorFromReadableHex(),
DefaultTheme.DARK to "#ff4b3b0e".colorFromReadableHex(),
DefaultTheme.SIMPLEX to "#ff51400f".colorFromReadableHex(),
DefaultTheme.BLACK to "#ff4b3b0e".colorFromReadableHex()
DefaultTheme.LIGHT to oklch(0.92822266f, 0.05571678f, 95.39152f),
DefaultTheme.DARK to oklch(0.2940f, 0.0567f, 77f),
DefaultTheme.SIMPLEX to oklch(0.3797781f, 0.06842897f, 88.88896f), // #ff51400f
DefaultTheme.BLACK to oklch(0.36010742f, 0.07737845f, 64.32541f)
),
mapOf(
DefaultTheme.LIGHT to ThemeColors(
sentMessage = "#fffffaed",
sentQuote = "#fffaf0d6",
receivedMessage = "#ffF8F7F4",
receivedQuote = "#ffefede9",
DefaultTheme.LIGHT to ThemeColorsP3(
sentMessage = oklch(0.95458984f, 0.05769427f, 95.39152f),
sentQuote = oklch(0.9350586f, 0.081934035f, 95.39152f),
receivedMessage = oklch(0.9941406f, 0.009641647f, 95.39152f),
receivedQuote = oklch(0.9741211f, 0.033454504f, 95.39152f),
),
DefaultTheme.DARK to ThemeColors(
sentMessage = "#ff2f2919",
sentQuote = "#ff473a1d",
receivedMessage = "#ff272624",
receivedQuote = "#ff373633",
DefaultTheme.DARK to ThemeColorsP3(
sentMessage = oklch(0.3130f, 0.0630f, 77f),
sentQuote = oklch(0.3700f, 0.0725f, 77f),
receivedMessage = oklch(0.2560f, 0.0278f, 77f),
receivedQuote = oklch(0.2940f, 0.0320f, 77f),
),
DefaultTheme.SIMPLEX to ThemeColors(
sentMessage = "#ff41371b",
sentQuote = "#ff654f1c",
receivedMessage = "#ff272624",
receivedQuote = "#ff373633",
DefaultTheme.SIMPLEX to ThemeColorsP3(
sentMessage = oklch(0.3402031f, 0.04537511f, 90.2498f), // #ff41371b
sentQuote = oklch(0.4398707f, 0.0737883f, 85.23908f), // #ff654f1c
receivedMessage = oklch(0.2689313f, 0.003935312f, 84.58291f), // #ff272624
receivedQuote = oklch(0.332832f, 0.005361989f, 91.54412f), // #ff373633
),
DefaultTheme.BLACK to ThemeColors(
sentMessage = "#ff41371b",
sentQuote = "#ff654f1c",
receivedMessage = "#ff1f1e1b",
receivedQuote = "#ff2f2d27",
DefaultTheme.BLACK to ThemeColorsP3(
sentMessage = oklch(0.24145508f, 0.054447953f, 64.32541f),
sentQuote = oklch(0.33200073f, 0.07415811f, 64.32541f),
receivedMessage = oklch(0.12072754f, 0.0f, 64.32541f),
receivedQuote = oklch(0.22133382f, 0.0f, 64.32541f),
),
)
),
FLOWERS(MR.images.wallpaper_flowers, MR.images.wallpaper_flowers_desktop, "flowers", 0.5f, 0.8f,
wallpaperBackgrounds(light = "#ffE2FFE4"),
FLOWERS(res = MR.images.wallpaper_flowers, resDesktop = MR.images.wallpaper_flowers_desktop, filename = "flowers", scale = 0.5f, scaleDesktop = 0.8f,
wallpaperBackgrounds(
light = oklch(0.9838867f, 0.02136218f, 130.21953f),
dark = oklch(0.1800f, 0.0250f, 130f),
),
tint = mapOf(
DefaultTheme.LIGHT to "#ff9CEA59".colorFromReadableHex(),
DefaultTheme.DARK to "#ff31560D".colorFromReadableHex(),
DefaultTheme.SIMPLEX to "#ff36600f".colorFromReadableHex(),
DefaultTheme.BLACK to "#ff31560D".colorFromReadableHex()
DefaultTheme.LIGHT to oklch(0.91506225f, 0.054591343f, 130.21953f),
DefaultTheme.DARK to oklch(0.3130f, 0.0567f, 130f),
DefaultTheme.SIMPLEX to oklch(0.4415422f, 0.1170956f, 133.8571f), // #ff36600f
DefaultTheme.BLACK to oklch(0.36254883f, 0.10072228f, 132.04506f)
),
mapOf(
DefaultTheme.LIGHT to ThemeColors(
sentMessage = "#fff1ffe5",
sentQuote = "#ffdcf9c4",
receivedMessage = "#ffF4F8F2",
receivedQuote = "#ffe7ece7",
DefaultTheme.LIGHT to ThemeColorsP3(
sentMessage = oklch(0.9542969f, 0.067714185f, 130.21953f),
sentQuote = oklch(0.9345703f, 0.09861551f, 130.21953f),
receivedMessage = oklch(0.9951172f, 0.010222077f, 130.21953f),
receivedQuote = oklch(0.97402346f, 0.036812846f, 130.21953f),
),
DefaultTheme.DARK to ThemeColors(
sentMessage = "#ff163521",
sentQuote = "#ff1B5330",
receivedMessage = "#ff242523",
receivedQuote = "#ff353733",
DefaultTheme.DARK to ThemeColorsP3(
sentMessage = oklch(0.3130f, 0.0630f, 130f),
sentQuote = oklch(0.3700f, 0.0725f, 130f),
receivedMessage = oklch(0.2560f, 0.0278f, 130f),
receivedQuote = oklch(0.2940f, 0.0320f, 130f),
),
DefaultTheme.SIMPLEX to ThemeColors(
sentMessage = "#ff184739",
sentQuote = "#ff1F6F4B",
receivedMessage = "#ff242523",
receivedQuote = "#ff353733",
DefaultTheme.SIMPLEX to ThemeColorsP3(
sentMessage = oklch(0.3611755f, 0.05678164f, 170.3752f), // #ff184739
sentQuote = oklch(0.484029f, 0.09629127f, 159.5568f), // #ff1F6F4B
receivedMessage = oklch(0.2626721f, 0.003936427f, 128.6285f), // #ff242523
receivedQuote = oklch(0.3334174f, 0.007411477f, 128.7105f), // #ff353733
),
DefaultTheme.BLACK to ThemeColors(
sentMessage = "#ff184739",
sentQuote = "#ff1F6F4B",
receivedMessage = "#ff1c1f1a",
receivedQuote = "#ff282b25",
DefaultTheme.BLACK to ThemeColorsP3(
sentMessage = oklch(0.24267578f, 0.06739509f, 132.04506f),
sentQuote = oklch(0.3336792f, 0.091792114f, 132.04506f),
receivedMessage = oklch(0.12133789f, 0.0f, 132.04506f),
receivedQuote = oklch(0.2224528f, 0.0f, 132.04506f),
),
)
),
HEARTS(MR.images.wallpaper_hearts, MR.images.wallpaper_hearts_desktop, "hearts", 0.5f, 0.8f,
wallpaperBackgrounds(light = "#ffFDECEC"),
HEARTS(res = MR.images.wallpaper_hearts, resDesktop = MR.images.wallpaper_hearts_desktop, filename = "hearts", scale = 0.5f, scaleDesktop = 0.8f,
wallpaperBackgrounds(
light = oklch(0.9780521f, 0.010869741f, 10.569774f),
dark = oklch(0.1800f, 0.0250f, 5f),
),
tint = mapOf(
DefaultTheme.LIGHT to "#fffde0e0".colorFromReadableHex(),
DefaultTheme.DARK to "#ff3c0f0f".colorFromReadableHex(),
DefaultTheme.SIMPLEX to "#ff411010".colorFromReadableHex(),
DefaultTheme.BLACK to "#ff3C0F0F".colorFromReadableHex()
DefaultTheme.LIGHT to oklch(0.9399476f, 0.030744314f, 10.569774f),
DefaultTheme.DARK to oklch(0.2940f, 0.0567f, 5f),
DefaultTheme.SIMPLEX to oklch(0.2574974f, 0.07614605f, 24.19117f), // #ff411010
DefaultTheme.BLACK to oklch(0.30926332f, 0.12386322f, 7.8465395f)
),
mapOf(
DefaultTheme.LIGHT to ThemeColors(
sentMessage = "#fffff4f4",
sentQuote = "#ffffdfdf",
receivedMessage = "#fff8f6f6",
receivedQuote = "#ffefebeb",
DefaultTheme.LIGHT to ThemeColorsP3(
sentMessage = oklch(0.95283204f, 0.023875237f, 10.569774f),
sentQuote = oklch(0.9364258f, 0.032649755f, 10.569774f),
receivedMessage = oklch(0.99121094f, 0.004304409f, 10.569774f),
receivedQuote = oklch(0.9665039f, 0.016754389f, 10.569774f),
),
DefaultTheme.DARK to ThemeColors(
sentMessage = "#ff301515",
sentQuote = "#ff4C1818",
receivedMessage = "#ff242121",
receivedQuote = "#ff3b3535",
DefaultTheme.DARK to ThemeColorsP3(
sentMessage = oklch(0.3130f, 0.0630f, 5f),
sentQuote = oklch(0.3700f, 0.0725f, 5f),
receivedMessage = oklch(0.2560f, 0.0278f, 5f),
receivedQuote = oklch(0.2940f, 0.0320f, 5f),
),
DefaultTheme.SIMPLEX to ThemeColors(
sentMessage = "#ff491A28",
sentQuote = "#ff761F29",
receivedMessage = "#ff242121",
receivedQuote = "#ff3b3535",
DefaultTheme.SIMPLEX to ThemeColorsP3(
sentMessage = oklch(0.2941874f, 0.07322977f, 4.102547f), // #ff491A28
sentQuote = oklch(0.3831088f, 0.1201278f, 18.61089f), // #ff761F29
receivedMessage = oklch(0.2510736f, 0.004554155f, 17.46058f), // #ff242121
receivedQuote = oklch(0.3352158f, 0.008515606f, 17.58481f), // #ff3b3535
),
DefaultTheme.BLACK to ThemeColors(
sentMessage = "#ff491A28",
sentQuote = "#ff761F29",
receivedMessage = "#ff1f1b1b",
receivedQuote = "#ff2e2626",
DefaultTheme.BLACK to ThemeColorsP3(
sentMessage = oklch(0.24780273f, 0.085917726f, 7.8465395f),
sentQuote = oklch(0.34072876f, 0.117019944f, 7.8465395f),
receivedMessage = oklch(0.12390137f, 0.0f, 7.8465395f),
receivedQuote = oklch(0.22715251f, 0.0f, 7.8465395f),
),
)
),
KIDS(MR.images.wallpaper_kids, MR.images.wallpaper_kids_desktop, "kids", 0.5f, 0.8f,
wallpaperBackgrounds(light = "#ffdbfdfb"),
KIDS(res = MR.images.wallpaper_kids, resDesktop = MR.images.wallpaper_kids_desktop, filename = "kids", scale = 0.5f, scaleDesktop = 0.8f,
wallpaperBackgrounds(
light = oklch(0.98472977f, 0.01831758f, 200.66322f),
dark = oklch(0.18017578f, 0.025585549f, 199.76416f),
),
tint = mapOf(
DefaultTheme.LIGHT to "#ffadeffc".colorFromReadableHex(),
DefaultTheme.DARK to "#ff16404B".colorFromReadableHex(),
DefaultTheme.SIMPLEX to "#ff184753".colorFromReadableHex(),
DefaultTheme.BLACK to "#ff16404B".colorFromReadableHex()
DefaultTheme.LIGHT to oklch(0.9382386f, 0.035245255f, 200.66322f),
DefaultTheme.DARK to oklch(0.2585798f, 0.043961763f, 199.76416f),
DefaultTheme.SIMPLEX to oklch(0.3716418f, 0.05389406f, 217.7104f), // #ff184753
DefaultTheme.BLACK to oklch(0.2880891f, 0.049433947f, 192.22177f)
),
mapOf(
DefaultTheme.LIGHT to ThemeColors(
sentMessage = "#ffeafeff",
sentQuote = "#ffcbf4f7",
receivedMessage = "#fff3fafa",
receivedQuote = "#ffe4efef",
DefaultTheme.LIGHT to ThemeColorsP3(
sentMessage = oklch(0.9599414f, 0.029920436f, 200.66322f),
sentQuote = oklch(0.9388867f, 0.038093355f, 200.66322f),
receivedMessage = oklch(0.9941406f, 0.007004261f, 200.66322f),
receivedQuote = oklch(0.97333986f, 0.024719488f, 200.66322f),
),
DefaultTheme.DARK to ThemeColors(
sentMessage = "#ff16302F",
sentQuote = "#ff1a4a49",
receivedMessage = "#ff252626",
receivedQuote = "#ff373A39",
DefaultTheme.DARK to ThemeColorsP3(
sentMessage = oklch(0.3173828f, 0.05395502f, 199.76416f),
sentQuote = oklch(0.37618583f, 0.062117502f, 199.76416f),
receivedMessage = oklch(0.2585798f, 0.028428389f, 199.76416f),
receivedQuote = oklch(0.29778183f, 0.032692645f, 199.76416f),
),
DefaultTheme.SIMPLEX to ThemeColors(
sentMessage = "#ff1a4745",
sentQuote = "#ff1d6b69",
receivedMessage = "#ff252626",
receivedQuote = "#ff373a39",
DefaultTheme.SIMPLEX to ThemeColorsP3(
sentMessage = oklch(0.3662882f, 0.04909204f, 191.2229f), // #ff1a4745
sentQuote = oklch(0.4817563f, 0.07299667f, 192.4874f), // #ff1d6b69
receivedMessage = oklch(0.2675764f, 0.001466786f, 197.0692f), // #ff252626
receivedQuote = oklch(0.3451987f, 0.004436687f, 174.2088f), // #ff373a39
),
DefaultTheme.BLACK to ThemeColors(
sentMessage = "#ff1a4745",
sentQuote = "#ff1d6b69",
receivedMessage = "#ff1e1f1f",
receivedQuote = "#ff262b29",
DefaultTheme.BLACK to ThemeColorsP3(
sentMessage = oklch(0.24645996f, 0.042290688f, 192.22177f),
sentQuote = oklch(0.33888245f, 0.057626568f, 192.22177f),
receivedMessage = oklch(0.12322998f, 0.0f, 192.22177f),
receivedQuote = oklch(0.22592163f, 0.0f, 192.22177f),
),
)
),
SCHOOL(MR.images.wallpaper_school, MR.images.wallpaper_school_desktop, "school", 0.5f, 0.8f,
wallpaperBackgrounds(light = "#ffE7F5FF"),
SCHOOL(res = MR.images.wallpaper_school, resDesktop = MR.images.wallpaper_school_desktop, filename = "school", scale = 0.5f, scaleDesktop = 0.8f,
wallpaperBackgrounds(
light = oklch(0.9837532f, 0.010169387f, 225.85442f),
dark = oklch(0.17883301f, 0.024886385f, 251.75946f),
),
tint = mapOf(
DefaultTheme.LIGHT to "#ffCEEBFF".colorFromReadableHex(),
DefaultTheme.DARK to "#ff0F293B".colorFromReadableHex(),
DefaultTheme.SIMPLEX to "#ff112f43".colorFromReadableHex(),
DefaultTheme.BLACK to "#ff0F293B".colorFromReadableHex()
DefaultTheme.LIGHT to oklch(0.94544077f, 0.029549051f, 225.85442f),
DefaultTheme.DARK to oklch(0.2515276f, 0.05627329f, 251.75946f),
DefaultTheme.SIMPLEX to oklch(0.2929108f, 0.05102392f, 240.8139f), // #ff112f43
DefaultTheme.BLACK to oklch(0.27668023f, 0.09167254f, 255.17474f)
),
mapOf(
DefaultTheme.LIGHT to ThemeColors(
sentMessage = "#ffeef9ff",
sentQuote = "#ffD6EDFA",
receivedMessage = "#ffF3F5F9",
receivedQuote = "#ffe4e8ee",
DefaultTheme.LIGHT to ThemeColorsP3(
sentMessage = oklch(0.95765626f, 0.026757836f, 225.85442f),
sentQuote = oklch(0.93779296f, 0.038093355f, 225.85442f),
receivedMessage = oklch(0.9941406f, 0.0036548972f, 225.85442f),
receivedQuote = oklch(0.9731055f, 0.016901612f, 225.85442f),
),
DefaultTheme.DARK to ThemeColors(
sentMessage = "#ff172833",
sentQuote = "#ff1C3E4F",
receivedMessage = "#ff26282c",
receivedQuote = "#ff393c40",
DefaultTheme.DARK to ThemeColorsP3(
sentMessage = oklch(0.31274414f, 0.06245613f, 251.75946f),
sentQuote = oklch(0.37013462f, 0.07182455f, 251.75946f),
receivedMessage = oklch(0.25535366f, 0.02765154f, 251.75946f),
receivedQuote = oklch(0.29361397f, 0.031799268f, 251.75946f),
),
DefaultTheme.SIMPLEX to ThemeColors(
sentMessage = "#ff1A3C5D",
sentQuote = "#ff235b80",
receivedMessage = "#ff26282c",
receivedQuote = "#ff393c40",
DefaultTheme.SIMPLEX to ThemeColorsP3(
sentMessage = oklch(0.3481476f, 0.07023843f, 249.9258f), // #ff1A3C5D
sentQuote = oklch(0.4520089f, 0.08394515f, 241.1934f), // #ff235b80
receivedMessage = oklch(0.2764251f, 0.007910611f, 264.4375f), // #ff26282c
receivedQuote = oklch(0.3548081f, 0.00803458f, 255.5451f), // #ff393c40
),
DefaultTheme.BLACK to ThemeColors(
sentMessage = "#ff1A3C5D",
sentQuote = "#ff235b80",
receivedMessage = "#ff1d1e22",
receivedQuote = "#ff292b2f",
DefaultTheme.BLACK to ThemeColorsP3(
sentMessage = oklch(0.24328613f, 0.08060831f, 255.17474f),
sentQuote = oklch(0.33451843f, 0.10981243f, 255.17474f),
receivedMessage = oklch(0.12164307f, 0.0f, 255.17474f),
receivedQuote = oklch(0.22301228f, 0.0f, 255.17474f),
),
)
),
TRAVEL(MR.images.wallpaper_travel, MR.images.wallpaper_travel_desktop, "travel", 0.5f, 0.8f,
wallpaperBackgrounds(light = "#fff9eeff"),
TRAVEL(res = MR.images.wallpaper_travel, resDesktop = MR.images.wallpaper_travel_desktop, filename = "travel", scale = 0.5f, scaleDesktop = 0.8f,
wallpaperBackgrounds(
light = oklch(0.9835678f, 0.01424849f, 325.37686f),
dark = oklch(0.17980957f, 0.025278661f, 316.56534f),
),
tint = mapOf(
DefaultTheme.LIGHT to "#ffeedbfe".colorFromReadableHex(),
DefaultTheme.DARK to "#ff311E48".colorFromReadableHex(),
DefaultTheme.SIMPLEX to "#ff35204e".colorFromReadableHex(),
DefaultTheme.BLACK to "#ff311E48".colorFromReadableHex()
DefaultTheme.LIGHT to oklch(0.9464822f, 0.035007913f, 325.37686f),
DefaultTheme.DARK to oklch(0.27441406f, 0.0701345f, 316.56534f),
DefaultTheme.SIMPLEX to oklch(0.2948376f, 0.08277514f, 302.7197f), // #ff35204e
DefaultTheme.BLACK to oklch(0.2714336f, 0.1344262f, 313.97916f)
),
mapOf(
DefaultTheme.LIGHT to ThemeColors(
sentMessage = "#fffcf6ff",
sentQuote = "#fff2e0fc",
receivedMessage = "#ffF6F4F7",
receivedQuote = "#ffede9ee",
DefaultTheme.LIGHT to ThemeColorsP3(
sentMessage = oklch(0.9571094f, 0.032885246f, 325.37686f),
sentQuote = oklch(0.9408496f, 0.043789558f, 325.37686f),
receivedMessage = oklch(0.9921875f, 0.0067495108f, 325.37686f),
receivedQuote = oklch(0.9701172f, 0.024161799f, 325.37686f),
),
DefaultTheme.DARK to ThemeColors(
sentMessage = "#ff33263B",
sentQuote = "#ff53385E",
receivedMessage = "#ff272528",
receivedQuote = "#ff3B373E",
DefaultTheme.DARK to ThemeColorsP3(
sentMessage = oklch(0.31201172f, 0.066930376f, 316.56534f),
sentQuote = oklch(0.36866978f, 0.07696993f, 316.56534f),
receivedMessage = oklch(0.25535366f, 0.028087402f, 316.56534f),
receivedQuote = oklch(0.2931257f, 0.03230051f, 316.56534f),
),
DefaultTheme.SIMPLEX to ThemeColors(
sentMessage = "#ff3C255D",
sentQuote = "#ff623485",
receivedMessage = "#ff26273B",
receivedQuote = "#ff3A394F",
DefaultTheme.SIMPLEX to ThemeColorsP3(
sentMessage = oklch(0.3234681f, 0.09690244f, 299.9634f), // #ff3C255D
sentQuote = oklch(0.4226042f, 0.1341495f, 307.8573f), // #ff623485
receivedMessage = oklch(0.2812692f, 0.03669397f, 281.5485f), // #ff26273B
receivedQuote = oklch(0.355058f, 0.03791292f, 286.3773f), // #ff3A394F
),
DefaultTheme.BLACK to ThemeColors(
sentMessage = "#ff3C255D",
sentQuote = "#ff623485",
receivedMessage = "#ff231f23",
receivedQuote = "#ff2c2931",
DefaultTheme.BLACK to ThemeColorsP3(
sentMessage = oklch(0.2446289f, 0.09382912f, 313.97916f),
sentQuote = oklch(0.33636475f, 0.12779526f, 313.97916f),
receivedMessage = oklch(0.12231445f, 0.0f, 313.97916f),
receivedQuote = oklch(0.22424316f, 0.0f, 313.97916f),
),
)
);
@@ -255,12 +272,15 @@ enum class PresetWallpaper(
}
}
fun wallpaperBackgrounds(light: String): Map<DefaultTheme, Color> =
fun wallpaperBackgrounds(
light: Color,
dark: Color,
): Map<DefaultTheme, Color> =
mapOf(
DefaultTheme.LIGHT to light.colorFromReadableHex(),
DefaultTheme.DARK to "#ff121212".colorFromReadableHex(),
DefaultTheme.SIMPLEX to "#ff111528".colorFromReadableHex(),
DefaultTheme.BLACK to "#ff070707".colorFromReadableHex()
DefaultTheme.LIGHT to light,
DefaultTheme.DARK to dark,
DefaultTheme.SIMPLEX to oklch(0.2024453f, 0.03849037f, 273.4875f), // #ff111528
DefaultTheme.BLACK to oklch(0f, 0f, 0f) // #ff000000 — pure black for hyper-contrast theme
)
@Serializable