From 7fbbf7df1d26306ffe32427c821317f9356ab095 Mon Sep 17 00:00:00 2001 From: Priveetee Date: Fri, 28 Aug 2026 18:59:48 +0200 Subject: [PATCH 1/2] fix: keep manga theme contrast readable --- .../core/ui/theme/AppearanceSchemeTest.kt | 55 +++++++++++++++++++ .../core/ui/theme/AppearanceColorSchemes.kt | 17 +++--- 2 files changed, 64 insertions(+), 8 deletions(-) diff --git a/app/src/androidTest/java/dev/typetype/android/core/ui/theme/AppearanceSchemeTest.kt b/app/src/androidTest/java/dev/typetype/android/core/ui/theme/AppearanceSchemeTest.kt index 4b20bdd1..ec6844ac 100644 --- a/app/src/androidTest/java/dev/typetype/android/core/ui/theme/AppearanceSchemeTest.kt +++ b/app/src/androidTest/java/dev/typetype/android/core/ui/theme/AppearanceSchemeTest.kt @@ -51,4 +51,59 @@ class AppearanceSchemeTest { assertEquals(Color.Black, scheme.background) assertEquals(Color.Black, scheme.surface) } + + @Test + fun mangaPaperKeepsTextContrastWhenColorModeDiffers() { + val accent = accentColors(AccentColor.Blue) + val dayPaperInDarkMode = mangaScheme( + paper = MangaPaper.Day, + theme = AppearanceTheme.TypeType, + accent = accent.first, + accentSoft = accent.second, + amoled = false, + isDark = true, + ) + val nightPaperInLightMode = mangaScheme( + paper = MangaPaper.Night, + theme = AppearanceTheme.TypeType, + accent = accent.first, + accentSoft = accent.second, + amoled = false, + isDark = false, + ) + + assertEquals(Color(0xFFF5F3EA), dayPaperInDarkMode.onBackground) + assertEquals(Color(0xFF211F1A), dayPaperInDarkMode.background) + assertEquals(Color(0xFFF5F3EA), nightPaperInLightMode.onBackground) + } + + @Test + fun everyMangaPaperKeepsItsInkContrastAcrossColorModes() { + val accent = accentColors(AccentColor.Blue) + val paperThemes = listOf(AppearanceTheme.TypeType, AppearanceTheme.Dynamic) + val modes = listOf(false, true) + + paperThemes.forEach { theme -> + MangaPaper.entries.forEach { paper -> + modes.forEach { isDark -> + val scheme = mangaScheme( + paper = paper, + theme = theme, + accent = accent.first, + accentSoft = accent.second, + amoled = false, + isDark = isDark, + ) + val expectedInk = if (paper == MangaPaper.Day && !isDark) { + Color(0xFF171717) + } else { + Color(0xFFF5F3EA) + } + + assertEquals(expectedInk, scheme.onBackground) + assertEquals(expectedInk, scheme.onSurface) + } + } + } + } } diff --git a/app/src/main/java/dev/typetype/android/core/ui/theme/AppearanceColorSchemes.kt b/app/src/main/java/dev/typetype/android/core/ui/theme/AppearanceColorSchemes.kt index d62ba806..2a4d26a5 100644 --- a/app/src/main/java/dev/typetype/android/core/ui/theme/AppearanceColorSchemes.kt +++ b/app/src/main/java/dev/typetype/android/core/ui/theme/AppearanceColorSchemes.kt @@ -169,12 +169,14 @@ internal fun mangaScheme( amoled: Boolean, isDark: Boolean, ): ColorScheme { - val dark = isDark || amoled + val usesPaperSurfaces = theme == AppearanceTheme.TypeType || theme == AppearanceTheme.Dynamic + val darkMode = isDark || amoled + val darkSurface = if (usesPaperSurfaces) darkMode || paper != MangaPaper.Day else darkMode val background = if (amoled) { Color.Black } else { when (paper) { - MangaPaper.Day -> Color(0xFFFFFDF5) + MangaPaper.Day -> if (darkMode) Color(0xFF211F1A) else Color(0xFFFFFDF5) MangaPaper.Night -> Color.Black MangaPaper.Nord -> Color(0xFF2E3440) } @@ -183,18 +185,17 @@ internal fun mangaScheme( Color.Black } else { when (paper) { - MangaPaper.Day -> Color(0xFFFFFAE8) + MangaPaper.Day -> if (darkMode) Color(0xFF302B23) else Color(0xFFFFFAE8) MangaPaper.Night -> Color(0xFF121212) MangaPaper.Nord -> Color(0xFF3B4252) } } - val ink = if (dark) Color(0xFFF5F3EA) else Color(0xFF171717) - val base = if (dark) { + val ink = if (darkSurface) Color(0xFFF5F3EA) else Color(0xFF171717) + val base = if (darkSurface) { themedDarkScheme(theme, accent, accentSoft, amoled = false) } else { themedLightScheme(theme, accent, accentSoft) } - val usesPaperSurfaces = theme == AppearanceTheme.TypeType || theme == AppearanceTheme.Dynamic val activeBackground = if (amoled) Color.Black else if (usesPaperSurfaces) background else base.background val activeSurface = if (amoled) Color.Black @@ -222,7 +223,7 @@ internal fun mangaScheme( surfaceBright = activeSurface, outline = ink, outlineVariant = ink.copy(alpha = 0.42f), - error = if (dark) Red300 else Red600, - onError = if (dark) Color.Black else White, + error = if (darkSurface) Red300 else Red600, + onError = if (darkSurface) Color.Black else White, ) } From 41713bf298baee0d9c65f7f38468453265b7c960 Mon Sep 17 00:00:00 2001 From: Priveetee Date: Fri, 28 Aug 2026 19:06:58 +0200 Subject: [PATCH 2/2] chore: bump beta version to 1.7.0-beta.4 --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7fdd12f9..bd6a52af 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -26,8 +26,8 @@ android { applicationId = "dev.typetype.android" minSdk = 23 targetSdk = 37 - versionCode = 10702 - versionName = "1.7.0-beta.3" + versionCode = 10703 + versionName = "1.7.0-beta.4" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" resValue("string", "app_name", "TypeType") }