Merge "Fix clipping of SecondaryLabel on animation" into sc-dev

This commit is contained in:
Fabian Kozynski
2021-07-02 13:15:31 +00:00
committed by Android (Google) Code Review
3 changed files with 21 additions and 2 deletions

View File

@@ -383,6 +383,7 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
mOtherTilesExpandAnimator.addView(tileView); mOtherTilesExpandAnimator.addView(tileView);
tileView.setClipChildren(true); tileView.setClipChildren(true);
tileView.setClipToPadding(true); tileView.setClipToPadding(true);
firstPageBuilder.addFloat(tileView.getSecondaryLabel(), "alpha", 0, 1);
} }
mAllViews.add(tileView); mAllViews.add(tileView);

View File

@@ -23,7 +23,7 @@ import android.widget.LinearLayout
/** /**
* [LinearLayout] that can ignore the last child for measuring. * [LinearLayout] that can ignore the last child for measuring.
* *
* The view is measured as regularlt, then if [ignoreLastView] is true: * The view is measured as regularly, then if [ignoreLastView] is true:
* * In [LinearLayout.VERTICAL] orientation, the height of the last view is subtracted from the * * In [LinearLayout.VERTICAL] orientation, the height of the last view is subtracted from the
* final measured height. * final measured height.
* * In [LinearLayout.HORIZONTAL] orientation, the width of the last view is subtracted from the * * In [LinearLayout.HORIZONTAL] orientation, the width of the last view is subtracted from the
@@ -41,8 +41,21 @@ class IgnorableChildLinearLayout @JvmOverloads constructor(
var ignoreLastView = false var ignoreLastView = false
/**
* Forces [MeasureSpec.UNSPECIFIED] in the direction of layout
*/
var forceUnspecifiedMeasure = false
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec) val actualWidthSpec = if (forceUnspecifiedMeasure && orientation == HORIZONTAL) {
MeasureSpec.makeMeasureSpec(widthMeasureSpec, MeasureSpec.UNSPECIFIED)
} else widthMeasureSpec
val actualHeightSpec = if (forceUnspecifiedMeasure && orientation == VERTICAL) {
MeasureSpec.makeMeasureSpec(heightMeasureSpec, MeasureSpec.UNSPECIFIED)
} else heightMeasureSpec
super.onMeasure(actualWidthSpec, actualHeightSpec)
if (ignoreLastView && childCount > 0) { if (ignoreLastView && childCount > 0) {
val lastView = getChildAt(childCount - 1) val lastView = getChildAt(childCount - 1)
if (lastView.visibility != GONE) { if (lastView.visibility != GONE) {

View File

@@ -189,6 +189,11 @@ open class QSTileViewImpl @JvmOverloads constructor(
secondaryLabel = labelContainer.requireViewById(R.id.app_label) secondaryLabel = labelContainer.requireViewById(R.id.app_label)
if (collapsed) { if (collapsed) {
labelContainer.ignoreLastView = true labelContainer.ignoreLastView = true
// Ideally, it'd be great if the parent could set this up when measuring just this child
// instead of the View class having to support this. However, due to the mysteries of
// LinearLayout's double measure pass, we cannot overwrite `measureChild` or any of its
// sibling methods to have special behavior for labelContainer.
labelContainer.forceUnspecifiedMeasure = true
secondaryLabel.alpha = 0f secondaryLabel.alpha = 0f
// Do not marque in QQS // Do not marque in QQS
label.ellipsize = TextUtils.TruncateAt.END label.ellipsize = TextUtils.TruncateAt.END