From d63ef1bc34c6288f8ecb95cc238a7dd984cef970 Mon Sep 17 00:00:00 2001 From: Damontecres Date: Sat, 18 Jul 2026 17:07:46 -0400 Subject: [PATCH 1/3] Add red & brown themes --- .../wholphin/ui/cards/WatchedIcon.kt | 4 + .../wholphin/ui/components/SliderBar.kt | 4 + .../damontecres/wholphin/ui/nav/NavDrawer.kt | 2 + .../ui/preferences/SwitchPreference.kt | 2 + .../damontecres/wholphin/ui/theme/Theme.kt | 4 + .../ui/theme/colors/BrownThemeColors.kt | 204 ++++++++++++++++++ .../ui/theme/colors/RedThemeColors.kt | 204 ++++++++++++++++++ app/src/main/proto/WholphinDataStore.proto | 2 + app/src/main/res/values/strings.xml | 3 + 9 files changed, 429 insertions(+) create mode 100644 app/src/main/java/com/github/damontecres/wholphin/ui/theme/colors/BrownThemeColors.kt create mode 100644 app/src/main/java/com/github/damontecres/wholphin/ui/theme/colors/RedThemeColors.kt diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/cards/WatchedIcon.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/cards/WatchedIcon.kt index 0a92199b7..ce8952a71 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/cards/WatchedIcon.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/cards/WatchedIcon.kt @@ -45,6 +45,8 @@ fun WatchedIconBackground(): Color = AppThemeColors.GREEN, AppThemeColors.ORANGE, AppThemeColors.BOLD_BLUE, + AppThemeColors.RED, + AppThemeColors.BROWN, -> MaterialTheme.colorScheme.border.copy(alpha = 1f) AppThemeColors.OLED_BLACK -> MaterialTheme.colorScheme.secondaryContainer @@ -60,6 +62,8 @@ fun WatchedIconColor(): Color = AppThemeColors.ORANGE, AppThemeColors.BOLD_BLUE, AppThemeColors.OLED_BLACK, + AppThemeColors.RED, + AppThemeColors.BROWN, -> Color.White // MaterialTheme.colorScheme.onSurface } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/SliderBar.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/SliderBar.kt index f87f5c983..9021e213e 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/components/SliderBar.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/SliderBar.kt @@ -146,6 +146,8 @@ fun sliderActiveColor(focused: Boolean): Color { AppThemeColors.BLUE, AppThemeColors.GREEN, AppThemeColors.ORANGE, + AppThemeColors.RED, + AppThemeColors.BROWN, -> { MaterialTheme.colorScheme.border } @@ -188,6 +190,8 @@ fun sliderInactiveColor(focused: Boolean): Color { AppThemeColors.GREEN, AppThemeColors.ORANGE, AppThemeColors.BOLD_BLUE, + AppThemeColors.RED, + AppThemeColors.BROWN, -> { MaterialTheme.colorScheme.secondaryContainer.copy(alpha = .66f) } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/nav/NavDrawer.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/nav/NavDrawer.kt index 0d66fd8fc..4a23600cf 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/nav/NavDrawer.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/nav/NavDrawer.kt @@ -771,6 +771,8 @@ fun navItemColor( AppThemeColors.BLUE, AppThemeColors.GREEN, AppThemeColors.ORANGE, + AppThemeColors.RED, + AppThemeColors.BROWN, -> MaterialTheme.colorScheme.border AppThemeColors.BOLD_BLUE, diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/preferences/SwitchPreference.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/preferences/SwitchPreference.kt index 372af78a9..daf6fa077 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/preferences/SwitchPreference.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/preferences/SwitchPreference.kt @@ -79,6 +79,8 @@ fun SwitchColors(): SwitchColors { AppThemeColors.ORANGE, AppThemeColors.BOLD_BLUE, AppThemeColors.OLED_BLACK, + AppThemeColors.RED, + AppThemeColors.BROWN, -> { SwitchDefaults.colors( checkedThumbColor = MaterialTheme.colorScheme.onPrimary, diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/theme/Theme.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/theme/Theme.kt index 53c10bd26..8ae95b256 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/theme/Theme.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/theme/Theme.kt @@ -7,10 +7,12 @@ import androidx.tv.material3.MaterialTheme import com.github.damontecres.wholphin.preferences.AppThemeColors import com.github.damontecres.wholphin.ui.theme.colors.BlueThemeColors import com.github.damontecres.wholphin.ui.theme.colors.BoldBlueThemeColors +import com.github.damontecres.wholphin.ui.theme.colors.BrownThemeColors import com.github.damontecres.wholphin.ui.theme.colors.GreenThemeColors import com.github.damontecres.wholphin.ui.theme.colors.OledThemeColors import com.github.damontecres.wholphin.ui.theme.colors.OrangeThemeColors import com.github.damontecres.wholphin.ui.theme.colors.PurpleThemeColors +import com.github.damontecres.wholphin.ui.theme.colors.RedThemeColors val LocalTheme = compositionLocalOf { AppThemeColors.PURPLE } @@ -23,6 +25,8 @@ fun getThemeColors(appThemeColors: AppThemeColors): ThemeColors = AppThemeColors.ORANGE -> OrangeThemeColors AppThemeColors.OLED_BLACK -> OledThemeColors AppThemeColors.BOLD_BLUE -> BoldBlueThemeColors + AppThemeColors.RED -> RedThemeColors + AppThemeColors.BROWN -> BrownThemeColors AppThemeColors.UNRECOGNIZED -> PurpleThemeColors } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/theme/colors/BrownThemeColors.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/theme/colors/BrownThemeColors.kt new file mode 100644 index 000000000..0e2228840 --- /dev/null +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/theme/colors/BrownThemeColors.kt @@ -0,0 +1,204 @@ +package com.github.damontecres.wholphin.ui.theme.colors + +import androidx.compose.material3.ColorScheme +import androidx.compose.ui.graphics.Color +import androidx.tv.material3.darkColorScheme +import androidx.tv.material3.lightColorScheme +import com.github.damontecres.wholphin.ui.theme.ThemeColors + +val BrownThemeColors = + object : ThemeColors { + val primaryLight = Color(0xFF8A5022) + val onPrimaryLight = Color(0xFFFFFFFF) + val primaryContainerLight = Color(0xFFFFDCC6) + val onPrimaryContainerLight = Color(0xFF6D390C) + val secondaryLight = Color(0xFF755845) + val onSecondaryLight = Color(0xFFFFFFFF) + val secondaryContainerLight = Color(0xFFFFDCC6) + val onSecondaryContainerLight = Color(0xFF5B412F) + val tertiaryLight = Color(0xFF5F6135) + val onTertiaryLight = Color(0xFFFFFFFF) + val tertiaryContainerLight = Color(0xFFE5E6AE) + val onTertiaryContainerLight = Color(0xFF47491F) + val errorLight = Color(0xFFBA1A1A) + val onErrorLight = Color(0xFFFFFFFF) + val errorContainerLight = Color(0xFFFFDAD6) + val onErrorContainerLight = Color(0xFF93000A) + val backgroundLight = Color(0xFFFFF8F5) + val onBackgroundLight = Color(0xFF221A15) + val surfaceLight = Color(0xFFFFF8F5) + val onSurfaceLight = Color(0xFF221A15) + val surfaceVariantLight = Color(0xFFF3DED3) + val onSurfaceVariantLight = Color(0xFF52443B) + val outlineLight = Color(0xFF84746A) + val outlineVariantLight = Color(0xFFD7C3B7) + val scrimLight = Color(0xFF000000) + val inverseSurfaceLight = Color(0xFF382F29) + val inverseOnSurfaceLight = Color(0xFFFEEDE4) + val inversePrimaryLight = Color(0xFFFFB784) + val surfaceDimLight = Color(0xFFE7D7CE) + val surfaceBrightLight = Color(0xFFFFF8F5) + val surfaceContainerLowestLight = Color(0xFFFFFFFF) + val surfaceContainerLowLight = Color(0xFFFFF1EA) + val surfaceContainerLight = Color(0xFFFBEBE2) + val surfaceContainerHighLight = Color(0xFFF6E5DC) + val surfaceContainerHighestLight = Color(0xFFF0DFD6) + + val primaryDark = Color(0xFFFFB784) + val onPrimaryDark = Color(0xFF4F2500) + val primaryContainerDark = Color(0xFF6D390C) + val onPrimaryContainerDark = Color(0xFFFFDCC6) + val secondaryDark = Color(0xFFE4BFA8) + val onSecondaryDark = Color(0xFF422B1B) + val secondaryContainerDark = Color(0xFF5B412F) + val onSecondaryContainerDark = Color(0xFFFFDCC6) + val tertiaryDark = Color(0xFFC8CA94) + val onTertiaryDark = Color(0xFF30330B) + val tertiaryContainerDark = Color(0xFF47491F) + val onTertiaryContainerDark = Color(0xFFE5E6AE) + val errorDark = Color(0xFFFFB4AB) + val onErrorDark = Color(0xFF690005) + val errorContainerDark = Color(0xFF93000A) + val onErrorContainerDark = Color(0xFFFFDAD6) + val backgroundDark = Color(0xFF19120D) + val onBackgroundDark = Color(0xFFF0DFD6) + val surfaceDark = Color(0xFF19120D) + val onSurfaceDark = Color(0xFFF0DFD6) + val surfaceVariantDark = Color(0xFF52443B) + val onSurfaceVariantDark = Color(0xFFD7C3B7) + val outlineDark = Color(0xFF9F8D83) + val outlineVariantDark = Color(0xFF52443B) + val scrimDark = Color(0xFF000000) + val inverseSurfaceDark = Color(0xFFF0DFD6) + val inverseOnSurfaceDark = Color(0xFF382F29) + val inversePrimaryDark = Color(0xFF8A5022) + val surfaceDimDark = Color(0xFF19120D) + val surfaceBrightDark = Color(0xFF413731) + val surfaceContainerLowestDark = Color(0xFF140D08) + val surfaceContainerLowDark = Color(0xFF221A15) + val surfaceContainerDark = Color(0xFF261E18) + val surfaceContainerHighDark = Color(0xFF312822) + val surfaceContainerHighestDark = Color(0xFF3C332D) + + override val lightSchemeMaterial: ColorScheme = + androidx.compose.material3.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, + scrim = scrimLight, + inverseSurface = inverseSurfaceLight, + inverseOnSurface = inverseOnSurfaceLight, + inversePrimary = inversePrimaryLight, + ) + + override val lightScheme = + 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, + scrim = scrimLight, + inverseSurface = inverseSurfaceLight, + inverseOnSurface = inverseOnSurfaceLight, + inversePrimary = inversePrimaryLight, + border = inversePrimaryLight, + ) + + override val darkSchemeMaterial = + androidx.compose.material3.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, + scrim = scrimDark, + inverseSurface = inverseSurfaceDark, + inverseOnSurface = inverseOnSurfaceDark, + inversePrimary = inversePrimaryDark, + ) + + override val darkScheme = + 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, + scrim = scrimDark, + inverseSurface = inverseSurfaceDark, + inverseOnSurface = inverseOnSurfaceDark, + inversePrimary = inversePrimaryDark, + border = inversePrimaryDark, + ) + } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/theme/colors/RedThemeColors.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/theme/colors/RedThemeColors.kt new file mode 100644 index 000000000..ecdcbdf49 --- /dev/null +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/theme/colors/RedThemeColors.kt @@ -0,0 +1,204 @@ +package com.github.damontecres.wholphin.ui.theme.colors + +import androidx.compose.material3.ColorScheme +import androidx.compose.ui.graphics.Color +import androidx.tv.material3.darkColorScheme +import androidx.tv.material3.lightColorScheme +import com.github.damontecres.wholphin.ui.theme.ThemeColors + +val RedThemeColors = + object : ThemeColors { + val primaryLight = Color(0xFF904A42) + val onPrimaryLight = Color(0xFFFFFFFF) + val primaryContainerLight = Color(0xFFFFDAD5) + val onPrimaryContainerLight = Color(0xFF73342C) + val secondaryLight = Color(0xFF775652) + val onSecondaryLight = Color(0xFFFFFFFF) + val secondaryContainerLight = Color(0xFFFFDAD5) + val onSecondaryContainerLight = Color(0xFF5D3F3B) + val tertiaryLight = Color(0xFF715C2E) + val onTertiaryLight = Color(0xFFFFFFFF) + val tertiaryContainerLight = Color(0xFFFDDFA6) + val onTertiaryContainerLight = Color(0xFF574419) + val errorLight = Color(0xFFBA1A1A) + val onErrorLight = Color(0xFFFFFFFF) + val errorContainerLight = Color(0xFFFFDAD6) + val onErrorContainerLight = Color(0xFF93000A) + val backgroundLight = Color(0xFFFFF8F7) + val onBackgroundLight = Color(0xFF231918) + val surfaceLight = Color(0xFFFFF8F7) + val onSurfaceLight = Color(0xFF231918) + val surfaceVariantLight = Color(0xFFF5DDDA) + val onSurfaceVariantLight = Color(0xFF534341) + val outlineLight = Color(0xFF857370) + val outlineVariantLight = Color(0xFFD8C2BE) + val scrimLight = Color(0xFF000000) + val inverseSurfaceLight = Color(0xFF392E2C) + val inverseOnSurfaceLight = Color(0xFFFFEDEA) + val inversePrimaryLight = Color(0xFFFFB4AA) + val surfaceDimLight = Color(0xFFE8D6D4) + val surfaceBrightLight = Color(0xFFFFF8F7) + val surfaceContainerLowestLight = Color(0xFFFFFFFF) + val surfaceContainerLowLight = Color(0xFFFFF0EE) + val surfaceContainerLight = Color(0xFFFCEAE7) + val surfaceContainerHighLight = Color(0xFFF7E4E2) + val surfaceContainerHighestLight = Color(0xFFF1DEDC) + + val primaryDark = Color(0xFFFFB4AA) + val onPrimaryDark = Color(0xFF561E18) + val primaryContainerDark = Color(0xFF73342C) + val onPrimaryContainerDark = Color(0xFFFFDAD5) + val secondaryDark = Color(0xFFE7BDB7) + val onSecondaryDark = Color(0xFF442926) + val secondaryContainerDark = Color(0xFF5D3F3B) + val onSecondaryContainerDark = Color(0xFFFFDAD5) + val tertiaryDark = Color(0xFFDFC38C) + val onTertiaryDark = Color(0xFF3F2E04) + val tertiaryContainerDark = Color(0xFF574419) + val onTertiaryContainerDark = Color(0xFFFDDFA6) + val errorDark = Color(0xFFFFB4AB) + val onErrorDark = Color(0xFF690005) + val errorContainerDark = Color(0xFF93000A) + val onErrorContainerDark = Color(0xFFFFDAD6) + val backgroundDark = Color(0xFF1A1110) + val onBackgroundDark = Color(0xFFF1DEDC) + val surfaceDark = Color(0xFF1A1110) + val onSurfaceDark = Color(0xFFF1DEDC) + val surfaceVariantDark = Color(0xFF534341) + val onSurfaceVariantDark = Color(0xFFD8C2BE) + val outlineDark = Color(0xFFA08C8A) + val outlineVariantDark = Color(0xFF534341) + val scrimDark = Color(0xFF000000) + val inverseSurfaceDark = Color(0xFFF1DEDC) + val inverseOnSurfaceDark = Color(0xFF392E2C) + val inversePrimaryDark = Color(0xFFC0000C) + val surfaceDimDark = Color(0xFF1A1110) + val surfaceBrightDark = Color(0xFF423735) + val surfaceContainerLowestDark = Color(0xFF140C0B) + val surfaceContainerLowDark = Color(0xFF231918) + val surfaceContainerDark = Color(0xFF271D1C) + val surfaceContainerHighDark = Color(0xFF322826) + val surfaceContainerHighestDark = Color(0xFF3D3231) + + override val lightSchemeMaterial: ColorScheme = + androidx.compose.material3.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, + scrim = scrimLight, + inverseSurface = inverseSurfaceLight, + inverseOnSurface = inverseOnSurfaceLight, + inversePrimary = inversePrimaryLight, + ) + + override val lightScheme = + 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, + scrim = scrimLight, + inverseSurface = inverseSurfaceLight, + inverseOnSurface = inverseOnSurfaceLight, + inversePrimary = inversePrimaryLight, + border = inversePrimaryLight, + ) + + override val darkSchemeMaterial = + androidx.compose.material3.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, + scrim = scrimDark, + inverseSurface = inverseSurfaceDark, + inverseOnSurface = inverseOnSurfaceDark, + inversePrimary = inversePrimaryDark, + ) + + override val darkScheme = + 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, + scrim = scrimDark, + inverseSurface = inverseSurfaceDark, + inverseOnSurface = inverseOnSurfaceDark, + inversePrimary = inversePrimaryDark, + border = inversePrimaryDark, + ) + } diff --git a/app/src/main/proto/WholphinDataStore.proto b/app/src/main/proto/WholphinDataStore.proto index 4b1f6c34b..28db9bf8c 100644 --- a/app/src/main/proto/WholphinDataStore.proto +++ b/app/src/main/proto/WholphinDataStore.proto @@ -113,6 +113,8 @@ enum AppThemeColors { ORANGE = 3; BOLD_BLUE = 4; OLED_BLACK = 5; + RED = 6; + BROWN = 7; } enum EdgeStyle{ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 89888b8c4..b53f16bb0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -595,6 +595,7 @@ Orange Bold Blue Black + Brown @string/purple @string/blue @@ -602,6 +603,8 @@ @string/orange @string/bold_blue @string/black + @string/red + @string/brown Ignore From aa23c3b11c5b6420a672c161970381508118a536 Mon Sep 17 00:00:00 2001 From: Damontecres Date: Sat, 18 Jul 2026 17:08:03 -0400 Subject: [PATCH 2/3] Add labels to theme preview --- .../wholphin/ui/theme/ThemePreview.kt | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/theme/ThemePreview.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/theme/ThemePreview.kt index 70d30254d..4a2fd63df 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/theme/ThemePreview.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/theme/ThemePreview.kt @@ -10,6 +10,7 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items @@ -19,6 +20,8 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.tv.material3.ListItem @@ -50,7 +53,7 @@ import kotlinx.coroutines.flow.flowOf private fun ThemePreview() { Column { LazyVerticalGrid( - columns = GridCells.Fixed(2), + columns = GridCells.Fixed(3), contentPadding = PaddingValues(16.dp), horizontalArrangement = Arrangement.spacedBy(16.dp), verticalArrangement = Arrangement.spacedBy(16.dp), @@ -62,6 +65,16 @@ private fun ThemePreview() { } } +@Composable +private fun SectionTitle(text: String) { + Text( + text = text, + color = Color.White, + fontWeight = FontWeight.SemiBold, + modifier = Modifier.padding(top = 8.dp), + ) +} + @Composable private fun ThemeExample(theme: AppThemeColors) { val source = remember { PreviewInteractionSource() } @@ -71,10 +84,13 @@ private fun ThemeExample(theme: AppThemeColors) { Text( text = theme.toString(), color = Color.White, + modifier = Modifier.padding(8.dp), ) Column( verticalArrangement = Arrangement.spacedBy(8.dp), + modifier = Modifier.padding(8.dp), ) { + SectionTitle("Cards") Row( horizontalArrangement = Arrangement.SpaceEvenly, verticalAlignment = Alignment.CenterVertically, @@ -134,6 +150,7 @@ private fun ThemeExample(theme: AppThemeColors) { aspectRatio = AspectRatios.SQUARE, ) } + SectionTitle("Controls") Row(horizontalArrangement = Arrangement.spacedBy(16.dp)) { SliderPreference( preference = AppPreference.AutoPlayNextDelay, @@ -191,6 +208,7 @@ private fun ThemeExample(theme: AppThemeColors) { interactionSource = source, ) } + SectionTitle("Nav drawer") val navScope = NavScope(true) Row( horizontalArrangement = Arrangement.spacedBy(16.dp), @@ -240,6 +258,7 @@ private fun ThemeExample(theme: AppThemeColors) { ) } } + SectionTitle("Playback controls") Row( horizontalArrangement = Arrangement.spacedBy(16.dp), modifier = Modifier.background(MaterialTheme.colorScheme.surfaceVariant), @@ -271,6 +290,7 @@ private fun ThemeExample(theme: AppThemeColors) { interactionSource = source, ) } + SectionTitle("List items") Column( modifier = Modifier.background(MaterialTheme.colorScheme.surface), ) { From 8cf5644759417d76035dbb724477dd3dbf0e5b06 Mon Sep 17 00:00:00 2001 From: Damontecres Date: Thu, 23 Jul 2026 14:32:50 -0400 Subject: [PATCH 3/3] Use darker brown for border --- .../github/damontecres/wholphin/ui/theme/ThemePreview.kt | 6 +++--- .../wholphin/ui/theme/colors/BrownThemeColors.kt | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/theme/ThemePreview.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/theme/ThemePreview.kt index 4a2fd63df..f5c83ce1f 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/theme/ThemePreview.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/theme/ThemePreview.kt @@ -20,7 +20,6 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -45,12 +44,13 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf @Preview( - device = "spec:width=1200dp,height=2500dp", + device = "spec:width=1200dp,height=3000dp", backgroundColor = 0xFF383535, uiMode = UI_MODE_TYPE_TELEVISION, ) @Composable private fun ThemePreview() { + val themes = AppThemeColors.entries.filterNot { it == AppThemeColors.UNRECOGNIZED } Column { LazyVerticalGrid( columns = GridCells.Fixed(3), @@ -58,7 +58,7 @@ private fun ThemePreview() { horizontalArrangement = Arrangement.spacedBy(16.dp), verticalArrangement = Arrangement.spacedBy(16.dp), ) { - items(AppThemeColors.entries.filterNot { it == AppThemeColors.UNRECOGNIZED }) { + items(themes) { ThemeExample(it) } } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/theme/colors/BrownThemeColors.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/theme/colors/BrownThemeColors.kt index 0e2228840..04c050fd1 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/theme/colors/BrownThemeColors.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/theme/colors/BrownThemeColors.kt @@ -71,7 +71,7 @@ val BrownThemeColors = val scrimDark = Color(0xFF000000) val inverseSurfaceDark = Color(0xFFF0DFD6) val inverseOnSurfaceDark = Color(0xFF382F29) - val inversePrimaryDark = Color(0xFF8A5022) + val inversePrimaryDark = Color(0xFF6D3B07) val surfaceDimDark = Color(0xFF19120D) val surfaceBrightDark = Color(0xFF413731) val surfaceContainerLowestDark = Color(0xFF140D08)