Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0b7d617a authored by Fabian Kozynski's avatar Fabian Kozynski
Browse files

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
parent 2355b7f2
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -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);