Only call layout during layout pass

In other cases, let's just adjust the bounds, otherwise we'll conflict
with the measuring pass, causing the width to be 0 after screen
rotations.

Test: manual
Fixes: 204497727
Change-Id: I759f084577814ff1a4372f1d90cd05ce73604950
This commit is contained in:
Lucas Dupin
2021-11-01 20:35:33 -07:00
parent 6665ad79a3
commit 27b2190cd6
2 changed files with 13 additions and 9 deletions

View File

@@ -34,7 +34,11 @@ class QSSquishinessController @Inject constructor(
* Change the height of all tiles and repositions their siblings.
*/
private fun updateSquishiness() {
// Start by updating the height of all tiles
// Update tile positions in the layout
val tileLayout = quickQSPanelController.tileLayout as TileLayout
tileLayout.setSquishinessFraction(squishiness)
// Adjust their heights as well
for (tile in qsTileHost.tiles) {
val tileView = quickQSPanelController.getTileView(tile)
(tileView as? HeightOverrideable)?.let {
@@ -42,10 +46,6 @@ class QSSquishinessController @Inject constructor(
}
}
// Update tile positions in the layout
val tileLayout = quickQSPanelController.tileLayout as TileLayout
tileLayout.setSquishinessFraction(squishiness)
// Calculate how much we should move the footer
val tileHeightOffset = tileLayout.height - tileLayout.tilesHeight
val footerTopMargin = (qqsFooterActionsView.layoutParams as ViewGroup.MarginLayoutParams)

View File

@@ -212,7 +212,7 @@ public class TileLayout extends ViewGroup implements QSTileLayout {
return mMaxCellHeight;
}
private void layoutTileRecords(int numRecords) {
private void layoutTileRecords(int numRecords, boolean forLayout) {
final boolean isRtl = getLayoutDirection() == LAYOUT_DIRECTION_RTL;
int row = 0;
int column = 0;
@@ -232,14 +232,18 @@ public class TileLayout extends ViewGroup implements QSTileLayout {
final int left = getColumnStart(isRtl ? mColumns - column - 1 : column);
final int right = left + mCellWidth;
final int bottom = top + record.tileView.getMeasuredHeight();
record.tileView.layout(left, top, right, bottom);
if (forLayout) {
record.tileView.layout(left, top, right, bottom);
} else {
record.tileView.setLeftTopRightBottom(left, top, right, bottom);
}
mLastTileBottom = bottom;
}
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
layoutTileRecords(mRecords.size());
layoutTileRecords(mRecords.size(), true /* forLayout */);
}
protected int getRowTop(int row) {
@@ -280,6 +284,6 @@ public class TileLayout extends ViewGroup implements QSTileLayout {
return;
}
mSquishinessFraction = squishinessFraction;
layoutTileRecords(mRecords.size());
layoutTileRecords(mRecords.size(), false /* forLayout */);
}
}