1<!--
2  ~ Copyright (C) 2024 The Android Open Source Project
3  ~
4  ~ Licensed under the Apache License, Version 2.0 (the "License");
5  ~ you may not use this file except in compliance with the License.
6  ~ You may obtain a copy of the License at
7  ~
8  ~      http://www.apache.org/licenses/LICENSE-2.0
9  ~
10  ~ Unless required by motionlicable law or agreed to in writing, software
11  ~ distributed under the License is distributed on an "AS IS" BASIS,
12  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  ~ See the License for the specific language governing permissions and
14  ~ limitations under the License.
15  -->
16
17<MotionScene
18    xmlns:android="http://schemas.android.com/apk/res/android"
19    xmlns:motion="http://schemas.android.com/apk/res-auto"
20    xmlns:tools="http://schemas.android.com/tools">
21
22    <!-- layoutDuringTransition respects queue RecyclerView scroll animations -->
23    <Transition
24        motion:constraintSetEnd="@id/end"
25        motion:constraintSetStart="@id/start"
26        motion:duration="@integer/media_card_bottom_panel_open_duration"
27        motion:motionInterpolator="standard"
28        motion:layoutDuringTransition="honorRequest">
29        <KeyFrameSet>
30            <KeyAttribute
31                android:alpha="1"
32                motion:framePosition="0"
33                motion:motionTarget="@id/playback_action_id1" />
34            <KeyAttribute
35                android:alpha="0"
36                motion:framePosition="60"
37                motion:motionTarget="@id/playback_action_id1" />
38            <KeyAttribute
39                android:alpha="1"
40                motion:framePosition="0"
41                motion:motionTarget="@id/playback_action_id2" />
42            <KeyAttribute
43                android:alpha="0"
44                motion:framePosition="60"
45                motion:motionTarget="@id/playback_action_id2" />
46            <KeyAttribute
47                android:alpha="0"
48                motion:framePosition="40"
49                motion:motionTarget="@id/button_panel_background" />
50            <KeyAttribute
51                android:alpha="0"
52                motion:framePosition="60"
53                motion:motionTarget="@id/button_panel_background" />
54            <KeyTrigger
55                motion:framePosition="30"
56                motion:motionTarget="@id/button_panel_background"
57                motion:onPositiveCross="."
58                tools:ignore="MotionSceneFileValidationError">
59                <CustomMethod motion:methodName="setEnabled" motion:customBoolean="true"/>
60            </KeyTrigger>
61            <KeyTrigger
62                motion:framePosition="40"
63                motion:motionTarget="@id/button_panel_background"
64                motion:onNegativeCross="."
65                tools:ignore="MotionSceneFileValidationError">
66                <CustomMethod motion:methodName="setEnabled" motion:customBoolean="false"/>
67            </KeyTrigger>
68            <KeyTrigger
69                motion:framePosition="30"
70                motion:motionTarget="@id/playback_seek_bar"
71                motion:onPositiveCross="."
72                tools:ignore="MotionSceneFileValidationError">
73                <CustomMethod motion:methodName="setSelected" motion:customBoolean="true"/>
74            </KeyTrigger>
75            <KeyTrigger
76                motion:framePosition="40"
77                motion:motionTarget="@id/playback_seek_bar"
78                motion:onNegativeCross="."
79                tools:ignore="MotionSceneFileValidationError">
80                <CustomMethod motion:methodName="setSelected" motion:customBoolean="false"/>
81            </KeyTrigger>
82        </KeyFrameSet>
83    </Transition>
84
85    <ConstraintSet
86        android:id="@+id/start">
87        <ConstraintOverride
88            android:id="@id/media_widget_app_icon">
89            <PropertySet
90                motion:visibilityMode="ignore"/>
91        </ConstraintOverride>
92        <ConstraintOverride
93            android:id="@id/title">
94            <PropertySet
95                motion:visibilityMode="ignore"/>
96            <CustomAttribute
97                motion:attributeName="lineHeight"
98                motion:customDimension="@dimen/media_card_title_default_line_height" />
99            <CustomAttribute
100                motion:attributeName="textSize"
101                motion:customDimension="@dimen/media_card_title_default_text_size" />
102        </ConstraintOverride>
103        <ConstraintOverride
104            android:id="@id/subtitle">
105            <PropertySet
106                motion:visibilityMode="ignore"/>
107        </ConstraintOverride>
108        <ConstraintOverride
109            android:id="@id/content_format">
110            <PropertySet
111                motion:visibilityMode="ignore"/>
112        </ConstraintOverride>
113        <ConstraintOverride
114            android:id="@id/playback_action_id1">
115            <PropertySet
116                motion:visibilityMode="ignore"/>
117        </ConstraintOverride>
118        <ConstraintOverride
119            android:id="@id/playback_action_id2">
120            <PropertySet
121                motion:visibilityMode="ignore"/>
122        </ConstraintOverride>
123        <ConstraintOverride
124            android:id="@id/album_art">
125            <PropertySet
126                motion:visibilityMode="ignore"/>
127        </ConstraintOverride>
128        <ConstraintOverride
129            android:id="@id/playback_seek_bar">
130            <PropertySet
131                motion:visibilityMode="ignore"/>
132        </ConstraintOverride>
133    </ConstraintSet>
134
135    <ConstraintSet
136        android:id="@+id/end">
137        <Constraint
138            android:id="@+id/play_pause_button"
139            android:layout_width="@dimen/media_card_large_button_size"
140            android:layout_height="@dimen/media_card_large_button_size"
141            android:src="@drawable/ic_play_pause_selector"
142            android:scaleType="center"
143            android:tint="@color/car_surface"
144            android:background="@drawable/pill_button_shape"
145            android:backgroundTint="@color/car_on_surface"
146            android:layout_marginStart="@dimen/media_card_horizontal_margin"
147            android:layout_marginTop="@dimen/media_card_margin_panel_open"
148            motion:layout_constraintStart_toStartOf="parent"
149            motion:layout_constraintTop_toTopOf="parent">
150        </Constraint>
151        <Constraint
152            android:id="@+id/button_panel_background"
153            android:layout_width="match_parent"
154            android:layout_height="@dimen/media_card_bottom_panel_animated_size"
155            android:background="@drawable/media_card_button_panel_background"
156            android:backgroundTint="@color/car_surface"
157            android:layout_marginStart="@dimen/media_card_horizontal_margin"
158            android:layout_marginEnd="@dimen/media_card_horizontal_margin"
159            android:layout_marginTop="@dimen/media_card_margin_panel_open"
160            motion:layout_constraintStart_toStartOf="parent"
161            motion:layout_constraintEnd_toEndOf="parent"
162            motion:layout_constraintTop_toBottomOf="@id/play_pause_button">
163        </Constraint>
164        <Constraint
165            android:id="@+id/empty_panel"
166            android:layout_width="match_parent"
167            android:layout_height="0dp"
168            android:background="@color/car_surface_variant"
169            motion:layout_constraintTop_toTopOf="parent">
170        </Constraint>
171        <ConstraintOverride
172            android:id="@id/media_widget_app_icon"
173            android:alpha="0">
174            <PropertySet
175                motion:visibilityMode="ignore"/>
176        </ConstraintOverride>
177        <Constraint
178            android:id="@+id/title"
179            android:layout_height="wrap_content"
180            android:layout_width="0dp"
181            android:text="@string/metadata_default_title"
182            android:textColor="@color/car_on_surface"
183            android:maxLines="1"
184            android:ellipsize="end"
185            android:layout_marginStart="@dimen/media_card_margin_panel_open"
186            android:layout_marginTop="@dimen/media_card_view_separation_margin"
187            android:layout_marginEnd="@dimen/media_card_horizontal_margin"
188            motion:layout_constraintStart_toEndOf="@id/play_pause_button"
189            motion:layout_constraintEnd_toEndOf="parent"
190            motion:layout_constraintTop_toTopOf="@id/play_pause_button"
191            motion:layout_constraintBottom_toTopOf="@id/playback_seek_bar"
192            motion:layout_constraintVertical_bias="0">
193            <PropertySet
194                motion:visibilityMode="ignore"/>
195            <CustomAttribute
196                motion:attributeName="lineHeight"
197                motion:customDimension="@dimen/media_card_title_animated_line_height" />
198            <CustomAttribute
199                motion:attributeName="textSize"
200                motion:customDimension="@dimen/media_card_title_animated_text_size" />
201        </Constraint>
202        <ConstraintOverride
203            android:id="@id/subtitle"
204            android:alpha="0">
205            <PropertySet
206                motion:visibilityMode="ignore"/>
207        </ConstraintOverride>
208        <ConstraintOverride
209            android:id="@id/content_format"
210            android:alpha="0">
211            <PropertySet
212                motion:visibilityMode="ignore"/>
213        </ConstraintOverride>
214        <Constraint
215            android:id="@+id/playback_seek_bar"
216            android:layout_width="0dp"
217            android:layout_height="wrap_content"
218            android:clickable="false"
219            android:paddingEnd="0dp"
220            android:paddingStart="0dp"
221            android:progressBackgroundTint="@color/car_on_surface_40"
222            android:progressDrawable="@drawable/media_card_seekbar_progress"
223            android:progressTint="@color/car_on_surface"
224            android:splitTrack="false"
225            android:thumb="@drawable/media_card_seekbar_thumb"
226            android:thumbTint="@color/car_on_surface"
227            android:thumbOffset="0px"
228            android:layout_marginTop="@dimen/media_card_view_separation_margin"
229            android:layout_marginStart="@dimen/media_card_margin_panel_open"
230            android:layout_marginEnd="@dimen/media_card_view_separation_margin"
231            motion:layout_goneMarginEnd="@dimen/media_card_horizontal_margin"
232            motion:layout_constraintStart_toEndOf="@id/play_pause_button"
233            motion:layout_constraintEnd_toStartOf="@id/content_format"
234            motion:layout_constraintBottom_toBottomOf="@id/play_pause_button"
235            motion:layout_constraintTop_toBottomOf="@id/title">
236            <PropertySet
237                motion:visibilityMode="ignore"/>
238        </Constraint>
239        <ConstraintOverride
240            android:id="@id/playback_action_id1"
241            android:alpha="0">
242            <PropertySet
243                motion:visibilityMode="ignore"/>
244        </ConstraintOverride>
245        <ConstraintOverride
246            android:id="@id/playback_action_id2"
247            android:alpha="0">
248            <PropertySet
249                motion:visibilityMode="ignore"/>
250        </ConstraintOverride>
251        <ConstraintOverride
252            android:id="@id/album_art"
253            android:alpha="0">
254            <PropertySet
255                motion:visibilityMode="ignore"/>
256        </ConstraintOverride>
257    </ConstraintSet>
258</MotionScene>
259