diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 5db3ca582e..1359315450 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -165,7 +165,6 @@ dependencies { implementation(compose.ui.util) implementation(compose.accompanist.webview) implementation(compose.accompanist.permissions) - implementation(compose.accompanist.themeadapter) implementation(compose.accompanist.systemuicontroller) lintChecks(compose.lintchecks) 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 7edfb01328..c464ceb3ae 100644 --- a/app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt +++ b/app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt @@ -1,54 +1,62 @@ package eu.kanade.presentation.theme -import androidx.appcompat.view.ContextThemeWrapper +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material3.ColorScheme import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember +import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalLayoutDirection -import com.google.accompanist.themeadapter.material3.createMdc3Theme +import eu.kanade.domain.ui.UiPreferences import eu.kanade.domain.ui.model.AppTheme -import eu.kanade.tachiyomi.ui.base.delegate.ThemingDelegate - -@Composable -fun TachiyomiTheme(content: @Composable () -> Unit) { - val context = LocalContext.current - val layoutDirection = LocalLayoutDirection.current - - val (colorScheme, typography) = createMdc3Theme( - context = context, - layoutDirection = layoutDirection, - ) - - MaterialTheme( - colorScheme = colorScheme!!, - typography = typography!!, - content = content, - ) -} +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.StrawberryColorScheme +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.YinYangColorScheme +import eu.kanade.presentation.theme.colorscheme.YotsubaColorScheme +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get @Composable fun TachiyomiTheme( - appTheme: AppTheme, - amoled: Boolean, + appTheme: AppTheme? = null, + amoled: Boolean? = null, content: @Composable () -> Unit, ) { - val originalContext = LocalContext.current - val layoutDirection = LocalLayoutDirection.current - val themedContext = remember(appTheme, originalContext) { - val themeResIds = ThemingDelegate.getThemeResIds(appTheme, amoled) - themeResIds.fold(originalContext) { context, themeResId -> - ContextThemeWrapper(context, themeResId) - } - } - val (colorScheme, typography) = createMdc3Theme( - context = themedContext, - layoutDirection = layoutDirection, - ) - MaterialTheme( - colorScheme = colorScheme!!, - typography = typography!!, + colorScheme = getThemeColorScheme(appTheme, amoled), content = content, ) } + +@Composable +@ReadOnlyComposable +private fun getThemeColorScheme( + appTheme: AppTheme?, + amoled: Boolean?, +): ColorScheme { + val uiPreferences = Injekt.get() + val colorScheme = when (appTheme ?: uiPreferences.appTheme().get()) { + AppTheme.DEFAULT -> TachiyomiColorScheme + AppTheme.MONET -> MonetColorScheme(LocalContext.current) + AppTheme.GREEN_APPLE -> GreenAppleColorScheme + AppTheme.LAVENDER -> LavenderColorScheme + AppTheme.MIDNIGHT_DUSK -> MidnightDuskColorScheme + AppTheme.STRAWBERRY_DAIQUIRI -> StrawberryColorScheme + AppTheme.TAKO -> TakoColorScheme + AppTheme.TEALTURQUOISE -> TealTurqoiseColorScheme + AppTheme.TIDAL_WAVE -> TidalWaveColorScheme + AppTheme.YINYANG -> YinYangColorScheme + AppTheme.YOTSUBA -> YotsubaColorScheme + else -> TachiyomiColorScheme + } + return colorScheme.getColorScheme( + isSystemInDarkTheme(), + amoled ?: uiPreferences.themeDarkAmoled().get(), + ) +} diff --git a/app/src/main/java/eu/kanade/presentation/theme/colorscheme/BaseColorScheme.kt b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/BaseColorScheme.kt new file mode 100644 index 0000000000..605d5e5a5b --- /dev/null +++ b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/BaseColorScheme.kt @@ -0,0 +1,26 @@ +package eu.kanade.presentation.theme.colorscheme + +import androidx.compose.material3.ColorScheme +import androidx.compose.ui.graphics.Color + +internal abstract class BaseColorScheme { + + abstract val darkScheme: ColorScheme + abstract val lightScheme: ColorScheme + + fun getColorScheme(isDark: Boolean, isAmoled: Boolean): ColorScheme { + return (if (isDark) darkScheme else lightScheme) + .let { + if (isDark && isAmoled) { + it.copy( + background = Color.Black, + onBackground = Color.White, + surface = Color.Black, + onSurface = Color.White, + ) + } else { + it + } + } + } +} diff --git a/app/src/main/java/eu/kanade/presentation/theme/colorscheme/GreenAppleColorScheme.kt b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/GreenAppleColorScheme.kt new file mode 100644 index 0000000000..354faed5f2 --- /dev/null +++ b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/GreenAppleColorScheme.kt @@ -0,0 +1,71 @@ +package eu.kanade.presentation.theme.colorscheme + +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.ui.graphics.Color + +/** + * Colors for Green Apple theme + * Original color scheme by CarlosEsco, Jays2Kings and CrepeTF + * M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web) + * + * Key colors: + * Primary #188140 + * Secondary #188140 + * Tertiary #D33131 + * Neutral #5D5F5B + */ +internal object GreenAppleColorScheme : BaseColorScheme() { + + override val darkScheme = darkColorScheme( + primary = Color(0xFF7ADB8F), + onPrimary = Color(0xFF003915), + primaryContainer = Color(0xFF005322), + onPrimaryContainer = Color(0xFF96F8A9), + inversePrimary = Color(0xFF006D2F), + secondary = Color(0xFF7ADB8F), + onSecondary = Color(0xFF003915), + secondaryContainer = Color(0xFF005322), + onSecondaryContainer = Color(0xFF96F8A9), + tertiary = Color(0xFFFFB3AA), + onTertiary = Color(0xFF680006), + tertiaryContainer = Color(0xFF93000D), + onTertiaryContainer = Color(0xFFFFDAD5), + background = Color(0xFF1A1C19), + onBackground = Color(0xFFE1E3DD), + surface = Color(0xFF1A1C19), + onSurface = Color(0xFFE1E3DD), + surfaceVariant = Color(0xFF414941), + onSurfaceVariant = Color(0xFFC1C8BE), + surfaceTint = Color(0xFF7ADB8F), + inverseSurface = Color(0xFFE1E3DD), + inverseOnSurface = Color(0xFF1A1C19), + outline = Color(0xFF8B9389), + ) + + override val lightScheme = lightColorScheme( + primary = Color(0xFF006D2F), + onPrimary = Color(0xFFFFFFFF), + primaryContainer = Color(0xFF96F8A9), + onPrimaryContainer = Color(0xFF002109), + inversePrimary = Color(0xFF7ADB8F), + secondary = Color(0xFF006D2F), + onSecondary = Color(0xFFFFFFFF), + secondaryContainer = Color(0xFF96F8A9), + onSecondaryContainer = Color(0xFF002109), + tertiary = Color(0xFFB91D22), + onTertiary = Color(0xFFFFFFFF), + tertiaryContainer = Color(0xFFFFDAD5), + onTertiaryContainer = Color(0xFF410003), + background = Color(0xFFFBFDF7), + onBackground = Color(0xFF1A1C19), + surface = Color(0xFFFBFDF7), + onSurface = Color(0xFF1A1C19), + surfaceVariant = Color(0xFFDDE5DA), + onSurfaceVariant = Color(0xFF414941), + surfaceTint = Color(0xFF006D2F), + inverseSurface = Color(0xFF2F312E), + inverseOnSurface = Color(0xFFF0F2EC), + outline = Color(0xFF717970), + ) +} diff --git a/app/src/main/java/eu/kanade/presentation/theme/colorscheme/LavenderColorScheme.kt b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/LavenderColorScheme.kt new file mode 100644 index 0000000000..70a9bd196f --- /dev/null +++ b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/LavenderColorScheme.kt @@ -0,0 +1,70 @@ +package eu.kanade.presentation.theme.colorscheme + +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.ui.graphics.Color + +/** + * Colors for Lavender theme + * Color scheme by Osyx + * + * Key colors: + * Primary #A177FF + * Secondary #A177FF + * Tertiary #5E25E1 + * Neutral #111129 + */ +internal object LavenderColorScheme : BaseColorScheme() { + + override val darkScheme = darkColorScheme( + primary = Color(0xFFA177FF), + onPrimary = Color(0xFF111129), + primaryContainer = Color(0xFFA177FF), + onPrimaryContainer = Color(0xFF111129), + inversePrimary = Color(0xFF006D2F), + secondary = Color(0xFFA177FF), + onSecondary = Color(0xFF111129), + secondaryContainer = Color(0xFFA177FF), + onSecondaryContainer = Color(0xFF111129), + tertiary = Color(0xFF5E25E1), + onTertiary = Color(0xFFE8E8E8), + tertiaryContainer = Color(0xFF111129), + onTertiaryContainer = Color(0xFFDEE8FF), + background = Color(0xFF111129), + onBackground = Color(0xFFDEE8FF), + surface = Color(0xFF111129), + onSurface = Color(0xFFDEE8FF), + surfaceVariant = Color(0x2CB6B6B6), + onSurfaceVariant = Color(0xFFE8E8E8), + surfaceTint = Color(0xFFA177FF), + inverseSurface = Color(0xFF221247), + inverseOnSurface = Color(0xFFDEE8FF), + outline = Color(0xA8905FFF), + ) + + override val lightScheme = lightColorScheme( + primary = Color(0xFF7B46AF), + onPrimary = Color(0xFFEDE2FF), + primaryContainer = Color(0xFF7B46AF), + onPrimaryContainer = Color(0xFFEDE2FF), + inversePrimary = Color(0xFFD6BAFF), + secondary = Color(0xFF7B46AF), + onSecondary = Color(0xFFEDE2FF), + secondaryContainer = Color(0xFF7B46AF), + onSecondaryContainer = Color(0xFFEDE2FF), + tertiary = Color(0xFFEDE2FF), + onTertiary = Color(0xFF7B46AF), + tertiaryContainer = Color(0xFFEDE2FF), + onTertiaryContainer = Color(0xFF7B46AF), + background = Color(0xFFEDE2FF), + onBackground = Color(0xFF1B1B22), + surface = Color(0xFFEDE2FF), + onSurface = Color(0xFF1B1B22), + surfaceVariant = Color(0xFFB9B0CC), + onSurfaceVariant = Color(0xD849454E), + surfaceTint = Color(0xFF7B46AF), + inverseSurface = Color(0xFF313033), + inverseOnSurface = Color(0xFFF3EFF4), + outline = Color(0xFF7B46AF), + ) +} diff --git a/app/src/main/java/eu/kanade/presentation/theme/colorscheme/MidnightDuskColorScheme.kt b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/MidnightDuskColorScheme.kt new file mode 100644 index 0000000000..7feaae333a --- /dev/null +++ b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/MidnightDuskColorScheme.kt @@ -0,0 +1,71 @@ +package eu.kanade.presentation.theme.colorscheme + +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.ui.graphics.Color + +/** + * Colors for Midnight Dusk theme + * Original color scheme by CrepeTF + * M3 color scheme generated by Material Theme Builder (https://goo.gle/material-theme-builder-web) + * + * Key colors: + * Primary #F02475 + * Secondary #F02475 + * Tertiary #7A5733 + * Neutral #16151D + */ +internal object MidnightDuskColorScheme : BaseColorScheme() { + + override val darkScheme = darkColorScheme( + primary = Color(0xFFF02475), + onPrimary = Color(0xFFFFFFFF), + primaryContainer = Color(0xFFBD1C5C), + onPrimaryContainer = Color(0xFFFFFFFF), + inversePrimary = Color(0xFFF02475), + secondary = Color(0xFFF02475), + onSecondary = Color(0xFFFFFFFF), + secondaryContainer = Color(0xFFF02475), + onSecondaryContainer = Color(0xFFFFFFFF), + tertiary = Color(0xFF55971C), + onTertiary = Color(0xFFFFFFFF), + tertiaryContainer = Color(0xFF386412), + onTertiaryContainer = Color(0xFFE5E1E5), + background = Color(0xFF16151D), + onBackground = Color(0xFFE5E1E5), + surface = Color(0xFF16151D), + onSurface = Color(0xFFE5E1E5), + surfaceVariant = Color(0xFF524346), + onSurfaceVariant = Color(0xFFD6C1C4), + surfaceTint = Color(0xFFF02475), + inverseSurface = Color(0xFF333043), + inverseOnSurface = Color(0xFFFFFFFF), + outline = Color(0xFF9F8C8F), + ) + + override val lightScheme = lightColorScheme( + primary = Color(0xFFBB0054), + onPrimary = Color(0xFFFFFFFF), + primaryContainer = Color(0xFFFFD9E1), + onPrimaryContainer = Color(0xFF3F0017), + inversePrimary = Color(0xFFFFB1C4), + secondary = Color(0xFFBB0054), + onSecondary = Color(0xFFFFFFFF), + secondaryContainer = Color(0xFFFFD9E1), + onSecondaryContainer = Color(0xFF3F0017), + tertiary = Color(0xFF006638), + onTertiary = Color(0xFFFFFFFF), + tertiaryContainer = Color(0xFF00894b), + onTertiaryContainer = Color(0xFF2D1600), + background = Color(0xFFFFFBFF), + onBackground = Color(0xFF1C1B1F), + surface = Color(0xFFFFFBFF), + onSurface = Color(0xFF1C1B1F), + surfaceVariant = Color(0xFFF3DDE0), + onSurfaceVariant = Color(0xFF524346), + surfaceTint = Color(0xFFBB0054), + inverseSurface = Color(0xFF313033), + inverseOnSurface = Color(0xFFF4F0F4), + outline = Color(0xFF847376), + ) +} diff --git a/app/src/main/java/eu/kanade/presentation/theme/colorscheme/MonetColorScheme.kt b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/MonetColorScheme.kt new file mode 100644 index 0000000000..adcbaf62fa --- /dev/null +++ b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/MonetColorScheme.kt @@ -0,0 +1,125 @@ +package eu.kanade.presentation.theme.colorscheme + +import android.annotation.SuppressLint +import android.app.UiModeManager +import android.app.WallpaperManager +import android.content.Context +import android.graphics.Bitmap +import android.os.Build +import androidx.annotation.RequiresApi +import androidx.compose.material3.ColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.ui.graphics.Color +import androidx.core.content.getSystemService +import com.google.android.material.color.utilities.Hct +import com.google.android.material.color.utilities.MaterialDynamicColors +import com.google.android.material.color.utilities.QuantizerCelebi +import com.google.android.material.color.utilities.SchemeContent +import com.google.android.material.color.utilities.Score + +internal class MonetColorScheme(context: Context) : BaseColorScheme() { + + private val monet = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + MonetSystemColorScheme(context) + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { + val seed = WallpaperManager.getInstance(context) + .getWallpaperColors(WallpaperManager.FLAG_SYSTEM) + ?.primaryColor + ?.toArgb() + if (seed != null) { + MonetCompatColorScheme(context, seed) + } else { + TachiyomiColorScheme + } + } else { + TachiyomiColorScheme + } + + override val darkScheme + get() = monet.darkScheme + + override val lightScheme + get() = monet.lightScheme + + companion object { + @Suppress("Unused") + @SuppressLint("RestrictedApi") + fun extractSeedColorFromImage(bitmap: Bitmap): Int? { + val width = bitmap.width + val height = bitmap.height + val bitmapPixels = IntArray(width * height) + bitmap.getPixels(bitmapPixels, 0, width, 0, 0, width, height) + return Score.score(QuantizerCelebi.quantize(bitmapPixels, 128), 1, 0)[0] + .takeIf { it != 0 } // Don't take fallback color + } + } +} + +@RequiresApi(Build.VERSION_CODES.S) +private class MonetSystemColorScheme(context: Context) : BaseColorScheme() { + override val lightScheme = dynamicLightColorScheme(context) + override val darkScheme = dynamicDarkColorScheme(context) +} + +private class MonetCompatColorScheme(context: Context, seed: Int) : BaseColorScheme() { + + override val lightScheme = generateColorSchemeFromSeed(context = context, seed = seed, dark = false) + override val darkScheme = generateColorSchemeFromSeed(context = context, seed = seed, dark = true) + + companion object { + private fun Int.toComposeColor(): Color = Color(this) + + @SuppressLint("PrivateResource", "RestrictedApi") + private fun generateColorSchemeFromSeed(context: Context, seed: Int, dark: Boolean): ColorScheme { + val scheme = SchemeContent( + Hct.fromInt(seed), + dark, + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + context.getSystemService()?.contrast?.toDouble() ?: 0.0 + } else { + 0.0 + }, + ) + val dynamicColors = MaterialDynamicColors() + return ColorScheme( + primary = dynamicColors.primary().getArgb(scheme).toComposeColor(), + onPrimary = dynamicColors.onPrimary().getArgb(scheme).toComposeColor(), + primaryContainer = dynamicColors.primaryContainer().getArgb(scheme).toComposeColor(), + onPrimaryContainer = dynamicColors.onPrimaryContainer().getArgb(scheme).toComposeColor(), + inversePrimary = dynamicColors.inversePrimary().getArgb(scheme).toComposeColor(), + secondary = dynamicColors.secondary().getArgb(scheme).toComposeColor(), + onSecondary = dynamicColors.onSecondary().getArgb(scheme).toComposeColor(), + secondaryContainer = dynamicColors.secondaryContainer().getArgb(scheme).toComposeColor(), + onSecondaryContainer = dynamicColors.onSecondaryContainer().getArgb(scheme).toComposeColor(), + tertiary = dynamicColors.tertiary().getArgb(scheme).toComposeColor(), + onTertiary = dynamicColors.onTertiary().getArgb(scheme).toComposeColor(), + tertiaryContainer = dynamicColors.tertiary().getArgb(scheme).toComposeColor(), + onTertiaryContainer = dynamicColors.onTertiaryContainer().getArgb(scheme).toComposeColor(), + background = dynamicColors.background().getArgb(scheme).toComposeColor(), + onBackground = dynamicColors.onBackground().getArgb(scheme).toComposeColor(), + surface = dynamicColors.surface().getArgb(scheme).toComposeColor(), + onSurface = dynamicColors.onSurface().getArgb(scheme).toComposeColor(), + surfaceVariant = dynamicColors.surfaceVariant().getArgb(scheme).toComposeColor(), + onSurfaceVariant = dynamicColors.onSurfaceVariant().getArgb(scheme).toComposeColor(), + surfaceTint = dynamicColors.surfaceTint().getArgb(scheme).toComposeColor(), + inverseSurface = dynamicColors.inverseSurface().getArgb(scheme).toComposeColor(), + inverseOnSurface = dynamicColors.inverseOnSurface().getArgb(scheme).toComposeColor(), + error = dynamicColors.error().getArgb(scheme).toComposeColor(), + onError = dynamicColors.onError().getArgb(scheme).toComposeColor(), + errorContainer = dynamicColors.errorContainer().getArgb(scheme).toComposeColor(), + onErrorContainer = dynamicColors.onErrorContainer().getArgb(scheme).toComposeColor(), + outline = dynamicColors.outline().getArgb(scheme).toComposeColor(), + outlineVariant = dynamicColors.outlineVariant().getArgb(scheme).toComposeColor(), + scrim = Color.Black, + surfaceBright = dynamicColors.surfaceBright().getArgb(scheme).toComposeColor(), + surfaceDim = dynamicColors.surfaceDim().getArgb(scheme).toComposeColor(), + surfaceContainer = dynamicColors.surfaceContainer().getArgb(scheme).toComposeColor(), + surfaceContainerHigh = dynamicColors.surfaceContainerHigh().getArgb(scheme).toComposeColor(), + surfaceContainerHighest = dynamicColors.surfaceContainerHighest().getArgb(scheme).toComposeColor(), + surfaceContainerLow = dynamicColors.surfaceContainerLow().getArgb(scheme).toComposeColor(), + surfaceContainerLowest = dynamicColors.surfaceContainerLowest().getArgb(scheme).toComposeColor(), + ) + } + } +} diff --git a/app/src/main/java/eu/kanade/presentation/theme/colorscheme/StrawberryColorScheme.kt b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/StrawberryColorScheme.kt new file mode 100644 index 0000000000..98417e3364 --- /dev/null +++ b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/StrawberryColorScheme.kt @@ -0,0 +1,71 @@ +package eu.kanade.presentation.theme.colorscheme + +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.ui.graphics.Color + +/** + * Colors for Strawberry Daiquiri theme + * Original color scheme by Soitora + * M3 color scheme generated by Material Theme Builder (https://goo.gle/material-theme-builder-web) + * + * Key colors: + * Primary #ED4A65 + * Secondary #ED4A65 + * Tertiary #775930 + * Neutral #655C5C + */ +internal object StrawberryColorScheme : BaseColorScheme() { + + override val darkScheme = darkColorScheme( + primary = Color(0xFFFFB2B9), + onPrimary = Color(0xFF67001B), + primaryContainer = Color(0xFF91002A), + onPrimaryContainer = Color(0xFFFFDADD), + inversePrimary = Color(0xFFB61E40), + secondary = Color(0xFFFFB2B9), + onSecondary = Color(0xFF67001B), + secondaryContainer = Color(0xFF91002A), + onSecondaryContainer = Color(0xFFFFDADD), + tertiary = Color(0xFFE8C08E), + onTertiary = Color(0xFF432C06), + tertiaryContainer = Color(0xFF5D421B), + onTertiaryContainer = Color(0xFFFFDDB1), + background = Color(0xFF201A1A), + onBackground = Color(0xFFECDFDF), + surface = Color(0xFF201A1A), + onSurface = Color(0xFFECDFDF), + surfaceVariant = Color(0xFF534344), + onSurfaceVariant = Color(0xFFD7C1C2), + surfaceTint = Color(0xFFFFB2B9), + inverseSurface = Color(0xFFECDFDF), + inverseOnSurface = Color(0xFF201A1A), + outline = Color(0xFFA08C8D), + ) + + override val lightScheme = lightColorScheme( + primary = Color(0xFFB61E40), + onPrimary = Color(0xFFFFFFFF), + primaryContainer = Color(0xFFFFDADD), + onPrimaryContainer = Color(0xFF40000D), + inversePrimary = Color(0xFFFFB2B9), + secondary = Color(0xFFB61E40), + onSecondary = Color(0xFFFFFFFF), + secondaryContainer = Color(0xFFFFDADD), + onSecondaryContainer = Color(0xFF40000D), + tertiary = Color(0xFF775930), + onTertiary = Color(0xFFFFFFFF), + tertiaryContainer = Color(0xFFFFDDB1), + onTertiaryContainer = Color(0xFF2A1800), + background = Color(0xFFFCFCFC), + onBackground = Color(0xFF201A1A), + surface = Color(0xFFFCFCFC), + onSurface = Color(0xFF201A1A), + surfaceVariant = Color(0xFFF4DDDD), + onSurfaceVariant = Color(0xFF534344), + surfaceTint = Color(0xFFB61E40), + inverseSurface = Color(0xFF362F2F), + inverseOnSurface = Color(0xFFFBEDED), + outline = Color(0xFF857374), + ) +} diff --git a/app/src/main/java/eu/kanade/presentation/theme/colorscheme/TachiyomiColorScheme.kt b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/TachiyomiColorScheme.kt new file mode 100644 index 0000000000..974d5f22d3 --- /dev/null +++ b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/TachiyomiColorScheme.kt @@ -0,0 +1,80 @@ +package eu.kanade.presentation.theme.colorscheme + +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.ui.graphics.Color + +/** + * Colors for Default theme + * M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web) + * + * Key colors: + * Primary #2979FF + * Secondary #2979FF + * Tertiary #47A84A + * Neutral #919094 + */ +internal object TachiyomiColorScheme : BaseColorScheme() { + + override val darkScheme = darkColorScheme( + primary = Color(0xFFB0C6FF), + onPrimary = Color(0xFF002D6E), + primaryContainer = Color(0xFF00429B), + onPrimaryContainer = Color(0xFFD9E2FF), + inversePrimary = Color(0xFF0058CA), + secondary = Color(0xFFB0C6FF), + onSecondary = Color(0xFF002D6E), + secondaryContainer = Color(0xFF00429B), + onSecondaryContainer = Color(0xFFD9E2FF), + tertiary = Color(0xFF7ADC77), + onTertiary = Color(0xFF003909), + tertiaryContainer = Color(0xFF005312), + onTertiaryContainer = Color(0xFF95F990), + background = Color(0xFF1B1B1F), + onBackground = Color(0xFFE3E2E6), + surface = Color(0xFF1B1B1F), + onSurface = Color(0xFFE3E2E6), + surfaceVariant = Color(0xFF44464F), + onSurfaceVariant = Color(0xFFC5C6D0), + surfaceTint = Color(0xFFB0C6FF), + inverseSurface = Color(0xFFE3E2E6), + inverseOnSurface = Color(0xFF1B1B1F), + error = Color(0xFFFFB4AB), + onError = Color(0xFF690005), + errorContainer = Color(0xFF93000A), + onErrorContainer = Color(0xFFFFDAD6), + outline = Color(0xFF8F9099), + outlineVariant = Color(0xFF44464F), + ) + + override val lightScheme = lightColorScheme( + primary = Color(0xFF0058CA), + onPrimary = Color(0xFFFFFFFF), + primaryContainer = Color(0xFFD9E2FF), + onPrimaryContainer = Color(0xFF001945), + inversePrimary = Color(0xFFB0C6FF), + secondary = Color(0xFF0058CA), + onSecondary = Color(0xFFFFFFFF), + secondaryContainer = Color(0xFFD9E2FF), + onSecondaryContainer = Color(0xFF001945), + tertiary = Color(0xFF006E1B), + onTertiary = Color(0xFFFFFFFF), + tertiaryContainer = Color(0xFF95F990), + onTertiaryContainer = Color(0xFF002203), + background = Color(0xFFFEFBFF), + onBackground = Color(0xFF1B1B1F), + surface = Color(0xFFFEFBFF), + onSurface = Color(0xFF1B1B1F), + surfaceVariant = Color(0xFFE1E2EC), + onSurfaceVariant = Color(0xFF44464F), + surfaceTint = Color(0xFF0058CA), + inverseSurface = Color(0xFF303034), + inverseOnSurface = Color(0xFFF2F0F4), + error = Color(0xFFBA1A1A), + onError = Color(0xFFFFFFFF), + errorContainer = Color(0xFFFFDAD6), + onErrorContainer = Color(0xFF410002), + outline = Color(0xFF757780), + outlineVariant = Color(0xFFC5C6D0), + ) +} diff --git a/app/src/main/java/eu/kanade/presentation/theme/colorscheme/TakoColorScheme.kt b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/TakoColorScheme.kt new file mode 100644 index 0000000000..244e769d4c --- /dev/null +++ b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/TakoColorScheme.kt @@ -0,0 +1,71 @@ +package eu.kanade.presentation.theme.colorscheme + +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.ui.graphics.Color + +/** + * Colors for Tako theme + * Original color scheme by ghostbear + * M3 color scheme generated by Material Theme Builder (https://goo.gle/material-theme-builder-web) + * + * Key colors: + * Primary #F3B375 + * Secondary #F3B375 + * Tertiary #66577E + * Neutral #21212E + */ +internal object TakoColorScheme : BaseColorScheme() { + + override val darkScheme = darkColorScheme( + primary = Color(0xFFF3B375), + onPrimary = Color(0xFF38294E), + primaryContainer = Color(0xFFF3B375), + onPrimaryContainer = Color(0xFF38294E), + inversePrimary = Color(0xFF84531E), + secondary = Color(0xFFF3B375), + onSecondary = Color(0xFF38294E), + secondaryContainer = Color(0xFFF3B375), + onSecondaryContainer = Color(0xFF38294E), + tertiary = Color(0xFF66577E), + onTertiary = Color(0xFFF3B375), + tertiaryContainer = Color(0xFF4E4065), + onTertiaryContainer = Color(0xFFEDDCFF), + background = Color(0xFF21212E), + onBackground = Color(0xFFE3E0F2), + surface = Color(0xFF21212E), + onSurface = Color(0xFFE3E0F2), + surfaceVariant = Color(0xFF49454E), + onSurfaceVariant = Color(0xFFCBC4CE), + surfaceTint = Color(0xFF66577E), + inverseSurface = Color(0xFFE5E1E6), + inverseOnSurface = Color(0xFF1B1B1E), + outline = Color(0xFF958F99), + ) + + override val lightScheme = lightColorScheme( + primary = Color(0xFF66577E), + onPrimary = Color(0xFFF3B375), + primaryContainer = Color(0xFF66577E), + onPrimaryContainer = Color(0xFFF3B375), + inversePrimary = Color(0xFFD6BAFF), + secondary = Color(0xFF66577E), + onSecondary = Color(0xFFF3B375), + secondaryContainer = Color(0xFF66577E), + onSecondaryContainer = Color(0xFFF3B375), + tertiary = Color(0xFFF3B375), + onTertiary = Color(0xFF574360), + tertiaryContainer = Color(0xFFFDD6B0), + onTertiaryContainer = Color(0xFF221437), + background = Color(0xFFF7F5FF), + onBackground = Color(0xFF1B1B22), + surface = Color(0xFFF7F5FF), + onSurface = Color(0xFF1B1B22), + surfaceVariant = Color(0xFFE8E0EB), + onSurfaceVariant = Color(0xFF49454E), + surfaceTint = Color(0xFF66577E), + inverseSurface = Color(0xFF313033), + inverseOnSurface = Color(0xFFF3EFF4), + outline = Color(0xFF7A757E), + ) +} diff --git a/app/src/main/java/eu/kanade/presentation/theme/colorscheme/TealTurqoiseColorScheme.kt b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/TealTurqoiseColorScheme.kt new file mode 100644 index 0000000000..e914b49fcb --- /dev/null +++ b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/TealTurqoiseColorScheme.kt @@ -0,0 +1,63 @@ +package eu.kanade.presentation.theme.colorscheme + +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.ui.graphics.Color + +/** + * Colors for Teal Turqoise theme + */ +internal object TealTurqoiseColorScheme : BaseColorScheme() { + + override val darkScheme = darkColorScheme( + primary = Color(0xFF40E0D0), + onPrimary = Color(0xFF000000), + primaryContainer = Color(0xFF40E0D0), + onPrimaryContainer = Color(0xFF000000), + inversePrimary = Color(0xFF008080), + secondary = Color(0xFF40E0D0), + onSecondary = Color(0xFF000000), + secondaryContainer = Color(0xFF18544E), + onSecondaryContainer = Color(0xFF40E0D0), + tertiary = Color(0xFFBF1F2F), + onTertiary = Color(0xFFFFFFFF), + tertiaryContainer = Color(0xFF200508), + onTertiaryContainer = Color(0xFFBF1F2F), + background = Color(0xFF202125), + onBackground = Color(0xFFDFDEDA), + surface = Color(0xFF202125), + onSurface = Color(0xFFDFDEDA), + surfaceVariant = Color(0xFF3F4947), + onSurfaceVariant = Color(0xFFDFDEDA), + surfaceTint = Color(0xFF40E0D0), + inverseSurface = Color(0xFFDFDEDA), + inverseOnSurface = Color(0xFF202125), + outline = Color(0xFF899391), + ) + + override val lightScheme = lightColorScheme( + primary = Color(0xFF008080), + onPrimary = Color(0xFFFFFFFF), + primaryContainer = Color(0xFF008080), + onPrimaryContainer = Color(0xFFFFFFFF), + inversePrimary = Color(0xFF40E0D0), + secondary = Color(0xFF008080), + onSecondary = Color(0xFFFFFFFF), + secondaryContainer = Color(0xFFBFDFDF), + onSecondaryContainer = Color(0xFF008080), + tertiary = Color(0xFFFF7F7F), + onTertiary = Color(0xFF000000), + tertiaryContainer = Color(0xFF2A1616), + onTertiaryContainer = Color(0xFFFF7F7F), + background = Color(0xFFFAFAFA), + onBackground = Color(0xFF050505), + surface = Color(0xFFFAFAFA), + onSurface = Color(0xFF050505), + surfaceVariant = Color(0xFFDAE5E2), + onSurfaceVariant = Color(0xFF050505), + surfaceTint = Color(0xFFBFDFDF), + inverseSurface = Color(0xFF050505), + inverseOnSurface = Color(0xFFFAFAFA), + outline = Color(0xFF6F7977), + ) +} diff --git a/app/src/main/java/eu/kanade/presentation/theme/colorscheme/TidalWaveColorScheme.kt b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/TidalWaveColorScheme.kt new file mode 100644 index 0000000000..c56a1fa57e --- /dev/null +++ b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/TidalWaveColorScheme.kt @@ -0,0 +1,70 @@ +package eu.kanade.presentation.theme.colorscheme + +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.ui.graphics.Color + +/** + * Colors for Tidal Wave theme + * Original color scheme by NahutabDevelop + * + * Key colors: + * Primary #004152 + * Secondary #5ed4fc + * Tertiary #92f7bc + * Neutral #16151D + */ +internal object TidalWaveColorScheme : BaseColorScheme() { + + override val darkScheme = darkColorScheme( + primary = Color(0xFF5ed4fc), + onPrimary = Color(0xFF003544), + primaryContainer = Color(0xFF004d61), + onPrimaryContainer = Color(0xFFb8eaff), + inversePrimary = Color(0xFFa12b03), + secondary = Color(0xFF5ed4fc), + onSecondary = Color(0xFF003544), + secondaryContainer = Color(0xFF004d61), + onSecondaryContainer = Color(0xFFb8eaff), + tertiary = Color(0xFF92f7bc), + onTertiary = Color(0xFF001c3b), + tertiaryContainer = Color(0xFFc3fada), + onTertiaryContainer = Color(0xFF78ffd6), + background = Color(0xFF001c3b), + onBackground = Color(0xFFd5e3ff), + surface = Color(0xFF001c3b), + onSurface = Color(0xFFd5e3ff), + surfaceVariant = Color(0xFF40484c), + onSurfaceVariant = Color(0xFFbfc8cc), + surfaceTint = Color(0xFF5ed4fc), + inverseSurface = Color(0xFFffe3c4), + inverseOnSurface = Color(0xFF001c3b), + outline = Color(0xFF8a9296), + ) + + override val lightScheme = lightColorScheme( + primary = Color(0xFF006780), + onPrimary = Color(0xFFffffff), + primaryContainer = Color(0xFFB4D4DF), + onPrimaryContainer = Color(0xFF001f28), + inversePrimary = Color(0xFFff987f), + secondary = Color(0xFF006780), + onSecondary = Color(0xFFffffff), + secondaryContainer = Color(0xFFb8eaff), + onSecondaryContainer = Color(0xFF001f28), + tertiary = Color(0xFF92f7bc), + onTertiary = Color(0xFF001c3b), + tertiaryContainer = Color(0xFFc3fada), + onTertiaryContainer = Color(0xFF78ffd6), + background = Color(0xFFfdfbff), + onBackground = Color(0xFF001c3b), + surface = Color(0xFFfdfbff), + onSurface = Color(0xFF001c3b), + surfaceVariant = Color(0xFFdce4e8), + onSurfaceVariant = Color(0xFF40484c), + surfaceTint = Color(0xFF006780), + inverseSurface = Color(0xFF020400), + inverseOnSurface = Color(0xFFffe3c4), + outline = Color(0xFF70787c), + ) +} diff --git a/app/src/main/java/eu/kanade/presentation/theme/colorscheme/YinYangColorScheme.kt b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/YinYangColorScheme.kt new file mode 100644 index 0000000000..da9dee4241 --- /dev/null +++ b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/YinYangColorScheme.kt @@ -0,0 +1,65 @@ +package eu.kanade.presentation.theme.colorscheme + +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.ui.graphics.Color + +/** + * Colors for Yin & Yang theme + * Original color scheme by Riztard + * M3 colors generated by yours truly + tweaked manually + */ +internal object YinYangColorScheme : BaseColorScheme() { + + override val darkScheme = darkColorScheme( + primary = Color(0xFFFFFFFF), + onPrimary = Color(0xFF5A5A5A), + primaryContainer = Color(0xFFFFFFFF), + onPrimaryContainer = Color(0xFF000000), + inversePrimary = Color(0xFFCECECE), + secondary = Color(0xFFFFFFFF), + onSecondary = Color(0xFF5A5A5A), + secondaryContainer = Color(0xFF717171), + onSecondaryContainer = Color(0xFFE4E4E4), + tertiary = Color(0xFF000000), + onTertiary = Color(0xFFFFFFFF), + tertiaryContainer = Color(0xFF00419E), + onTertiaryContainer = Color(0xFFD8E2FF), + background = Color(0xFF1E1E1E), + onBackground = Color(0xFFE6E6E6), + surface = Color(0xFF1E1E1E), + onSurface = Color(0xFFE6E6E6), + surfaceVariant = Color(0xFF4E4E4E), + onSurfaceVariant = Color(0xFFD1D1D1), + surfaceTint = Color(0xFFFFFFFF), + inverseSurface = Color(0xFFE6E6E6), + inverseOnSurface = Color(0xFF1E1E1E), + outline = Color(0xFF999999), + ) + + override val lightScheme = lightColorScheme( + primary = Color(0xFF000000), + onPrimary = Color(0xFFFFFFFF), + primaryContainer = Color(0xFF000000), + onPrimaryContainer = Color(0xFFFFFFFF), + inversePrimary = Color(0xFFA6A6A6), + secondary = Color(0xFF000000), + onSecondary = Color(0xFFFFFFFF), + secondaryContainer = Color(0xFFDDDDDD), + onSecondaryContainer = Color(0xFF0C0C0C), + tertiary = Color(0xFFFFFFFF), + onTertiary = Color(0xFF000000), + tertiaryContainer = Color(0xFFD8E2FF), + onTertiaryContainer = Color(0xFF001947), + background = Color(0xFFFDFDFD), + onBackground = Color(0xFF222222), + surface = Color(0xFFFDFDFD), + onSurface = Color(0xFF222222), + surfaceVariant = Color(0xFFEDEDED), + onSurfaceVariant = Color(0xFF515151), + surfaceTint = Color(0xFF000000), + inverseSurface = Color(0xFF333333), + inverseOnSurface = Color(0xFFF4F4F4), + outline = Color(0xFF838383), + ) +} diff --git a/app/src/main/java/eu/kanade/presentation/theme/colorscheme/YotsubaColorScheme.kt b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/YotsubaColorScheme.kt new file mode 100644 index 0000000000..fdda6b7dca --- /dev/null +++ b/app/src/main/java/eu/kanade/presentation/theme/colorscheme/YotsubaColorScheme.kt @@ -0,0 +1,71 @@ +package eu.kanade.presentation.theme.colorscheme + +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.ui.graphics.Color + +/** + * Colors for Yotsuba theme + * Original color scheme by ztimms73 + * M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web) + * + * Key colors: + * Primary 0xFFAE3200 + * Secondary 0xFFAE3200 + * Tertiary 0xFF6B5E2F + * Neutral 0xFF655C5A + */ +internal object YotsubaColorScheme : BaseColorScheme() { + + override val darkScheme = darkColorScheme( + primary = Color(0xFFFFB59D), + onPrimary = Color(0xFF5F1600), + primaryContainer = Color(0xFF862200), + onPrimaryContainer = Color(0xFFFFDBCF), + inversePrimary = Color(0xFFAE3200), + secondary = Color(0xFFFFB59D), + onSecondary = Color(0xFF5F1600), + secondaryContainer = Color(0xFF862200), + onSecondaryContainer = Color(0xFFFFDBCF), + tertiary = Color(0xFFD7C68D), + onTertiary = Color(0xFF3A2F05), + tertiaryContainer = Color(0xFF524619), + onTertiaryContainer = Color(0xFFF5E2A7), + background = Color(0xFF211A18), + onBackground = Color(0xFFEDE0DD), + surface = Color(0xFF211A18), + onSurface = Color(0xFFEDE0DD), + surfaceVariant = Color(0xFF53433F), + onSurfaceVariant = Color(0xFFD8C2BC), + surfaceTint = Color(0xFFFFB59D), + inverseSurface = Color(0xFFEDE0DD), + inverseOnSurface = Color(0xFF211A18), + outline = Color(0xFFA08C87), + ) + + override val lightScheme = lightColorScheme( + primary = Color(0xFFAE3200), + onPrimary = Color(0xFFFFFFFF), + primaryContainer = Color(0xFFFFDBCF), + onPrimaryContainer = Color(0xFF3B0A00), + inversePrimary = Color(0xFFFFB59D), + secondary = Color(0xFFAE3200), + onSecondary = Color(0xFFFFFFFF), + secondaryContainer = Color(0xFFFFDBCF), + onSecondaryContainer = Color(0xFF3B0A00), + tertiary = Color(0xFF6B5E2F), + onTertiary = Color(0xFFFFFFFF), + tertiaryContainer = Color(0xFFF5E2A7), + onTertiaryContainer = Color(0xFF231B00), + background = Color(0xFFFCFCFC), + onBackground = Color(0xFF211A18), + surface = Color(0xFFFCFCFC), + onSurface = Color(0xFF211A18), + surfaceVariant = Color(0xFFF5DED8), + onSurfaceVariant = Color(0xFF53433F), + surfaceTint = Color(0xFFAE3200), + inverseSurface = Color(0xFF362F2D), + inverseOnSurface = Color(0xFFFBEEEB), + outline = Color(0xFF85736E), + ) +} diff --git a/gradle/compose.versions.toml b/gradle/compose.versions.toml index 8f47b2db2c..bdafa0fe23 100644 --- a/gradle/compose.versions.toml +++ b/gradle/compose.versions.toml @@ -23,7 +23,6 @@ glance = "androidx.glance:glance-appwidget:1.0.0" accompanist-webview = { module = "com.google.accompanist:accompanist-webview", version.ref = "accompanist" } accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" } -accompanist-themeadapter = { module = "com.google.accompanist:accompanist-themeadapter-material3", version.ref = "accompanist" } accompanist-systemuicontroller = { module = "com.google.accompanist:accompanist-systemuicontroller", version.ref = "accompanist" } lintchecks = { module = "com.slack.lint.compose:compose-lint-checks", version = "1.2.0" } \ No newline at end of file