From 8cd4e92dc2d20b67254298b46b83f70d6a598d21 Mon Sep 17 00:00:00 2001
From: Acclorite <140836141+Acclorite@users.noreply.github.com>
Date: Thu, 24 Oct 2024 19:24:37 +0300
Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20Add=20new=20Themes:=20Gray=20and?=
=?UTF-8?q?=20Green-Pink?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Gray "Callisto" theme
* Green-Pink "Ganymede" theme
---
.../book_story/presentation/ui/Color.kt | 18 +-
.../book_story/presentation/ui/Theme.kt | 2 +-
.../book_story/presentation/ui/ThemeLogger.kt | 2 +-
.../presentation/ui/theme/GrayTheme.kt | 162 ++++++++++++++++++
.../presentation/ui/theme/Pink2Theme.kt | 162 ++++++++++++++++++
app/src/main/res/values-uk/strings.xml | 2 +
app/src/main/res/values/strings.xml | 2 +
7 files changed, 346 insertions(+), 4 deletions(-)
create mode 100644 app/src/main/java/ua/acclorite/book_story/presentation/ui/theme/GrayTheme.kt
create mode 100644 app/src/main/java/ua/acclorite/book_story/presentation/ui/theme/Pink2Theme.kt
diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/ui/Color.kt b/app/src/main/java/ua/acclorite/book_story/presentation/ui/Color.kt
index 0e78c805..954aa35e 100644
--- a/app/src/main/java/ua/acclorite/book_story/presentation/ui/Color.kt
+++ b/app/src/main/java/ua/acclorite/book_story/presentation/ui/Color.kt
@@ -10,9 +10,11 @@ import ua.acclorite.book_story.presentation.ui.theme.aquaTheme
import ua.acclorite.book_story.presentation.ui.theme.blackTheme
import ua.acclorite.book_story.presentation.ui.theme.blueTheme
import ua.acclorite.book_story.presentation.ui.theme.dynamicTheme
+import ua.acclorite.book_story.presentation.ui.theme.grayTheme
import ua.acclorite.book_story.presentation.ui.theme.greenTheme
import ua.acclorite.book_story.presentation.ui.theme.lavenderTheme
import ua.acclorite.book_story.presentation.ui.theme.marshTheme
+import ua.acclorite.book_story.presentation.ui.theme.pink2Theme
import ua.acclorite.book_story.presentation.ui.theme.pinkTheme
import ua.acclorite.book_story.presentation.ui.theme.purpleTheme
import ua.acclorite.book_story.presentation.ui.theme.redTheme
@@ -29,9 +31,11 @@ enum class Theme(
GREEN(hasThemeContrast = true, title = R.string.green_theme),
MARSH(hasThemeContrast = true, title = R.string.marsh_theme),
RED(hasThemeContrast = true, title = R.string.red_theme),
+ GRAY(hasThemeContrast = false, title = R.string.gray_theme),
PURPLE(hasThemeContrast = true, title = R.string.purple_theme),
LAVENDER(hasThemeContrast = true, title = R.string.lavender_theme),
- PINK(hasThemeContrast = false, title = R.string.pink_theme),
+ PINK(hasThemeContrast = true, title = R.string.pink_theme),
+ PINK2(hasThemeContrast = false, title = R.string.pink2_theme),
YELLOW(hasThemeContrast = true, title = R.string.yellow_theme),
AQUA(hasThemeContrast = true, title = R.string.aqua_theme);
@@ -69,7 +73,7 @@ fun colorScheme(
val colorScheme = when (theme) {
Theme.DYNAMIC -> {
/* Dynamic Theme */
- dynamicTheme(isDark = darkTheme)
+ dynamicTheme(isDark = darkTheme).logTheme(darkTheme = darkTheme)
}
Theme.BLUE -> {
@@ -97,6 +101,11 @@ fun colorScheme(
pinkTheme(isDark = darkTheme, themeContrast = themeContrast)
}
+ Theme.PINK2 -> {
+ /* Pink2 Theme */
+ pink2Theme(isDark = darkTheme)
+ }
+
Theme.LAVENDER -> {
/* Lavender Theme */
lavenderTheme(isDark = darkTheme, themeContrast = themeContrast)
@@ -112,6 +121,11 @@ fun colorScheme(
redTheme(isDark = darkTheme, themeContrast = themeContrast)
}
+ Theme.GRAY -> {
+ /* Gray Theme */
+ grayTheme(isDark = darkTheme)
+ }
+
Theme.AQUA -> {
/* Aqua Theme */
aquaTheme(isDark = darkTheme, themeContrast = themeContrast)
diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/ui/Theme.kt b/app/src/main/java/ua/acclorite/book_story/presentation/ui/Theme.kt
index 3c9f3142..398f4c86 100644
--- a/app/src/main/java/ua/acclorite/book_story/presentation/ui/Theme.kt
+++ b/app/src/main/java/ua/acclorite/book_story/presentation/ui/Theme.kt
@@ -113,7 +113,7 @@ fun BookStoryTheme(
}
val colorScheme = colorScheme(
- theme = Theme.entries().find { it == theme } ?: Theme.BLUE,
+ theme = Theme.entries().find { it == theme } ?: Theme.entries().first(),
darkTheme = isDark,
isPureDark = isPureDark,
themeContrast = themeContrast
diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/ui/ThemeLogger.kt b/app/src/main/java/ua/acclorite/book_story/presentation/ui/ThemeLogger.kt
index 28a636e1..523cc643 100644
--- a/app/src/main/java/ua/acclorite/book_story/presentation/ui/ThemeLogger.kt
+++ b/app/src/main/java/ua/acclorite/book_story/presentation/ui/ThemeLogger.kt
@@ -27,7 +27,7 @@ fun ColorScheme.logTheme(darkTheme: Boolean): ColorScheme {
Log.i(
THEME,
- "Theme:\n" +
+ "Theme $suffix:\n" +
"------------------------\n" +
primary.convertToVal("primary") +
onPrimary.convertToVal("onPrimary") +
diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/ui/theme/GrayTheme.kt b/app/src/main/java/ua/acclorite/book_story/presentation/ui/theme/GrayTheme.kt
new file mode 100644
index 00000000..0716d15d
--- /dev/null
+++ b/app/src/main/java/ua/acclorite/book_story/presentation/ui/theme/GrayTheme.kt
@@ -0,0 +1,162 @@
+package ua.acclorite.book_story.presentation.ui.theme
+
+import androidx.compose.material3.ColorScheme
+import androidx.compose.material3.darkColorScheme
+import androidx.compose.material3.lightColorScheme
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.graphics.Color
+
+private val primaryLight = Color(0xFF62514F)
+private val onPrimaryLight = Color(0xFFFFFFFF)
+private val primaryContainerLight = Color(0xFFDBC4C1)
+private val onPrimaryContainerLight = Color(0xFF231615)
+private val secondaryLight = Color(0xFF6B5A58)
+private val onSecondaryLight = Color(0xFFFFFFFF)
+private val secondaryContainerLight = Color(0xFFF5DDDA)
+private val onSecondaryContainerLight = Color(0xFF251917)
+private val tertiaryLight = Color(0xFF775653)
+private val onTertiaryLight = Color(0xFFFFFFFF)
+private val tertiaryContainerLight = Color(0xFFFFDAD6)
+private val onTertiaryContainerLight = Color(0xFF2C1513)
+private val errorLight = Color(0xFFB3261E)
+private val onErrorLight = Color(0xFFFFFFFF)
+private val errorContainerLight = Color(0xFFF9DEDC)
+private val onErrorContainerLight = Color(0xFF410E0B)
+private val backgroundLight = Color(0xFFFEF8F7)
+private val onBackgroundLight = Color(0xFF1E1B1A)
+private val surfaceLight = Color(0xFFFEF8F7)
+private val onSurfaceLight = Color(0xFF1E1B1A)
+private val surfaceVariantLight = Color(0xFFE9E1DF)
+private val onSurfaceVariantLight = Color(0xFF4A4645)
+private val outlineLight = Color(0xFF7A7574)
+private val outlineVariantLight = Color(0xFFCCC5C4)
+private val scrimLight = Color(0xFF000000)
+private val inverseSurfaceLight = Color(0xFF332F2F)
+private val inverseOnSurfaceLight = Color(0xFFF7EFEE)
+private val inversePrimaryLight = Color(0xFFC2ACA9)
+private val surfaceDimLight = Color(0xFFDED9D7)
+private val surfaceBrightLight = Color(0xFFFEF8F7)
+private val surfaceContainerLowestLight = Color(0xFFFFFFFF)
+private val surfaceContainerLowLight = Color(0xFFF8F2F1)
+private val surfaceContainerLight = Color(0xFFF2ECEB)
+private val surfaceContainerHighLight = Color(0xFFEDE7E6)
+private val surfaceContainerHighestLight = Color(0xFFE9E1DF)
+
+
+private val primaryDark = Color(0xFFC2ACA9)
+private val onPrimaryDark = Color(0xFF372927)
+private val primaryContainerDark = Color(0xFF4C3C3A)
+private val onPrimaryContainerDark = Color(0xFFDBC4C1)
+private val secondaryDark = Color(0xFFD8C2BF)
+private val onSecondaryDark = Color(0xFF3B2D2B)
+private val secondaryContainerDark = Color(0xFF534341)
+private val onSecondaryContainerDark = Color(0xFFF5DDDA)
+private val tertiaryDark = Color(0xFFE7BDB8)
+private val onTertiaryDark = Color(0xFF442926)
+private val tertiaryContainerDark = Color(0xFF5D3F3C)
+private val onTertiaryContainerDark = Color(0xFFFFDAD6)
+private val errorDark = Color(0xFFF2B8B5)
+private val onErrorDark = Color(0xFF601410)
+private val errorContainerDark = Color(0xFF8C1D18)
+private val onErrorContainerDark = Color(0xFFF9DEDC)
+private val backgroundDark = Color(0xFF171211)
+private val onBackgroundDark = Color(0xFFE9E1DF)
+private val surfaceDark = Color(0xFF141110)
+private val onSurfaceDark = Color(0xFFE9E1DF)
+private val surfaceVariantDark = Color(0xFF4A4645)
+private val onSurfaceVariantDark = Color(0xFFCCC5C4)
+private val outlineDark = Color(0xFF968F8E)
+private val outlineVariantDark = Color(0xFF4A4645)
+private val scrimDark = Color(0xFF000000)
+private val inverseSurfaceDark = Color(0xFFE9E1DF)
+private val inverseOnSurfaceDark = Color(0xFF332F2F)
+private val inversePrimaryDark = Color(0xFF62514F)
+private val surfaceDimDark = Color(0xFF171211)
+private val surfaceBrightDark = Color(0xFF3D3837)
+private val surfaceContainerLowestDark = Color(0xFF0D0B0A)
+private val surfaceContainerLowDark = Color(0xFF1E1B1A)
+private val surfaceContainerDark = Color(0xFF231F1F)
+private val surfaceContainerHighDark = Color(0xFF2D2929)
+private val surfaceContainerHighestDark = Color(0xFF383433)
+
+
+@Composable
+fun grayTheme(isDark: Boolean): ColorScheme {
+ return if (isDark) {
+ darkColorScheme(
+ primary = primaryDark,
+ onPrimary = onPrimaryDark,
+ primaryContainer = primaryContainerDark,
+ onPrimaryContainer = onPrimaryContainerDark,
+ secondary = secondaryDark,
+ onSecondary = onSecondaryDark,
+ secondaryContainer = secondaryContainerDark,
+ onSecondaryContainer = onSecondaryContainerDark,
+ tertiary = tertiaryDark,
+ onTertiary = onTertiaryDark,
+ tertiaryContainer = tertiaryContainerDark,
+ onTertiaryContainer = onTertiaryContainerDark,
+ error = errorDark,
+ onError = onErrorDark,
+ errorContainer = errorContainerDark,
+ onErrorContainer = onErrorContainerDark,
+ background = backgroundDark,
+ onBackground = onBackgroundDark,
+ surface = surfaceDark,
+ onSurface = onSurfaceDark,
+ surfaceVariant = surfaceVariantDark,
+ onSurfaceVariant = onSurfaceVariantDark,
+ outline = outlineDark,
+ outlineVariant = outlineVariantDark,
+ scrim = scrimDark,
+ inverseSurface = inverseSurfaceDark,
+ inverseOnSurface = inverseOnSurfaceDark,
+ inversePrimary = inversePrimaryDark,
+ surfaceDim = surfaceDimDark,
+ surfaceBright = surfaceBrightDark,
+ surfaceContainerLowest = surfaceContainerLowestDark,
+ surfaceContainerLow = surfaceContainerLowDark,
+ surfaceContainer = surfaceContainerDark,
+ surfaceContainerHigh = surfaceContainerHighDark,
+ surfaceContainerHighest = surfaceContainerHighestDark,
+ )
+ } else {
+ lightColorScheme(
+ primary = primaryLight,
+ onPrimary = onPrimaryLight,
+ primaryContainer = primaryContainerLight,
+ onPrimaryContainer = onPrimaryContainerLight,
+ secondary = secondaryLight,
+ onSecondary = onSecondaryLight,
+ secondaryContainer = secondaryContainerLight,
+ onSecondaryContainer = onSecondaryContainerLight,
+ tertiary = tertiaryLight,
+ onTertiary = onTertiaryLight,
+ tertiaryContainer = tertiaryContainerLight,
+ onTertiaryContainer = onTertiaryContainerLight,
+ error = errorLight,
+ onError = onErrorLight,
+ errorContainer = errorContainerLight,
+ onErrorContainer = onErrorContainerLight,
+ background = backgroundLight,
+ onBackground = onBackgroundLight,
+ surface = surfaceLight,
+ onSurface = onSurfaceLight,
+ surfaceVariant = surfaceVariantLight,
+ onSurfaceVariant = onSurfaceVariantLight,
+ outline = outlineLight,
+ outlineVariant = outlineVariantLight,
+ scrim = scrimLight,
+ inverseSurface = inverseSurfaceLight,
+ inverseOnSurface = inverseOnSurfaceLight,
+ inversePrimary = inversePrimaryLight,
+ surfaceDim = surfaceDimLight,
+ surfaceBright = surfaceBrightLight,
+ surfaceContainerLowest = surfaceContainerLowestLight,
+ surfaceContainerLow = surfaceContainerLowLight,
+ surfaceContainer = surfaceContainerLight,
+ surfaceContainerHigh = surfaceContainerHighLight,
+ surfaceContainerHighest = surfaceContainerHighestLight,
+ )
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/ui/theme/Pink2Theme.kt b/app/src/main/java/ua/acclorite/book_story/presentation/ui/theme/Pink2Theme.kt
new file mode 100644
index 00000000..78fe8536
--- /dev/null
+++ b/app/src/main/java/ua/acclorite/book_story/presentation/ui/theme/Pink2Theme.kt
@@ -0,0 +1,162 @@
+package ua.acclorite.book_story.presentation.ui.theme
+
+import androidx.compose.material3.ColorScheme
+import androidx.compose.material3.darkColorScheme
+import androidx.compose.material3.lightColorScheme
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.graphics.Color
+
+private val primaryLight = Color(0xFF3E5C38)
+private val onPrimaryLight = Color(0xFFFFFFFF)
+private val primaryContainerLight = Color(0xFFB0D3A5)
+private val onPrimaryContainerLight = Color(0xFF031F03)
+private val secondaryLight = Color(0xFF7C5264)
+private val onSecondaryLight = Color(0xFFFFFFFF)
+private val secondaryContainerLight = Color(0xFFFFD8E6)
+private val onSecondaryContainerLight = Color(0xFF301120)
+private val tertiaryLight = Color(0xFF535B8B)
+private val onTertiaryLight = Color(0xFFFFFFFF)
+private val tertiaryContainerLight = Color(0xFFDEE0FF)
+private val onTertiaryContainerLight = Color(0xFF0E1744)
+private val errorLight = Color(0xFFB3261E)
+private val onErrorLight = Color(0xFFFFFFFF)
+private val errorContainerLight = Color(0xFFF9DEDC)
+private val onErrorContainerLight = Color(0xFF410E0B)
+private val backgroundLight = Color(0xFFF7F8FF)
+private val onBackgroundLight = Color(0xFF191B27)
+private val surfaceLight = Color(0xFFF7F8FF)
+private val onSurfaceLight = Color(0xFF191B27)
+private val surfaceVariantLight = Color(0xFFE1E1F3)
+private val onSurfaceVariantLight = Color(0xFF444654)
+private val outlineLight = Color(0xFF747584)
+private val outlineVariantLight = Color(0xFFC5C5D6)
+private val scrimLight = Color(0xFF000000)
+private val inverseSurfaceLight = Color(0xFF2E303D)
+private val inverseOnSurfaceLight = Color(0xFFF0EFFF)
+private val inversePrimaryLight = Color(0xFF98BA8D)
+private val surfaceDimLight = Color(0xFFD8D9EA)
+private val surfaceBrightLight = Color(0xFFF7F8FF)
+private val surfaceContainerLowestLight = Color(0xFFFFFFFF)
+private val surfaceContainerLowLight = Color(0xFFF2F3FF)
+private val surfaceContainerLight = Color(0xFFECEDFF)
+private val surfaceContainerHighLight = Color(0xFFE6E7F9)
+private val surfaceContainerHighestLight = Color(0xFFE1E1F3)
+
+
+private val primaryDark = Color(0xFF98BA8D)
+private val onPrimaryDark = Color(0xFF163212)
+private val primaryContainerDark = Color(0xFF2A4724)
+private val onPrimaryContainerDark = Color(0xFFB0D3A5)
+private val secondaryDark = Color(0xFFEDB8CD)
+private val onSecondaryDark = Color(0xFF482535)
+private val secondaryContainerDark = Color(0xFF623B4C)
+private val onSecondaryContainerDark = Color(0xFFFFD8E6)
+private val tertiaryDark = Color(0xFFBCC3FA)
+private val onTertiaryDark = Color(0xFF252D5A)
+private val tertiaryContainerDark = Color(0xFF3C4472)
+private val onTertiaryContainerDark = Color(0xFFDEE0FF)
+private val errorDark = Color(0xFFF2B8B5)
+private val onErrorDark = Color(0xFF601410)
+private val errorContainerDark = Color(0xFF8C1D18)
+private val onErrorContainerDark = Color(0xFFF9DEDC)
+private val backgroundDark = Color(0xFF12131F)
+private val onBackgroundDark = Color(0xFFE1E1F3)
+private val surfaceDark = Color(0xFF12131B)
+private val onSurfaceDark = Color(0xFFE1E1F3)
+private val surfaceVariantDark = Color(0xFF444654)
+private val onSurfaceVariantDark = Color(0xFFC5C5D6)
+private val outlineDark = Color(0xFF8F8F9F)
+private val outlineVariantDark = Color(0xFF444654)
+private val scrimDark = Color(0xFF000000)
+private val inverseSurfaceDark = Color(0xFFE1E1F3)
+private val inverseOnSurfaceDark = Color(0xFF2E303D)
+private val inversePrimaryDark = Color(0xFF3E5C38)
+private val surfaceDimDark = Color(0xFF12131F)
+private val surfaceBrightDark = Color(0xFF373846)
+private val surfaceContainerLowestDark = Color(0xFF0E0E13)
+private val surfaceContainerLowDark = Color(0xFF1A1C27)
+private val surfaceContainerDark = Color(0xFF1F202B)
+private val surfaceContainerHighDark = Color(0xFF292A36)
+private val surfaceContainerHighestDark = Color(0xFF333442)
+
+
+@Composable
+fun pink2Theme(isDark: Boolean): ColorScheme {
+ return if (isDark) {
+ darkColorScheme(
+ primary = primaryDark,
+ onPrimary = onPrimaryDark,
+ primaryContainer = primaryContainerDark,
+ onPrimaryContainer = onPrimaryContainerDark,
+ secondary = secondaryDark,
+ onSecondary = onSecondaryDark,
+ secondaryContainer = secondaryContainerDark,
+ onSecondaryContainer = onSecondaryContainerDark,
+ tertiary = tertiaryDark,
+ onTertiary = onTertiaryDark,
+ tertiaryContainer = tertiaryContainerDark,
+ onTertiaryContainer = onTertiaryContainerDark,
+ error = errorDark,
+ onError = onErrorDark,
+ errorContainer = errorContainerDark,
+ onErrorContainer = onErrorContainerDark,
+ background = backgroundDark,
+ onBackground = onBackgroundDark,
+ surface = surfaceDark,
+ onSurface = onSurfaceDark,
+ surfaceVariant = surfaceVariantDark,
+ onSurfaceVariant = onSurfaceVariantDark,
+ outline = outlineDark,
+ outlineVariant = outlineVariantDark,
+ scrim = scrimDark,
+ inverseSurface = inverseSurfaceDark,
+ inverseOnSurface = inverseOnSurfaceDark,
+ inversePrimary = inversePrimaryDark,
+ surfaceDim = surfaceDimDark,
+ surfaceBright = surfaceBrightDark,
+ surfaceContainerLowest = surfaceContainerLowestDark,
+ surfaceContainerLow = surfaceContainerLowDark,
+ surfaceContainer = surfaceContainerDark,
+ surfaceContainerHigh = surfaceContainerHighDark,
+ surfaceContainerHighest = surfaceContainerHighestDark,
+ )
+ } else {
+ lightColorScheme(
+ primary = primaryLight,
+ onPrimary = onPrimaryLight,
+ primaryContainer = primaryContainerLight,
+ onPrimaryContainer = onPrimaryContainerLight,
+ secondary = secondaryLight,
+ onSecondary = onSecondaryLight,
+ secondaryContainer = secondaryContainerLight,
+ onSecondaryContainer = onSecondaryContainerLight,
+ tertiary = tertiaryLight,
+ onTertiary = onTertiaryLight,
+ tertiaryContainer = tertiaryContainerLight,
+ onTertiaryContainer = onTertiaryContainerLight,
+ error = errorLight,
+ onError = onErrorLight,
+ errorContainer = errorContainerLight,
+ onErrorContainer = onErrorContainerLight,
+ background = backgroundLight,
+ onBackground = onBackgroundLight,
+ surface = surfaceLight,
+ onSurface = onSurfaceLight,
+ surfaceVariant = surfaceVariantLight,
+ onSurfaceVariant = onSurfaceVariantLight,
+ outline = outlineLight,
+ outlineVariant = outlineVariantLight,
+ scrim = scrimLight,
+ inverseSurface = inverseSurfaceLight,
+ inverseOnSurface = inverseOnSurfaceLight,
+ inversePrimary = inversePrimaryLight,
+ surfaceDim = surfaceDimLight,
+ surfaceBright = surfaceBrightLight,
+ surfaceContainerLowest = surfaceContainerLowestLight,
+ surfaceContainerLow = surfaceContainerLowLight,
+ surfaceContainer = surfaceContainerLight,
+ surfaceContainerHigh = surfaceContainerHighLight,
+ surfaceContainerHighest = surfaceContainerHighestLight,
+ )
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index c76cf1f9..e7e7bc80 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -334,8 +334,10 @@
Нептун
Земля
Марс
+ Каллісто
Юпітер
Сатурн
+ Ганімед
Еріс
Плутон
Венера
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5c6de783..eaa5bd3f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -335,8 +335,10 @@
Neptune
Earth
Mars
+ Callisto
Jupiter
Saturn
+ Ganymede
Eris
Pluto
Venus