From a97deb00360b3642a0783a3845c3802105c6cf88 Mon Sep 17 00:00:00 2001 From: MajorTanya <39014446+MajorTanya@users.noreply.github.com> Date: Tue, 25 Feb 2025 00:22:48 +0100 Subject: [PATCH] Add "Monochrome" theme (#1752) This theme is mainly geared towards e-Ink displays with limited/no colour capabilities. Previous themes like Yin & Yang would make heavy use of greyscale colours which could look off on some devices. This theme is probably not conformant to Material Design 3 colour scheme guidelines, but it does boast some amazing WebAIM contrast ratios (#FFFFFF text on #000000 background gets a ratio of 21:1, vice versa too). Initially, this was intended as a purely black and white theme but some contrast issues arose, such as the download badges (tertiary background, onTertiary text colour) having the same colour as unread badges (primary/onPrimary), or the step indicators (stops) not being visible on sliders (since they use the colours of the opposite state track (active region stops are the colour of the inactive region track and vice versa). To mitigate this, each variant (dark/light) of the theme has one additional grey mixed in for their tertiary and secondaryContainer colours each. For the dark variant, this is a #A0A0A0 background for #000000 text (8.03:1 contrast ratio) and for the light variant, it is a #505050 background for #FFFFFF text (8.06:1 contrast ratio). This results in distinct unread vs download badges and visible steps in the sliders. --------- Co-authored-by: Sunspark-007 <73711243+Sunspark-007@users.noreply.github.com> Co-authored-by: AntsyLich <59261191+AntsyLich@users.noreply.github.com> (cherry picked from commit 8b48d1016b851b425e4f66d44bca098220585c37) # Conflicts: # CHANGELOG.md --- .../eu/kanade/domain/ui/model/AppTheme.kt | 1 + .../presentation/theme/TachiyomiTheme.kt | 2 + .../colorscheme/MonochromeColorScheme.kt | 84 +++++++++++++++++++ .../ui/base/delegate/ThemingDelegate.kt | 1 + app/src/main/res/values/themes.xml | 39 +++++++++ .../moko-resources/base/strings.xml | 1 + .../res/values-night/colors_monochrome.xml | 38 +++++++++ .../src/main/res/values/colors_monochrome.xml | 38 +++++++++ 8 files changed, 204 insertions(+) create mode 100644 app/src/main/java/eu/kanade/presentation/theme/colorscheme/MonochromeColorScheme.kt create mode 100644 presentation-core/src/main/res/values-night/colors_monochrome.xml create mode 100644 presentation-core/src/main/res/values/colors_monochrome.xml diff --git a/app/src/main/java/eu/kanade/domain/ui/model/AppTheme.kt b/app/src/main/java/eu/kanade/domain/ui/model/AppTheme.kt index 468e9b09a..71be276b8 100644 --- a/app/src/main/java/eu/kanade/domain/ui/model/AppTheme.kt +++ b/app/src/main/java/eu/kanade/domain/ui/model/AppTheme.kt @@ -20,6 +20,7 @@ enum class AppTheme(val titleRes: StringResource?) { TIDAL_WAVE(MR.strings.theme_tidalwave), YINYANG(MR.strings.theme_yinyang), YOTSUBA(MR.strings.theme_yotsuba), + MONOCHROME(MR.strings.theme_monochrome), // Deprecated DARK_BLUE(null), diff --git a/app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt b/app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt index af550aa5d..2b3f86477 100644 --- a/app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt +++ b/app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt @@ -13,6 +13,7 @@ import eu.kanade.presentation.theme.colorscheme.GreenAppleColorScheme import eu.kanade.presentation.theme.colorscheme.LavenderColorScheme import eu.kanade.presentation.theme.colorscheme.MidnightDuskColorScheme import eu.kanade.presentation.theme.colorscheme.MonetColorScheme +import eu.kanade.presentation.theme.colorscheme.MonochromeColorScheme import eu.kanade.presentation.theme.colorscheme.NordColorScheme import eu.kanade.presentation.theme.colorscheme.StrawberryColorScheme import eu.kanade.presentation.theme.colorscheme.TachiyomiColorScheme @@ -79,6 +80,7 @@ private val colorSchemes: Map = mapOf( AppTheme.GREEN_APPLE to GreenAppleColorScheme, AppTheme.LAVENDER to LavenderColorScheme, AppTheme.MIDNIGHT_DUSK to MidnightDuskColorScheme, + AppTheme.MONOCHROME to MonochromeColorScheme, AppTheme.NORD to NordColorScheme, AppTheme.STRAWBERRY_DAIQUIRI to StrawberryColorScheme, AppTheme.TAKO to TakoColorScheme, diff --git a/app/src/main/java/eu/kanade/presentation/theme/colorscheme/MonochromeColorScheme.kt b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/MonochromeColorScheme.kt new file mode 100644 index 000000000..0609b0580 --- /dev/null +++ b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/MonochromeColorScheme.kt @@ -0,0 +1,84 @@ +package eu.kanade.presentation.theme.colorscheme + +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.ui.graphics.Color + +internal object MonochromeColorScheme : BaseColorScheme() { + + override val darkScheme = darkColorScheme( + primary = Color(0xFFFFFFFF), + onPrimary = Color(0xFF000000), + primaryContainer = Color(0xFFFFFFFF), + onPrimaryContainer = Color(0xFF000000), + secondary = Color(0xFFFFFFFF), + onSecondary = Color(0xFF000000), + secondaryContainer = Color(0xFF777777), + onSecondaryContainer = Color(0xFF000000), + tertiary = Color(0xFF777777), + onTertiary = Color(0xFFFFFFFF), + tertiaryContainer = Color(0xFFFFFFFF), + onTertiaryContainer = Color(0xFF000000), + error = Color(0xFFFFFFFF), + onError = Color(0xFF000000), + errorContainer = Color(0xFFFFFFFF), + onErrorContainer = Color(0xFF000000), + background = Color(0xFF000000), + onBackground = Color(0xFFFFFFFF), + surface = Color(0xFF000000), + onSurface = Color(0xFFFFFFFF), + surfaceVariant = Color(0xFF000000), + onSurfaceVariant = Color(0xFFFFFFFF), + outline = Color(0xFFFFFFFF), + outlineVariant = Color(0xFFFFFFFF), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFFFFFFFF), + inverseOnSurface = Color(0xFF000000), + inversePrimary = Color(0xFF000000), + surfaceDim = Color(0xFF000000), + surfaceBright = Color(0xFFFFFFFF), + surfaceContainerLowest = Color(0xFF000000), + surfaceContainerLow = Color(0xFF000000), + surfaceContainer = Color(0xFF000000), + surfaceContainerHigh = Color(0xFF000000), + surfaceContainerHighest = Color(0xFF000000), + ) + + override val lightScheme = lightColorScheme( + primary = Color(0xFF000000), + onPrimary = Color(0xFFFFFFFF), + primaryContainer = Color(0xFF000000), + onPrimaryContainer = Color(0xFFFFFFFF), + secondary = Color(0xFF000000), + onSecondary = Color(0xFFFFFFFF), + secondaryContainer = Color(0xFF888888), + onSecondaryContainer = Color(0xFFFFFFFF), + tertiary = Color(0xFF888888), + onTertiary = Color(0xFFFFFFFF), + tertiaryContainer = Color(0xFF000000), + onTertiaryContainer = Color(0xFFFFFFFF), + error = Color(0xFF000000), + onError = Color(0xFFFFFFFF), + errorContainer = Color(0xFF000000), + onErrorContainer = Color(0xFFFFFFFF), + background = Color(0xFFFFFFFF), + onBackground = Color(0xFF000000), + surface = Color(0xFFFFFFFF), + onSurface = Color(0xFF000000), + surfaceVariant = Color(0xFFFFFFFF), + onSurfaceVariant = Color(0xFF000000), + outline = Color(0xFF000000), + outlineVariant = Color(0xFF000000), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFF000000), + inverseOnSurface = Color(0xFFFFFFFF), + inversePrimary = Color(0xFFFFFFFF), + surfaceDim = Color(0xFFFFFFFF), + surfaceBright = Color(0xFFFFFFFF), + surfaceContainerLowest = Color(0xFFFFFFFF), + surfaceContainerLow = Color(0xFFFFFFFF), + surfaceContainer = Color(0xFFFFFFFF), + surfaceContainerHigh = Color(0xFFFFFFFF), + surfaceContainerHighest = Color(0xFFFFFFFF), + ) +} diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate.kt index 8b3572f08..d08ca1e5d 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate.kt @@ -33,6 +33,7 @@ private val themeResources: Map = mapOf( AppTheme.GREEN_APPLE to R.style.Theme_Tachiyomi_GreenApple, AppTheme.LAVENDER to R.style.Theme_Tachiyomi_Lavender, AppTheme.MIDNIGHT_DUSK to R.style.Theme_Tachiyomi_MidnightDusk, + AppTheme.MONOCHROME to R.style.Theme_Tachiyomi_Monochrome, AppTheme.NORD to R.style.Theme_Tachiyomi_Nord, AppTheme.STRAWBERRY_DAIQUIRI to R.style.Theme_Tachiyomi_StrawberryDaiquiri, AppTheme.TAKO to R.style.Theme_Tachiyomi_Tako, diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 772302533..cbe493044 100755 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -451,6 +451,45 @@ @color/nord_surfaceContainerLowest + + +