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