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
@@ -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
@@ -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<AppTheme, BaseColorScheme> = 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,
@@ -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(
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,
+41
View File
@@ -130,6 +130,47 @@
<item name="colorSurfaceContainerLow">@color/catppuccin_surfaceContainerLow</item>
<item name="colorSurfaceContainerLowest">@color/catppuccin_surfaceContainerLowest</item>
</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 ==-->
<style name="Theme.Tachiyomi.GreenApple">
<!-- Theme Colors -->