feat: add Settings tab to TV home screen and update color scheme

This commit is contained in:
2026-04-01 16:51:24 +02:00
parent 0df79f55a1
commit b90632063c
5 changed files with 54 additions and 472 deletions

View File

@@ -7,6 +7,7 @@ import androidx.compose.material.icons.outlined.Collections
import androidx.compose.material.icons.outlined.Home import androidx.compose.material.icons.outlined.Home
import androidx.compose.material.icons.outlined.Movie import androidx.compose.material.icons.outlined.Movie
import androidx.compose.material.icons.outlined.Search import androidx.compose.material.icons.outlined.Search
import androidx.compose.material.icons.outlined.Settings
import androidx.compose.material.icons.outlined.Tv import androidx.compose.material.icons.outlined.Tv
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@@ -43,6 +44,13 @@ fun TvHomeScreen(
val tabs = remember(libraries) { val tabs = remember(libraries) {
buildList { buildList {
add(
TvHomeTabItem(
destination = TvHomeTabDestination.SETTINGS,
label = "Settings",
icon = Icons.Outlined.Settings,
)
)
add( add(
TvHomeTabItem( TvHomeTabItem(
destination = TvHomeTabDestination.SEARCH, destination = TvHomeTabDestination.SEARCH,
@@ -100,6 +108,7 @@ fun TvHomeScreen(
} }
) { innerPadding -> ) { innerPadding ->
when (selectedTab?.destination) { when (selectedTab?.destination) {
TvHomeTabDestination.SETTINGS,
TvHomeTabDestination.LIBRARY -> { TvHomeTabDestination.LIBRARY -> {
TvLibraryContent( TvLibraryContent(
libraryItems = selectedLibraryItems, libraryItems = selectedLibraryItems,
@@ -108,7 +117,6 @@ fun TvHomeScreen(
modifier = Modifier.padding(innerPadding) modifier = Modifier.padding(innerPadding)
) )
} }
TvHomeTabDestination.SEARCH, TvHomeTabDestination.SEARCH,
TvHomeTabDestination.HOME, TvHomeTabDestination.HOME,
null -> { null -> {

View File

@@ -13,7 +13,8 @@ data class TvHomeNavItem(
enum class TvHomeTabDestination { enum class TvHomeTabDestination {
SEARCH, SEARCH,
HOME, HOME,
LIBRARY LIBRARY,
SETTINGS
} }
data class TvHomeTabItem( data class TvHomeTabItem(

View File

@@ -1,12 +1,7 @@
package hu.bbara.purefin.tv.home.ui package hu.bbara.purefin.tv.home.ui
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -17,7 +12,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.zIndex
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@@ -30,45 +24,28 @@ fun TvHomeTopBar(
val scheme = MaterialTheme.colorScheme val scheme = MaterialTheme.colorScheme
val safeSelectedTabIndex = selectedTabIndex.coerceIn(0, tabs.lastIndex.coerceAtLeast(0)) val safeSelectedTabIndex = selectedTabIndex.coerceIn(0, tabs.lastIndex.coerceAtLeast(0))
Box( PrimaryScrollableTabRow(
modifier = modifier selectedTabIndex = safeSelectedTabIndex,
.fillMaxWidth() containerColor = scheme.surface,
.background(scheme.background.copy(alpha = 0.95f)) contentColor = scheme.onSurface,
.zIndex(1f)
) { ) {
Row( tabs.forEachIndexed { index, tab ->
modifier = Modifier Tab(
.statusBarsPadding() selected = index == safeSelectedTabIndex,
.padding(horizontal = 16.dp, vertical = 16.dp) onClick = { onTabSelected(index, tab) },
.fillMaxWidth(), text = {
verticalAlignment = Alignment.CenterVertically, Row(
horizontalArrangement = Arrangement.spacedBy(16.dp), horizontalArrangement = Arrangement.spacedBy(6.dp),
) { verticalAlignment = Alignment.CenterVertically
PrimaryScrollableTabRow( ) {
selectedTabIndex = safeSelectedTabIndex, Icon(
modifier = Modifier.weight(1f), imageVector = tab.icon,
containerColor = scheme.surface, contentDescription = null
contentColor = scheme.onSurface )
) { Text(text = tab.label)
tabs.forEachIndexed { index, tab -> }
Tab(
selected = index == safeSelectedTabIndex,
onClick = { onTabSelected(index, tab) },
text = {
Row(
horizontalArrangement = Arrangement.spacedBy(6.dp),
verticalAlignment = Alignment.CenterVertically
) {
Icon(
imageVector = tab.icon,
contentDescription = null
)
Text(text = tab.label)
}
}
)
} }
} )
} }
} }
} }

View File

@@ -5,218 +5,24 @@ import androidx.compose.ui.graphics.Color
private fun hslColor(hue: Float, saturation: Float, lightness: Float): Color = private fun hslColor(hue: Float, saturation: Float, lightness: Float): Color =
Color.hsl(hue = hue, saturation = saturation / 100f, lightness = lightness / 100f) Color.hsl(hue = hue, saturation = saturation / 100f, lightness = lightness / 100f)
val primaryLight = hslColor(26.9f, 61.4f, 33.5f) val primaryDark = hslColor(255f, 70f, 70f)
val onPrimaryLight = hslColor(0f, 0f, 100f) val onPrimaryDark = hslColor(255f, 60f, 12f)
val primaryContainerLight = hslColor(23.8f, 100f, 88.6f) val primaryContainerDark = hslColor(255f, 70f, 70f)
val onPrimaryContainerLight = hslColor(28.2f, 81.7f, 23.5f) val onPrimaryContainerDark = hslColor(255f, 60f, 12f)
val secondaryLight = hslColor(25f, 25.8f, 36.5f) val secondaryDark = hslColor(255f, 40f, 40f)
val onSecondaryLight = hslColor(0f, 0f, 100f) val onSecondaryDark = hslColor(255f, 40f, 88f)
val secondaryContainerLight = hslColor(23.8f, 100f, 88.6f) val secondaryContainerDark = hslColor(255f, 40f, 40f)
val onSecondaryContainerLight = hslColor(24.5f, 31.9f, 27.1f) val onSecondaryContainerDark = hslColor(255f, 40f, 88f)
val tertiaryLight = hslColor(64.1f, 29.3f, 29.4f) val tertiaryDark = hslColor(255f, 15f, 65f)
val onTertiaryLight = hslColor(0f, 0f, 100f) val onTertiaryDark = hslColor(255f, 15f, 12f)
val tertiaryContainerLight = hslColor(62.1f, 52.8f, 79.2f) val tertiaryContainerDark = hslColor(255f, 15f, 65.0f)
val onTertiaryContainerLight = hslColor(64.4f, 39.0f, 20.6f) val onTertiaryContainerDark = hslColor(255f, 15f, 12f)
val errorLight = hslColor(0f, 75.5f, 41.6f) val errorDark = hslColor(7f, 100f, 84f)
val onErrorLight = hslColor(0f, 0f, 100f) val onErrorDark = hslColor(357f, 100f, 21f)
val errorContainerLight = hslColor(5.9f, 100f, 92.0f) val errorContainerDark = hslColor(355f, 100f, 29f)
val onErrorContainerLight = hslColor(355.9f, 100f, 28.8f) val onErrorContainerDark = hslColor(6f, 100f, 92f)
val backgroundLight = hslColor(18f, 100f, 98.0f) val backgroundDark = hslColor(255f, 60f, 8f)
val onBackgroundLight = hslColor(23.1f, 23.6f, 10.8f) val onBackgroundDark = hslColor(255f, 60f, 94f)
val surfaceLight = hslColor(18f, 100f, 98.0f) val surfaceDark = hslColor(255f, 40f, 12f)
val onSurfaceLight = hslColor(23.1f, 23.6f, 10.8f) val onSurfaceDark = hslColor(255f, 40f, 92f)
val surfaceVariantLight = hslColor(23.6f, 57.9f, 88.8f) val surfaceContainerDark = hslColor(255f, 40f, 12f)
val onSurfaceVariantLight = hslColor(23.5f, 16.3f, 27.6f)
val outlineLight = hslColor(23.1f, 10.9f, 46.7f)
val outlineVariantLight = hslColor(23.2f, 27.4f, 77.8f)
val scrimLight = hslColor(0f, 0f, 0f)
val inverseSurfaceLight = hslColor(24f, 15.5f, 19.0f)
val inverseOnSurfaceLight = hslColor(23.1f, 92.9f, 94.5f)
val inversePrimaryLight = hslColor(25.2f, 100f, 75.7f)
val surfaceDimLight = hslColor(21.6f, 34.2f, 85.7f)
val surfaceBrightLight = hslColor(18f, 100f, 98.0f)
val surfaceContainerLowestLight = hslColor(0f, 0f, 100f)
val surfaceContainerLowLight = hslColor(21.8f, 100f, 95.7f)
val surfaceContainerLight = hslColor(23.1f, 76.5f, 93.3f)
val surfaceContainerHighLight = hslColor(21.6f, 55.6f, 91.2f)
val surfaceContainerHighestLight = hslColor(20.8f, 46.4f, 89.0f)
val primaryLightMediumContrast = hslColor(29.0f, 100f, 17.1f)
val onPrimaryLightMediumContrast = hslColor(0f, 0f, 100f)
val primaryContainerLightMediumContrast = hslColor(26.4f, 54.2f, 39.4f)
val onPrimaryContainerLightMediumContrast = hslColor(0f, 0f, 100f)
val secondaryLightMediumContrast = hslColor(24.9f, 39.0f, 20.6f)
val onSecondaryLightMediumContrast = hslColor(0f, 0f, 100f)
val secondaryContainerLightMediumContrast = hslColor(24f, 23.1f, 42.4f)
val onSecondaryContainerLightMediumContrast = hslColor(0f, 0f, 100f)
val tertiaryLightMediumContrast = hslColor(64.5f, 54.1f, 14.5f)
val onTertiaryLightMediumContrast = hslColor(0f, 0f, 100f)
val tertiaryContainerLightMediumContrast = hslColor(63.9f, 25.8f, 34.9f)
val onTertiaryContainerLightMediumContrast = hslColor(0f, 0f, 100f)
val errorLightMediumContrast = hslColor(356.9f, 100f, 22.7f)
val onErrorLightMediumContrast = hslColor(0f, 0f, 100f)
val errorContainerLightMediumContrast = hslColor(1.8f, 68.3f, 48.2f)
val onErrorContainerLightMediumContrast = hslColor(0f, 0f, 100f)
val backgroundLightMediumContrast = hslColor(18f, 100f, 98.0f)
val onBackgroundLightMediumContrast = hslColor(23.1f, 23.6f, 10.8f)
val surfaceLightMediumContrast = hslColor(18f, 100f, 98.0f)
val onSurfaceLightMediumContrast = hslColor(25f, 35.3f, 6.7f)
val surfaceVariantLightMediumContrast = hslColor(23.6f, 57.9f, 88.8f)
val onSurfaceVariantLightMediumContrast = hslColor(25.7f, 19.6f, 21.0f)
val outlineLightMediumContrast = hslColor(25f, 14.6f, 32.2f)
val outlineVariantLightMediumContrast = hslColor(23.1f, 11.9f, 42.7f)
val scrimLightMediumContrast = hslColor(0f, 0f, 0f)
val inverseSurfaceLightMediumContrast = hslColor(24f, 15.5f, 19.0f)
val inverseOnSurfaceLightMediumContrast = hslColor(23.1f, 92.9f, 94.5f)
val inversePrimaryLightMediumContrast = hslColor(25.2f, 100f, 75.7f)
val surfaceDimLightMediumContrast = hslColor(22.5f, 21.4f, 78.0f)
val surfaceBrightLightMediumContrast = hslColor(18f, 100f, 98.0f)
val surfaceContainerLowestLightMediumContrast = hslColor(0f, 0f, 100f)
val surfaceContainerLowLightMediumContrast = hslColor(21.8f, 100f, 95.7f)
val surfaceContainerLightMediumContrast = hslColor(21.6f, 55.6f, 91.2f)
val surfaceContainerHighLightMediumContrast = hslColor(21.6f, 37.3f, 86.9f)
val surfaceContainerHighestLightMediumContrast = hslColor(22.5f, 26.7f, 82.4f)
val primaryLightHighContrast = hslColor(27.9f, 100f, 14.3f)
val onPrimaryLightHighContrast = hslColor(0f, 0f, 100f)
val primaryContainerLightHighContrast = hslColor(28.5f, 79.2f, 24.5f)
val onPrimaryContainerLightHighContrast = hslColor(0f, 0f, 100f)
val secondaryLightHighContrast = hslColor(25.3f, 45.2f, 16.5f)
val onSecondaryLightHighContrast = hslColor(0f, 0f, 100f)
val secondaryContainerLightHighContrast = hslColor(25.9f, 31.0f, 27.8f)
val onSecondaryContainerLightHighContrast = hslColor(0f, 0f, 100f)
val tertiaryLightHighContrast = hslColor(63.1f, 73.6f, 10.4f)
val onTertiaryLightHighContrast = hslColor(0f, 0f, 100f)
val tertiaryContainerLightHighContrast = hslColor(64.3f, 38.2f, 21.6f)
val onTertiaryContainerLightHighContrast = hslColor(0f, 0f, 100f)
val errorLightHighContrast = hslColor(357.5f, 100f, 18.8f)
val onErrorLightHighContrast = hslColor(0f, 0f, 100f)
val errorContainerLightHighContrast = hslColor(356.1f, 100f, 29.8f)
val onErrorContainerLightHighContrast = hslColor(0f, 0f, 100f)
val backgroundLightHighContrast = hslColor(18f, 100f, 98.0f)
val onBackgroundLightHighContrast = hslColor(23.1f, 23.6f, 10.8f)
val surfaceLightHighContrast = hslColor(18f, 100f, 98.0f)
val onSurfaceLightHighContrast = hslColor(0f, 0f, 0f)
val surfaceVariantLightHighContrast = hslColor(23.6f, 57.9f, 88.8f)
val onSurfaceVariantLightHighContrast = hslColor(0f, 0f, 0f)
val outlineLightHighContrast = hslColor(24f, 22.7f, 17.3f)
val outlineVariantLightHighContrast = hslColor(21.8f, 15.1f, 28.6f)
val scrimLightHighContrast = hslColor(0f, 0f, 0f)
val inverseSurfaceLightHighContrast = hslColor(24f, 15.5f, 19.0f)
val inverseOnSurfaceLightHighContrast = hslColor(0f, 0f, 100f)
val inversePrimaryLightHighContrast = hslColor(25.2f, 100f, 75.7f)
val surfaceDimLightHighContrast = hslColor(22.5f, 17.1f, 72.5f)
val surfaceBrightLightHighContrast = hslColor(18f, 100f, 98.0f)
val surfaceContainerLowestLightHighContrast = hslColor(0f, 0f, 100f)
val surfaceContainerLowLightHighContrast = hslColor(23.1f, 92.9f, 94.5f)
val surfaceContainerLightHighContrast = hslColor(20.8f, 46.4f, 89.0f)
val surfaceContainerHighLightHighContrast = hslColor(21.6f, 29.4f, 83.3f)
val surfaceContainerHighestLightHighContrast = hslColor(22.5f, 21.4f, 78.0f)
val primaryDark = hslColor(25.2f, 100f, 75.7f)
val onPrimaryDark = hslColor(28.1f, 100f, 15.5f)
val primaryContainerDark = hslColor(28.2f, 81.7f, 23.5f)
val onPrimaryContainerDark = hslColor(23.8f, 100f, 88.6f)
val secondaryDark = hslColor(23.6f, 53.0f, 77.5f)
val onSecondaryDark = hslColor(24.6f, 41.9f, 18.2f)
val secondaryContainerDark = hslColor(24.5f, 31.9f, 27.1f)
val onSecondaryContainerDark = hslColor(23.8f, 100f, 88.6f)
val tertiaryDark = hslColor(63.3f, 33.7f, 68.6f)
val onTertiaryDark = hslColor(64.5f, 64.5f, 12.2f)
val tertiaryContainerDark = hslColor(64.4f, 39.0f, 20.6f)
val onTertiaryContainerDark = hslColor(62.1f, 52.8f, 79.2f)
val errorDark = hslColor(6.4f, 100f, 83.5f)
val onErrorDark = hslColor(357.1f, 100f, 20.6f)
val errorContainerDark = hslColor(355.9f, 100f, 28.8f)
val onErrorContainerDark = hslColor(5.9f, 100f, 92.0f)
val backgroundDark = hslColor(25f, 31.6f, 7.5f)
val onBackgroundDark = hslColor(20.8f, 46.4f, 89.0f)
val surfaceDark = hslColor(25f, 31.6f, 7.5f)
val onSurfaceDark = hslColor(20.8f, 46.4f, 89.0f)
val surfaceVariantDark = hslColor(23.5f, 16.3f, 27.6f)
val onSurfaceVariantDark = hslColor(23.2f, 27.4f, 77.8f)
val outlineDark = hslColor(21.4f, 12.7f, 56.9f)
val outlineVariantDark = hslColor(23.5f, 16.3f, 27.6f)
val scrimDark = hslColor(0f, 0f, 0f)
val inverseSurfaceDark = hslColor(20.8f, 46.4f, 89.0f)
val inverseOnSurfaceDark = hslColor(24f, 15.5f, 19.0f)
val inversePrimaryDark = hslColor(26.9f, 61.4f, 33.5f)
val surfaceDimDark = hslColor(25f, 31.6f, 7.5f)
val surfaceBrightDark = hslColor(22.5f, 14.0f, 22.4f)
val surfaceContainerLowestDark = hslColor(25f, 42.9f, 5.5f)
val surfaceContainerLowDark = hslColor(23.1f, 23.6f, 10.8f)
val surfaceContainerDark = hslColor(25.7f, 22.6f, 12.2f)
val surfaceContainerHighDark = hslColor(24f, 18.1f, 16.3f)
val surfaceContainerHighestDark = hslColor(24f, 14.3f, 20.6f)
val primaryDarkMediumContrast = hslColor(24.2f, 100f, 85.9f)
val onPrimaryDarkMediumContrast = hslColor(26.7f, 100f, 12.4f)
val primaryContainerDarkMediumContrast = hslColor(25.7f, 50.6f, 53.9f)
val onPrimaryContainerDarkMediumContrast = hslColor(0f, 0f, 0f)
val secondaryDarkMediumContrast = hslColor(23.8f, 88.7f, 86.1f)
val onSecondaryDarkMediumContrast = hslColor(25.9f, 52.1f, 13.9f)
val secondaryContainerDarkMediumContrast = hslColor(24f, 24.7f, 56.3f)
val onSecondaryContainerDarkMediumContrast = hslColor(0f, 0f, 0f)
val tertiaryDarkMediumContrast = hslColor(63.3f, 47.0f, 77.1f)
val onTertiaryDarkMediumContrast = hslColor(64.9f, 86.0f, 8.4f)
val tertiaryContainerDarkMediumContrast = hslColor(63.7f, 19.8f, 48.4f)
val onTertiaryContainerDarkMediumContrast = hslColor(0f, 0f, 0f)
val errorDarkMediumContrast = hslColor(7.1f, 100f, 90f)
val onErrorDarkMediumContrast = hslColor(357.9f, 100f, 16.5f)
val errorContainerDarkMediumContrast = hslColor(3.6f, 100f, 64.3f)
val onErrorContainerDarkMediumContrast = hslColor(0f, 0f, 0f)
val backgroundDarkMediumContrast = hslColor(25f, 31.6f, 7.5f)
val onBackgroundDarkMediumContrast = hslColor(20.8f, 46.4f, 89.0f)
val surfaceDarkMediumContrast = hslColor(25f, 31.6f, 7.5f)
val onSurfaceDarkMediumContrast = hslColor(0f, 0f, 100f)
val surfaceVariantDarkMediumContrast = hslColor(23.5f, 16.3f, 27.6f)
val onSurfaceVariantDarkMediumContrast = hslColor(21.8f, 47.8f, 86.5f)
val outlineDarkMediumContrast = hslColor(22f, 19.5f, 69.8f)
val outlineVariantDarkMediumContrast = hslColor(23.6f, 12.6f, 56.5f)
val scrimDarkMediumContrast = hslColor(0f, 0f, 0f)
val inverseSurfaceDarkMediumContrast = hslColor(20.8f, 46.4f, 89.0f)
val inverseOnSurfaceDarkMediumContrast = hslColor(24f, 18.1f, 16.3f)
val inversePrimaryDarkMediumContrast = hslColor(27.9f, 80.5f, 24.1f)
val surfaceDimDarkMediumContrast = hslColor(25f, 31.6f, 7.5f)
val surfaceBrightDarkMediumContrast = hslColor(21.2f, 12.4f, 26.9f)
val surfaceContainerLowestDarkMediumContrast = hslColor(20f, 60f, 2.9f)
val surfaceContainerLowDarkMediumContrast = hslColor(25.7f, 24.1f, 11.4f)
val surfaceContainerDarkMediumContrast = hslColor(24f, 19.0f, 15.5f)
val surfaceContainerHighDarkMediumContrast = hslColor(24f, 14.9f, 19.8f)
val surfaceContainerHighestDarkMediumContrast = hslColor(24.7f, 13.8f, 24.1f)
val primaryDarkHighContrast = hslColor(20.7f, 100f, 94.3f)
val onPrimaryDarkHighContrast = hslColor(0f, 0f, 0f)
val primaryContainerDarkHighContrast = hslColor(25.5f, 98.5f, 73.7f)
val onPrimaryContainerDarkHighContrast = hslColor(18.3f, 100f, 4.5f)
val secondaryDarkHighContrast = hslColor(20.7f, 100f, 94.3f)
val onSecondaryDarkHighContrast = hslColor(0f, 0f, 0f)
val secondaryContainerDarkHighContrast = hslColor(23.6f, 49.6f, 75.9f)
val onSecondaryContainerDarkHighContrast = hslColor(18.3f, 100f, 4.5f)
val tertiaryDarkHighContrast = hslColor(63.2f, 72.2f, 84.5f)
val onTertiaryDarkHighContrast = hslColor(0f, 0f, 0f)
val tertiaryContainerDarkHighContrast = hslColor(63.4f, 31.7f, 67.3f)
val onTertiaryContainerDarkHighContrast = hslColor(65f, 100f, 2.4f)
val errorDarkHighContrast = hslColor(8.2f, 100f, 95.7f)
val onErrorDarkHighContrast = hslColor(0f, 0f, 0f)
val errorContainerDarkHighContrast = hslColor(6.6f, 100f, 82.2f)
val onErrorContainerDarkHighContrast = hslColor(358.2f, 100f, 6.7f)
val backgroundDarkHighContrast = hslColor(25f, 31.6f, 7.5f)
val onBackgroundDarkHighContrast = hslColor(20.8f, 46.4f, 89.0f)
val surfaceDarkHighContrast = hslColor(25f, 31.6f, 7.5f)
val onSurfaceDarkHighContrast = hslColor(0f, 0f, 100f)
val surfaceVariantDarkHighContrast = hslColor(23.5f, 16.3f, 27.6f)
val onSurfaceVariantDarkHighContrast = hslColor(0f, 0f, 100f)
val outlineDarkHighContrast = hslColor(20.7f, 100f, 94.3f)
val outlineVariantDarkHighContrast = hslColor(23.2f, 25.6f, 76.3f)
val scrimDarkHighContrast = hslColor(0f, 0f, 0f)
val inverseSurfaceDarkHighContrast = hslColor(20.8f, 46.4f, 89.0f)
val inverseOnSurfaceDarkHighContrast = hslColor(0f, 0f, 0f)
val inversePrimaryDarkHighContrast = hslColor(27.9f, 80.5f, 24.1f)
val surfaceDimDarkHighContrast = hslColor(25f, 31.6f, 7.5f)
val surfaceBrightDarkHighContrast = hslColor(23.3f, 11.2f, 31.4f)
val surfaceContainerLowestDarkHighContrast = hslColor(0f, 0f, 0f)
val surfaceContainerLowDarkHighContrast = hslColor(25.7f, 22.6f, 12.2f)
val surfaceContainerDarkHighContrast = hslColor(24f, 15.5f, 19.0f)
val surfaceContainerHighDarkHighContrast = hslColor(22.5f, 13.6f, 23.1f)
val surfaceContainerHighestDarkHighContrast = hslColor(24.7f, 12.1f, 27.6f)

View File

@@ -5,50 +5,10 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.darkColorScheme import androidx.compose.material3.darkColorScheme
import androidx.compose.material3.dynamicDarkColorScheme import androidx.compose.material3.dynamicDarkColorScheme
import androidx.compose.material3.dynamicLightColorScheme import androidx.compose.material3.dynamicLightColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable import androidx.compose.runtime.Immutable
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
private 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,
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,
)
private val darkScheme = darkColorScheme( private val darkScheme = darkColorScheme(
primary = primaryDark, primary = primaryDark,
onPrimary = onPrimaryDark, onPrimary = onPrimaryDark,
@@ -70,173 +30,7 @@ private val darkScheme = darkColorScheme(
onBackground = onBackgroundDark, onBackground = onBackgroundDark,
surface = surfaceDark, surface = surfaceDark,
onSurface = onSurfaceDark, onSurface = onSurfaceDark,
surfaceVariant = surfaceVariantDark, surfaceContainer = surfaceContainerDark
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,
)
private val mediumContrastLightColorScheme = lightColorScheme(
primary = primaryLightMediumContrast,
onPrimary = onPrimaryLightMediumContrast,
primaryContainer = primaryContainerLightMediumContrast,
onPrimaryContainer = onPrimaryContainerLightMediumContrast,
secondary = secondaryLightMediumContrast,
onSecondary = onSecondaryLightMediumContrast,
secondaryContainer = secondaryContainerLightMediumContrast,
onSecondaryContainer = onSecondaryContainerLightMediumContrast,
tertiary = tertiaryLightMediumContrast,
onTertiary = onTertiaryLightMediumContrast,
tertiaryContainer = tertiaryContainerLightMediumContrast,
onTertiaryContainer = onTertiaryContainerLightMediumContrast,
error = errorLightMediumContrast,
onError = onErrorLightMediumContrast,
errorContainer = errorContainerLightMediumContrast,
onErrorContainer = onErrorContainerLightMediumContrast,
background = backgroundLightMediumContrast,
onBackground = onBackgroundLightMediumContrast,
surface = surfaceLightMediumContrast,
onSurface = onSurfaceLightMediumContrast,
surfaceVariant = surfaceVariantLightMediumContrast,
onSurfaceVariant = onSurfaceVariantLightMediumContrast,
outline = outlineLightMediumContrast,
outlineVariant = outlineVariantLightMediumContrast,
scrim = scrimLightMediumContrast,
inverseSurface = inverseSurfaceLightMediumContrast,
inverseOnSurface = inverseOnSurfaceLightMediumContrast,
inversePrimary = inversePrimaryLightMediumContrast,
surfaceDim = surfaceDimLightMediumContrast,
surfaceBright = surfaceBrightLightMediumContrast,
surfaceContainerLowest = surfaceContainerLowestLightMediumContrast,
surfaceContainerLow = surfaceContainerLowLightMediumContrast,
surfaceContainer = surfaceContainerLightMediumContrast,
surfaceContainerHigh = surfaceContainerHighLightMediumContrast,
surfaceContainerHighest = surfaceContainerHighestLightMediumContrast,
)
private val highContrastLightColorScheme = lightColorScheme(
primary = primaryLightHighContrast,
onPrimary = onPrimaryLightHighContrast,
primaryContainer = primaryContainerLightHighContrast,
onPrimaryContainer = onPrimaryContainerLightHighContrast,
secondary = secondaryLightHighContrast,
onSecondary = onSecondaryLightHighContrast,
secondaryContainer = secondaryContainerLightHighContrast,
onSecondaryContainer = onSecondaryContainerLightHighContrast,
tertiary = tertiaryLightHighContrast,
onTertiary = onTertiaryLightHighContrast,
tertiaryContainer = tertiaryContainerLightHighContrast,
onTertiaryContainer = onTertiaryContainerLightHighContrast,
error = errorLightHighContrast,
onError = onErrorLightHighContrast,
errorContainer = errorContainerLightHighContrast,
onErrorContainer = onErrorContainerLightHighContrast,
background = backgroundLightHighContrast,
onBackground = onBackgroundLightHighContrast,
surface = surfaceLightHighContrast,
onSurface = onSurfaceLightHighContrast,
surfaceVariant = surfaceVariantLightHighContrast,
onSurfaceVariant = onSurfaceVariantLightHighContrast,
outline = outlineLightHighContrast,
outlineVariant = outlineVariantLightHighContrast,
scrim = scrimLightHighContrast,
inverseSurface = inverseSurfaceLightHighContrast,
inverseOnSurface = inverseOnSurfaceLightHighContrast,
inversePrimary = inversePrimaryLightHighContrast,
surfaceDim = surfaceDimLightHighContrast,
surfaceBright = surfaceBrightLightHighContrast,
surfaceContainerLowest = surfaceContainerLowestLightHighContrast,
surfaceContainerLow = surfaceContainerLowLightHighContrast,
surfaceContainer = surfaceContainerLightHighContrast,
surfaceContainerHigh = surfaceContainerHighLightHighContrast,
surfaceContainerHighest = surfaceContainerHighestLightHighContrast,
)
private val mediumContrastDarkColorScheme = darkColorScheme(
primary = primaryDarkMediumContrast,
onPrimary = onPrimaryDarkMediumContrast,
primaryContainer = primaryContainerDarkMediumContrast,
onPrimaryContainer = onPrimaryContainerDarkMediumContrast,
secondary = secondaryDarkMediumContrast,
onSecondary = onSecondaryDarkMediumContrast,
secondaryContainer = secondaryContainerDarkMediumContrast,
onSecondaryContainer = onSecondaryContainerDarkMediumContrast,
tertiary = tertiaryDarkMediumContrast,
onTertiary = onTertiaryDarkMediumContrast,
tertiaryContainer = tertiaryContainerDarkMediumContrast,
onTertiaryContainer = onTertiaryContainerDarkMediumContrast,
error = errorDarkMediumContrast,
onError = onErrorDarkMediumContrast,
errorContainer = errorContainerDarkMediumContrast,
onErrorContainer = onErrorContainerDarkMediumContrast,
background = backgroundDarkMediumContrast,
onBackground = onBackgroundDarkMediumContrast,
surface = surfaceDarkMediumContrast,
onSurface = onSurfaceDarkMediumContrast,
surfaceVariant = surfaceVariantDarkMediumContrast,
onSurfaceVariant = onSurfaceVariantDarkMediumContrast,
outline = outlineDarkMediumContrast,
outlineVariant = outlineVariantDarkMediumContrast,
scrim = scrimDarkMediumContrast,
inverseSurface = inverseSurfaceDarkMediumContrast,
inverseOnSurface = inverseOnSurfaceDarkMediumContrast,
inversePrimary = inversePrimaryDarkMediumContrast,
surfaceDim = surfaceDimDarkMediumContrast,
surfaceBright = surfaceBrightDarkMediumContrast,
surfaceContainerLowest = surfaceContainerLowestDarkMediumContrast,
surfaceContainerLow = surfaceContainerLowDarkMediumContrast,
surfaceContainer = surfaceContainerDarkMediumContrast,
surfaceContainerHigh = surfaceContainerHighDarkMediumContrast,
surfaceContainerHighest = surfaceContainerHighestDarkMediumContrast,
)
private val highContrastDarkColorScheme = darkColorScheme(
primary = primaryDarkHighContrast,
onPrimary = onPrimaryDarkHighContrast,
primaryContainer = primaryContainerDarkHighContrast,
onPrimaryContainer = onPrimaryContainerDarkHighContrast,
secondary = secondaryDarkHighContrast,
onSecondary = onSecondaryDarkHighContrast,
secondaryContainer = secondaryContainerDarkHighContrast,
onSecondaryContainer = onSecondaryContainerDarkHighContrast,
tertiary = tertiaryDarkHighContrast,
onTertiary = onTertiaryDarkHighContrast,
tertiaryContainer = tertiaryContainerDarkHighContrast,
onTertiaryContainer = onTertiaryContainerDarkHighContrast,
error = errorDarkHighContrast,
onError = onErrorDarkHighContrast,
errorContainer = errorContainerDarkHighContrast,
onErrorContainer = onErrorContainerDarkHighContrast,
background = backgroundDarkHighContrast,
onBackground = onBackgroundDarkHighContrast,
surface = surfaceDarkHighContrast,
onSurface = onSurfaceDarkHighContrast,
surfaceVariant = surfaceVariantDarkHighContrast,
onSurfaceVariant = onSurfaceVariantDarkHighContrast,
outline = outlineDarkHighContrast,
outlineVariant = outlineVariantDarkHighContrast,
scrim = scrimDarkHighContrast,
inverseSurface = inverseSurfaceDarkHighContrast,
inverseOnSurface = inverseOnSurfaceDarkHighContrast,
inversePrimary = inversePrimaryDarkHighContrast,
surfaceDim = surfaceDimDarkHighContrast,
surfaceBright = surfaceBrightDarkHighContrast,
surfaceContainerLowest = surfaceContainerLowestDarkHighContrast,
surfaceContainerLow = surfaceContainerLowDarkHighContrast,
surfaceContainer = surfaceContainerDarkHighContrast,
surfaceContainerHigh = surfaceContainerHighDarkHighContrast,
surfaceContainerHighest = surfaceContainerHighestDarkHighContrast,
) )
@Immutable @Immutable
@@ -247,10 +41,6 @@ data class ColorFamily(
val onColorContainer: Color val onColorContainer: Color
) )
val unspecified_scheme = ColorFamily(
Color.Unspecified, Color.Unspecified, Color.Unspecified, Color.Unspecified
)
@Composable @Composable
fun AppTheme( fun AppTheme(
darkTheme: Boolean = isSystemInDarkTheme(), darkTheme: Boolean = isSystemInDarkTheme(),
@@ -264,7 +54,7 @@ fun AppTheme(
} }
darkTheme -> darkScheme darkTheme -> darkScheme
else -> lightScheme else -> darkScheme
} }
MaterialTheme( MaterialTheme(