Merge "Improve long press menu readability" into tm-dev am: b592a68a65
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18707641 Change-Id: I05b82a471fe85962f913ae5245e27e2049b46033 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -26,7 +26,7 @@
|
|||||||
android:layout_marginStart="@dimen/qs_media_padding"
|
android:layout_marginStart="@dimen/qs_media_padding"
|
||||||
android:layout_marginEnd="@dimen/qs_media_padding"
|
android:layout_marginEnd="@dimen/qs_media_padding"
|
||||||
android:id="@+id/remove_text"
|
android:id="@+id/remove_text"
|
||||||
android:fontFamily="@*android:string/config_headlineFontFamily"
|
android:fontFamily="@*android:string/config_headlineFontFamilyMedium"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:ellipsize="marquee"
|
android:ellipsize="marquee"
|
||||||
android:marqueeRepeatLimit="marquee_forever"
|
android:marqueeRepeatLimit="marquee_forever"
|
||||||
@@ -62,7 +62,6 @@
|
|||||||
android:layout_marginEnd="@dimen/qs_media_action_spacing"
|
android:layout_marginEnd="@dimen/qs_media_action_spacing"
|
||||||
android:layout_marginBottom="@dimen/qs_media_padding"
|
android:layout_marginBottom="@dimen/qs_media_padding"
|
||||||
app:layout_constrainedWidth="true"
|
app:layout_constrainedWidth="true"
|
||||||
app:layout_constraintWidth_min="@dimen/min_clickable_item_size"
|
|
||||||
app:layout_constraintHeight_min="@dimen/min_clickable_item_size"
|
app:layout_constraintHeight_min="@dimen/min_clickable_item_size"
|
||||||
app:layout_constraintHorizontal_chainStyle="packed"
|
app:layout_constraintHorizontal_chainStyle="packed"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
@@ -73,6 +72,7 @@
|
|||||||
android:id="@+id/dismiss_text"
|
android:id="@+id/dismiss_text"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
app:layout_constraintWidth_min="@dimen/min_clickable_item_size"
|
||||||
android:layout_gravity="center|top"
|
android:layout_gravity="center|top"
|
||||||
style="@style/MediaPlayer.SolidButton"
|
style="@style/MediaPlayer.SolidButton"
|
||||||
android:background="@drawable/qs_media_solid_button"
|
android:background="@drawable/qs_media_solid_button"
|
||||||
|
|||||||
@@ -238,5 +238,6 @@ class ColorSchemeTransition internal constructor(
|
|||||||
fun updateColorScheme(colorScheme: ColorScheme?, enableGradient: Boolean) {
|
fun updateColorScheme(colorScheme: ColorScheme?, enableGradient: Boolean) {
|
||||||
isGradientEnabled = enableGradient
|
isGradientEnabled = enableGradient
|
||||||
colorTransitions.forEach { it.updateColorScheme(colorScheme) }
|
colorTransitions.forEach { it.updateColorScheme(colorScheme) }
|
||||||
|
colorScheme?.let { mediaViewHolder.gutsViewHolder.colorScheme = colorScheme }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,6 +40,9 @@ class GutsViewHolder constructor(itemView: View) {
|
|||||||
val dismissText: TextView = itemView.requireViewById(R.id.dismiss_text)
|
val dismissText: TextView = itemView.requireViewById(R.id.dismiss_text)
|
||||||
val settings: ImageButton = itemView.requireViewById(R.id.settings)
|
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. */
|
/** Marquees the main text of the guts menu. */
|
||||||
fun marquee(start: Boolean, delay: Long, tag: String) {
|
fun marquee(start: Boolean, delay: Long, tag: String) {
|
||||||
val gutsTextHandler = gutsText.handler
|
val gutsTextHandler = gutsText.handler
|
||||||
@@ -50,16 +53,28 @@ class GutsViewHolder constructor(itemView: View) {
|
|||||||
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]. */
|
/** Sets the right colors on all the guts views based on the given [ColorScheme]. */
|
||||||
fun setColors(colorScheme: ColorScheme) {
|
fun setColors(scheme: ColorScheme) {
|
||||||
setSurfaceColor(surfaceFromScheme(colorScheme))
|
colorScheme = scheme
|
||||||
setTextPrimaryColor(textPrimaryFromScheme(colorScheme))
|
setSurfaceColor(surfaceFromScheme(scheme))
|
||||||
setAccentPrimaryColor(accentPrimaryFromScheme(colorScheme))
|
setTextPrimaryColor(textPrimaryFromScheme(scheme))
|
||||||
|
setAccentPrimaryColor(accentPrimaryFromScheme(scheme))
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Sets the surface color on all guts views that use it. */
|
/** Sets the surface color on all guts views that use it. */
|
||||||
fun setSurfaceColor(surfaceColor: Int) {
|
fun setSurfaceColor(surfaceColor: Int) {
|
||||||
dismissText.setTextColor(surfaceColor)
|
dismissText.setTextColor(surfaceColor)
|
||||||
|
if (!isDismissible) {
|
||||||
|
cancelText.setTextColor(surfaceColor)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Sets the primary accent color on all guts views that use it. */
|
/** Sets the primary accent color on all guts views that use it. */
|
||||||
@@ -74,8 +89,10 @@ class GutsViewHolder constructor(itemView: View) {
|
|||||||
fun setTextPrimaryColor(textPrimary: Int) {
|
fun setTextPrimaryColor(textPrimary: Int) {
|
||||||
val textColorList = ColorStateList.valueOf(textPrimary)
|
val textColorList = ColorStateList.valueOf(textPrimary)
|
||||||
gutsText.setTextColor(textColorList)
|
gutsText.setTextColor(textColorList)
|
||||||
|
if (isDismissible) {
|
||||||
cancelText.setTextColor(textColorList)
|
cancelText.setTextColor(textColorList)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val ids = setOf(
|
val ids = setOf(
|
||||||
|
|||||||
@@ -1183,7 +1183,7 @@ public class MediaControlPanel {
|
|||||||
gutsViewHolder.getGutsText().setText(text);
|
gutsViewHolder.getGutsText().setText(text);
|
||||||
|
|
||||||
// Dismiss button
|
// Dismiss button
|
||||||
gutsViewHolder.getDismissText().setAlpha(isDismissible ? 1 : DISABLED_ALPHA);
|
gutsViewHolder.getDismissText().setVisibility(isDismissible ? View.VISIBLE : View.GONE);
|
||||||
gutsViewHolder.getDismiss().setEnabled(isDismissible);
|
gutsViewHolder.getDismiss().setEnabled(isDismissible);
|
||||||
gutsViewHolder.getDismiss().setOnClickListener(v -> {
|
gutsViewHolder.getDismiss().setOnClickListener(v -> {
|
||||||
if (mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) return;
|
if (mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) return;
|
||||||
@@ -1194,11 +1194,18 @@ public class MediaControlPanel {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Cancel button
|
// 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 -> {
|
gutsViewHolder.getCancel().setOnClickListener(v -> {
|
||||||
if (!mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) {
|
if (!mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) {
|
||||||
closeGuts();
|
closeGuts();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
gutsViewHolder.setDismissible(isDismissible);
|
||||||
|
|
||||||
// Settings button
|
// Settings button
|
||||||
gutsViewHolder.getSettings().setOnClickListener(v -> {
|
gutsViewHolder.getSettings().setOnClickListener(v -> {
|
||||||
|
|||||||
@@ -270,8 +270,11 @@ class MediaViewController @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
gutsIds.forEach { id ->
|
gutsIds.forEach { id ->
|
||||||
viewState.widgetStates.get(id)?.alpha = if (isGutsVisible) 1f else 0f
|
viewState.widgetStates.get(id)?.let { state ->
|
||||||
viewState.widgetStates.get(id)?.gone = !isGutsVisible
|
// 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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -57,11 +57,13 @@ class ColorSchemeTransitionTest : SysuiTestCase() {
|
|||||||
|
|
||||||
private lateinit var animatingColorTransitionFactory: AnimatingColorTransitionFactory
|
private lateinit var animatingColorTransitionFactory: AnimatingColorTransitionFactory
|
||||||
@Mock private lateinit var mediaViewHolder: MediaViewHolder
|
@Mock private lateinit var mediaViewHolder: MediaViewHolder
|
||||||
|
@Mock private lateinit var gutsViewHolder: GutsViewHolder
|
||||||
|
|
||||||
@JvmField @Rule val mockitoRule = MockitoJUnit.rule()
|
@JvmField @Rule val mockitoRule = MockitoJUnit.rule()
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
fun setUp() {
|
fun setUp() {
|
||||||
|
whenever(mediaViewHolder.gutsViewHolder).thenReturn(gutsViewHolder)
|
||||||
animatingColorTransitionFactory = { _, _, _ -> mockAnimatingTransition }
|
animatingColorTransitionFactory = { _, _, _ -> mockAnimatingTransition }
|
||||||
whenever(extractColor.invoke(colorScheme)).thenReturn(TARGET_COLOR)
|
whenever(extractColor.invoke(colorScheme)).thenReturn(TARGET_COLOR)
|
||||||
|
|
||||||
@@ -147,5 +149,6 @@ class ColorSchemeTransitionTest : SysuiTestCase() {
|
|||||||
fun testColorSchemeTransition_update() {
|
fun testColorSchemeTransition_update() {
|
||||||
colorSchemeTransition.updateColorScheme(colorScheme, true)
|
colorSchemeTransition.updateColorScheme(colorScheme, true)
|
||||||
verify(mockAnimatingTransition, times(10)).updateColorScheme(colorScheme)
|
verify(mockAnimatingTransition, times(10)).updateColorScheme(colorScheme)
|
||||||
|
verify(gutsViewHolder).colorScheme = colorScheme
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user