|
16 | 16 |
|
17 | 17 | package com.example.jetcaster.ui.theme |
18 | 18 |
|
| 19 | +import android.os.Build |
19 | 20 | import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi |
20 | 21 | import androidx.compose.material3.MaterialExpressiveTheme |
21 | 22 | import androidx.compose.material3.MotionScheme |
22 | 23 | import androidx.compose.material3.darkColorScheme |
| 24 | +import androidx.compose.material3.dynamicDarkColorScheme |
23 | 25 | import androidx.compose.runtime.Composable |
| 26 | +import androidx.compose.ui.platform.LocalContext |
24 | 27 | import com.example.jetcaster.designsystem.theme.JetcasterShapes |
25 | 28 | import com.example.jetcaster.designsystem.theme.JetcasterTypography |
26 | 29 | import com.example.jetcaster.designsystem.theme.backgroundDark |
| 30 | +import com.example.jetcaster.designsystem.theme.backgroundDarkHighContrast |
| 31 | +import com.example.jetcaster.designsystem.theme.backgroundDarkMediumContrast |
27 | 32 | import com.example.jetcaster.designsystem.theme.errorContainerDark |
| 33 | +import com.example.jetcaster.designsystem.theme.errorContainerDarkHighContrast |
| 34 | +import com.example.jetcaster.designsystem.theme.errorContainerDarkMediumContrast |
28 | 35 | import com.example.jetcaster.designsystem.theme.errorDark |
| 36 | +import com.example.jetcaster.designsystem.theme.errorDarkHighContrast |
| 37 | +import com.example.jetcaster.designsystem.theme.errorDarkMediumContrast |
29 | 38 | import com.example.jetcaster.designsystem.theme.inverseOnSurfaceDark |
| 39 | +import com.example.jetcaster.designsystem.theme.inverseOnSurfaceDarkHighContrast |
| 40 | +import com.example.jetcaster.designsystem.theme.inverseOnSurfaceDarkMediumContrast |
30 | 41 | import com.example.jetcaster.designsystem.theme.inversePrimaryDark |
| 42 | +import com.example.jetcaster.designsystem.theme.inversePrimaryDarkHighContrast |
| 43 | +import com.example.jetcaster.designsystem.theme.inversePrimaryDarkMediumContrast |
31 | 44 | import com.example.jetcaster.designsystem.theme.inverseSurfaceDark |
| 45 | +import com.example.jetcaster.designsystem.theme.inverseSurfaceDarkHighContrast |
| 46 | +import com.example.jetcaster.designsystem.theme.inverseSurfaceDarkMediumContrast |
32 | 47 | import com.example.jetcaster.designsystem.theme.onBackgroundDark |
| 48 | +import com.example.jetcaster.designsystem.theme.onBackgroundDarkHighContrast |
| 49 | +import com.example.jetcaster.designsystem.theme.onBackgroundDarkMediumContrast |
33 | 50 | import com.example.jetcaster.designsystem.theme.onErrorContainerDark |
| 51 | +import com.example.jetcaster.designsystem.theme.onErrorContainerDarkHighContrast |
| 52 | +import com.example.jetcaster.designsystem.theme.onErrorContainerDarkMediumContrast |
34 | 53 | import com.example.jetcaster.designsystem.theme.onErrorDark |
| 54 | +import com.example.jetcaster.designsystem.theme.onErrorDarkHighContrast |
| 55 | +import com.example.jetcaster.designsystem.theme.onErrorDarkMediumContrast |
35 | 56 | import com.example.jetcaster.designsystem.theme.onPrimaryContainerDark |
| 57 | +import com.example.jetcaster.designsystem.theme.onPrimaryContainerDarkHighContrast |
| 58 | +import com.example.jetcaster.designsystem.theme.onPrimaryContainerDarkMediumContrast |
36 | 59 | import com.example.jetcaster.designsystem.theme.onPrimaryDark |
| 60 | +import com.example.jetcaster.designsystem.theme.onPrimaryDarkHighContrast |
| 61 | +import com.example.jetcaster.designsystem.theme.onPrimaryDarkMediumContrast |
37 | 62 | import com.example.jetcaster.designsystem.theme.onSecondaryContainerDark |
| 63 | +import com.example.jetcaster.designsystem.theme.onSecondaryContainerDarkHighContrast |
| 64 | +import com.example.jetcaster.designsystem.theme.onSecondaryContainerDarkMediumContrast |
38 | 65 | import com.example.jetcaster.designsystem.theme.onSecondaryDark |
| 66 | +import com.example.jetcaster.designsystem.theme.onSecondaryDarkHighContrast |
| 67 | +import com.example.jetcaster.designsystem.theme.onSecondaryDarkMediumContrast |
39 | 68 | import com.example.jetcaster.designsystem.theme.onSurfaceDark |
| 69 | +import com.example.jetcaster.designsystem.theme.onSurfaceDarkHighContrast |
| 70 | +import com.example.jetcaster.designsystem.theme.onSurfaceDarkMediumContrast |
40 | 71 | import com.example.jetcaster.designsystem.theme.onSurfaceVariantDark |
| 72 | +import com.example.jetcaster.designsystem.theme.onSurfaceVariantDarkHighContrast |
| 73 | +import com.example.jetcaster.designsystem.theme.onSurfaceVariantDarkMediumContrast |
41 | 74 | import com.example.jetcaster.designsystem.theme.onTertiaryContainerDark |
| 75 | +import com.example.jetcaster.designsystem.theme.onTertiaryContainerDarkHighContrast |
| 76 | +import com.example.jetcaster.designsystem.theme.onTertiaryContainerDarkMediumContrast |
42 | 77 | import com.example.jetcaster.designsystem.theme.onTertiaryDark |
| 78 | +import com.example.jetcaster.designsystem.theme.onTertiaryDarkHighContrast |
| 79 | +import com.example.jetcaster.designsystem.theme.onTertiaryDarkMediumContrast |
43 | 80 | import com.example.jetcaster.designsystem.theme.outlineDark |
| 81 | +import com.example.jetcaster.designsystem.theme.outlineDarkHighContrast |
| 82 | +import com.example.jetcaster.designsystem.theme.outlineDarkMediumContrast |
44 | 83 | import com.example.jetcaster.designsystem.theme.outlineVariantDark |
| 84 | +import com.example.jetcaster.designsystem.theme.outlineVariantDarkHighContrast |
| 85 | +import com.example.jetcaster.designsystem.theme.outlineVariantDarkMediumContrast |
45 | 86 | import com.example.jetcaster.designsystem.theme.primaryContainerDark |
| 87 | +import com.example.jetcaster.designsystem.theme.primaryContainerDarkHighContrast |
| 88 | +import com.example.jetcaster.designsystem.theme.primaryContainerDarkMediumContrast |
46 | 89 | import com.example.jetcaster.designsystem.theme.primaryDark |
| 90 | +import com.example.jetcaster.designsystem.theme.primaryDarkHighContrast |
| 91 | +import com.example.jetcaster.designsystem.theme.primaryDarkMediumContrast |
47 | 92 | import com.example.jetcaster.designsystem.theme.scrimDark |
| 93 | +import com.example.jetcaster.designsystem.theme.scrimDarkHighContrast |
| 94 | +import com.example.jetcaster.designsystem.theme.scrimDarkMediumContrast |
48 | 95 | import com.example.jetcaster.designsystem.theme.secondaryContainerDark |
| 96 | +import com.example.jetcaster.designsystem.theme.secondaryContainerDarkHighContrast |
| 97 | +import com.example.jetcaster.designsystem.theme.secondaryContainerDarkMediumContrast |
49 | 98 | import com.example.jetcaster.designsystem.theme.secondaryDark |
| 99 | +import com.example.jetcaster.designsystem.theme.secondaryDarkHighContrast |
| 100 | +import com.example.jetcaster.designsystem.theme.secondaryDarkMediumContrast |
50 | 101 | import com.example.jetcaster.designsystem.theme.surfaceBrightDark |
| 102 | +import com.example.jetcaster.designsystem.theme.surfaceBrightDarkHighContrast |
| 103 | +import com.example.jetcaster.designsystem.theme.surfaceBrightDarkMediumContrast |
51 | 104 | import com.example.jetcaster.designsystem.theme.surfaceContainerDark |
| 105 | +import com.example.jetcaster.designsystem.theme.surfaceContainerDarkHighContrast |
| 106 | +import com.example.jetcaster.designsystem.theme.surfaceContainerDarkMediumContrast |
52 | 107 | import com.example.jetcaster.designsystem.theme.surfaceContainerHighDark |
| 108 | +import com.example.jetcaster.designsystem.theme.surfaceContainerHighDarkHighContrast |
| 109 | +import com.example.jetcaster.designsystem.theme.surfaceContainerHighDarkMediumContrast |
53 | 110 | import com.example.jetcaster.designsystem.theme.surfaceContainerHighestDark |
| 111 | +import com.example.jetcaster.designsystem.theme.surfaceContainerHighestDarkHighContrast |
| 112 | +import com.example.jetcaster.designsystem.theme.surfaceContainerHighestDarkMediumContrast |
54 | 113 | import com.example.jetcaster.designsystem.theme.surfaceContainerLowDark |
| 114 | +import com.example.jetcaster.designsystem.theme.surfaceContainerLowDarkHighContrast |
| 115 | +import com.example.jetcaster.designsystem.theme.surfaceContainerLowDarkMediumContrast |
55 | 116 | import com.example.jetcaster.designsystem.theme.surfaceContainerLowestDark |
| 117 | +import com.example.jetcaster.designsystem.theme.surfaceContainerLowestDarkHighContrast |
| 118 | +import com.example.jetcaster.designsystem.theme.surfaceContainerLowestDarkMediumContrast |
56 | 119 | import com.example.jetcaster.designsystem.theme.surfaceDark |
| 120 | +import com.example.jetcaster.designsystem.theme.surfaceDarkHighContrast |
| 121 | +import com.example.jetcaster.designsystem.theme.surfaceDarkMediumContrast |
57 | 122 | import com.example.jetcaster.designsystem.theme.surfaceDimDark |
| 123 | +import com.example.jetcaster.designsystem.theme.surfaceDimDarkHighContrast |
| 124 | +import com.example.jetcaster.designsystem.theme.surfaceDimDarkMediumContrast |
58 | 125 | import com.example.jetcaster.designsystem.theme.surfaceVariantDark |
| 126 | +import com.example.jetcaster.designsystem.theme.surfaceVariantDarkHighContrast |
| 127 | +import com.example.jetcaster.designsystem.theme.surfaceVariantDarkMediumContrast |
59 | 128 | import com.example.jetcaster.designsystem.theme.tertiaryContainerDark |
| 129 | +import com.example.jetcaster.designsystem.theme.tertiaryContainerDarkHighContrast |
| 130 | +import com.example.jetcaster.designsystem.theme.tertiaryContainerDarkMediumContrast |
60 | 131 | import com.example.jetcaster.designsystem.theme.tertiaryDark |
| 132 | +import com.example.jetcaster.designsystem.theme.tertiaryDarkHighContrast |
| 133 | +import com.example.jetcaster.designsystem.theme.tertiaryDarkMediumContrast |
61 | 134 |
|
62 | 135 | private val darkScheme = darkColorScheme( |
63 | 136 | primary = primaryDark, |
@@ -97,10 +170,92 @@ private val darkScheme = darkColorScheme( |
97 | 170 | surfaceContainerHighest = surfaceContainerHighestDark, |
98 | 171 | ) |
99 | 172 |
|
| 173 | +private val mediumContrastDarkColorScheme = darkColorScheme( |
| 174 | + primary = primaryDarkMediumContrast, |
| 175 | + onPrimary = onPrimaryDarkMediumContrast, |
| 176 | + primaryContainer = primaryContainerDarkMediumContrast, |
| 177 | + onPrimaryContainer = onPrimaryContainerDarkMediumContrast, |
| 178 | + secondary = secondaryDarkMediumContrast, |
| 179 | + onSecondary = onSecondaryDarkMediumContrast, |
| 180 | + secondaryContainer = secondaryContainerDarkMediumContrast, |
| 181 | + onSecondaryContainer = onSecondaryContainerDarkMediumContrast, |
| 182 | + tertiary = tertiaryDarkMediumContrast, |
| 183 | + onTertiary = onTertiaryDarkMediumContrast, |
| 184 | + tertiaryContainer = tertiaryContainerDarkMediumContrast, |
| 185 | + onTertiaryContainer = onTertiaryContainerDarkMediumContrast, |
| 186 | + error = errorDarkMediumContrast, |
| 187 | + onError = onErrorDarkMediumContrast, |
| 188 | + errorContainer = errorContainerDarkMediumContrast, |
| 189 | + onErrorContainer = onErrorContainerDarkMediumContrast, |
| 190 | + background = backgroundDarkMediumContrast, |
| 191 | + onBackground = onBackgroundDarkMediumContrast, |
| 192 | + surface = surfaceDarkMediumContrast, |
| 193 | + onSurface = onSurfaceDarkMediumContrast, |
| 194 | + surfaceVariant = surfaceVariantDarkMediumContrast, |
| 195 | + onSurfaceVariant = onSurfaceVariantDarkMediumContrast, |
| 196 | + outline = outlineDarkMediumContrast, |
| 197 | + outlineVariant = outlineVariantDarkMediumContrast, |
| 198 | + scrim = scrimDarkMediumContrast, |
| 199 | + inverseSurface = inverseSurfaceDarkMediumContrast, |
| 200 | + inverseOnSurface = inverseOnSurfaceDarkMediumContrast, |
| 201 | + inversePrimary = inversePrimaryDarkMediumContrast, |
| 202 | + surfaceDim = surfaceDimDarkMediumContrast, |
| 203 | + surfaceBright = surfaceBrightDarkMediumContrast, |
| 204 | + surfaceContainerLowest = surfaceContainerLowestDarkMediumContrast, |
| 205 | + surfaceContainerLow = surfaceContainerLowDarkMediumContrast, |
| 206 | + surfaceContainer = surfaceContainerDarkMediumContrast, |
| 207 | + surfaceContainerHigh = surfaceContainerHighDarkMediumContrast, |
| 208 | + surfaceContainerHighest = surfaceContainerHighestDarkMediumContrast, |
| 209 | +) |
| 210 | + |
| 211 | +private val highContrastDarkColorScheme = darkColorScheme( |
| 212 | + primary = primaryDarkHighContrast, |
| 213 | + onPrimary = onPrimaryDarkHighContrast, |
| 214 | + primaryContainer = primaryContainerDarkHighContrast, |
| 215 | + onPrimaryContainer = onPrimaryContainerDarkHighContrast, |
| 216 | + secondary = secondaryDarkHighContrast, |
| 217 | + onSecondary = onSecondaryDarkHighContrast, |
| 218 | + secondaryContainer = secondaryContainerDarkHighContrast, |
| 219 | + onSecondaryContainer = onSecondaryContainerDarkHighContrast, |
| 220 | + tertiary = tertiaryDarkHighContrast, |
| 221 | + onTertiary = onTertiaryDarkHighContrast, |
| 222 | + tertiaryContainer = tertiaryContainerDarkHighContrast, |
| 223 | + onTertiaryContainer = onTertiaryContainerDarkHighContrast, |
| 224 | + error = errorDarkHighContrast, |
| 225 | + onError = onErrorDarkHighContrast, |
| 226 | + errorContainer = errorContainerDarkHighContrast, |
| 227 | + onErrorContainer = onErrorContainerDarkHighContrast, |
| 228 | + background = backgroundDarkHighContrast, |
| 229 | + onBackground = onBackgroundDarkHighContrast, |
| 230 | + surface = surfaceDarkHighContrast, |
| 231 | + onSurface = onSurfaceDarkHighContrast, |
| 232 | + surfaceVariant = surfaceVariantDarkHighContrast, |
| 233 | + onSurfaceVariant = onSurfaceVariantDarkHighContrast, |
| 234 | + outline = outlineDarkHighContrast, |
| 235 | + outlineVariant = outlineVariantDarkHighContrast, |
| 236 | + scrim = scrimDarkHighContrast, |
| 237 | + inverseSurface = inverseSurfaceDarkHighContrast, |
| 238 | + inverseOnSurface = inverseOnSurfaceDarkHighContrast, |
| 239 | + inversePrimary = inversePrimaryDarkHighContrast, |
| 240 | + surfaceDim = surfaceDimDarkHighContrast, |
| 241 | + surfaceBright = surfaceBrightDarkHighContrast, |
| 242 | + surfaceContainerLowest = surfaceContainerLowestDarkHighContrast, |
| 243 | + surfaceContainerLow = surfaceContainerLowDarkHighContrast, |
| 244 | + surfaceContainer = surfaceContainerDarkHighContrast, |
| 245 | + surfaceContainerHigh = surfaceContainerHighDarkHighContrast, |
| 246 | + surfaceContainerHighest = surfaceContainerHighestDarkHighContrast, |
| 247 | +) |
| 248 | + |
100 | 249 | @OptIn(ExperimentalMaterial3ExpressiveApi::class) |
101 | 250 | @Composable |
102 | | -fun JetcasterTheme(content: @Composable () -> Unit) { |
103 | | - val colorScheme = darkScheme |
| 251 | +fun JetcasterTheme(dynamicColor: Boolean = false, content: @Composable () -> Unit) { |
| 252 | + val colorScheme = when { |
| 253 | + dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { |
| 254 | + val context = LocalContext.current |
| 255 | + dynamicDarkColorScheme(context) |
| 256 | + } |
| 257 | + else -> darkScheme |
| 258 | + } |
104 | 259 |
|
105 | 260 | MaterialExpressiveTheme( |
106 | 261 | colorScheme = colorScheme, |
|
0 commit comments