| <?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:layout_width="wrap_content" |
| android:layout_height="@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_headlineFontFamily" |
| android:singleLine="true" |
| android:text="@*android:string/ext_media_seamless_action" |
| android:textDirection="locale" |
| android:textSize="12sp" /> |
| </LinearLayout> |
| </LinearLayout> |
| |
| <ImageView |
| android:id="@+id/media_seamless_fallback" |
| android:layout_width="@dimen/qs_seamless_fallback_icon_size" |
| android:layout_height="@dimen/qs_seamless_fallback_icon_size" |
| android:layout_marginTop="@dimen/qs_media_padding" |
| android:layout_marginBottom="@dimen/qs_media_padding" |
| android:layout_marginStart="@dimen/qs_center_guideline_padding" |
| android:layout_marginEnd="@dimen/qs_seamless_fallback_margin" |
| android:tint="?android:attr/textColor" |
| android:src="@drawable/ic_cast_connected" |
| android:forceHasOverlappingRendering="false" /> |
| |
| <!-- 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="0dp" |
| 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="wrap_content" |
| 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: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/settings"/> |
| |
| <FrameLayout |
| android:id="@+id/settings" |
| 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:paddingBottom="@dimen/qs_media_padding" |
| android:minWidth="48dp" |
| android:minHeight="48dp" |
| app:layout_constraintBottom_toBottomOf="parent" |
| app:layout_constraintStart_toStartOf="parent" |
| app:layout_constraintTop_toBottomOf="@id/remove_text"> |
| |
| <TextView |
| android:layout_gravity="bottom" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| 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="wrap_content" |
| android:layout_height="wrap_content" |
| android:layout_marginEnd="8dp" |
| android:paddingBottom="@dimen/qs_media_padding" |
| android:minWidth="48dp" |
| android:minHeight="48dp" |
| app:layout_constraintBottom_toBottomOf="parent" |
| app:layout_constraintEnd_toStartOf="@id/dismiss" |
| app:layout_constraintTop_toBottomOf="@id/remove_text"> |
| |
| <TextView |
| android:layout_gravity="bottom" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| style="@style/MediaPlayer.OutlineButton" |
| android:text="@string/cancel" /> |
| </FrameLayout> |
| |
| <FrameLayout |
| android:id="@+id/dismiss" |
| android:background="@drawable/qs_media_light_source" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| android:layout_marginEnd="@dimen/qs_media_padding" |
| android:paddingBottom="@dimen/qs_media_padding" |
| android:minWidth="48dp" |
| android:minHeight="48dp" |
| app:layout_constraintBottom_toBottomOf="parent" |
| app:layout_constraintEnd_toEndOf="parent" |
| app:layout_constraintTop_toBottomOf="@id/remove_text"> |
| |
| <TextView |
| android:layout_gravity="bottom" |
| android:layout_width="wrap_content" |
| android:layout_height="wrap_content" |
| style="@style/MediaPlayer.OutlineButton" |
| android:text="@string/controls_media_dismiss_button" |
| /> |
| </FrameLayout> |
| </com.android.systemui.util.animation.TransitionLayout> |