diff options
10 files changed, 11 insertions, 210 deletions
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/theme/SettingsColors.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/theme/SettingsColors.kt deleted file mode 100644 index 0db01e88c608..000000000000 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/theme/SettingsColors.kt +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (C) 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settingslib.spa.framework.theme - -import android.content.Context -import android.os.Build -import androidx.annotation.VisibleForTesting -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.runtime.staticCompositionLocalOf -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalContext - -data class SettingsColorScheme( - val categoryTitle: Color = Color.Unspecified, - val surface: Color = Color.Unspecified, - val surfaceHeader: Color = Color.Unspecified, - val secondaryText: Color = Color.Unspecified, - val primaryContainer: Color = Color.Unspecified, - val onPrimaryContainer: Color = Color.Unspecified, -) - -internal val LocalColorScheme = staticCompositionLocalOf { SettingsColorScheme() } - -@Composable -internal fun settingsColorScheme(isDarkTheme: Boolean): SettingsColorScheme { - val context = LocalContext.current - return remember(isDarkTheme) { - when { - Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { - if (isDarkTheme) dynamicDarkColorScheme(context) - else dynamicLightColorScheme(context) - } - isDarkTheme -> darkColorScheme() - else -> lightColorScheme() - } - } -} - -/** - * Creates a light dynamic color scheme. - * - * Use this function to create a color scheme based off the system wallpaper. If the developer - * changes the wallpaper this color scheme will change accordingly. This dynamic scheme is a - * light theme variant. - * - * @param context The context required to get system resource data. - */ -@VisibleForTesting -internal fun dynamicLightColorScheme(context: Context): SettingsColorScheme { - val tonalPalette = dynamicTonalPalette(context) - return SettingsColorScheme( - categoryTitle = tonalPalette.primary40, - surface = tonalPalette.neutral99, - surfaceHeader = tonalPalette.neutral90, - secondaryText = tonalPalette.neutralVariant30, - primaryContainer = tonalPalette.primary90, - onPrimaryContainer = tonalPalette.neutral10, - ) -} - -/** - * Creates a dark dynamic color scheme. - * - * Use this function to create a color scheme based off the system wallpaper. If the developer - * changes the wallpaper this color scheme will change accordingly. This dynamic scheme is a dark - * theme variant. - * - * @param context The context required to get system resource data. - */ -@VisibleForTesting -internal fun dynamicDarkColorScheme(context: Context): SettingsColorScheme { - val tonalPalette = dynamicTonalPalette(context) - return SettingsColorScheme( - categoryTitle = tonalPalette.primary90, - surface = tonalPalette.neutral20, - surfaceHeader = tonalPalette.neutral30, - secondaryText = tonalPalette.neutralVariant80, - primaryContainer = tonalPalette.secondary90, - onPrimaryContainer = tonalPalette.neutral10, - ) -} - -@VisibleForTesting -internal fun darkColorScheme(): SettingsColorScheme { - val tonalPalette = tonalPalette() - return SettingsColorScheme( - categoryTitle = tonalPalette.primary90, - surface = tonalPalette.neutral20, - surfaceHeader = tonalPalette.neutral30, - secondaryText = tonalPalette.neutralVariant80, - primaryContainer = tonalPalette.secondary90, - onPrimaryContainer = tonalPalette.neutral10, - ) -} - -@VisibleForTesting -internal fun lightColorScheme(): SettingsColorScheme { - val tonalPalette = tonalPalette() - return SettingsColorScheme( - categoryTitle = tonalPalette.primary40, - surface = tonalPalette.neutral99, - surfaceHeader = tonalPalette.neutral90, - secondaryText = tonalPalette.neutralVariant30, - primaryContainer = tonalPalette.primary90, - onPrimaryContainer = tonalPalette.neutral10, - ) -} diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/theme/SettingsTheme.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/theme/SettingsTheme.kt index d14b96020a06..d9f82e8c6986 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/theme/SettingsTheme.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/theme/SettingsTheme.kt @@ -21,7 +21,6 @@ import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider -import androidx.compose.runtime.ReadOnlyComposable /** * The Material 3 Theme for Settings. @@ -35,17 +34,9 @@ fun SettingsTheme(content: @Composable () -> Unit) { typography = rememberSettingsTypography(), ) { CompositionLocalProvider( - LocalColorScheme provides settingsColorScheme(isDarkTheme), LocalContentColor provides MaterialTheme.colorScheme.onSurface, ) { content() } } } - -object SettingsTheme { - val colorScheme: SettingsColorScheme - @Composable - @ReadOnlyComposable - get() = LocalColorScheme.current -} diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/button/ActionButtons.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/button/ActionButtons.kt index 979cf3bddae6..70d353da496c 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/button/ActionButtons.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/button/ActionButtons.kt @@ -88,9 +88,9 @@ private fun RowScope.ActionButton(actionButton: ActionButton) { interactionSource = remember(actionButton) { MutableInteractionSource() }, shape = RectangleShape, colors = ButtonDefaults.filledTonalButtonColors( - containerColor = SettingsTheme.colorScheme.surface, - contentColor = SettingsTheme.colorScheme.categoryTitle, - disabledContainerColor = SettingsTheme.colorScheme.surface, + containerColor = MaterialTheme.colorScheme.surface, + contentColor = MaterialTheme.colorScheme.primary, + disabledContainerColor = MaterialTheme.colorScheme.surface, ), contentPadding = PaddingValues(horizontal = 4.dp, vertical = 20.dp), ) { diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/card/SettingsCard.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/card/SettingsCard.kt index d08d97eb89db..0546719eb8cd 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/card/SettingsCard.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/card/SettingsCard.kt @@ -83,7 +83,7 @@ fun SettingsCardContent( Card( shape = CornerExtraSmall, colors = CardDefaults.cardColors( - containerColor = containerColor.takeOrElse { SettingsTheme.colorScheme.surface }, + containerColor = containerColor.takeOrElse { MaterialTheme.colorScheme.surface }, ), modifier = Modifier .fillMaxWidth() diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/CustomizedAppBar.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/CustomizedAppBar.kt index 706bd0a5d099..36cd136602f3 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/CustomizedAppBar.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/CustomizedAppBar.kt @@ -74,7 +74,6 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Velocity import androidx.compose.ui.unit.dp import com.android.settingslib.spa.framework.theme.SettingsDimension -import com.android.settingslib.spa.framework.theme.SettingsTheme import com.android.settingslib.spa.framework.theme.settingsBackground import kotlin.math.abs import kotlin.math.max @@ -142,7 +141,7 @@ private fun Title(title: String, maxLines: Int = Int.MAX_VALUE) { @Composable private fun topAppBarColors() = TopAppBarColors( containerColor = MaterialTheme.colorScheme.settingsBackground, - scrolledContainerColor = SettingsTheme.colorScheme.surfaceHeader, + scrolledContainerColor = MaterialTheme.colorScheme.surfaceVariant, navigationIconContentColor = MaterialTheme.colorScheme.onSurface, titleContentColor = MaterialTheme.colorScheme.onSurface, actionIconContentColor = MaterialTheme.colorScheme.onSurfaceVariant, diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/SettingsTab.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/SettingsTab.kt index 6f2c38caa3bc..60814bf8cc25 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/SettingsTab.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/SettingsTab.kt @@ -51,8 +51,8 @@ internal fun SettingsTab( .clip(SettingsShape.CornerMedium) .background( color = lerp( - start = SettingsTheme.colorScheme.primaryContainer, - stop = SettingsTheme.colorScheme.surface, + start = MaterialTheme.colorScheme.primaryContainer, + stop = MaterialTheme.colorScheme.surface, fraction = colorFraction, ), ), @@ -61,8 +61,8 @@ internal fun SettingsTab( text = title, style = MaterialTheme.typography.labelLarge, color = lerp( - start = SettingsTheme.colorScheme.onPrimaryContainer, - stop = SettingsTheme.colorScheme.secondaryText, + start = MaterialTheme.colorScheme.onPrimaryContainer, + stop = MaterialTheme.colorScheme.onSurface, fraction = colorFraction, ), ) diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/Category.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/Category.kt index 6aac5bf3839a..48cd145da124 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/Category.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/Category.kt @@ -46,7 +46,7 @@ fun CategoryTitle(title: String) { end = SettingsDimension.itemPaddingEnd, bottom = 8.dp, ), - color = SettingsTheme.colorScheme.categoryTitle, + color = MaterialTheme.colorScheme.primary, style = MaterialTheme.typography.labelMedium, ) } diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/CopyableBody.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/CopyableBody.kt index 930d0a1872ab..99b2524f0f9e 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/CopyableBody.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/CopyableBody.kt @@ -37,7 +37,6 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.unit.DpOffset import com.android.settingslib.spa.framework.theme.SettingsDimension -import com.android.settingslib.spa.framework.theme.SettingsTheme @Composable fun CopyableBody(body: String) { @@ -78,7 +77,7 @@ private fun DropdownMenuTitle(text: String) { top = SettingsDimension.itemPaddingAround, bottom = SettingsDimension.buttonPaddingVertical, ), - color = SettingsTheme.colorScheme.categoryTitle, + color = MaterialTheme.colorScheme.primary, style = MaterialTheme.typography.labelMedium, ) } diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/Text.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/Text.kt index d423d9fe5897..6e5f32ebe545 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/Text.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/Text.kt @@ -47,7 +47,6 @@ fun SettingsTitle( modifier = Modifier .padding(vertical = SettingsDimension.paddingTiny) .contentDescription(contentDescription), - color = MaterialTheme.colorScheme.onSurface, style = MaterialTheme.typography.titleMedium.withWeight(useMediumWeight), ) } diff --git a/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/framework/theme/SettingsColorsTest.kt b/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/framework/theme/SettingsColorsTest.kt deleted file mode 100644 index f3f89e07814f..000000000000 --- a/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/framework/theme/SettingsColorsTest.kt +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settingslib.spa.framework.theme - -import android.content.Context -import androidx.test.core.app.ApplicationProvider -import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.google.common.truth.Truth.assertThat -import org.junit.Test -import org.junit.runner.RunWith -import androidx.compose.ui.graphics.Color - -@RunWith(AndroidJUnit4::class) -class SettingsColorsTest { - private val context: Context = ApplicationProvider.getApplicationContext() - - @Test - fun testDynamicTheme() { - // The dynamic color could be different in different device, just check basic restrictions: - // 1. text color is different with surface color - // 2. primary / spinner color is different with its on-item color - val ls = dynamicLightColorScheme(context) - assertThat(ls.categoryTitle).isNotEqualTo(ls.surface) - assertThat(ls.secondaryText).isNotEqualTo(ls.surface) - assertThat(ls.primaryContainer).isNotEqualTo(ls.onPrimaryContainer) - - val ds = dynamicDarkColorScheme(context) - assertThat(ds.categoryTitle).isNotEqualTo(ds.surface) - assertThat(ds.secondaryText).isNotEqualTo(ds.surface) - assertThat(ds.primaryContainer).isNotEqualTo(ds.onPrimaryContainer) - } - - @Test - fun testStaticTheme() { - val ls = lightColorScheme() - assertThat(ls.categoryTitle).isEqualTo(Color(red = 103, green = 80, blue = 164)) - assertThat(ls.surface).isEqualTo(Color(red = 255, green = 251, blue = 254)) - assertThat(ls.surfaceHeader).isEqualTo(Color(red = 230, green = 225, blue = 229)) - assertThat(ls.secondaryText).isEqualTo(Color(red = 73, green = 69, blue = 79)) - assertThat(ls.primaryContainer).isEqualTo(Color(red = 234, green = 221, blue = 255)) - assertThat(ls.onPrimaryContainer).isEqualTo(Color(red = 28, green = 27, blue = 31)) - - val ds = darkColorScheme() - assertThat(ds.categoryTitle).isEqualTo(Color(red = 234, green = 221, blue = 255)) - assertThat(ds.surface).isEqualTo(Color(red = 49, green = 48, blue = 51)) - assertThat(ds.surfaceHeader).isEqualTo(Color(red = 72, green = 70, blue = 73)) - assertThat(ds.secondaryText).isEqualTo(Color(red = 202, green = 196, blue = 208)) - assertThat(ds.primaryContainer).isEqualTo(Color(red = 232, green = 222, blue = 248)) - assertThat(ds.onPrimaryContainer).isEqualTo(Color(red = 28, green = 27, blue = 31)) - } -} |