Add Tokyo Night theme (#3502)

This commit is contained in:
Mohannad
2026-07-25 17:43:04 +03:00
committed by GitHub
parent 069e5c91ac
commit 45b1e781eb
9 changed files with 222 additions and 0 deletions
+1
View File
@@ -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)) - 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 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)) - 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 ### Changed
- Detect Shizuku with permission check ([@Small-Ku](https://github.com/Small-Ku)) ([#3565](https://github.com/mihonapp/mihon/pull/3565)) - Detect Shizuku with permission check ([@Small-Ku](https://github.com/Small-Ku)) ([#3565](https://github.com/mihonapp/mihon/pull/3565))
@@ -17,6 +17,7 @@ enum class AppTheme(val titleRes: StringResource?) {
TIDAL_WAVE(MR.strings.theme_tidalwave), TIDAL_WAVE(MR.strings.theme_tidalwave),
YINYANG(MR.strings.theme_yinyang), YINYANG(MR.strings.theme_yinyang),
YOTSUBA(MR.strings.theme_yotsuba), YOTSUBA(MR.strings.theme_yotsuba),
TOKYONIGHT(MR.strings.theme_tokyonight),
MONOCHROME(MR.strings.theme_monochrome), MONOCHROME(MR.strings.theme_monochrome),
// Deprecated // Deprecated
@@ -22,6 +22,7 @@ import eu.kanade.presentation.theme.colorscheme.TachiyomiColorScheme
import eu.kanade.presentation.theme.colorscheme.TakoColorScheme import eu.kanade.presentation.theme.colorscheme.TakoColorScheme
import eu.kanade.presentation.theme.colorscheme.TealTurqoiseColorScheme import eu.kanade.presentation.theme.colorscheme.TealTurqoiseColorScheme
import eu.kanade.presentation.theme.colorscheme.TidalWaveColorScheme 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.YinYangColorScheme
import eu.kanade.presentation.theme.colorscheme.YotsubaColorScheme import eu.kanade.presentation.theme.colorscheme.YotsubaColorScheme
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
@@ -90,6 +91,7 @@ private fun getThemeColorScheme(
private val colorSchemes: Map<AppTheme, BaseColorScheme> = mapOf( private val colorSchemes: Map<AppTheme, BaseColorScheme> = mapOf(
AppTheme.DEFAULT to TachiyomiColorScheme, AppTheme.DEFAULT to TachiyomiColorScheme,
AppTheme.CATPPUCCIN to CatppuccinColorScheme, AppTheme.CATPPUCCIN to CatppuccinColorScheme,
AppTheme.TOKYONIGHT to TokyoNightColorScheme,
AppTheme.GREEN_APPLE to GreenAppleColorScheme, AppTheme.GREEN_APPLE to GreenAppleColorScheme,
AppTheme.LAVENDER to LavenderColorScheme, AppTheme.LAVENDER to LavenderColorScheme,
AppTheme.MIDNIGHT_DUSK to MidnightDuskColorScheme, AppTheme.MIDNIGHT_DUSK to MidnightDuskColorScheme,
@@ -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),
)
}
@@ -31,6 +31,7 @@ class ThemingDelegateImpl : ThemingDelegate {
private val themeResources: Map<AppTheme, Int> = mapOf( private val themeResources: Map<AppTheme, Int> = mapOf(
AppTheme.MONET to R.style.Theme_Tachiyomi_Monet, AppTheme.MONET to R.style.Theme_Tachiyomi_Monet,
AppTheme.CATPPUCCIN to R.style.Theme_Tachiyomi_Catppuccin, 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.GREEN_APPLE to R.style.Theme_Tachiyomi_GreenApple,
AppTheme.LAVENDER to R.style.Theme_Tachiyomi_Lavender, AppTheme.LAVENDER to R.style.Theme_Tachiyomi_Lavender,
AppTheme.MIDNIGHT_DUSK to R.style.Theme_Tachiyomi_MidnightDusk, AppTheme.MIDNIGHT_DUSK to R.style.Theme_Tachiyomi_MidnightDusk,
+41
View File
@@ -130,6 +130,47 @@
<item name="colorSurfaceContainerLow">@color/catppuccin_surfaceContainerLow</item> <item name="colorSurfaceContainerLow">@color/catppuccin_surfaceContainerLow</item>
<item name="colorSurfaceContainerLowest">@color/catppuccin_surfaceContainerLowest</item> <item name="colorSurfaceContainerLowest">@color/catppuccin_surfaceContainerLowest</item>
</style> </style>
<!--== Tokyo Night Theme ==-->
<style name="Theme.Tachiyomi.TokyoNight">
<!-- Theme Colors -->
<item name="colorPrimary">@color/tokyonight_primary</item>
<item name="colorOnPrimary">@color/tokyonight_onPrimary</item>
<item name="colorPrimaryContainer">@color/tokyonight_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/tokyonight_onPrimaryContainer</item>
<item name="colorPrimaryInverse">@color/tokyonight_inversePrimary</item>
<item name="colorSecondary">@color/tokyonight_secondary</item>
<item name="colorOnSecondary">@color/tokyonight_onSecondary</item>
<item name="colorSecondaryContainer">@color/tokyonight_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/tokyonight_onSecondaryContainer</item>
<item name="colorTertiary">@color/tokyonight_tertiary</item>
<item name="colorOnTertiary">@color/tokyonight_onTertiary</item>
<item name="colorTertiaryContainer">@color/tokyonight_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/tokyonight_onTertiaryContainer</item>
<item name="android:colorBackground">@color/tokyonight_background</item>
<item name="colorOnBackground">@color/tokyonight_onBackground</item>
<item name="colorSurface">@color/tokyonight_surface</item>
<item name="colorOnSurface">@color/tokyonight_onSurface</item>
<item name="colorSurfaceVariant">@color/tokyonight_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/tokyonight_onSurfaceVariant</item>
<item name="colorSurfaceInverse">@color/tokyonight_inverseSurface</item>
<item name="colorOnSurfaceInverse">@color/tokyonight_inverseOnSurface</item>
<item name="colorError">@color/tokyonight_error</item>
<item name="colorOnError">@color/tokyonight_onError</item>
<item name="colorErrorContainer">@color/tokyonight_errorContainer</item>
<item name="colorOnErrorContainer">@color/tokyonight_onErrorContainer</item>
<item name="colorOutline">@color/tokyonight_outline</item>
<item name="colorOutlineVariant">@color/tokyonight_outlineVariant</item>
<item name="scrimBackground">@color/tokyonight_scrim</item>
<item name="colorSurfaceBright">@color/tokyonight_surfaceBright</item>
<item name="colorSurfaceDim">@color/tokyonight_surfaceDim</item>
<item name="colorSurfaceContainer">@color/tokyonight_surfaceContainer</item>
<item name="colorSurfaceContainerHigh">@color/tokyonight_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/tokyonight_surfaceContainerHighest</item>
<item name="colorSurfaceContainerLow">@color/tokyonight_surfaceContainerLow</item>
<item name="colorSurfaceContainerLowest">@color/tokyonight_surfaceContainerLowest</item>
</style>
<!--== Green Apple Theme ==--> <!--== Green Apple Theme ==-->
<style name="Theme.Tachiyomi.GreenApple"> <style name="Theme.Tachiyomi.GreenApple">
<!-- Theme Colors --> <!-- Theme Colors -->
@@ -231,6 +231,7 @@
<string name="theme_dark">Dark</string> <string name="theme_dark">Dark</string>
<string name="theme_monet">Dynamic</string> <string name="theme_monet">Dynamic</string>
<string name="theme_catppuccin">Catppuccin</string> <string name="theme_catppuccin">Catppuccin</string>
<string name="theme_tokyonight">Tokyo Night</string>
<string name="theme_greenapple">Green Apple</string> <string name="theme_greenapple">Green Apple</string>
<string name="theme_lavender">Lavender</string> <string name="theme_lavender">Lavender</string>
<string name="theme_midnightdusk">Midnight Dusk</string> <string name="theme_midnightdusk">Midnight Dusk</string>
@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Colors for Tokyo Night Moon
https://github.com/folke/tokyonight.nvim/blob/main/lua/tokyonight/colors/moon.lua
-->
<resources>
<color name="tokyonight_primary">#82AAFF</color>
<color name="tokyonight_onPrimary">#1B1D2B</color>
<color name="tokyonight_primaryContainer">#444A73</color>
<color name="tokyonight_onPrimaryContainer">#9AB8FF</color>
<color name="tokyonight_secondary">#86E1FC</color>
<color name="tokyonight_onSecondary">#1B1D2B</color>
<color name="tokyonight_secondaryContainer">#444A73</color>
<color name="tokyonight_onSecondaryContainer">#B2EBFF</color>
<color name="tokyonight_tertiary">#C099FF</color>
<color name="tokyonight_onTertiary">#1B1D2B</color>
<color name="tokyonight_tertiaryContainer">#444A73</color>
<color name="tokyonight_onTertiaryContainer">#CAABFF</color>
<color name="tokyonight_error">#FF757F</color>
<color name="tokyonight_onError">#1B1D2B</color>
<color name="tokyonight_errorContainer">#C53B53</color>
<color name="tokyonight_onErrorContainer">#FF8D94</color>
<color name="tokyonight_background">#222436</color>
<color name="tokyonight_onBackground">#C8D3F5</color>
<color name="tokyonight_surface">#222436</color>
<color name="tokyonight_onSurface">#C8D3F5</color>
<color name="tokyonight_surfaceVariant">#444A73</color>
<color name="tokyonight_onSurfaceVariant">#828BB8</color>
<color name="tokyonight_outline">#828BB8</color>
<color name="tokyonight_outlineVariant">#444A73</color>
<color name="tokyonight_scrim">#000000</color>
<color name="tokyonight_inverseSurface">#C8D3F5</color>
<color name="tokyonight_inverseOnSurface">#222436</color>
<color name="tokyonight_inversePrimary">#3D5C9E</color>
<color name="tokyonight_surfaceContainerLowest">#1E202F</color>
<color name="tokyonight_surfaceDim">#222436</color>
<color name="tokyonight_surfaceContainerLow">#292C44</color>
<color name="tokyonight_surfaceContainer">#2D304B</color>
<color name="tokyonight_surfaceContainerHigh">#363B5D</color>
<color name="tokyonight_surfaceContainerHighest">#3F466F</color>
<color name="tokyonight_surfaceBright">#434A77</color>
</resources>
@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Colors for Tokyo Night Day
https://github.com/folke/tokyonight.nvim/blob/main/lua/tokyonight/colors/day.lua
-->
<resources>
<color name="tokyonight_primary">#2e7de9</color>
<color name="tokyonight_onPrimary">#ffffff</color>
<color name="tokyonight_primaryContainer">#92a6d5</color>
<color name="tokyonight_onPrimaryContainer">#15386a</color>
<color name="tokyonight_secondary">#007197</color>
<color name="tokyonight_onSecondary">#ffffff</color>
<color name="tokyonight_secondaryContainer">#a9c6d3</color>
<color name="tokyonight_onSecondaryContainer">#006a83</color>
<color name="tokyonight_tertiary">#9854f1</color>
<color name="tokyonight_onTertiary">#ffffff</color>
<color name="tokyonight_tertiaryContainer">#cfbfea</color>
<color name="tokyonight_onTertiaryContainer">#7847bd</color>
<color name="tokyonight_error">#f52a65</color>
<color name="tokyonight_onError">#ffffff</color>
<color name="tokyonight_errorContainer">#e6b4c7</color>
<color name="tokyonight_onErrorContainer">#6e132d</color>
<color name="tokyonight_background">#e1e2e7</color>
<color name="tokyonight_onBackground">#3760bf</color>
<color name="tokyonight_surface">#e1e2e7</color>
<color name="tokyonight_onSurface">#3760bf</color>
<color name="tokyonight_surfaceVariant">#c4c8da</color>
<color name="tokyonight_onSurfaceVariant">#6172b0</color>
<color name="tokyonight_outline">#68709a</color>
<color name="tokyonight_outlineVariant">#a8aecb</color>
<color name="tokyonight_scrim">#000000</color>
<color name="tokyonight_inverseSurface">#3760bf</color>
<color name="tokyonight_inverseOnSurface">#e1e2e7</color>
<color name="tokyonight_inversePrimary">#7890dd</color>
<color name="tokyonight_surfaceContainerLowest">#e4e5e9</color>
<color name="tokyonight_surfaceDim">#9195b1</color>
<color name="tokyonight_surfaceContainerLow">#d0d5e3</color>
<color name="tokyonight_surfaceContainer">#c1c9df</color>
<color name="tokyonight_surfaceContainerHigh">#c4c8da</color>
<color name="tokyonight_surfaceContainerHighest">#a1a6c5</color>
<color name="tokyonight_surfaceBright">#e1e2e7</color>
</resources>