Loading packages/SystemUI/res/layout/media_view.xml +4 −15 Original line number Diff line number Diff line Loading @@ -65,25 +65,16 @@ <!-- Actions must be ordered left-to-right even in RTL layout. However, they appear in a chain with the album art and the title, and must as a group appear at the end of that chain. This is accomplished by having the guidebox (an invisible view that is positioned around all 5 actions) in the chain with the album art and the title. The actions are in a LTR chain bounded by that guidebox, and the ambiguity of how wide the guidebox should be is resolved by using a barrier which forces it's starting edge to be as far to the end as possible while fitting the actions. --> 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_toTopOf="parent" app:barrierDirection="start" /> <View android:id="@+id/media_action_guidebox" android:layout_width="0dp" android:layout_height="48dp" android:layout_marginTop="16dp" android:visibility="invisible" app:constraint_referenced_ids="action0,action1,action2,action3,action4" /> <ImageButton Loading Loading @@ -201,7 +192,6 @@ android:fontFamily="@*android:string/config_headlineFontFamilyMedium" android:singleLine="true" android:textColor="@color/media_primary_text" android:textDirection="locale" android:textSize="16sp" /> <!-- Artist name --> Loading @@ -212,7 +202,6 @@ android:fontFamily="@*android:string/config_headlineFontFamily" android:singleLine="true" android:textColor="@color/media_secondary_text" android:textDirection="locale" android:textSize="14sp" /> <com.android.internal.widget.CachingIconView Loading packages/SystemUI/res/xml/media_collapsed.xml +8 −25 Original line number Diff line number Diff line Loading @@ -85,10 +85,11 @@ <!-- Song name --> <Constraint android:id="@+id/header_title" android:layout_width="0dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="17dp" android:layout_marginStart="16dp" app:layout_constrainedWidth="true" app:layout_constraintTop_toBottomOf="@id/app_name" app:layout_constraintBottom_toTopOf="@id/header_artist" app:layout_constraintStart_toEndOf="@id/album_art" Loading @@ -98,10 +99,11 @@ <!-- Artist name --> <Constraint android:id="@+id/header_artist" android:layout_width="0dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="3dp" android:layout_marginBottom="24dp" app:layout_constrainedWidth="true" app:layout_constraintTop_toBottomOf="@id/header_title" app:layout_constraintStart_toStartOf="@id/header_title" app:layout_constraintEnd_toStartOf="@id/media_action_barrier" Loading Loading @@ -134,27 +136,6 @@ android:visibility="gone" /> <Constraint android:id="@+id/media_action_barrier" android:layout_width="0dp" android:layout_height="0dp" android:orientation="vertical" app:layout_constraintTop_toTopOf="parent" app:barrierDirection="start" app:constraint_referenced_ids="media_action_guidebox,action0,action1,action2,action3,action4" /> <Constraint android:id="@+id/media_action_guidebox" android:layout_width="0dp" android:layout_height="48dp" android:layout_marginTop="18dp" android:visibility="invisible" app:layout_constraintTop_toBottomOf="@id/app_name" app:layout_constraintStart_toEndOf="@id/header_title" app:layout_constraintEnd_toEndOf="parent" /> <Constraint android:id="@+id/action0" android:layout_width="48dp" Loading @@ -165,8 +146,9 @@ android:visibility="gone" app:layout_constraintHorizontal_chainStyle="packed" app:layout_constraintTop_toBottomOf="@id/app_name" app:layout_constraintLeft_toLeftOf="@id/media_action_guidebox" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toLeftOf="@id/action1" app:layout_constraintHorizontal_bias="1" > </Constraint> Loading Loading @@ -220,7 +202,8 @@ app:layout_constraintHorizontal_chainStyle="packed" app:layout_constraintTop_toBottomOf="@id/app_name" app:layout_constraintLeft_toRightOf="@id/action3" app:layout_constraintRight_toRightOf="@id/media_action_guidebox" app:layout_constraintRight_toRightOf="parent" app:layout_constraintHorizontal_bias="0" > </Constraint> </ConstraintSet> packages/SystemUI/res/xml/media_expanded.xml +4 −2 Original line number Diff line number Diff line Loading @@ -83,11 +83,12 @@ <!-- Song name --> <Constraint android:id="@+id/header_title" android:layout_width="0dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/qs_media_panel_outer_padding" android:layout_marginTop="17dp" android:layout_marginStart="16dp" app:layout_constrainedWidth="true" app:layout_constraintTop_toBottomOf="@+id/app_name" app:layout_constraintStart_toEndOf="@id/album_art" app:layout_constraintEnd_toEndOf="parent" Loading @@ -96,10 +97,11 @@ <!-- Artist name --> <Constraint android:id="@+id/header_artist" android:layout_width="0dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/qs_media_panel_outer_padding" android:layout_marginTop="3dp" app:layout_constrainedWidth="true" app:layout_constraintTop_toBottomOf="@id/header_title" app:layout_constraintStart_toStartOf="@id/header_title" app:layout_constraintEnd_toEndOf="parent" Loading packages/SystemUI/src/com/android/systemui/util/animation/TransitionLayout.kt +26 −4 Original line number Diff line number Diff line Loading @@ -20,9 +20,11 @@ import android.content.Context import android.graphics.Canvas import android.graphics.PointF import android.graphics.Rect import android.text.Layout import android.util.AttributeSet import android.view.View import android.view.ViewTreeObserver import android.widget.TextView import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintSet import com.android.systemui.statusbar.CrossFadeHelper Loading Loading @@ -85,6 +87,23 @@ class TransitionLayout @JvmOverloads constructor( for (i in 0 until childCount) { val child = getChildAt(i) val widgetState = currentState.widgetStates.get(child.id) ?: continue // TextViews which are measured and sized differently should be handled with a // "clip mode", which means we clip explicitly rather than implicitly by passing // different sizes to measure/layout than setLeftTopRightBottom. // Then to accommodate RTL text, we need a "clip shift" which allows us to have the // clipBounds be attached to the right side of the view instead of the left. val clipModeShift = if (child is TextView && widgetState.width < widgetState.measureWidth) { if (child.layout.getParagraphDirection(0) == Layout.DIR_RIGHT_TO_LEFT) { widgetState.measureWidth - widgetState.width } else { 0 } } else { null } if (child.measuredWidth != widgetState.measureWidth || child.measuredHeight != widgetState.measureHeight) { val measureWidthSpec = MeasureSpec.makeMeasureSpec(widgetState.measureWidth, Loading @@ -94,14 +113,17 @@ class TransitionLayout @JvmOverloads constructor( child.measure(measureWidthSpec, measureHeightSpec) child.layout(0, 0, child.measuredWidth, child.measuredHeight) } val left = widgetState.x.toInt() + contentTranslationX val clipShift = clipModeShift ?: 0 val left = widgetState.x.toInt() + contentTranslationX - clipShift val top = widgetState.y.toInt() + contentTranslationY child.setLeftTopRightBottom(left, top, left + widgetState.width, top + widgetState.height) val clipMode = clipModeShift != null val boundsWidth = if (clipMode) widgetState.measureWidth else widgetState.width val boundsHeight = if (clipMode) widgetState.measureHeight else widgetState.height child.setLeftTopRightBottom(left, top, left + boundsWidth, top + boundsHeight) child.scaleX = widgetState.scale child.scaleY = widgetState.scale val clipBounds = child.clipBounds ?: Rect() clipBounds.set(0, 0, widgetState.width, widgetState.height) clipBounds.set(clipShift, 0, widgetState.width + clipShift, widgetState.height) child.clipBounds = clipBounds CrossFadeHelper.fadeIn(child, widgetState.alpha) child.visibility = if (widgetState.gone || widgetState.alpha == 0.0f) { Loading Loading
packages/SystemUI/res/layout/media_view.xml +4 −15 Original line number Diff line number Diff line Loading @@ -65,25 +65,16 @@ <!-- Actions must be ordered left-to-right even in RTL layout. However, they appear in a chain with the album art and the title, and must as a group appear at the end of that chain. This is accomplished by having the guidebox (an invisible view that is positioned around all 5 actions) in the chain with the album art and the title. The actions are in a LTR chain bounded by that guidebox, and the ambiguity of how wide the guidebox should be is resolved by using a barrier which forces it's starting edge to be as far to the end as possible while fitting the actions. --> 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_toTopOf="parent" app:barrierDirection="start" /> <View android:id="@+id/media_action_guidebox" android:layout_width="0dp" android:layout_height="48dp" android:layout_marginTop="16dp" android:visibility="invisible" app:constraint_referenced_ids="action0,action1,action2,action3,action4" /> <ImageButton Loading Loading @@ -201,7 +192,6 @@ android:fontFamily="@*android:string/config_headlineFontFamilyMedium" android:singleLine="true" android:textColor="@color/media_primary_text" android:textDirection="locale" android:textSize="16sp" /> <!-- Artist name --> Loading @@ -212,7 +202,6 @@ android:fontFamily="@*android:string/config_headlineFontFamily" android:singleLine="true" android:textColor="@color/media_secondary_text" android:textDirection="locale" android:textSize="14sp" /> <com.android.internal.widget.CachingIconView Loading
packages/SystemUI/res/xml/media_collapsed.xml +8 −25 Original line number Diff line number Diff line Loading @@ -85,10 +85,11 @@ <!-- Song name --> <Constraint android:id="@+id/header_title" android:layout_width="0dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="17dp" android:layout_marginStart="16dp" app:layout_constrainedWidth="true" app:layout_constraintTop_toBottomOf="@id/app_name" app:layout_constraintBottom_toTopOf="@id/header_artist" app:layout_constraintStart_toEndOf="@id/album_art" Loading @@ -98,10 +99,11 @@ <!-- Artist name --> <Constraint android:id="@+id/header_artist" android:layout_width="0dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="3dp" android:layout_marginBottom="24dp" app:layout_constrainedWidth="true" app:layout_constraintTop_toBottomOf="@id/header_title" app:layout_constraintStart_toStartOf="@id/header_title" app:layout_constraintEnd_toStartOf="@id/media_action_barrier" Loading Loading @@ -134,27 +136,6 @@ android:visibility="gone" /> <Constraint android:id="@+id/media_action_barrier" android:layout_width="0dp" android:layout_height="0dp" android:orientation="vertical" app:layout_constraintTop_toTopOf="parent" app:barrierDirection="start" app:constraint_referenced_ids="media_action_guidebox,action0,action1,action2,action3,action4" /> <Constraint android:id="@+id/media_action_guidebox" android:layout_width="0dp" android:layout_height="48dp" android:layout_marginTop="18dp" android:visibility="invisible" app:layout_constraintTop_toBottomOf="@id/app_name" app:layout_constraintStart_toEndOf="@id/header_title" app:layout_constraintEnd_toEndOf="parent" /> <Constraint android:id="@+id/action0" android:layout_width="48dp" Loading @@ -165,8 +146,9 @@ android:visibility="gone" app:layout_constraintHorizontal_chainStyle="packed" app:layout_constraintTop_toBottomOf="@id/app_name" app:layout_constraintLeft_toLeftOf="@id/media_action_guidebox" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toLeftOf="@id/action1" app:layout_constraintHorizontal_bias="1" > </Constraint> Loading Loading @@ -220,7 +202,8 @@ app:layout_constraintHorizontal_chainStyle="packed" app:layout_constraintTop_toBottomOf="@id/app_name" app:layout_constraintLeft_toRightOf="@id/action3" app:layout_constraintRight_toRightOf="@id/media_action_guidebox" app:layout_constraintRight_toRightOf="parent" app:layout_constraintHorizontal_bias="0" > </Constraint> </ConstraintSet>
packages/SystemUI/res/xml/media_expanded.xml +4 −2 Original line number Diff line number Diff line Loading @@ -83,11 +83,12 @@ <!-- Song name --> <Constraint android:id="@+id/header_title" android:layout_width="0dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/qs_media_panel_outer_padding" android:layout_marginTop="17dp" android:layout_marginStart="16dp" app:layout_constrainedWidth="true" app:layout_constraintTop_toBottomOf="@+id/app_name" app:layout_constraintStart_toEndOf="@id/album_art" app:layout_constraintEnd_toEndOf="parent" Loading @@ -96,10 +97,11 @@ <!-- Artist name --> <Constraint android:id="@+id/header_artist" android:layout_width="0dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/qs_media_panel_outer_padding" android:layout_marginTop="3dp" app:layout_constrainedWidth="true" app:layout_constraintTop_toBottomOf="@id/header_title" app:layout_constraintStart_toStartOf="@id/header_title" app:layout_constraintEnd_toEndOf="parent" Loading
packages/SystemUI/src/com/android/systemui/util/animation/TransitionLayout.kt +26 −4 Original line number Diff line number Diff line Loading @@ -20,9 +20,11 @@ import android.content.Context import android.graphics.Canvas import android.graphics.PointF import android.graphics.Rect import android.text.Layout import android.util.AttributeSet import android.view.View import android.view.ViewTreeObserver import android.widget.TextView import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintSet import com.android.systemui.statusbar.CrossFadeHelper Loading Loading @@ -85,6 +87,23 @@ class TransitionLayout @JvmOverloads constructor( for (i in 0 until childCount) { val child = getChildAt(i) val widgetState = currentState.widgetStates.get(child.id) ?: continue // TextViews which are measured and sized differently should be handled with a // "clip mode", which means we clip explicitly rather than implicitly by passing // different sizes to measure/layout than setLeftTopRightBottom. // Then to accommodate RTL text, we need a "clip shift" which allows us to have the // clipBounds be attached to the right side of the view instead of the left. val clipModeShift = if (child is TextView && widgetState.width < widgetState.measureWidth) { if (child.layout.getParagraphDirection(0) == Layout.DIR_RIGHT_TO_LEFT) { widgetState.measureWidth - widgetState.width } else { 0 } } else { null } if (child.measuredWidth != widgetState.measureWidth || child.measuredHeight != widgetState.measureHeight) { val measureWidthSpec = MeasureSpec.makeMeasureSpec(widgetState.measureWidth, Loading @@ -94,14 +113,17 @@ class TransitionLayout @JvmOverloads constructor( child.measure(measureWidthSpec, measureHeightSpec) child.layout(0, 0, child.measuredWidth, child.measuredHeight) } val left = widgetState.x.toInt() + contentTranslationX val clipShift = clipModeShift ?: 0 val left = widgetState.x.toInt() + contentTranslationX - clipShift val top = widgetState.y.toInt() + contentTranslationY child.setLeftTopRightBottom(left, top, left + widgetState.width, top + widgetState.height) val clipMode = clipModeShift != null val boundsWidth = if (clipMode) widgetState.measureWidth else widgetState.width val boundsHeight = if (clipMode) widgetState.measureHeight else widgetState.height child.setLeftTopRightBottom(left, top, left + boundsWidth, top + boundsHeight) child.scaleX = widgetState.scale child.scaleY = widgetState.scale val clipBounds = child.clipBounds ?: Rect() clipBounds.set(0, 0, widgetState.width, widgetState.height) clipBounds.set(clipShift, 0, widgetState.width + clipShift, widgetState.height) child.clipBounds = clipBounds CrossFadeHelper.fadeIn(child, widgetState.alpha) child.visibility = if (widgetState.gone || widgetState.alpha == 0.0f) { Loading