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