1<?xml version="1.0" encoding="utf-8"?>
2<!--
3  ~ Copyright (C) 2019 The Android Open Source Project
4  ~
5  ~ Licensed under the Apache License, Version 2.0 (the "License");
6  ~ you may not use this file except in compliance with the License.
7  ~ You may obtain a copy of the License at
8  ~
9  ~      http://www.apache.org/licenses/LICENSE-2.0
10  ~
11  ~ Unless required by applicable law or agreed to in writing, software
12  ~ distributed under the License is distributed on an "AS IS" BASIS,
13  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  ~ See the License for the specific language governing permissions and
15  ~ limitations under the License
16  -->
17
18<!-- Layout for media recommendations inside QSPanel carousel -->
19<com.android.systemui.util.animation.TransitionLayout
20    xmlns:android="http://schemas.android.com/apk/res/android"
21    xmlns:app="http://schemas.android.com/apk/res-auto"
22    android:id="@+id/media_recommendations"
23    android:layout_width="match_parent"
24    android:layout_height="wrap_content"
25    android:paddingStart="@dimen/qs_media_padding"
26    android:paddingEnd="@dimen/qs_media_padding"
27    android:clipChildren="false"
28    android:clipToPadding="false"
29    android:forceHasOverlappingRendering="false"
30    android:background="@drawable/qs_media_background"
31    android:theme="@style/MediaPlayer">
32
33    <androidx.constraintlayout.widget.Guideline
34        android:id="@+id/media_vertical_start_guideline"
35        android:layout_width="wrap_content"
36        android:layout_height="wrap_content"
37        android:orientation="vertical"
38        app:layout_constraintGuide_percent="0.25" />
39
40    <androidx.constraintlayout.widget.Guideline
41        android:id="@+id/media_horizontal_center_guideline"
42        android:layout_width="wrap_content"
43        android:layout_height="wrap_content"
44        android:orientation="horizontal"
45        app:layout_constraintGuide_percent="0.5" />
46
47    <com.android.internal.widget.CachingIconView
48        android:id="@+id/recommendation_card_icon"
49        android:layout_width="@dimen/qs_media_icon_size"
50        android:layout_height="@dimen/qs_media_icon_size"
51        android:layout_marginTop="@dimen/qs_media_padding"
52        android:src="@drawable/ic_headset"
53        style="@style/MediaPlayer.AppIcon"
54        app:layout_constraintTop_toTopOf="parent"
55        app:layout_constraintStart_toStartOf="parent"
56        app:layout_constraintEnd_toStartOf="@id/media_vertical_start_guideline"
57        app:layout_constraintHorizontal_bias="0"/>
58
59    <TextView
60        android:id="@+id/recommendation_card_text"
61        android:layout_width="0dp"
62        android:layout_height="wrap_content"
63        android:maxLines="1"
64        android:text="@string/controls_media_smartspace_rec_title"
65        android:fontFamily="google-sans-medium"
66        android:textDirection="locale"
67        android:textSize="@dimen/qq_aa_media_rec_header_text_size"
68        android:hyphenationFrequency="none"
69        app:layout_constraintTop_toBottomOf="@id/recommendation_card_icon"
70        app:layout_constraintStart_toStartOf="parent"
71        app:layout_constraintEnd_toStartOf="@id/media_vertical_start_guideline"
72        app:layout_constraintHorizontal_bias="0"/>
73
74    <View
75        android:id="@+id/recommendation_gradient_view"
76        android:layout_width="@dimen/qs_aa_media_gradient_bg_width"
77        android:layout_height="0dp"
78        android:clipToPadding="false"
79        android:clipChildren="false"
80        android:background="@drawable/qs_media_recommendation_bg_gradient"
81        app:layout_constraintTop_toTopOf="@id/recommendation_card_text"
82        app:layout_constraintBottom_toBottomOf="@id/recommendation_card_text"
83        app:layout_constraintStart_toStartOf="parent"
84        app:layout_constraintEnd_toStartOf="@id/media_vertical_start_guideline"
85        app:layout_constraintHorizontal_bias="1"/>
86
87    <FrameLayout
88        android:id="@+id/media_cover1_container"
89        android:layout_width="0dp"
90        android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
91        android:background="@drawable/qs_media_light_source">
92        <ImageView
93            android:id="@+id/media_cover1"
94            android:layout_width="match_parent"
95            android:layout_height="match_parent"
96            android:adjustViewBounds="true"
97            android:background="@drawable/bg_smartspace_media_item"
98            style="@style/MediaPlayer.Album"
99            android:clipToOutline="true"
100            android:scaleType="centerCrop"/>
101    </FrameLayout>
102
103    <FrameLayout
104        android:id="@+id/media_cover2_container"
105        android:layout_width="0dp"
106        android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
107        android:background="@drawable/qs_media_light_source">
108        <ImageView
109            android:id="@+id/media_cover2"
110            android:layout_width="match_parent"
111            android:layout_height="match_parent"
112            android:adjustViewBounds="true"
113            android:background="@drawable/bg_smartspace_media_item"
114            style="@style/MediaPlayer.Album"
115            android:clipToOutline="true"
116            android:scaleType="centerCrop"/>
117    </FrameLayout>
118
119    <FrameLayout
120        android:id="@+id/media_cover3_container"
121        android:layout_width="0dp"
122        android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
123        android:background="@drawable/qs_media_light_source">
124        <ImageView
125            android:id="@+id/media_cover3"
126            android:layout_width="match_parent"
127            android:layout_height="match_parent"
128            android:adjustViewBounds="true"
129            android:background="@drawable/bg_smartspace_media_item"
130            style="@style/MediaPlayer.Album"
131            android:clipToOutline="true"
132            android:scaleType="centerCrop"/>
133    </FrameLayout>
134
135    <FrameLayout
136        android:id="@+id/media_cover4_container"
137        android:layout_width="0dp"
138        android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
139        android:background="@drawable/qs_media_light_source">
140        <ImageView
141            android:id="@+id/media_cover4"
142            android:layout_width="match_parent"
143            android:layout_height="match_parent"
144            android:adjustViewBounds="true"
145            android:background="@drawable/bg_smartspace_media_item"
146            style="@style/MediaPlayer.Album"
147            android:clipToOutline="true"
148            android:scaleType="centerCrop"/>
149    </FrameLayout>
150
151    <FrameLayout
152        android:id="@+id/media_cover5_container"
153        android:layout_width="0dp"
154        android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
155        android:background="@drawable/qs_media_light_source">
156        <ImageView
157            android:id="@+id/media_cover5"
158            android:layout_width="match_parent"
159            android:layout_height="match_parent"
160            android:adjustViewBounds="true"
161            android:background="@drawable/bg_smartspace_media_item"
162            style="@style/MediaPlayer.Album"
163            android:clipToOutline="true"
164            android:scaleType="centerCrop"/>
165    </FrameLayout>
166
167    <FrameLayout
168        android:id="@+id/media_cover6_container"
169        android:layout_width="0dp"
170        android:layout_height="@dimen/qs_aa_media_rec_album_size_collapsed"
171        android:background="@drawable/qs_media_light_source">
172        <ImageView
173            android:id="@+id/media_cover6"
174            android:layout_width="match_parent"
175            android:layout_height="match_parent"
176            android:adjustViewBounds="true"
177            android:background="@drawable/bg_smartspace_media_item"
178            style="@style/MediaPlayer.Album"
179            android:clipToOutline="true"
180            android:scaleType="centerCrop"/>
181    </FrameLayout>
182
183    <!-- Long press menu -->
184    <TextView
185        android:layout_width="match_parent"
186        android:layout_height="wrap_content"
187        android:layout_marginTop="@dimen/qs_media_padding"
188        android:layout_marginStart="@dimen/qs_media_padding"
189        android:layout_marginEnd="@dimen/qs_media_padding"
190        android:id="@+id/remove_text"
191        android:fontFamily="@*android:string/config_headlineFontFamily"
192        android:singleLine="true"
193        android:ellipsize="marquee"
194        android:marqueeRepeatLimit="marquee_forever"
195        android:text="@string/controls_media_close_session"
196        android:gravity="center_horizontal|top"
197        app:layout_constraintTop_toTopOf="parent"
198        app:layout_constraintStart_toStartOf="parent"
199        app:layout_constraintEnd_toEndOf="parent"
200        app:layout_constraintBottom_toTopOf="@id/cancel"/>
201
202    <FrameLayout
203        android:id="@+id/settings"
204        android:background="@drawable/qs_media_light_source"
205        android:layout_width="0dp"
206        android:layout_height="wrap_content"
207        android:layout_marginStart="@dimen/qs_media_padding"
208        android:layout_marginEnd="@dimen/qs_media_action_spacing"
209        android:layout_marginBottom="@dimen/qs_media_padding"
210        app:layout_constrainedWidth="true"
211        app:layout_constraintWidth_min="48dp"
212        app:layout_constraintHeight_min="48dp"
213        app:layout_constraintHorizontal_chainStyle="spread_inside"
214        app:layout_constraintStart_toStartOf="parent"
215        app:layout_constraintEnd_toStartOf="@id/cancel"
216        app:layout_constraintBottom_toBottomOf="parent"
217        app:layout_constraintTop_toBottomOf="@id/remove_text">
218
219        <TextView
220            android:id="@+id/settings_text"
221            android:layout_width="wrap_content"
222            android:layout_height="wrap_content"
223            android:layout_gravity="center|bottom"
224            style="@style/MediaPlayer.OutlineButton"
225            android:text="@string/controls_media_settings_button" />
226    </FrameLayout>
227
228    <FrameLayout
229        android:id="@+id/cancel"
230        android:background="@drawable/qs_media_light_source"
231        android:layout_width="0dp"
232        android:layout_height="wrap_content"
233        android:layout_marginStart="@dimen/qs_media_action_spacing"
234        android:layout_marginEnd="@dimen/qs_media_action_spacing"
235        android:layout_marginBottom="@dimen/qs_media_padding"
236        app:layout_constrainedWidth="true"
237        app:layout_constraintWidth_min="48dp"
238        app:layout_constraintHeight_min="48dp"
239        app:layout_constraintStart_toEndOf="@id/settings"
240        app:layout_constraintEnd_toStartOf="@id/dismiss"
241        app:layout_constraintBottom_toBottomOf="parent"
242        app:layout_constraintTop_toBottomOf="@id/remove_text">
243
244        <TextView
245            android:layout_width="wrap_content"
246            android:layout_height="wrap_content"
247            android:layout_gravity="center|bottom"
248            style="@style/MediaPlayer.OutlineButton"
249            android:text="@string/cancel" />
250    </FrameLayout>
251
252    <FrameLayout
253        android:id="@+id/dismiss"
254        android:background="@drawable/qs_media_light_source"
255        android:layout_width="0dp"
256        android:layout_height="wrap_content"
257        android:layout_marginStart="@dimen/qs_media_action_spacing"
258        android:layout_marginEnd="@dimen/qs_media_padding"
259        android:layout_marginBottom="@dimen/qs_media_padding"
260        app:layout_constrainedWidth="true"
261        app:layout_constraintWidth_min="48dp"
262        app:layout_constraintHeight_min="48dp"
263        app:layout_constraintStart_toEndOf="@id/cancel"
264        app:layout_constraintEnd_toEndOf="parent"
265        app:layout_constraintBottom_toBottomOf="parent"
266        app:layout_constraintTop_toBottomOf="@id/remove_text">
267
268        <TextView
269            android:layout_width="wrap_content"
270            android:layout_height="wrap_content"
271            android:layout_gravity="center|bottom"
272            style="@style/MediaPlayer.OutlineButton"
273            android:text="@string/controls_media_dismiss_button"
274        />
275    </FrameLayout>
276</com.android.systemui.util.animation.TransitionLayout>