diff --git a/app/src/main/java/ua/acclorite/book_story/ui/theme/Color.kt b/app/src/main/java/ua/acclorite/book_story/ui/theme/Color.kt index a458ef2b..a123d2e1 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/theme/Color.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/theme/Color.kt @@ -17,6 +17,7 @@ import ua.acclorite.book_story.ui.theme.color.aquaTheme import ua.acclorite.book_story.ui.theme.color.blackTheme import ua.acclorite.book_story.ui.theme.color.blueTheme import ua.acclorite.book_story.ui.theme.color.dynamicTheme +import ua.acclorite.book_story.ui.theme.color.grayTheme import ua.acclorite.book_story.ui.theme.color.green2Theme import ua.acclorite.book_story.ui.theme.color.greenGrayTheme import ua.acclorite.book_story.ui.theme.color.greenTheme @@ -52,7 +53,8 @@ enum class Theme( PINK2(hasThemeContrast = false, title = R.string.pink2_theme), YELLOW(hasThemeContrast = true, title = R.string.yellow_theme), YELLOW2(hasThemeContrast = false, title = R.string.yellow2_theme), - AQUA(hasThemeContrast = true, title = R.string.aqua_theme); + AQUA(hasThemeContrast = true, title = R.string.aqua_theme), + GRAY(hasThemeContrast = false, title = R.string.gray_theme); companion object { fun entries(): List { @@ -158,6 +160,11 @@ fun colorScheme( /* Aqua Theme */ aquaTheme(isDark = darkTheme, themeContrast = themeContrast) } + + Theme.GRAY -> { + /* Gray Theme */ + grayTheme(isDark = darkTheme) + } } return if (isPureDark && darkTheme) { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/theme/color/GrayTheme.kt b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/GrayTheme.kt new file mode 100644 index 00000000..909d3a11 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/ui/theme/color/GrayTheme.kt @@ -0,0 +1,168 @@ +/* + * Book's Story — free and open-source Material You eBook reader. + * Copyright (C) 2024-2025 Acclorite + * SPDX-License-Identifier: GPL-3.0-only + */ + +package ua.acclorite.book_story.ui.theme.color + +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(0xFF000000) +private val onPrimaryLight = Color(0xFFE2E2E2) +private val primaryContainerLight = Color(0xFF3B3B3B) +private val onPrimaryContainerLight = Color(0xFFFFFFFF) +private val secondaryLight = Color(0xFF5E5E5E) +private val onSecondaryLight = Color(0xFFFFFFFF) +private val secondaryContainerLight = Color(0xFFD4D4D4) +private val onSecondaryContainerLight = Color(0xFF1B1B1B) +private val tertiaryLight = Color(0xFF3B3B3B) +private val onTertiaryLight = Color(0xFFE2E2E2) +private val tertiaryContainerLight = Color(0xFF747474) +private val onTertiaryContainerLight = Color(0xFFFFFFFF) +private val errorLight = Color(0xFFB3261E) +private val onErrorLight = Color(0xFFFFFFFF) +private val errorContainerLight = Color(0xFFF9DEDC) +private val onErrorContainerLight = Color(0xFF410E0B) +private val backgroundLight = Color(0xFFF9F9F9) +private val onBackgroundLight = Color(0xFF1B1B1B) +private val surfaceLight = Color(0xFFF9F9F9) +private val onSurfaceLight = Color(0xFF1B1B1B) +private val surfaceVariantLight = Color(0xFFE2E2E2) +private val onSurfaceVariantLight = Color(0xFF474747) +private val outlineLight = Color(0xFF777777) +private val outlineVariantLight = Color(0xFFC6C6C6) +private val scrimLight = Color(0xFF000000) +private val inverseSurfaceLight = Color(0xFF131313) +private val inverseOnSurfaceLight = Color(0xFFE2E2E2) +private val inversePrimaryLight = Color(0xFFFFFFFF) +private val surfaceDimLight = Color(0xFFDADADA) +private val surfaceBrightLight = Color(0xFFF9F9F9) +private val surfaceContainerLowestLight = Color(0xFFFFFFFF) +private val surfaceContainerLowLight = Color(0xFFF3F3F3) +private val surfaceContainerLight = Color(0xFFEEEEEE) +private val surfaceContainerHighLight = Color(0xFFE8E8E8) +private val surfaceContainerHighestLight = Color(0xFFE2E2E2) + + +private val primaryDark = Color(0xFFFFFFFF) +private val onPrimaryDark = Color(0xFF1B1B1B) +private val primaryContainerDark = Color(0xFFD4D4D4) +private val onPrimaryContainerDark = Color(0xFF000000) +private val secondaryDark = Color(0xFFC6C6C6) +private val onSecondaryDark = Color(0xFF1B1B1B) +private val secondaryContainerDark = Color(0xFF474747) +private val onSecondaryContainerDark = Color(0xFFE2E2E2) +private val tertiaryDark = Color(0xFFE2E2E2) +private val onTertiaryDark = Color(0xFF1B1B1B) +private val tertiaryContainerDark = Color(0xFF919191) +private val onTertiaryContainerDark = Color(0xFF000000) +private val errorDark = Color(0xFFF2B8B5) +private val onErrorDark = Color(0xFF601410) +private val errorContainerDark = Color(0xFF8C1D18) +private val onErrorContainerDark = Color(0xFFF9DEDC) +private val backgroundDark = Color(0xFF131313) +private val onBackgroundDark = Color(0xFFE2E2E2) +private val surfaceDark = Color(0xFF101010) +private val onSurfaceDark = Color(0xFFE2E2E2) +private val surfaceVariantDark = Color(0xFF474747) +private val onSurfaceVariantDark = Color(0xFFC6C6C6) +private val outlineDark = Color(0xFF919191) +private val outlineVariantDark = Color(0xFF474747) +private val scrimDark = Color(0xFF000000) +private val inverseSurfaceDark = Color(0xFFF9F9F9) +private val inverseOnSurfaceDark = Color(0xFF1B1B1B) +private val inversePrimaryDark = Color(0xFF000000) +private val surfaceDimDark = Color(0xFF131313) +private val surfaceBrightDark = Color(0xFF393939) +private val surfaceContainerLowestDark = Color(0xFF0A0A0A) +private val surfaceContainerLowDark = Color(0xFF1B1B1B) +private val surfaceContainerDark = Color(0xFF1F1F1F) +private val surfaceContainerHighDark = Color(0xFF2A2A2A) +private val surfaceContainerHighestDark = Color(0xFF353535) + + +@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/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index dc538b5f..a5b1c64a 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -342,6 +342,7 @@ Венера Макемаке Уран + Япет Натисніть ще раз, щоб вийти diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 18644aee..1345c030 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -366,6 +366,7 @@ Venus Makemake Uranus + Iapetus Press back again to exit