Prevent QSPanel from remeasuring

Once QSPanel has been measured, do not measure it again in the pass from
QSContainerImpl.

This prevents measuring with a slightly bigger size
(why?) that causes it to recalculate the number of rows (and the number
of pages) of PagedTileLayout. In some cases, this was causing a
different measure while scrolling for an instant, changing the number of
pages and therefore sending the user to page 0 again.

Fixes: 135136427
Test: manual, following configs:
	* landscape and portrait
	* 1, 2 and 3 pages
	* Security footer off and on with 1 and 2 lines

Change-Id: I74e3ce68bd2d3a8b7af1c84d9d0164ce6a672ed1
This commit is contained in:
Fabian Kozynski
2019-08-08 15:53:34 -04:00
parent 2355b7f25d
commit 0b7d617af2

View File

@@ -111,13 +111,25 @@ public class QSContainerImpl extends FrameLayout {
+ mQSPanel.getMeasuredHeight() + getPaddingBottom();
super.onMeasure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
// QSCustomizer will always be the height of the screen, but do this after
// other measuring to avoid changing the height of the QS.
mQSCustomizer.measure(widthMeasureSpec,
MeasureSpec.makeMeasureSpec(getDisplayHeight(), MeasureSpec.EXACTLY));
}
@Override
protected void measureChildWithMargins(View child, int parentWidthMeasureSpec, int widthUsed,
int parentHeightMeasureSpec, int heightUsed) {
// Do not measure QSPanel again when doing super.onMeasure.
// This prevents the pages in PagedTileLayout to be remeasured with a different (incorrect)
// size to the one used for determining the number of rows and then the number of pages.
if (child != mQSPanel) {
super.measureChildWithMargins(child, parentWidthMeasureSpec, widthUsed,
parentHeightMeasureSpec, heightUsed);
}
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);