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

Commit dc593a70 authored by Caitlin Cassidy's avatar Caitlin Cassidy Committed by Android (Google) Code Review
Browse files

Merge "[Media Rec] Use the same long press menu for media player and media...

Merge "[Media Rec] Use the same long press menu for media player and media recommendations." into tm-dev
parents aeea0d3d 320a27d5
Loading
Loading
Loading
Loading
+105 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
  ~ 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.
  -->

<merge
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="0dp"
        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:singleLine="true"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:text="@string/controls_media_close_session"
        android:gravity="center_horizontal|top"
        app:layout_constraintTop_toBottomOf="@id/settings"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toTopOf="@id/cancel" />

    <ImageButton
        android:id="@+id/settings"
        android:src="@drawable/ic_settings"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:layout_marginEnd="4dp"
        android:background="@drawable/qs_media_light_source"
        android:contentDescription="@string/controls_media_settings_button"
        android:layout_gravity="top"
        app:layout_constraintWidth_min="@dimen/min_clickable_item_size"
        app:layout_constraintHeight_min="@dimen/min_clickable_item_size"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent">
    </ImageButton>

    <FrameLayout
        android:id="@+id/dismiss"
        android:background="@drawable/qs_media_light_source"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/qs_media_padding"
        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"
        app:layout_constraintEnd_toStartOf="@id/cancel"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@id/remove_text">
        <TextView
            android:id="@+id/dismiss_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center|top"
            style="@style/MediaPlayer.SolidButton"
            android:background="@drawable/qs_media_solid_button"
            android:text="@string/controls_media_dismiss_button" />
    </FrameLayout>
    <FrameLayout
        android:id="@+id/cancel"
        android:background="@drawable/qs_media_light_source"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/qs_media_action_spacing"
        android:layout_marginEnd="@dimen/qs_media_padding"
        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_constraintStart_toEndOf="@id/dismiss"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@id/remove_text">
        <TextView
            android:id="@+id/cancel_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center|top"
            style="@style/MediaPlayer.OutlineButton"
            android:text="@string/cancel" />
    </FrameLayout>

</merge>
 No newline at end of file
+2 −82
Original line number Diff line number Diff line
@@ -300,87 +300,7 @@
        android:layout_marginBottom="@dimen/qs_media_padding"
        android:layout_marginTop="0dp" />

    <!-- Long press menu -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="0dp"
        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:singleLine="true"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:text="@string/controls_media_close_session"
        android:gravity="center_horizontal|top"
        app:layout_constraintTop_toBottomOf="@id/settings"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toTopOf="@id/cancel" />
    <include
        layout="@layout/media_long_press_menu" />

    <ImageButton
        android:id="@+id/settings"
        android:src="@drawable/ic_settings"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:layout_marginEnd="4dp"
        android:background="@drawable/qs_media_light_source"
        android:contentDescription="@string/controls_media_settings_button"
        android:layout_gravity="top"
        app:layout_constraintWidth_min="@dimen/min_clickable_item_size"
        app:layout_constraintHeight_min="@dimen/min_clickable_item_size"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent">
    </ImageButton>

    <FrameLayout
        android:id="@+id/dismiss"
        android:background="@drawable/qs_media_light_source"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/qs_media_padding"
        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"
        app:layout_constraintEnd_toStartOf="@id/cancel"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@id/remove_text">
        <TextView
            android:id="@+id/dismiss_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center|top"
            style="@style/MediaPlayer.SolidButton"
            android:background="@drawable/qs_media_solid_button"
            android:text="@string/controls_media_dismiss_button" />
    </FrameLayout>
    <FrameLayout
        android:id="@+id/cancel"
        android:background="@drawable/qs_media_light_source"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/qs_media_action_spacing"
        android:layout_marginEnd="@dimen/qs_media_padding"
        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_constraintStart_toEndOf="@id/dismiss"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@id/remove_text">
        <TextView
            android:id="@+id/cancel_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center|top"
            style="@style/MediaPlayer.OutlineButton"
            android:text="@string/cancel" />
    </FrameLayout>
</com.android.systemui.util.animation.TransitionLayout>
+2 −92
Original line number Diff line number Diff line
@@ -167,97 +167,7 @@
        android:layout_marginBottom="@dimen/qs_media_padding"
        />

    <!-- Long press menu -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/qs_media_padding"
        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:singleLine="true"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:text="@string/controls_media_close_session"
        android:gravity="center_horizontal|top"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toTopOf="@id/cancel"/>

    <FrameLayout
        android:id="@+id/settings"
        android:background="@drawable/qs_media_light_source"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/qs_media_padding"
        android:layout_marginEnd="@dimen/qs_media_action_spacing"
        android:layout_marginBottom="@dimen/qs_media_padding"
        app:layout_constrainedWidth="true"
        app:layout_constraintWidth_min="48dp"
        app:layout_constraintHeight_min="48dp"
        app:layout_constraintHorizontal_chainStyle="spread_inside"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toStartOf="@id/cancel"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@id/remove_text">

        <TextView
            android:id="@+id/settings_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center|bottom"
            style="@style/MediaPlayer.OutlineButton"
            android:text="@string/controls_media_settings_button" />
    </FrameLayout>
    <include
        layout="@layout/media_long_press_menu" />

    <FrameLayout
        android:id="@+id/cancel"
        android:background="@drawable/qs_media_light_source"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/qs_media_action_spacing"
        android:layout_marginEnd="@dimen/qs_media_action_spacing"
        android:layout_marginBottom="@dimen/qs_media_padding"
        app:layout_constrainedWidth="true"
        app:layout_constraintWidth_min="48dp"
        app:layout_constraintHeight_min="48dp"
        app:layout_constraintStart_toEndOf="@id/settings"
        app:layout_constraintEnd_toStartOf="@id/dismiss"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@id/remove_text">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center|bottom"
            style="@style/MediaPlayer.OutlineButton"
            android:text="@string/cancel" />
    </FrameLayout>

    <FrameLayout
        android:id="@+id/dismiss"
        android:background="@drawable/qs_media_light_source"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/qs_media_action_spacing"
        android:layout_marginEnd="@dimen/qs_media_padding"
        android:layout_marginBottom="@dimen/qs_media_padding"
        app:layout_constrainedWidth="true"
        app:layout_constraintWidth_min="48dp"
        app:layout_constraintHeight_min="48dp"
        app:layout_constraintStart_toEndOf="@id/cancel"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@id/remove_text">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center|bottom"
            style="@style/MediaPlayer.OutlineButton"
            android:text="@string/controls_media_dismiss_button"
        />
    </FrameLayout>
</com.android.systemui.util.animation.TransitionLayout>
+3 −6
Original line number Diff line number Diff line
@@ -103,7 +103,7 @@ class ColorSchemeTransition internal constructor(
        mediaViewHolder.albumView.backgroundTintList = colorList
        mediaViewHolder.seamlessIcon.imageTintList = colorList
        mediaViewHolder.seamlessText.setTextColor(surfaceColor)
        mediaViewHolder.dismissText.setTextColor(surfaceColor)
        mediaViewHolder.gutsViewHolder.setSurfaceColor(surfaceColor)
    }

    val accentPrimary = colorTransitionFactory(
@@ -113,9 +113,7 @@ class ColorSchemeTransition internal constructor(
        val accentColorList = ColorStateList.valueOf(accentPrimary)
        mediaViewHolder.actionPlayPause.backgroundTintList = accentColorList
        mediaViewHolder.seamlessButton.backgroundTintList = accentColorList
        mediaViewHolder.settings.imageTintList = accentColorList
        mediaViewHolder.cancelText.backgroundTintList = accentColorList
        mediaViewHolder.dismissText.backgroundTintList = accentColorList
        mediaViewHolder.gutsViewHolder.setAccentPrimaryColor(accentPrimary)
    }

    val textPrimary = colorTransitionFactory(
@@ -126,13 +124,12 @@ class ColorSchemeTransition internal constructor(
        val textColorList = ColorStateList.valueOf(textPrimary)
        mediaViewHolder.seekBar.thumb.setTintList(textColorList)
        mediaViewHolder.seekBar.progressTintList = textColorList
        mediaViewHolder.longPressText.setTextColor(textColorList)
        mediaViewHolder.cancelText.setTextColor(textColorList)
        mediaViewHolder.scrubbingElapsedTimeView.setTextColor(textColorList)
        mediaViewHolder.scrubbingTotalTimeView.setTextColor(textColorList)
        for (button in mediaViewHolder.getTransparentActionButtons()) {
            button.imageTintList = textColorList
        }
        mediaViewHolder.gutsViewHolder.setTextPrimaryColor(textPrimary)
    }

    val textPrimaryInverse = colorTransitionFactory(
+88 −0
Original line number Diff line number Diff line
/*
 * 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.systemui.media

import android.content.res.ColorStateList
import android.util.Log
import android.view.View
import android.view.ViewGroup
import android.widget.ImageButton
import android.widget.TextView
import com.android.systemui.R
import com.android.systemui.monet.ColorScheme

/**
 * A view holder for the guts menu of a media player. The guts are shown when the user long-presses
 * on the media player.
 *
 * Both [MediaViewHolder] and [RecommendationViewHolder] use the same guts menu layout, so this
 * class helps share logic between the two.
 */
class GutsViewHolder constructor(itemView: View) {
    val gutsText: TextView = itemView.requireViewById(R.id.remove_text)
    val cancel: View = itemView.requireViewById(R.id.cancel)
    val cancelText: TextView = itemView.requireViewById(R.id.cancel_text)
    val dismiss: ViewGroup = itemView.requireViewById(R.id.dismiss)
    val dismissText: TextView = itemView.requireViewById(R.id.dismiss_text)
    val settings: ImageButton = itemView.requireViewById(R.id.settings)

    /** Marquees the main text of the guts menu. */
    fun marquee(start: Boolean, delay: Long, tag: String) {
        val gutsTextHandler = gutsText.handler
        if (gutsTextHandler == null) {
            Log.d(tag, "marquee while longPressText.getHandler() is null", Exception())
            return
        }
        gutsTextHandler.postDelayed( { gutsText.isSelected = start }, delay)
    }

    /** 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))
    }

    /** Sets the surface color on all guts views that use it. */
    fun setSurfaceColor(surfaceColor: Int) {
        dismissText.setTextColor(surfaceColor)
    }

    /** Sets the primary accent color on all guts views that use it. */
    fun setAccentPrimaryColor(accentPrimary: Int) {
        val accentColorList = ColorStateList.valueOf(accentPrimary)
        settings.imageTintList = accentColorList
        cancelText.backgroundTintList = accentColorList
        dismissText.backgroundTintList = accentColorList
    }

    /** Sets the primary text color on all guts views that use it. */
    fun setTextPrimaryColor(textPrimary: Int) {
        val textColorList = ColorStateList.valueOf(textPrimary)
        gutsText.setTextColor(textColorList)
        cancelText.setTextColor(textColorList)
    }

    companion object {
        val ids = setOf(
            R.id.remove_text,
            R.id.cancel,
            R.id.dismiss,
            R.id.settings
        )
    }
}
Loading