Merge changes from topic "278574288" into udc-qpr-dev am: b95485ff17

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23710926

Change-Id: I2eacb6cd7227522b674149c875f09e8d77aa39d7
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Fabian Kozynski
2023-06-27 17:25:00 +00:00
committed by Automerger Merge Worker
35 changed files with 231 additions and 120 deletions

View File

@@ -121,8 +121,8 @@ fun FooterActions(
} }
} }
val backgroundColor = colorAttr(R.attr.underSurfaceColor) val backgroundColor = colorAttr(R.attr.underSurface)
val contentColor = LocalAndroidColorScheme.current.deprecated.textColorPrimary val contentColor = LocalAndroidColorScheme.current.onSurface
val backgroundTopRadius = dimensionResource(R.dimen.qs_corner_radius) val backgroundTopRadius = dimensionResource(R.dimen.qs_corner_radius)
val backgroundModifier = val backgroundModifier =
remember( remember(
@@ -268,7 +268,7 @@ private fun NumberButton(
val interactionSource = remember { MutableInteractionSource() } val interactionSource = remember { MutableInteractionSource() }
Expandable( Expandable(
color = colorAttr(R.attr.offStateColor), color = colorAttr(R.attr.shadeInactive),
shape = CircleShape, shape = CircleShape,
onClick = onClick, onClick = onClick,
interactionSource = interactionSource, interactionSource = interactionSource,
@@ -287,7 +287,7 @@ private fun NumberButton(
number.toString(), number.toString(),
modifier = Modifier.align(Alignment.Center), modifier = Modifier.align(Alignment.Center),
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
color = LocalAndroidColorScheme.current.deprecated.textColorPrimary, color = colorAttr(R.attr.onShadeInactiveVariant),
// TODO(b/242040009): This should only use a standard text style instead and // TODO(b/242040009): This should only use a standard text style instead and
// should not override the text size. // should not override the text size.
fontSize = 18.sp, fontSize = 18.sp,
@@ -305,7 +305,7 @@ private fun NumberButton(
@Composable @Composable
private fun NewChangesDot(modifier: Modifier = Modifier) { private fun NewChangesDot(modifier: Modifier = Modifier) {
val contentDescription = stringResource(R.string.fgs_dot_content_description) val contentDescription = stringResource(R.string.fgs_dot_content_description)
val color = LocalAndroidColorScheme.current.deprecated.colorAccentTertiary val color = LocalAndroidColorScheme.current.tertiary
Canvas(modifier.size(12.dp).semantics { this.contentDescription = contentDescription }) { Canvas(modifier.size(12.dp).semantics { this.contentDescription = contentDescription }) {
drawCircle(color) drawCircle(color)
@@ -323,10 +323,9 @@ private fun TextButton(
) { ) {
Expandable( Expandable(
shape = CircleShape, shape = CircleShape,
color = colorAttr(R.attr.underSurfaceColor), color = colorAttr(R.attr.underSurface),
contentColor = LocalAndroidColorScheme.current.deprecated.textColorSecondary, contentColor = LocalAndroidColorScheme.current.onSurfaceVariant,
borderStroke = borderStroke = BorderStroke(1.dp, colorAttr(R.attr.onShadeActive)),
BorderStroke(1.dp, LocalAndroidColorScheme.current.deprecated.colorBackground),
modifier = modifier.padding(horizontal = 4.dp), modifier = modifier.padding(horizontal = 4.dp),
onClick = onClick, onClick = onClick,
) { ) {

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (C) 2023 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.
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/system_neutral1_500" android:lStar="4" />
</selector>

View File

@@ -26,7 +26,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.QS.SecurityFooter" android:textAppearance="@style/TextAppearance.QS.SecurityFooter"
android:layout_gravity="center" android:layout_gravity="center"
android:textColor="?android:attr/textColorPrimary" android:textColor="?attr/onShadeInactiveVariant"
android:textSize="18sp"/> android:textSize="18sp"/>
<ImageView <ImageView
android:id="@+id/new_dot" android:id="@+id/new_dot"

View File

@@ -33,7 +33,7 @@
android:layout_marginEnd="12dp" android:layout_marginEnd="12dp"
android:contentDescription="@null" android:contentDescription="@null"
android:src="@drawable/ic_info_outline" android:src="@drawable/ic_info_outline"
android:tint="?android:attr/textColorSecondary" /> android:tint="?attr/onSurfaceVariant" />
<TextView <TextView
android:id="@+id/text" android:id="@+id/text"
@@ -43,7 +43,7 @@
android:maxLines="1" android:maxLines="1"
android:ellipsize="end" android:ellipsize="end"
android:textAppearance="@style/TextAppearance.QS.SecurityFooter" android:textAppearance="@style/TextAppearance.QS.SecurityFooter"
android:textColor="?android:attr/textColorSecondary"/> android:textColor="?attr/onSurfaceVariant"/>
<ImageView <ImageView
android:id="@+id/new_dot" android:id="@+id/new_dot"
@@ -62,5 +62,5 @@
android:contentDescription="@null" android:contentDescription="@null"
android:src="@*android:drawable/ic_chevron_end" android:src="@*android:drawable/ic_chevron_end"
android:autoMirrored="true" android:autoMirrored="true"
android:tint="?android:attr/textColorSecondary" /> android:tint="?attr/onSurfaceVariant" />
</com.android.systemui.animation.view.LaunchableLinearLayout> </com.android.systemui.animation.view.LaunchableLinearLayout>

View File

@@ -15,6 +15,6 @@
~ limitations under the License ~ limitations under the License
--> -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="?attr/underSurfaceColor" /> <solid android:color="?attr/underSurface" />
<corners android:radius="@dimen/rounded_slider_background_rounded_corner" /> <corners android:radius="@dimen/rounded_slider_background_rounded_corner" />
</shape> </shape>

View File

@@ -24,7 +24,7 @@
<shape> <shape>
<size android:height="@dimen/rounded_slider_track_width" /> <size android:height="@dimen/rounded_slider_track_width" />
<corners android:radius="@dimen/rounded_slider_track_corner_radius" /> <corners android:radius="@dimen/rounded_slider_track_corner_radius" />
<solid android:color="?attr/offStateColor" /> <solid android:color="?attr/shadeInactive" />
</shape> </shape>
</inset> </inset>
</item> </item>

View File

@@ -22,7 +22,7 @@
android:height="@dimen/rounded_slider_height"> android:height="@dimen/rounded_slider_height">
<shape> <shape>
<size android:height="@dimen/rounded_slider_height" /> <size android:height="@dimen/rounded_slider_height" />
<solid android:color="?priv-android:attr/colorAccentPrimary" /> <solid android:color="?attr/shadeActive" />
<corners android:radius="@dimen/rounded_slider_corner_radius"/> <corners android:radius="@dimen/rounded_slider_corner_radius"/>
</shape> </shape>
</item> </item>
@@ -34,7 +34,7 @@
android:right="@dimen/rounded_slider_icon_inset"> android:right="@dimen/rounded_slider_icon_inset">
<com.android.systemui.util.AlphaTintDrawableWrapper <com.android.systemui.util.AlphaTintDrawableWrapper
android:drawable="@drawable/ic_brightness" android:drawable="@drawable/ic_brightness"
android:tint="?android:attr/textColorPrimaryInverse" android:tint="?attr/onShadeActive"
/> />
</item> </item>
</layer-list> </layer-list>

View File

@@ -19,5 +19,5 @@
android:shape="oval" android:shape="oval"
android:width="12dp" android:width="12dp"
android:height="12dp"> android:height="12dp">
<solid android:color="?androidprv:attr/colorAccentTertiary" /> <solid android:color="?attr/tertiary" />
</shape> </shape>

View File

@@ -15,7 +15,7 @@
--> -->
<inset xmlns:android="http://schemas.android.com/apk/res/android"> <inset xmlns:android="http://schemas.android.com/apk/res/android">
<shape> <shape>
<solid android:color="?attr/underSurfaceColor"/> <solid android:color="?attr/underSurface"/>
<corners android:radius="?android:attr/dialogCornerRadius" /> <corners android:radius="?android:attr/dialogCornerRadius" />
</shape> </shape>
</inset> </inset>

View File

@@ -15,6 +15,6 @@
--> -->
<inset xmlns:android="http://schemas.android.com/apk/res/android"> <inset xmlns:android="http://schemas.android.com/apk/res/android">
<shape> <shape>
<solid android:color="?attr/underSurfaceColor"/> <solid android:color="?attr/underSurface"/>
</shape> </shape>
</inset> </inset>

View File

@@ -28,7 +28,7 @@
<item> <item>
<shape android:shape="rectangle"> <shape android:shape="rectangle">
<corners android:radius="?android:attr/buttonCornerRadius"/> <corners android:radius="?android:attr/buttonCornerRadius"/>
<solid android:color="?androidprv:attr/colorAccentPrimary"/> <solid android:color="?androidprv:attr/materialColorPrimary"/>
<padding android:left="@dimen/dialog_button_horizontal_padding" <padding android:left="@dimen/dialog_button_horizontal_padding"
android:top="@dimen/dialog_button_vertical_padding" android:top="@dimen/dialog_button_vertical_padding"
android:right="@dimen/dialog_button_horizontal_padding" android:right="@dimen/dialog_button_horizontal_padding"

View File

@@ -26,7 +26,7 @@
<item> <item>
<shape android:shape="rectangle"> <shape android:shape="rectangle">
<corners android:radius="18dp"/> <corners android:radius="18dp"/>
<solid android:color="?androidprv:attr/colorAccentPrimary"/> <solid android:color="?androidprv:attr/materialColorPrimaryFixed"/>
</shape> </shape>
</item> </item>
</ripple> </ripple>

View File

@@ -29,7 +29,7 @@
<shape android:shape="rectangle"> <shape android:shape="rectangle">
<corners android:radius="?android:attr/buttonCornerRadius"/> <corners android:radius="?android:attr/buttonCornerRadius"/>
<solid android:color="@android:color/transparent"/> <solid android:color="@android:color/transparent"/>
<stroke android:color="?androidprv:attr/colorAccentPrimaryVariant" <stroke android:color="?androidprv:attr/materialColorPrimary"
android:width="1dp" android:width="1dp"
/> />
<padding android:left="@dimen/dialog_button_horizontal_padding" <padding android:left="@dimen/dialog_button_horizontal_padding"

View File

@@ -28,7 +28,7 @@
</item> </item>
<item> <item>
<shape android:shape="rectangle"> <shape android:shape="rectangle">
<solid android:color="?attr/offStateColor"/> <solid android:color="?attr/shadeInactive"/>
<corners android:radius="@dimen/qs_footer_action_corner_radius"/> <corners android:radius="@dimen/qs_footer_action_corner_radius"/>
</shape> </shape>
</item> </item>

View File

@@ -28,7 +28,7 @@
</item> </item>
<item> <item>
<shape android:shape="rectangle"> <shape android:shape="rectangle">
<solid android:color="?android:attr/colorAccent"/> <solid android:color="?attr/shadeActive"/>
<corners android:radius="@dimen/qs_footer_action_corner_radius"/> <corners android:radius="@dimen/qs_footer_action_corner_radius"/>
</shape> </shape>
</item> </item>

View File

@@ -15,7 +15,7 @@
--> -->
<inset xmlns:android="http://schemas.android.com/apk/res/android"> <inset xmlns:android="http://schemas.android.com/apk/res/android">
<shape> <shape>
<solid android:color="?attr/underSurfaceColor"/> <solid android:color="?attr/underSurface"/>
<corners android:topLeftRadius="@dimen/qs_corner_radius" <corners android:topLeftRadius="@dimen/qs_corner_radius"
android:topRightRadius="@dimen/qs_corner_radius"/> android:topRightRadius="@dimen/qs_corner_radius"/>
</shape> </shape>

View File

@@ -29,7 +29,7 @@
<item> <item>
<shape android:shape="rectangle"> <shape android:shape="rectangle">
<stroke android:width="1dp" <stroke android:width="1dp"
android:color="?android:attr/colorBackground"/> android:color="?attr/shadeInactive"/>
<corners android:radius="@dimen/qs_security_footer_corner_radius"/> <corners android:radius="@dimen/qs_security_footer_corner_radius"/>
</shape> </shape>
</item> </item>

View File

@@ -42,7 +42,7 @@
android:layout_marginBottom="16dp" android:layout_marginBottom="16dp"
android:scaleType="fitCenter" android:scaleType="fitCenter"
android:src="@null" android:src="@null"
android:tint="?androidprv:attr/colorAccentPrimaryVariant" android:tint="?androidprv:attr/materialColorPrimary"
/> />
<TextView <TextView

View File

@@ -53,6 +53,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:tint="?attr/shadeActive"
android:visibility="gone" /> android:visibility="gone" />
<FrameLayout <FrameLayout
@@ -70,7 +71,7 @@
android:focusable="true" android:focusable="true"
android:padding="@dimen/qs_footer_icon_padding" android:padding="@dimen/qs_footer_icon_padding"
android:src="@*android:drawable/ic_mode_edit" android:src="@*android:drawable/ic_mode_edit"
android:tint="?android:attr/textColorPrimary" /> android:tint="?attr/onSurfaceVariant" />
</FrameLayout> </FrameLayout>
</LinearLayout> </LinearLayout>

View File

@@ -54,6 +54,6 @@
android:focusable="false" android:focusable="false"
android:importantForAccessibility="no" android:importantForAccessibility="no"
android:textAppearance="@style/TextAppearance.QS.TileLabel.Secondary" android:textAppearance="@style/TextAppearance.QS.TileLabel.Secondary"
android:textColor="?android:attr/textColorSecondary"/> android:textColor="?attr/onShadeInactive"/>
</com.android.systemui.qs.tileimpl.IgnorableChildLinearLayout> </com.android.systemui.qs.tileimpl.IgnorableChildLinearLayout>

View File

@@ -15,6 +15,7 @@
limitations under the License. limitations under the License.
--> -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical">
@@ -47,7 +48,7 @@
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge" android:textAppearance="@style/TextAppearance.Dialog.Title"
android:fontFamily="@*android:string/config_headlineFontFamily" android:fontFamily="@*android:string/config_headlineFontFamily"
android:text="@string/screenrecord_permission_dialog_title" android:text="@string/screenrecord_permission_dialog_title"
android:layout_marginTop="22dp" android:layout_marginTop="22dp"
@@ -56,8 +57,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/screenrecord_permission_dialog_warning_entire_screen" android:text="@string/screenrecord_permission_dialog_warning_entire_screen"
android:textAppearance="?android:attr/textAppearanceSmall" android:textAppearance="@style/TextAppearance.Dialog.Body.Message"
android:textColor="?android:textColorSecondary"
android:gravity="center" android:gravity="center"
android:layout_marginBottom="20dp"/> android:layout_marginBottom="20dp"/>
@@ -81,6 +81,7 @@
android:minHeight="48dp" android:minHeight="48dp"
android:layout_weight="1" android:layout_weight="1"
android:popupBackground="@drawable/screenrecord_spinner_background" android:popupBackground="@drawable/screenrecord_spinner_background"
android:textColor="?androidprv:attr/materialColorOnSurface"
android:dropDownWidth="274dp" android:dropDownWidth="274dp"
android:prompt="@string/screenrecord_audio_label"/> android:prompt="@string/screenrecord_audio_label"/>
<Switch <Switch
@@ -117,7 +118,7 @@
android:text="@string/screenrecord_taps_label" android:text="@string/screenrecord_taps_label"
android:textAppearance="?android:attr/textAppearanceMedium" android:textAppearance="?android:attr/textAppearanceMedium"
android:fontFamily="@*android:string/config_headlineFontFamily" android:fontFamily="@*android:string/config_headlineFontFamily"
android:textColor="?android:attr/textColorPrimary" android:textColor="?androidprv:attr/materialColorOnSurface"
android:importantForAccessibility="no"/> android:importantForAccessibility="no"/>
<Switch <Switch
android:layout_width="wrap_content" android:layout_width="wrap_content"

View File

@@ -36,14 +36,13 @@
android:layout_width="@dimen/screenrecord_logo_size" android:layout_width="@dimen/screenrecord_logo_size"
android:layout_height="@dimen/screenrecord_logo_size" android:layout_height="@dimen/screenrecord_logo_size"
android:src="@drawable/ic_media_projection_permission" android:src="@drawable/ic_media_projection_permission"
android:tint="?androidprv:attr/colorAccentPrimaryVariant" android:tint="?androidprv:attr/materialColorPrimary"
android:importantForAccessibility="no"/> android:importantForAccessibility="no"/>
<TextView <TextView
android:id="@+id/screen_share_dialog_title" android:id="@+id/screen_share_dialog_title"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge" android:textAppearance="@style/TextAppearance.Dialog.Title"
android:fontFamily="@*android:string/config_headlineFontFamily"
android:layout_marginTop="@dimen/screenrecord_title_margin_top" android:layout_marginTop="@dimen/screenrecord_title_margin_top"
android:gravity="center"/> android:gravity="center"/>
<Spinner <Spinner
@@ -64,8 +63,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/screenrecord_permission_dialog_warning_entire_screen" android:text="@string/screenrecord_permission_dialog_warning_entire_screen"
android:textAppearance="?android:attr/textAppearanceSmall" style="@style/TextAppearance.Dialog.Body.Message"
android:textColor="?android:textColorSecondary"
android:gravity="start" android:gravity="start"
android:lineHeight="@dimen/screenrecord_warning_line_height"/> android:lineHeight="@dimen/screenrecord_warning_line_height"/>

View File

@@ -118,8 +118,25 @@
<attr name="wallpaperTextColorSecondary" format="reference|color" /> <attr name="wallpaperTextColorSecondary" format="reference|color" />
<attr name="wallpaperTextColorAccent" format="reference|color" /> <attr name="wallpaperTextColorAccent" format="reference|color" />
<attr name="backgroundProtectedStyle" format="reference" /> <attr name="backgroundProtectedStyle" format="reference" />
<attr name="offStateColor" format="reference|color" />
<attr name="underSurfaceColor" format="reference|color" /> <!-- color attribute tokens for QS -->
<attr name="isQsTheme" format="boolean" />
<attr name="underSurface" format="reference|color"/>
<attr name="shadeActive" format="reference|color" />
<attr name="onShadeActive" format="reference|color" />
<attr name="onShadeActiveVariant" format="reference|color" />
<attr name="shadeInactive" format="reference|color" />
<attr name="onShadeInactive" format="reference|color" />
<attr name="onShadeInactiveVariant" format="reference|color" />
<attr name="shadeDisabled" format="reference|color" />
<attr name="surfaceBright" format="reference|color" />
<attr name="scHigh" format="reference|color" />
<attr name="tertiary" format="reference|color" />
<attr name="onSurface" format="reference|color" />
<attr name="onSurfaceVariant" format="reference|color" />
<attr name="outline" format="reference|color" />
<attr name="primary" format="reference|color" />
<declare-styleable name="SmartReplyView"> <declare-styleable name="SmartReplyView">
<attr name="spacing" format="dimension" /> <attr name="spacing" format="dimension" />

View File

@@ -83,7 +83,7 @@
<style name="TextAppearance.QS"> <style name="TextAppearance.QS">
<item name="android:textStyle">normal</item> <item name="android:textStyle">normal</item>
<item name="android:textColor">?android:attr/textColorPrimary</item> <item name="android:textColor">?attr/onShadeInactive</item>
<item name="android:fontFamily">@*android:string/config_bodyFontFamily</item> <item name="android:fontFamily">@*android:string/config_bodyFontFamily</item>
</style> </style>
@@ -93,7 +93,7 @@
<style name="TextAppearance.QS.DetailItemSecondary"> <style name="TextAppearance.QS.DetailItemSecondary">
<item name="android:textSize">@dimen/qs_tile_text_size</item> <item name="android:textSize">@dimen/qs_tile_text_size</item>
<item name="android:textColor">?android:attr/colorAccent</item> <item name="android:textColor">?attr/shadeActive</item>
</style> </style>
<style name="TextAppearance.QS.Introduction"> <style name="TextAppearance.QS.Introduction">
@@ -117,11 +117,11 @@
<style name="TextAppearance.QS.DataUsage.Usage"> <style name="TextAppearance.QS.DataUsage.Usage">
<item name="android:textSize">@dimen/qs_data_usage_usage_text_size</item> <item name="android:textSize">@dimen/qs_data_usage_usage_text_size</item>
<item name="android:textColor">?android:attr/colorAccent</item> <item name="android:textColor">?attr/shadeActive</item>
</style> </style>
<style name="TextAppearance.QS.DataUsage.Secondary"> <style name="TextAppearance.QS.DataUsage.Secondary">
<item name="android:textColor">?android:attr/textColorSecondary</item> <item name="android:textColor">?attr/onShadeInactiveVariant</item>
</style> </style>
<style name="TextAppearance.QS.TileLabel"> <style name="TextAppearance.QS.TileLabel">
@@ -137,31 +137,31 @@
<style name="TextAppearance.QS.UserSwitcher"> <style name="TextAppearance.QS.UserSwitcher">
<item name="android:textSize">@dimen/qs_tile_text_size</item> <item name="android:textSize">@dimen/qs_tile_text_size</item>
<item name="android:textColor">?android:attr/textColorSecondary</item> <item name="android:textColor">?androidprv:attr/materialColorOnSurfaceVariant</item>
</style> </style>
<!-- This is hard coded to be sans-serif-condensed to match the icons --> <!-- This is hard coded to be sans-serif-condensed to match the icons -->
<style name="TextAppearance.QS.Status"> <style name="TextAppearance.QS.Status">
<item name="android:fontFamily">@*android:string/config_headlineFontFamily</item> <item name="android:fontFamily">@*android:string/config_headlineFontFamily</item>
<item name="android:textColor">?android:attr/textColorPrimary</item> <item name="android:textColor">?attr/onSurface</item>
<item name="android:textSize">14sp</item> <item name="android:textSize">14sp</item>
<item name="android:letterSpacing">0.01</item> <item name="android:letterSpacing">0.01</item>
</style> </style>
<style name="TextAppearance.QS.SecurityFooter" parent="@style/TextAppearance.QS.Status"> <style name="TextAppearance.QS.SecurityFooter" parent="@style/TextAppearance.QS.Status">
<item name="android:fontFamily">@*android:string/config_bodyFontFamily</item> <item name="android:fontFamily">@*android:string/config_bodyFontFamily</item>
<item name="android:textColor">?android:attr/textColorSecondary</item> <item name="android:textColor">?attr/onSurface</item>
</style> </style>
<style name="TextAppearance.QS.Status.Carriers" /> <style name="TextAppearance.QS.Status.Carriers" />
<style name="TextAppearance.QS.Status.Carriers.NoCarrierText"> <style name="TextAppearance.QS.Status.Carriers.NoCarrierText">
<item name="android:textColor">?android:attr/textColorSecondary</item> <item name="android:textColor">?attr/onSurfaceVariant</item>
</style> </style>
<style name="TextAppearance.QS.Status.Build"> <style name="TextAppearance.QS.Status.Build">
<item name="android:textColor">?android:attr/textColorSecondary</item> <item name="android:textColor">?attr/onSurfaceVariant</item>
</style> </style>
<style name="TextAppearance.DeviceManagementDialog.Title" parent="@android:style/TextAppearance.DeviceDefault.DialogWindowTitle"/> <style name="TextAppearance.DeviceManagementDialog.Title" parent="@android:style/TextAppearance.DeviceDefault.DialogWindowTitle"/>
@@ -278,10 +278,10 @@
<style name="DeviceManagementDialogTitle"> <style name="DeviceManagementDialogTitle">
<item name="android:gravity">center</item> <item name="android:gravity">center</item>
<item name="android:textAppearance">@style/TextAppearance.DeviceManagementDialog.Title</item> <item name="android:textAppearance">@style/TextAppearance.Dialog.Title</item>
</style> </style>
<style name="TextAppearance.DeviceManagementDialog.Content" parent="@*android:style/TextAppearance.DeviceDefault.Subhead"/> <style name="TextAppearance.DeviceManagementDialog.Content" parent="@style/TextAppearance.Dialog.Body.Message"/>
<style name="BaseBrightnessDialogContainer" parent="@style/Theme.SystemUI"> <style name="BaseBrightnessDialogContainer" parent="@style/Theme.SystemUI">
<item name="android:layout_width">match_parent</item> <item name="android:layout_width">match_parent</item>
@@ -371,14 +371,30 @@
</style> </style>
<style name="Theme.SystemUI.QuickSettings" parent="@*android:style/Theme.DeviceDefault"> <style name="Theme.SystemUI.QuickSettings" parent="@*android:style/Theme.DeviceDefault">
<item name="isQsTheme">true</item>
<item name="lightIconTheme">@style/QSIconTheme</item> <item name="lightIconTheme">@style/QSIconTheme</item>
<item name="darkIconTheme">@style/QSIconTheme</item> <item name="darkIconTheme">@style/QSIconTheme</item>
<item name="android:colorError">@*android:color/error_color_material_dark</item> <item name="android:colorError">@*android:color/error_color_material_dark</item>
<item name="android:windowIsFloating">true</item> <item name="android:windowIsFloating">true</item>
<item name="android:homeAsUpIndicator">@drawable/ic_arrow_back</item> <item name="android:homeAsUpIndicator">@drawable/ic_arrow_back</item>
<item name="offStateColor">@color/material_dynamic_neutral20</item>
<item name="underSurfaceColor">@color/material_dynamic_neutral0</item> <item name="surfaceBright">?androidprv:attr/materialColorSurfaceBright</item>
<item name="android:colorBackground">@color/material_dynamic_neutral10</item> <item name="android:colorBackground">?attr/surfaceBright</item>
<item name="scHigh">?androidprv:attr/materialColorSurfaceContainerHigh</item>
<item name="primary">?androidprv:attr/materialColorPrimary</item>
<item name="tertiary">?androidprv:attr/materialColorTertiary</item>
<item name="onSurface">?androidprv:attr/materialColorOnSurface</item>
<item name="onSurfaceVariant">?androidprv:attr/materialColorOnSurfaceVariant</item>
<item name="outline">?androidprv:attr/materialColorOutline</item>
<item name="shadeActive">@color/material_dynamic_primary90</item>
<item name="onShadeActive">@color/material_dynamic_primary10</item>
<item name="onShadeActiveVariant">@color/material_dynamic_primary30</item>
<item name="shadeInactive">@color/material_dynamic_neutral20</item>
<item name="onShadeInactive">@color/material_dynamic_neutral90</item>
<item name="onShadeInactiveVariant">@color/material_dynamic_neutral_variant80</item>
<item name="shadeDisabled">@color/shade_disabled</item>
<item name="underSurface">@color/material_dynamic_neutral0</item>
<item name="android:itemTextAppearance">@style/Control.MenuItem</item> <item name="android:itemTextAppearance">@style/Control.MenuItem</item>
</style> </style>
@@ -390,8 +406,15 @@
<item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowBackground">@android:color/transparent</item>
</style> </style>
<style name="Theme.SystemUI.QuickSettings.Dialog" parent="@android:style/Theme.DeviceDefault.Dialog"> <style name="Theme.SystemUI.QuickSettings.Dialog" parent="@style/Theme.SystemUI.Dialog.QuickSettings">
</style>
<!-- Parent style overrides style in the dot inheritance -->
<style name="Theme.SystemUI.Dialog.QuickSettings" parent="@style/Theme.SystemUI.QuickSettings">
<item name="android:dialogCornerRadius">@dimen/notification_corner_radius</item> <item name="android:dialogCornerRadius">@dimen/notification_corner_radius</item>
<item name="android:buttonBarPositiveButtonStyle">@style/Widget.Dialog.Button.QuickSettings</item>
<item name="android:buttonBarNegativeButtonStyle">@style/Widget.Dialog.Button.QuickSettings</item>
<item name="android:buttonBarNeutralButtonStyle">@style/Widget.Dialog.Button.QuickSettings</item>
</style> </style>
<!-- Overridden by values-television/styles.xml with tv-specific settings --> <!-- Overridden by values-television/styles.xml with tv-specific settings -->
@@ -406,7 +429,7 @@
<item name="android:buttonBarPositiveButtonStyle">@style/Widget.Dialog.Button</item> <item name="android:buttonBarPositiveButtonStyle">@style/Widget.Dialog.Button</item>
<item name="android:buttonBarNegativeButtonStyle">@style/Widget.Dialog.Button.BorderButton</item> <item name="android:buttonBarNegativeButtonStyle">@style/Widget.Dialog.Button.BorderButton</item>
<item name="android:buttonBarNeutralButtonStyle">@style/Widget.Dialog.Button.BorderButton</item> <item name="android:buttonBarNeutralButtonStyle">@style/Widget.Dialog.Button.BorderButton</item>
<item name="android:colorBackground">?androidprv:attr/colorSurface</item> <item name="android:colorBackground">?androidprv:attr/materialColorSurfaceBright</item>
<item name="android:alertDialogStyle">@style/ScrollableAlertDialogStyle</item> <item name="android:alertDialogStyle">@style/ScrollableAlertDialogStyle</item>
<item name="android:buttonBarStyle">@style/ButtonBarStyle</item> <item name="android:buttonBarStyle">@style/ButtonBarStyle</item>
<item name="android:buttonBarButtonStyle">@style/Widget.Dialog.Button.Large</item> <item name="android:buttonBarButtonStyle">@style/Widget.Dialog.Button.Large</item>
@@ -605,11 +628,11 @@
<item name="android:letterSpacing">0.01</item> <item name="android:letterSpacing">0.01</item>
<item name="android:lineHeight">20sp</item> <item name="android:lineHeight">20sp</item>
<item name="android:fontFamily">@*android:string/config_headlineFontFamily</item> <item name="android:fontFamily">@*android:string/config_headlineFontFamily</item>
<item name="android:textColor">?android:attr/textColorSecondary</item> <item name="android:textColor">?attr/onSurfaceVariant</item>
</style> </style>
<style name="QSCustomizeToolbar" parent="@*android:style/Widget.DeviceDefault.Toolbar"> <style name="QSCustomizeToolbar" parent="@*android:style/Widget.DeviceDefault.Toolbar">
<item name="android:textColor">?android:attr/textColorPrimary</item> <item name="android:textColor">?attr/onSurface</item>
<item name="android:elevation">10dp</item> <item name="android:elevation">10dp</item>
</style> </style>
@@ -1055,7 +1078,7 @@
</style> </style>
<style name="TextAppearance.Dialog.Title" parent="@android:style/TextAppearance.DeviceDefault.Large"> <style name="TextAppearance.Dialog.Title" parent="@android:style/TextAppearance.DeviceDefault.Large">
<item name="android:textColor">?android:attr/textColorPrimary</item> <item name="android:textColor">?androidprv:attr/materialColorOnSurface</item>
<item name="android:textSize">@dimen/dialog_title_text_size</item> <item name="android:textSize">@dimen/dialog_title_text_size</item>
<item name="android:fontFamily">@*android:string/config_headlineFontFamily</item> <item name="android:fontFamily">@*android:string/config_headlineFontFamily</item>
<item name="android:lineHeight">32sp</item> <item name="android:lineHeight">32sp</item>
@@ -1064,7 +1087,7 @@
</style> </style>
<style name="TextAppearance.Dialog.Body" parent="@android:style/TextAppearance.DeviceDefault.Medium"> <style name="TextAppearance.Dialog.Body" parent="@android:style/TextAppearance.DeviceDefault.Medium">
<item name="android:textColor">?android:attr/textColorSecondary</item> <item name="android:textColor">?androidprv:attr/materialColorOnSurfaceVariant</item>
<item name="android:textSize">14sp</item> <item name="android:textSize">14sp</item>
<item name="android:fontFamily">@*android:string/config_headlineFontFamily</item> <item name="android:fontFamily">@*android:string/config_headlineFontFamily</item>
<item name="android:lineHeight">20sp</item> <item name="android:lineHeight">20sp</item>
@@ -1092,7 +1115,7 @@
<style name="Widget.Dialog.Button"> <style name="Widget.Dialog.Button">
<item name="android:buttonCornerRadius">28dp</item> <item name="android:buttonCornerRadius">28dp</item>
<item name="android:background">@drawable/qs_dialog_btn_filled</item> <item name="android:background">@drawable/qs_dialog_btn_filled</item>
<item name="android:textColor">?androidprv:attr/textColorOnAccent</item> <item name="android:textColor">?androidprv:attr/materialColorOnPrimary</item>
<item name="android:textSize">14sp</item> <item name="android:textSize">14sp</item>
<item name="android:lineHeight">20sp</item> <item name="android:lineHeight">20sp</item>
<item name="android:fontFamily">@*android:string/config_bodyFontFamilyMedium</item> <item name="android:fontFamily">@*android:string/config_bodyFontFamilyMedium</item>
@@ -1102,12 +1125,18 @@
<style name="Widget.Dialog.Button.BorderButton"> <style name="Widget.Dialog.Button.BorderButton">
<item name="android:background">@drawable/qs_dialog_btn_outline</item> <item name="android:background">@drawable/qs_dialog_btn_outline</item>
<item name="android:textColor">?android:attr/textColorPrimary</item> <item name="android:textColor">?androidprv:attr/materialColorOnSurface</item>
</style> </style>
<style name="Widget.Dialog.Button.Large"> <style name="Widget.Dialog.Button.Large">
<item name="android:background">@drawable/qs_dialog_btn_filled_large</item> <item name="android:background">@drawable/qs_dialog_btn_filled_large</item>
<item name="android:minHeight">56dp</item> <item name="android:minHeight">56dp</item>
<item name="android:textColor">?androidprv:attr/materialColorOnPrimaryFixed</item>
</style>
<style name="Widget.Dialog.Button.QuickSettings">
<item name="android:textColor">?attr/primary</item>
<item name="android:background">?android:attr/selectableItemBackground</item>
</style> </style>
<style name="MainSwitch.Settingslib" parent="@android:style/Theme.DeviceDefault"> <style name="MainSwitch.Settingslib" parent="@android:style/Theme.DeviceDefault">

View File

@@ -18,6 +18,7 @@ package com.android.systemui.qs.external
import android.content.Context import android.content.Context
import android.graphics.drawable.Icon import android.graphics.drawable.Icon
import android.view.ContextThemeWrapper
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.TextView import android.widget.TextView
@@ -66,7 +67,8 @@ class TileRequestDialog(
} }
private fun createTileView(tileData: TileData): QSTileView { private fun createTileView(tileData: TileData): QSTileView {
val tile = QSTileViewImpl(context, QSIconViewImpl(context), true) val themedContext = ContextThemeWrapper(context, R.style.Theme_SystemUI_QuickSettings)
val tile = QSTileViewImpl(themedContext, QSIconViewImpl(themedContext), true)
val state = QSTile.BooleanState().apply { val state = QSTile.BooleanState().apply {
label = tileData.label label = tileData.label
handlesLongClick = false handlesLongClick = false

View File

@@ -244,8 +244,8 @@ class FooterActionsViewBinder @Inject constructor() {
val backgroundResource = val backgroundResource =
when (model.backgroundColor) { when (model.backgroundColor) {
R.attr.offStateColor -> R.drawable.qs_footer_action_circle R.attr.shadeInactive -> R.drawable.qs_footer_action_circle
com.android.internal.R.attr.colorAccent -> R.drawable.qs_footer_action_circle_color R.attr.shadeActive -> R.drawable.qs_footer_action_circle_color
else -> error("Unsupported icon background resource ${model.backgroundColor}") else -> error("Unsupported icon background resource ${model.backgroundColor}")
} }
buttonView.setBackgroundResource(backgroundResource) buttonView.setBackgroundResource(backgroundResource)

View File

@@ -145,8 +145,12 @@ class FooterActionsViewModel(
R.drawable.ic_settings, R.drawable.ic_settings,
ContentDescription.Resource(R.string.accessibility_quick_settings_settings) ContentDescription.Resource(R.string.accessibility_quick_settings_settings)
), ),
iconTint = null, iconTint =
backgroundColor = R.attr.offStateColor, Utils.getColorAttrDefaultColor(
context,
R.attr.onShadeInactiveVariant,
),
backgroundColor = R.attr.shadeInactive,
this::onSettingsButtonClicked, this::onSettingsButtonClicked,
) )
@@ -162,9 +166,9 @@ class FooterActionsViewModel(
iconTint = iconTint =
Utils.getColorAttrDefaultColor( Utils.getColorAttrDefaultColor(
context, context,
com.android.internal.R.attr.textColorOnAccent, R.attr.onShadeActive,
), ),
backgroundColor = com.android.internal.R.attr.colorAccent, backgroundColor = R.attr.shadeActive,
this::onPowerButtonClicked, this::onPowerButtonClicked,
) )
} else { } else {
@@ -264,7 +268,7 @@ class FooterActionsViewModel(
), ),
), ),
iconTint = null, iconTint = null,
backgroundColor = R.attr.offStateColor, backgroundColor = R.attr.shadeInactive,
onClick = this::onUserSwitcherClicked, onClick = this::onUserSwitcherClicked,
) )
} }

View File

@@ -248,13 +248,11 @@ public class QSIconViewImpl extends QSIconView {
*/ */
private static int getIconColorForState(Context context, QSTile.State state) { private static int getIconColorForState(Context context, QSTile.State state) {
if (state.disabledByPolicy || state.state == Tile.STATE_UNAVAILABLE) { if (state.disabledByPolicy || state.state == Tile.STATE_UNAVAILABLE) {
return Utils.getColorAttrDefaultColor( return Utils.getColorAttrDefaultColor(context, R.attr.outline);
context, com.android.internal.R.attr.textColorTertiary);
} else if (state.state == Tile.STATE_INACTIVE) { } else if (state.state == Tile.STATE_INACTIVE) {
return Utils.getColorAttrDefaultColor(context, android.R.attr.textColorPrimary); return Utils.getColorAttrDefaultColor(context, R.attr.onShadeInactiveVariant);
} else if (state.state == Tile.STATE_ACTIVE) { } else if (state.state == Tile.STATE_ACTIVE) {
return Utils.getColorAttrDefaultColor(context, return Utils.getColorAttrDefaultColor(context, R.attr.onShadeActive);
com.android.internal.R.attr.textColorOnAccent);
} else { } else {
Log.e("QSIconView", "Invalid state " + state); Log.e("QSIconView", "Invalid state " + state);
return 0; return 0;

View File

@@ -29,6 +29,7 @@ import android.os.Trace
import android.service.quicksettings.Tile import android.service.quicksettings.Tile
import android.text.TextUtils import android.text.TextUtils
import android.util.Log import android.util.Log
import android.util.TypedValue
import android.view.Gravity import android.view.Gravity
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
@@ -92,24 +93,21 @@ open class QSTileViewImpl @JvmOverloads constructor(
updateHeight() updateHeight()
} }
private val colorActive = Utils.getColorAttrDefaultColor(context, private val colorActive = Utils.getColorAttrDefaultColor(context, R.attr.shadeActive)
com.android.internal.R.attr.colorAccentPrimary) private val colorInactive = Utils.getColorAttrDefaultColor(context, R.attr.shadeInactive)
private val colorInactive = Utils.getColorAttrDefaultColor(context, R.attr.offStateColor) private val colorUnavailable = Utils.getColorAttrDefaultColor(context, R.attr.shadeDisabled)
private val colorUnavailable = Utils.applyAlpha(UNAVAILABLE_ALPHA, colorInactive)
private val colorLabelActive = private val colorLabelActive = Utils.getColorAttrDefaultColor(context, R.attr.onShadeActive)
Utils.getColorAttrDefaultColor(context, com.android.internal.R.attr.textColorOnAccent) private val colorLabelInactive = Utils.getColorAttrDefaultColor(context, R.attr.onShadeInactive)
private val colorLabelInactive =
Utils.getColorAttrDefaultColor(context, android.R.attr.textColorPrimary)
private val colorLabelUnavailable = private val colorLabelUnavailable =
Utils.getColorAttrDefaultColor(context, com.android.internal.R.attr.textColorTertiary) Utils.getColorAttrDefaultColor(context, R.attr.outline)
private val colorSecondaryLabelActive = private val colorSecondaryLabelActive =
Utils.getColorAttrDefaultColor(context, android.R.attr.textColorSecondaryInverse) Utils.getColorAttrDefaultColor(context, R.attr.onShadeActiveVariant)
private val colorSecondaryLabelInactive = private val colorSecondaryLabelInactive =
Utils.getColorAttrDefaultColor(context, android.R.attr.textColorSecondary) Utils.getColorAttrDefaultColor(context, R.attr.onShadeInactiveVariant)
private val colorSecondaryLabelUnavailable = private val colorSecondaryLabelUnavailable =
Utils.getColorAttrDefaultColor(context, com.android.internal.R.attr.textColorTertiary) Utils.getColorAttrDefaultColor(context, R.attr.outline)
private lateinit var label: TextView private lateinit var label: TextView
protected lateinit var secondaryLabel: TextView protected lateinit var secondaryLabel: TextView
@@ -151,6 +149,11 @@ open class QSTileViewImpl @JvmOverloads constructor(
private val locInScreen = IntArray(2) private val locInScreen = IntArray(2)
init { init {
val typedValue = TypedValue()
if (!getContext().theme.resolveAttribute(R.attr.isQsTheme, typedValue, true)) {
throw IllegalStateException("QSViewImpl must be inflated with a theme that contains " +
"Theme.SystemUI.QuickSettings")
}
setId(generateViewId()) setId(generateViewId())
orientation = LinearLayout.HORIZONTAL orientation = LinearLayout.HORIZONTAL
gravity = Gravity.CENTER_VERTICAL or Gravity.START gravity = Gravity.CENTER_VERTICAL or Gravity.START

View File

@@ -15,9 +15,11 @@ package com.android.systemui.qs
import android.graphics.Rect import android.graphics.Rect
import android.testing.AndroidTestingRunner import android.testing.AndroidTestingRunner
import android.testing.TestableContext
import android.testing.TestableLooper import android.testing.TestableLooper
import android.testing.TestableLooper.RunWithLooper import android.testing.TestableLooper.RunWithLooper
import android.testing.ViewUtils import android.testing.ViewUtils
import android.view.ContextThemeWrapper
import android.view.View import android.view.View
import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import android.view.accessibility.AccessibilityNodeInfo import android.view.accessibility.AccessibilityNodeInfo
@@ -55,19 +57,24 @@ class QSPanelTest : SysuiTestCase() {
private lateinit var footer: View private lateinit var footer: View
private val themedContext = TestableContext(
ContextThemeWrapper(context, R.style.Theme_SystemUI_QuickSettings)
)
@Before @Before
@Throws(Exception::class) @Throws(Exception::class)
fun setup() { fun setup() {
MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this)
testableLooper = TestableLooper.get(this) testableLooper = TestableLooper.get(this)
// Apply only the values of the theme that are not defined
testableLooper.runWithLooper { testableLooper.runWithLooper {
qsPanel = QSPanel(context, null) qsPanel = QSPanel(themedContext, null)
qsPanel.mUsingMediaPlayer = true qsPanel.mUsingMediaPlayer = true
qsPanel.initialize(qsLogger) qsPanel.initialize(qsLogger)
// QSPanel inflates a footer inside of it, mocking it here // QSPanel inflates a footer inside of it, mocking it here
footer = LinearLayout(context).apply { id = R.id.qs_footer } footer = LinearLayout(themedContext).apply { id = R.id.qs_footer }
qsPanel.addView(footer, MATCH_PARENT, 100) qsPanel.addView(footer, MATCH_PARENT, 100)
qsPanel.onFinishInflate() qsPanel.onFinishInflate()
// Provides a parent with non-zero size for QSPanel // Provides a parent with non-zero size for QSPanel
@@ -105,12 +112,12 @@ class QSPanelTest : SysuiTestCase() {
qsPanel.tileLayout?.addTile( qsPanel.tileLayout?.addTile(
QSPanelControllerBase.TileRecord( QSPanelControllerBase.TileRecord(
mock(QSTile::class.java), mock(QSTile::class.java),
QSTileViewImpl(context, QSIconViewImpl(context)) QSTileViewImpl(themedContext, QSIconViewImpl(themedContext))
) )
) )
val mediaView = FrameLayout(context) val mediaView = FrameLayout(themedContext)
mediaView.addView(View(context), MATCH_PARENT, 800) mediaView.addView(View(themedContext), MATCH_PARENT, 800)
qsPanel.setUsingHorizontalLayout(/* horizontal */ true, mediaView, /* force */ true) qsPanel.setUsingHorizontalLayout(/* horizontal */ true, mediaView, /* force */ true)
qsPanel.measure( qsPanel.measure(
@@ -135,12 +142,12 @@ class QSPanelTest : SysuiTestCase() {
qsPanel.tileLayout?.addTile( qsPanel.tileLayout?.addTile(
QSPanelControllerBase.TileRecord( QSPanelControllerBase.TileRecord(
mock(QSTile::class.java), mock(QSTile::class.java),
QSTileViewImpl(context, QSIconViewImpl(context)) QSTileViewImpl(themedContext, QSIconViewImpl(themedContext))
) )
) )
val mediaView = FrameLayout(context) val mediaView = FrameLayout(themedContext)
mediaView.addView(View(context), MATCH_PARENT, 800) mediaView.addView(View(themedContext), MATCH_PARENT, 800)
qsPanel.setUsingHorizontalLayout(/* horizontal */ true, mediaView, /* force */ true) qsPanel.setUsingHorizontalLayout(/* horizontal */ true, mediaView, /* force */ true)
qsPanel.measure( qsPanel.measure(
@@ -161,7 +168,10 @@ class QSPanelTest : SysuiTestCase() {
@Test @Test
fun testBottomPadding() { fun testBottomPadding() {
val padding = 10 val padding = 10
context.orCreateTestableResources.addOverride(R.dimen.qs_panel_padding_bottom, padding) themedContext.orCreateTestableResources.addOverride(
R.dimen.qs_panel_padding_bottom,
padding
)
qsPanel.updatePadding() qsPanel.updatePadding()
assertThat(qsPanel.paddingBottom).isEqualTo(padding) assertThat(qsPanel.paddingBottom).isEqualTo(padding)
} }
@@ -170,8 +180,11 @@ class QSPanelTest : SysuiTestCase() {
fun testTopPadding() { fun testTopPadding() {
val padding = 10 val padding = 10
val paddingCombined = 100 val paddingCombined = 100
context.orCreateTestableResources.addOverride(R.dimen.qs_panel_padding_top, padding) themedContext.orCreateTestableResources.addOverride(R.dimen.qs_panel_padding_top, padding)
context.orCreateTestableResources.addOverride(R.dimen.qs_panel_padding_top, paddingCombined) themedContext.orCreateTestableResources.addOverride(
R.dimen.qs_panel_padding_top,
paddingCombined
)
qsPanel.updatePadding() qsPanel.updatePadding()
assertThat(qsPanel.paddingTop).isEqualTo(paddingCombined) assertThat(qsPanel.paddingTop).isEqualTo(paddingCombined)

View File

@@ -26,12 +26,14 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context; import android.content.Context;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
import android.test.suitebuilder.annotation.SmallTest; import android.test.suitebuilder.annotation.SmallTest;
import android.testing.TestableLooper; import android.testing.TestableLooper;
import android.view.ContextThemeWrapper;
import android.view.View; import android.view.View;
import android.view.accessibility.AccessibilityNodeInfo; import android.view.accessibility.AccessibilityNodeInfo;
@@ -56,14 +58,17 @@ public class TileLayoutTest extends SysuiTestCase {
private Resources mResources; private Resources mResources;
private int mLayoutSizeForOneTile; private int mLayoutSizeForOneTile;
private TileLayout mTileLayout; // under test private TileLayout mTileLayout; // under test
private Context mSpyContext;
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
Context context = Mockito.spy(mContext); mSpyContext = Mockito.spy(
mResources = Mockito.spy(context.getResources()); new ContextThemeWrapper(mContext, R.style.Theme_SystemUI_QuickSettings));
Mockito.when(mContext.getResources()).thenReturn(mResources); mResources = Mockito.spy(mSpyContext.getResources());
when(mSpyContext.getResources()).thenReturn(mResources);
mTileLayout = new TileLayout(context); mTileLayout = new TileLayout(mSpyContext);
// Layout needs to leave space for the tile margins. Three times the margin size is // Layout needs to leave space for the tile margins. Three times the margin size is
// sufficient for any number of columns. // sufficient for any number of columns.
mLayoutSizeForOneTile = mLayoutSizeForOneTile =
@@ -73,7 +78,7 @@ public class TileLayoutTest extends SysuiTestCase {
private QSPanelControllerBase.TileRecord createTileRecord() { private QSPanelControllerBase.TileRecord createTileRecord() {
return new QSPanelControllerBase.TileRecord( return new QSPanelControllerBase.TileRecord(
mock(QSTile.class), mock(QSTile.class),
spy(new QSTileViewImpl(mContext, new QSIconViewImpl(mContext)))); spy(new QSTileViewImpl(mSpyContext, new QSIconViewImpl(mSpyContext))));
} }
@Test @Test
@@ -161,7 +166,7 @@ public class TileLayoutTest extends SysuiTestCase {
.layout(left2.capture(), top2.capture(), right2.capture(), bottom2.capture()); .layout(left2.capture(), top2.capture(), right2.capture(), bottom2.capture());
// We assume two tiles will always fit side-by-side. // We assume two tiles will always fit side-by-side.
assertTrue(mContext.getResources().getInteger(R.integer.quick_settings_num_columns) > 1); assertTrue(mSpyContext.getResources().getInteger(R.integer.quick_settings_num_columns) > 1);
// left <= right, top <= bottom // left <= right, top <= bottom
assertTrue(left1.getValue() <= right1.getValue()); assertTrue(left1.getValue() <= right1.getValue());
@@ -218,16 +223,16 @@ public class TileLayoutTest extends SysuiTestCase {
@Test @Test
public void resourcesChanged_updateResources_returnsTrue() { public void resourcesChanged_updateResources_returnsTrue() {
Mockito.when(mResources.getInteger(R.integer.quick_settings_num_columns)).thenReturn(1); when(mResources.getInteger(R.integer.quick_settings_num_columns)).thenReturn(1);
mTileLayout.updateResources(); // setup with 1 mTileLayout.updateResources(); // setup with 1
Mockito.when(mResources.getInteger(R.integer.quick_settings_num_columns)).thenReturn(2); when(mResources.getInteger(R.integer.quick_settings_num_columns)).thenReturn(2);
assertEquals(true, mTileLayout.updateResources()); assertEquals(true, mTileLayout.updateResources());
} }
@Test @Test
public void resourcesSame_updateResources_returnsFalse() { public void resourcesSame_updateResources_returnsFalse() {
Mockito.when(mResources.getInteger(R.integer.quick_settings_num_columns)).thenReturn(1); when(mResources.getInteger(R.integer.quick_settings_num_columns)).thenReturn(1);
mTileLayout.updateResources(); // setup with 1 mTileLayout.updateResources(); // setup with 1
assertEquals(false, mTileLayout.updateResources()); assertEquals(false, mTileLayout.updateResources());
@@ -250,7 +255,7 @@ public class TileLayoutTest extends SysuiTestCase {
QSPanelControllerBase.TileRecord tileRecord = createTileRecord(); QSPanelControllerBase.TileRecord tileRecord = createTileRecord();
mTileLayout.addTile(tileRecord); mTileLayout.addTile(tileRecord);
FakeTileView tileView = new FakeTileView(mContext); FakeTileView tileView = new FakeTileView(mSpyContext);
QSTile.State state = new QSTile.State(); QSTile.State state = new QSTile.State();
state.label = "TEST LABEL"; state.label = "TEST LABEL";
state.secondaryLabel = "TEST SECONDARY LABEL"; state.secondaryLabel = "TEST SECONDARY LABEL";
@@ -276,9 +281,10 @@ public class TileLayoutTest extends SysuiTestCase {
} }
private void changeFontScaling(float scale) { private void changeFontScaling(float scale) {
Configuration configuration = new Configuration(mContext.getResources().getConfiguration()); Configuration configuration =
new Configuration(mSpyContext.getResources().getConfiguration());
configuration.fontScale = scale; configuration.fontScale = scale;
// updateConfiguration could help update on both resource configuration and displayMetrics // updateConfiguration could help update on both resource configuration and displayMetrics
mContext.getResources().updateConfiguration(configuration, null, null); mSpyContext.getResources().updateConfiguration(configuration, null, null);
} }
} }

View File

@@ -21,6 +21,7 @@ import android.os.UserManager
import android.testing.AndroidTestingRunner import android.testing.AndroidTestingRunner
import android.testing.TestableLooper import android.testing.TestableLooper
import android.testing.TestableLooper.RunWithLooper import android.testing.TestableLooper.RunWithLooper
import android.view.ContextThemeWrapper
import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest
import com.android.settingslib.Utils import com.android.settingslib.Utils
import com.android.settingslib.drawable.UserIconDrawable import com.android.settingslib.drawable.UserIconDrawable
@@ -63,6 +64,8 @@ class FooterActionsViewModelTest : SysuiTestCase() {
private val testScope = TestScope() private val testScope = TestScope()
private lateinit var utils: FooterActionsTestUtils private lateinit var utils: FooterActionsTestUtils
private val themedContext = ContextThemeWrapper(context, R.style.Theme_SystemUI_QuickSettings)
@Before @Before
fun setUp() { fun setUp() {
utils = FooterActionsTestUtils(context, TestableLooper.get(this), testScope.testScheduler) utils = FooterActionsTestUtils(context, TestableLooper.get(this), testScope.testScheduler)
@@ -84,8 +87,14 @@ class FooterActionsViewModelTest : SysuiTestCase() {
ContentDescription.Resource(R.string.accessibility_quick_settings_settings) ContentDescription.Resource(R.string.accessibility_quick_settings_settings)
) )
) )
assertThat(settings.backgroundColor).isEqualTo(R.attr.offStateColor) assertThat(settings.backgroundColor).isEqualTo(R.attr.shadeInactive)
assertThat(settings.iconTint).isNull() assertThat(settings.iconTint)
.isEqualTo(
Utils.getColorAttrDefaultColor(
themedContext,
R.attr.onShadeInactiveVariant,
)
)
} }
@Test @Test
@@ -105,12 +114,12 @@ class FooterActionsViewModelTest : SysuiTestCase() {
ContentDescription.Resource(R.string.accessibility_quick_settings_power_menu) ContentDescription.Resource(R.string.accessibility_quick_settings_power_menu)
) )
) )
assertThat(power.backgroundColor).isEqualTo(com.android.internal.R.attr.colorAccent) assertThat(power.backgroundColor).isEqualTo(R.attr.shadeActive)
assertThat(power.iconTint) assertThat(power.iconTint)
.isEqualTo( .isEqualTo(
Utils.getColorAttrDefaultColor( Utils.getColorAttrDefaultColor(
context, themedContext,
com.android.internal.R.attr.textColorOnAccent, R.attr.onShadeActive,
), ),
) )
} }
@@ -170,7 +179,7 @@ class FooterActionsViewModelTest : SysuiTestCase() {
assertThat(userSwitcher).isNotNull() assertThat(userSwitcher).isNotNull()
assertThat(userSwitcher!!.icon) assertThat(userSwitcher!!.icon)
.isEqualTo(Icon.Loaded(picture, ContentDescription.Loaded("Signed in as foo"))) .isEqualTo(Icon.Loaded(picture, ContentDescription.Loaded("Signed in as foo")))
assertThat(userSwitcher.backgroundColor).isEqualTo(R.attr.offStateColor) assertThat(userSwitcher.backgroundColor).isEqualTo(R.attr.shadeInactive)
// Change the current user name. // Change the current user name.
userSwitcherControllerWrapper.currentUserName = "bar" userSwitcherControllerWrapper.currentUserName = "bar"

View File

@@ -22,6 +22,7 @@ import android.service.quicksettings.Tile
import android.testing.AndroidTestingRunner import android.testing.AndroidTestingRunner
import android.testing.TestableLooper import android.testing.TestableLooper
import android.text.TextUtils import android.text.TextUtils
import android.view.ContextThemeWrapper
import android.view.View import android.view.View
import android.view.accessibility.AccessibilityNodeInfo import android.view.accessibility.AccessibilityNodeInfo
import android.widget.TextView import android.widget.TextView
@@ -386,7 +387,11 @@ class QSTileViewImplTest : SysuiTestCase() {
context: Context, context: Context,
icon: QSIconView, icon: QSIconView,
collapsed: Boolean collapsed: Boolean
) : QSTileViewImpl(context, icon, collapsed) { ) : QSTileViewImpl(
ContextThemeWrapper(context, R.style.Theme_SystemUI_QuickSettings),
icon,
collapsed
) {
fun changeState(state: QSTile.State) { fun changeState(state: QSTile.State) {
handleStateChanged(state) handleStateChanged(state)
} }

View File

@@ -25,6 +25,7 @@ import android.provider.Settings.Global.ZEN_MODE_NO_INTERRUPTIONS
import android.provider.Settings.Global.ZEN_MODE_OFF import android.provider.Settings.Global.ZEN_MODE_OFF
import android.testing.AndroidTestingRunner import android.testing.AndroidTestingRunner
import android.testing.TestableLooper import android.testing.TestableLooper
import android.view.ContextThemeWrapper
import android.view.View import android.view.View
import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest
import com.android.internal.logging.MetricsLogger import com.android.internal.logging.MetricsLogger
@@ -110,7 +111,9 @@ class DndTileTest : SysuiTestCase() {
whenever(qsHost.userId).thenReturn(DEFAULT_USER) whenever(qsHost.userId).thenReturn(DEFAULT_USER)
val wrappedContext = object : ContextWrapper(context) { val wrappedContext = object : ContextWrapper(
ContextThemeWrapper(context, R.style.Theme_SystemUI_QuickSettings)
) {
override fun getSharedPreferences(file: File?, mode: Int): SharedPreferences { override fun getSharedPreferences(file: File?, mode: Int): SharedPreferences {
return sharedPreferences return sharedPreferences
} }

View File

@@ -20,8 +20,10 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import android.content.Context;
import android.testing.AndroidTestingRunner; import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper; import android.testing.TestableLooper;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.widget.TextView; import android.widget.TextView;
@@ -48,7 +50,9 @@ public class ShadeCarrierTest extends SysuiTestCase {
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
mTestableLooper = TestableLooper.get(this); mTestableLooper = TestableLooper.get(this);
LayoutInflater inflater = LayoutInflater.from(mContext); Context themedContext =
new ContextThemeWrapper(mContext, R.style.Theme_SystemUI_QuickSettings);
LayoutInflater inflater = LayoutInflater.from(themedContext);
mContext.ensureTestableResources(); mContext.ensureTestableResources();
mTestableLooper.runWithLooper(() -> mTestableLooper.runWithLooper(() ->
mShadeCarrier = (ShadeCarrier) inflater.inflate(R.layout.shade_carrier, null)); mShadeCarrier = (ShadeCarrier) inflater.inflate(R.layout.shade_carrier, null));