Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 02239be0 authored by Beth Thibodeau's avatar Beth Thibodeau
Browse files

Improve long press menu readability

When media cannot be dismissed, hide the "Hide" button completely and make
the "Cancel" button solid. Also update the top text to be medium weight
so it is more readable on busy backgrounds.

Fixes: 231397561
Test: manual - video in bug
Test: atest com.android.systemui.media
Change-Id: I1f9341d84102aaf6634745c42cf23ce572136954
parent 133c2347
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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"
+1 −0
Original line number Diff line number Diff line
@@ -238,5 +238,6 @@ class ColorSchemeTransition internal constructor(
    fun updateColorScheme(colorScheme: ColorScheme?, enableGradient: Boolean) {
        isGradientEnabled = enableGradient
        colorTransitions.forEach { it.updateColorScheme(colorScheme) }
        colorScheme?.let { mediaViewHolder.gutsViewHolder.colorScheme = colorScheme }
    }
}
+23 −6
Original line number Diff line number Diff line
@@ -40,6 +40,9 @@ class GutsViewHolder constructor(itemView: View) {
    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
@@ -50,16 +53,28 @@ class GutsViewHolder constructor(itemView: View) {
        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,8 +89,10 @@ class GutsViewHolder constructor(itemView: View) {
    fun setTextPrimaryColor(textPrimary: Int) {
        val textColorList = ColorStateList.valueOf(textPrimary)
        gutsText.setTextColor(textColorList)
        if (isDismissible) {
            cancelText.setTextColor(textColorList)
        }
    }

    companion object {
        val ids = setOf(
+8 −1
Original line number Diff line number Diff line
@@ -1183,7 +1183,7 @@ public class MediaControlPanel {
        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;
@@ -1194,11 +1194,18 @@ public class MediaControlPanel {
        });

        // 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 -> {
+5 −2
Original line number Diff line number Diff line
@@ -270,8 +270,11 @@ class MediaViewController @Inject constructor(
            }
        }
        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
            }
        }
    }

Loading