Merge "Improve long press menu readability" into tm-dev am: b592a68a65 am: af4a064f4f am: 297594e87f
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18707641
Change-Id: Idf82efd6766c0ced7b293dc77e67349084095b10
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/packages/SystemUI/res/layout/media_long_press_menu.xml b/packages/SystemUI/res/layout/media_long_press_menu.xml
index 99c5e47..a8ddd4c 100644
--- a/packages/SystemUI/res/layout/media_long_press_menu.xml
+++ b/packages/SystemUI/res/layout/media_long_press_menu.xml
@@ -26,7 +26,7 @@
android:layout_marginStart="@dimen/qs_media_padding"
android:layout_marginEnd="@dimen/qs_media_padding"
android:id="@+id/remove_text"
- android:fontFamily="@*android:string/config_headlineFontFamily"
+ android:fontFamily="@*android:string/config_headlineFontFamilyMedium"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
@@ -62,7 +62,6 @@
android:layout_marginEnd="@dimen/qs_media_action_spacing"
android:layout_marginBottom="@dimen/qs_media_padding"
app:layout_constrainedWidth="true"
- app:layout_constraintWidth_min="@dimen/min_clickable_item_size"
app:layout_constraintHeight_min="@dimen/min_clickable_item_size"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
@@ -73,6 +72,7 @@
android:id="@+id/dismiss_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ app:layout_constraintWidth_min="@dimen/min_clickable_item_size"
android:layout_gravity="center|top"
style="@style/MediaPlayer.SolidButton"
android:background="@drawable/qs_media_solid_button"
diff --git a/packages/SystemUI/src/com/android/systemui/media/ColorSchemeTransition.kt b/packages/SystemUI/src/com/android/systemui/media/ColorSchemeTransition.kt
index 9b0d432..f1d5e94 100644
--- a/packages/SystemUI/src/com/android/systemui/media/ColorSchemeTransition.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/ColorSchemeTransition.kt
@@ -238,5 +238,6 @@
fun updateColorScheme(colorScheme: ColorScheme?, enableGradient: Boolean) {
isGradientEnabled = enableGradient
colorTransitions.forEach { it.updateColorScheme(colorScheme) }
+ colorScheme?.let { mediaViewHolder.gutsViewHolder.colorScheme = colorScheme }
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/GutsViewHolder.kt b/packages/SystemUI/src/com/android/systemui/media/GutsViewHolder.kt
index 1a48a84..73240b5 100644
--- a/packages/SystemUI/src/com/android/systemui/media/GutsViewHolder.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/GutsViewHolder.kt
@@ -40,6 +40,9 @@
val dismissText: TextView = itemView.requireViewById(R.id.dismiss_text)
val settings: ImageButton = itemView.requireViewById(R.id.settings)
+ private var isDismissible: Boolean = true
+ var colorScheme: ColorScheme? = null
+
/** Marquees the main text of the guts menu. */
fun marquee(start: Boolean, delay: Long, tag: String) {
val gutsTextHandler = gutsText.handler
@@ -47,19 +50,31 @@
Log.d(tag, "marquee while longPressText.getHandler() is null", Exception())
return
}
- gutsTextHandler.postDelayed( { gutsText.isSelected = start }, delay)
+ gutsTextHandler.postDelayed({ gutsText.isSelected = start }, delay)
+ }
+
+ /** Set whether this control can be dismissed, and update appearance to match */
+ fun setDismissible(dismissible: Boolean) {
+ if (isDismissible == dismissible) return
+
+ isDismissible = dismissible
+ colorScheme?.let { setColors(it) }
}
/** Sets the right colors on all the guts views based on the given [ColorScheme]. */
- fun setColors(colorScheme: ColorScheme) {
- setSurfaceColor(surfaceFromScheme(colorScheme))
- setTextPrimaryColor(textPrimaryFromScheme(colorScheme))
- setAccentPrimaryColor(accentPrimaryFromScheme(colorScheme))
+ fun setColors(scheme: ColorScheme) {
+ colorScheme = scheme
+ setSurfaceColor(surfaceFromScheme(scheme))
+ setTextPrimaryColor(textPrimaryFromScheme(scheme))
+ setAccentPrimaryColor(accentPrimaryFromScheme(scheme))
}
/** Sets the surface color on all guts views that use it. */
fun setSurfaceColor(surfaceColor: Int) {
dismissText.setTextColor(surfaceColor)
+ if (!isDismissible) {
+ cancelText.setTextColor(surfaceColor)
+ }
}
/** Sets the primary accent color on all guts views that use it. */
@@ -74,7 +89,9 @@
fun setTextPrimaryColor(textPrimary: Int) {
val textColorList = ColorStateList.valueOf(textPrimary)
gutsText.setTextColor(textColorList)
- cancelText.setTextColor(textColorList)
+ if (isDismissible) {
+ cancelText.setTextColor(textColorList)
+ }
}
companion object {
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java b/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java
index d8bde55..e43ae0f 100644
--- a/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java
@@ -1231,7 +1231,7 @@
gutsViewHolder.getGutsText().setText(text);
// Dismiss button
- gutsViewHolder.getDismissText().setAlpha(isDismissible ? 1 : DISABLED_ALPHA);
+ gutsViewHolder.getDismissText().setVisibility(isDismissible ? View.VISIBLE : View.GONE);
gutsViewHolder.getDismiss().setEnabled(isDismissible);
gutsViewHolder.getDismiss().setOnClickListener(v -> {
if (mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) return;
@@ -1242,11 +1242,18 @@
});
// Cancel button
+ TextView cancelText = gutsViewHolder.getCancelText();
+ if (isDismissible) {
+ cancelText.setBackground(mContext.getDrawable(R.drawable.qs_media_outline_button));
+ } else {
+ cancelText.setBackground(mContext.getDrawable(R.drawable.qs_media_solid_button));
+ }
gutsViewHolder.getCancel().setOnClickListener(v -> {
if (!mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) {
closeGuts();
}
});
+ gutsViewHolder.setDismissible(isDismissible);
// Settings button
gutsViewHolder.getSettings().setOnClickListener(v -> {
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaViewController.kt b/packages/SystemUI/src/com/android/systemui/media/MediaViewController.kt
index deb5cba..27cd1ce 100644
--- a/packages/SystemUI/src/com/android/systemui/media/MediaViewController.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/MediaViewController.kt
@@ -270,8 +270,11 @@
}
}
gutsIds.forEach { id ->
- viewState.widgetStates.get(id)?.alpha = if (isGutsVisible) 1f else 0f
- viewState.widgetStates.get(id)?.gone = !isGutsVisible
+ viewState.widgetStates.get(id)?.let { state ->
+ // Make sure to use the unmodified state if guts are visible
+ state.alpha = if (isGutsVisible) state.alpha else 0f
+ state.gone = if (isGutsVisible) state.gone else true
+ }
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/ColorSchemeTransitionTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/ColorSchemeTransitionTest.kt
index 8fd2d2f..b979241 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/ColorSchemeTransitionTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/ColorSchemeTransitionTest.kt
@@ -57,11 +57,13 @@
private lateinit var animatingColorTransitionFactory: AnimatingColorTransitionFactory
@Mock private lateinit var mediaViewHolder: MediaViewHolder
+ @Mock private lateinit var gutsViewHolder: GutsViewHolder
@JvmField @Rule val mockitoRule = MockitoJUnit.rule()
@Before
fun setUp() {
+ whenever(mediaViewHolder.gutsViewHolder).thenReturn(gutsViewHolder)
animatingColorTransitionFactory = { _, _, _ -> mockAnimatingTransition }
whenever(extractColor.invoke(colorScheme)).thenReturn(TARGET_COLOR)
@@ -147,5 +149,6 @@
fun testColorSchemeTransition_update() {
colorSchemeTransition.updateColorScheme(colorScheme, true)
verify(mockAnimatingTransition, times(10)).updateColorScheme(colorScheme)
+ verify(gutsViewHolder).colorScheme = colorScheme
}
}