From 45b1e781eb92f6904f5084b7eb02084586da1ec1 Mon Sep 17 00:00:00 2001 From: Mohannad <134175138+xMohnad@users.noreply.github.com> Date: Sat, 25 Jul 2026 17:43:04 +0300 Subject: [PATCH] Add Tokyo Night theme (#3502) --- CHANGELOG.md | 1 + .../eu/kanade/domain/ui/model/AppTheme.kt | 1 + .../presentation/theme/TachiyomiTheme.kt | 2 + .../colorscheme/TokyoNightColorScheme.kt | 89 +++++++++++++++++++ .../ui/base/delegate/ThemingDelegate.kt | 1 + app/src/main/res/values/themes.xml | 41 +++++++++ .../moko-resources/base/strings.xml | 1 + .../res/values-night/colors_tokyonight.xml | 43 +++++++++ .../src/main/res/values/colors_tokyonight.xml | 43 +++++++++ 9 files changed, 222 insertions(+) create mode 100644 app/src/main/java/eu/kanade/presentation/theme/colorscheme/TokyoNightColorScheme.kt create mode 100644 presentation-core/src/main/res/values-night/colors_tokyonight.xml create mode 100644 presentation-core/src/main/res/values/colors_tokyonight.xml diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c1c0c6b0..4a038dda0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ The format is a modified version of [Keep a Changelog](https://keepachangelog.co - Support resumable image downloads if supported by source ([@xMohnad](https://github.com/xMohnad)) ([#3167](https://github.com/mihonapp/mihon/pull/3167)) - Fix HTTP Error 416 not being handled properly ([@AntsyLich](https://github.com/AntsyLich)) ([#3563](https://github.com/mihonapp/mihon/pull/3563)) - Fix incorrect progress when resuming downloads ([@xMohnad](https://github.com/xMohnad)) ([#3616](https://github.com/mihonapp/mihon/pull/3616)) +- Add Tokyo Night Theme ([@xMohnad](https://github.com/xMohnad)) ([#3502](https://github.com/mihonapp/mihon/pull/3502)) ### Changed - Detect Shizuku with permission check ([@Small-Ku](https://github.com/Small-Ku)) ([#3565](https://github.com/mihonapp/mihon/pull/3565)) 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 2394c5a42..740de692e 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 @@ -17,6 +17,7 @@ enum class AppTheme(val titleRes: StringResource?) { TIDAL_WAVE(MR.strings.theme_tidalwave), YINYANG(MR.strings.theme_yinyang), YOTSUBA(MR.strings.theme_yotsuba), + TOKYONIGHT(MR.strings.theme_tokyonight), MONOCHROME(MR.strings.theme_monochrome), // Deprecated 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 71ee3d988..2890f49f5 100644 --- a/app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt +++ b/app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt @@ -22,6 +22,7 @@ import eu.kanade.presentation.theme.colorscheme.TachiyomiColorScheme import eu.kanade.presentation.theme.colorscheme.TakoColorScheme import eu.kanade.presentation.theme.colorscheme.TealTurqoiseColorScheme import eu.kanade.presentation.theme.colorscheme.TidalWaveColorScheme +import eu.kanade.presentation.theme.colorscheme.TokyoNightColorScheme import eu.kanade.presentation.theme.colorscheme.YinYangColorScheme import eu.kanade.presentation.theme.colorscheme.YotsubaColorScheme import uy.kohesive.injekt.Injekt @@ -90,6 +91,7 @@ private fun getThemeColorScheme( private val colorSchemes: Map = mapOf( AppTheme.DEFAULT to TachiyomiColorScheme, AppTheme.CATPPUCCIN to CatppuccinColorScheme, + AppTheme.TOKYONIGHT to TokyoNightColorScheme, AppTheme.GREEN_APPLE to GreenAppleColorScheme, AppTheme.LAVENDER to LavenderColorScheme, AppTheme.MIDNIGHT_DUSK to MidnightDuskColorScheme, diff --git a/app/src/main/java/eu/kanade/presentation/theme/colorscheme/TokyoNightColorScheme.kt b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/TokyoNightColorScheme.kt new file mode 100644 index 000000000..f70474214 --- /dev/null +++ b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/TokyoNightColorScheme.kt @@ -0,0 +1,89 @@ +package eu.kanade.presentation.theme.colorscheme + +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.ui.graphics.Color + +/** + * Colors for Tokyo Night Moon/Day + * + * https://github.com/folke/tokyonight.nvim + */ +internal object TokyoNightColorScheme : BaseColorScheme() { + + override val darkScheme = darkColorScheme( + primary = Color(0xFF82AAFF), + onPrimary = Color(0xFF1B1D2B), + primaryContainer = Color(0xFF444A73), + onPrimaryContainer = Color(0xFF9AB8FF), + secondary = Color(0xFF86E1FC), + onSecondary = Color(0xFF1B1D2B), + secondaryContainer = Color(0xFF444A73), + onSecondaryContainer = Color(0xFFB2EBFF), + tertiary = Color(0xFFC099FF), + onTertiary = Color(0xFF1B1D2B), + tertiaryContainer = Color(0xFF444A73), + onTertiaryContainer = Color(0xFFCAABFF), + error = Color(0xFFFF757F), + onError = Color(0xFF1B1D2B), + errorContainer = Color(0xFFC53B53), + onErrorContainer = Color(0xFFFF8D94), + background = Color(0xFF222436), + onBackground = Color(0xFFC8D3F5), + surface = Color(0xFF222436), + onSurface = Color(0xFFC8D3F5), + surfaceVariant = Color(0xFF444A73), + onSurfaceVariant = Color(0xFF828BB8), + outline = Color(0xFF828BB8), + outlineVariant = Color(0xFF444A73), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFFC8D3F5), + inverseOnSurface = Color(0xFF222436), + inversePrimary = Color(0xFF3D5C9E), + surfaceContainerLowest = Color(0xFF1E202F), + surfaceDim = Color(0xFF222436), + surfaceContainerLow = Color(0xFF292C44), + surfaceContainer = Color(0xFF2D304B), + surfaceContainerHigh = Color(0xFF363B5D), + surfaceContainerHighest = Color(0xFF3F466F), + surfaceBright = Color(0xFF434A77), + ) + + override val lightScheme = lightColorScheme( + primary = Color(0xFF2E7DE9), + onPrimary = Color(0xFFFFFFFF), + primaryContainer = Color(0xFF92A6D5), + onPrimaryContainer = Color(0xFF15386A), + inversePrimary = Color(0xFF7890DD), + secondary = Color(0xFF007197), + onSecondary = Color(0xFFFFFFFF), + secondaryContainer = Color(0xFFA9C6D3), + onSecondaryContainer = Color(0xFF006A83), + tertiary = Color(0xFF9854F1), + onTertiary = Color(0xFFFFFFFF), + tertiaryContainer = Color(0xFFCFBFEA), + onTertiaryContainer = Color(0xFF7847BD), + background = Color(0xFFE1E2E7), + onBackground = Color(0xFF3760BF), + surface = Color(0xFFE1E2E7), + onSurface = Color(0xFF3760BF), + surfaceVariant = Color(0xFFC4C8DA), + onSurfaceVariant = Color(0xFF6172B0), + surfaceTint = Color(0xFF2E7DE9), + inverseSurface = Color(0xFF3760BF), + inverseOnSurface = Color(0xFFE1E2E7), + outline = Color(0xFF68709A), + outlineVariant = Color(0xFFA8AECB), + error = Color(0xFFF52A65), + onError = Color(0xFFFFFFFF), + errorContainer = Color(0xFFE6B4C7), + onErrorContainer = Color(0xFF6E132D), + surfaceDim = Color(0xFF9195B1), + surfaceBright = Color(0xFFE1E2E7), + surfaceContainerLowest = Color(0xFFE4E5E9), + surfaceContainerLow = Color(0xFFD0D5E3), + surfaceContainer = Color(0xFFC1C9DF), + surfaceContainerHigh = Color(0xFFC4C8DA), + surfaceContainerHighest = Color(0xFFA1A6C5), + ) +} 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 f0c983e0d..bd412ca7f 100644 --- 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 @@ -31,6 +31,7 @@ class ThemingDelegateImpl : ThemingDelegate { private val themeResources: Map = mapOf( AppTheme.MONET to R.style.Theme_Tachiyomi_Monet, AppTheme.CATPPUCCIN to R.style.Theme_Tachiyomi_Catppuccin, + AppTheme.TOKYONIGHT to R.style.Theme_Tachiyomi_TokyoNight, 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, diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index c865fb4de..358399a89 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -130,6 +130,47 @@ @color/catppuccin_surfaceContainerLow @color/catppuccin_surfaceContainerLowest + + + +