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

Commit f65563f8 authored by Beth Thibodeau's avatar Beth Thibodeau
Browse files

Remove old layout and flag

Since the new layout is complete and can handle notification action buttons,
we can remove the old one now.

- Deleted layout files (xml and PlayerViewHolder), and moved
PlayerSessionViewHolder into MediaViewHolder
- Removed the flag MEDIA_SESSION_LAYOUT
- Refactored MediaControlPanel to be more readable

Bug: 218875984
Test: atest com.android.systemui.media
Test: atest QSPanelControllerTest QuickQSPanelControllerTest
Change-Id: I37681542dec5cf10ec7346aa9f888f8f890d2c11
parent b8dcd0b8
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -41,7 +41,7 @@ Files under [`systemui/media/`](/packages/SystemUI/src/com/android/systemui/medi
      * SeekBarViewModel.kt
         * Implements its own `computePosition()` for the seekbar (to avoid continually polling the `PlaybackState`, which involves binder calls)
         * Does some touch falsing (ignore flings, require drags to start near the thumb - otherwise users would often accidentally trigger the seekbar when they meant to move the carousel or shade)
      * PlayerViewHolder.kt
      * MediaViewHolder.kt
         * Holds references to the UI elements in the panel
* Animation support:
   * MediaHierarchyManager.kt
+0 −300
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
  ~ Copyright (C) 2019 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
  -->

<!-- Layout for media controls inside QSPanel carousel -->
<com.android.systemui.util.animation.TransitionLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/qs_media_controls"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clipChildren="false"
    android:clipToPadding="false"
    android:gravity="center_horizontal|fill_vertical"
    android:forceHasOverlappingRendering="false"
    android:background="@drawable/qs_media_background"
    android:theme="@style/MediaPlayer">

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/center_vertical_guideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.6" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/center_horizontal_guideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_begin="48dp" />

    <!-- As per Material Design on Biderectionality, this is forced to LTR in code -->
    <FrameLayout
        android:id="@+id/notification_media_progress_time"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:forceHasOverlappingRendering="false">
        <!-- width is set to "match_parent" to avoid extra layout calls -->
        <TextView
            android:id="@+id/media_elapsed_time"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:fontFamily="@*android:string/config_bodyFontFamily"
            android:gravity="start"
            android:textSize="12sp" />

        <TextView
            android:id="@+id/media_total_time"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:fontFamily="@*android:string/config_bodyFontFamily"
            android:gravity="end"
            android:textSize="12sp" />
    </FrameLayout>

    <!--  Actions must be ordered left-to-right even in RTL layout.  However, they appear in a chain
    with the artist name, and must as a group appear at the end of that chain.  This is
    accomplished by having all actions appear in a LTR chain within the parent, and then biasing it
    to the right side, then this barrier is used to bound the text views.  -->
    <androidx.constraintlayout.widget.Barrier
        android:id="@+id/media_action_barrier"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:orientation="vertical"
        app:layout_constraintTop_toBottomOf="@id/header_title"
        app:barrierDirection="start"
        app:constraint_referenced_ids="action0,action1,action2,action3,action4"
         />

    <ImageButton
        android:id="@+id/action0"
        style="@style/MediaPlayer.Action"
        android:layout_width="48dp"
        android:layout_height="48dp" />

    <ImageButton
        android:id="@+id/action1"
        style="@style/MediaPlayer.Action"
        android:layout_width="48dp"
        android:layout_height="48dp" />

    <ImageButton
        android:id="@+id/action2"
        style="@style/MediaPlayer.Action"
        android:layout_width="48dp"
        android:layout_height="48dp" />

    <ImageButton
        android:id="@+id/action3"
        style="@style/MediaPlayer.Action"
        android:layout_width="48dp"
        android:layout_height="48dp" />

    <ImageButton
        android:id="@+id/action4"
        style="@style/MediaPlayer.Action"
        android:layout_width="48dp"
        android:layout_height="48dp" />

    <!-- Album Art -->
    <ImageView
        android:id="@+id/album_art"
        android:layout_width="@dimen/qs_media_album_size"
        android:layout_height="@dimen/qs_media_album_size"
        android:layout_gravity="center_vertical"
        style="@style/MediaPlayer.Album"
        android:background="@drawable/qs_media_art_background"
        android:clipToOutline="true" />

    <!-- Seamless Output Switcher -->
    <LinearLayout
        android:id="@+id/media_seamless"
        android:layout_width="0dp"
        android:layout_height="48dp"
        android:orientation="horizontal"
        android:gravity="top|end"
        android:paddingTop="@dimen/qs_media_padding"
        android:paddingEnd="@dimen/qs_media_padding"
        android:background="@drawable/qs_media_light_source"
        android:forceHasOverlappingRendering="false">
        <LinearLayout
            android:id="@+id/media_seamless_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:minHeight="@dimen/qs_seamless_height"
            android:theme="@style/MediaPlayer.SolidButton"
            android:background="@drawable/qs_media_seamless_background"
            android:orientation="horizontal"
            android:contentDescription="@string/quick_settings_media_device_label">
            <ImageView
                android:id="@+id/media_seamless_image"
                android:layout_width="@dimen/qs_seamless_icon_size"
                android:layout_height="@dimen/qs_seamless_icon_size"
                android:layout_gravity="center"
                android:tint="?android:attr/textColorPrimary"
                android:src="@*android:drawable/ic_media_seamless" />
            <TextView
                android:id="@+id/media_seamless_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_marginStart="4dp"
                android:fontFamily="@*android:string/config_headlineFontFamilyMedium"
                android:singleLine="true"
                android:text="@*android:string/ext_media_seamless_action"
                android:textDirection="locale"
                android:textSize="12sp"
                android:lineHeight="16sp" />
        </LinearLayout>
    </LinearLayout>

    <!-- Seek Bar -->
    <!-- As per Material Design on Biderectionality, this is forced to LTR in code -->
    <SeekBar
        android:id="@+id/media_progress_bar"
        style="@style/MediaPlayer.ProgressBar"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:maxHeight="@dimen/qs_media_enabled_seekbar_height"
        android:paddingTop="@dimen/qs_media_enabled_seekbar_vertical_padding"
        android:layout_marginTop="-22dp"
        android:paddingBottom="2dp"
        android:splitTrack="false" />

    <!-- Song name -->
    <TextView
        android:id="@+id/header_title"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:fontFamily="@*android:string/config_headlineFontFamilyMedium"
        android:singleLine="true"
        android:textSize="16sp" />

    <!-- Artist name -->
    <TextView
        android:id="@+id/header_artist"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:fontFamily="@*android:string/config_headlineFontFamily"
        android:singleLine="true"
        style="@style/MediaPlayer.Subtitle"
        android:textSize="14sp" />

    <com.android.internal.widget.CachingIconView
        android:id="@+id/icon"
        style="@style/MediaPlayer.AppIcon"
        android:layout_width="@dimen/qs_media_icon_size"
        android:layout_height="@dimen/qs_media_icon_size" />

    <!-- 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>

    <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:id="@+id/cancel_text"
            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:id="@+id/dismiss_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_dismiss_button"
        />
    </FrameLayout>
</com.android.systemui.util.animation.TransitionLayout>
+0 −6
Original line number Diff line number Diff line
@@ -959,10 +959,7 @@

    <!-- Size of media cards in the QSPanel carousel -->
    <dimen name="qs_media_padding">16dp</dimen>
    <dimen name="qs_media_album_size_small">72dp</dimen>
    <dimen name="qs_media_album_size">84dp</dimen>
    <dimen name="qs_media_album_radius">14dp</dimen>
    <dimen name="qs_media_album_device_padding">26dp</dimen>
    <dimen name="qs_media_info_margin">12dp</dimen>
    <dimen name="qs_media_info_spacing">8dp</dimen>
    <dimen name="qs_media_icon_size">20dp</dimen>
@@ -974,10 +971,7 @@
    <dimen name="qs_seamless_icon_size">12dp</dimen>
    <dimen name="qs_media_disabled_seekbar_height">1dp</dimen>
    <dimen name="qs_media_enabled_seekbar_height">2dp</dimen>
    <dimen name="qs_media_enabled_seekbar_vertical_padding">28dp</dimen>
    <dimen name="qs_media_disabled_seekbar_vertical_padding">29dp</dimen>

    <!-- Sizes for alternate session-based layout -->
    <dimen name="qs_media_session_enabled_seekbar_vertical_padding">15dp</dimen>
    <dimen name="qs_media_session_disabled_seekbar_vertical_padding">16dp</dimen>
    <dimen name="qs_media_session_height_expanded">184dp</dimen>
+0 −176
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
  ~ Copyright (C) 2020 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
  -->
<ConstraintSet
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <Constraint
        android:id="@+id/icon"
        android:layout_width="@dimen/qs_media_icon_size"
        android:layout_height="@dimen/qs_media_icon_size"
        android:translationY="@dimen/qs_media_icon_offset"
        android:translationX="@dimen/qs_media_icon_offset"
        app:layout_constraintEnd_toEndOf="@id/album_art"
        app:layout_constraintBottom_toBottomOf="@id/album_art"
        />

    <Constraint
        android:id="@+id/media_seamless"
        android:layout_width="wrap_content"
        android:layout_height="48dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toEndOf="@id/center_vertical_guideline"
        app:layout_constraintBottom_toTopOf="@id/center_horizontal_guideline"
        app:layout_constraintHorizontal_chainStyle="spread_inside"
        app:layout_constraintHorizontal_bias="1"
        app:layout_constrainedWidth="true"
        app:layout_constraintWidth_min="48dp"
        app:layout_constraintHeight_min="48dp"
        android:layout_marginStart="@dimen/qs_center_guideline_padding"
        />

    <Constraint
        android:id="@+id/album_art"
        android:layout_width="@dimen/qs_media_album_size_small"
        android:layout_height="@dimen/qs_media_album_size_small"
        android:layout_marginTop="@dimen/qs_media_padding"
        android:layout_marginStart="@dimen/qs_media_padding"
        android:layout_marginBottom="@dimen/qs_media_padding"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        />

    <!-- Song name -->
    <Constraint
        android:id="@+id/header_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/qs_media_info_margin"
        android:layout_marginEnd="@dimen/qs_center_guideline_padding"
        app:layout_constrainedWidth="true"
        app:layout_constraintBottom_toTopOf="@id/center_horizontal_guideline"
        app:layout_constraintStart_toEndOf="@id/album_art"
        app:layout_constraintEnd_toStartOf="@id/center_vertical_guideline"
        app:layout_constraintHorizontal_bias="0"/>

    <!-- Artist name -->
    <Constraint
        android:id="@+id/header_artist"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constrainedWidth="true"
        android:layout_marginTop="@dimen/qs_media_info_spacing"
        app:layout_constraintTop_toBottomOf="@id/center_horizontal_guideline"
        app:layout_constraintStart_toStartOf="@id/header_title"
        app:layout_constraintEnd_toStartOf="@id/media_action_barrier"
        app:layout_constraintHorizontal_bias="0"/>

    <!-- Seek Bar -->
    <Constraint
        android:id="@+id/media_progress_bar"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:alpha="0.0"
        app:layout_constraintTop_toBottomOf="@id/album_art"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:visibility="gone"
        />

    <Constraint
        android:id="@+id/notification_media_progress_time"
        android:alpha="0.0"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@id/album_art"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:visibility="gone"
        />

    <Constraint
        android:id="@+id/action0"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:layout_marginStart="@dimen/qs_media_padding"
        android:layout_marginEnd="@dimen/qs_media_action_spacing"
        android:visibility="gone"
        app:layout_constraintHorizontal_chainStyle="packed"
        app:layout_constraintTop_toBottomOf="@id/center_horizontal_guideline"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@id/action1"
        app:layout_constraintHorizontal_bias="1"
        >
    </Constraint>

    <Constraint
        android:id="@+id/action1"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:layout_marginStart="@dimen/qs_media_action_spacing"
        android:layout_marginEnd="@dimen/qs_media_action_spacing"
        app:layout_constraintTop_toBottomOf="@id/center_horizontal_guideline"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toRightOf="@id/action0"
        app:layout_constraintRight_toLeftOf="@id/action2"
        >
    </Constraint>

    <Constraint
        android:id="@+id/action2"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:layout_marginStart="@dimen/qs_media_action_spacing"
        android:layout_marginEnd="@dimen/qs_media_action_spacing"
        app:layout_constraintTop_toBottomOf="@id/center_horizontal_guideline"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toRightOf="@id/action1"
        app:layout_constraintRight_toLeftOf="@id/action3"
        >
    </Constraint>

    <Constraint
        android:id="@+id/action3"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:layout_marginStart="@dimen/qs_media_action_spacing"
        android:layout_marginEnd="@dimen/qs_media_action_spacing"
        app:layout_constraintTop_toBottomOf="@id/center_horizontal_guideline"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toRightOf="@id/action2"
        app:layout_constraintRight_toLeftOf="@id/action4"
        >
    </Constraint>

    <Constraint
        android:id="@+id/action4"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:layout_marginStart="@dimen/qs_media_action_spacing"
        android:layout_marginEnd="@dimen/qs_media_padding"
        android:visibility="gone"
        app:layout_constraintHorizontal_chainStyle="packed"
        app:layout_constraintTop_toBottomOf="@id/center_horizontal_guideline"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toRightOf="@id/action3"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintHorizontal_bias="0"
        >
    </Constraint>
</ConstraintSet>
+0 −174

File deleted.

Preview size limit exceeded, changes collapsed.

Loading