Set PageIndicator pages in QSPanel#onMeasure

Pre-emptively update PageIndicator's numPages before measuring in
QSPanel so that views will be appropriately measured. Previously, new
PageIndicator child views would be added in the middle of a QSPanel layout pass
after already being measured, so the new PageIndicator child wouldn't be
measured.

Test: manually add and remove new QS tiles. rotate between landscape +
portrait modes. observe the PageIndicator is correct.
Fixes: 157542221

Change-Id: Ic1bb29039dd12993a50758bf48a4ad792d8cdfc3
This commit is contained in:
Beverly
2020-06-10 17:42:32 -04:00
committed by Beverly Tai
parent 3fb94d8e9d
commit 8c736aa4f9
2 changed files with 23 additions and 10 deletions

View File

@@ -291,15 +291,7 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout {
}
private void emptyAndInflateOrRemovePages() {
final int nTiles = mTiles.size();
// We should always have at least one page, even if it's empty.
int numPages = Math.max(nTiles / mPages.get(0).maxTiles(), 1);
// Add one more not full page if needed
if (nTiles > numPages * mPages.get(0).maxTiles()) {
numPages++;
}
final int numPages = getNumPages();
final int NP = mPages.size();
for (int i = 0; i < NP; i++) {
mPages.get(i).removeAllViews();
@@ -431,6 +423,22 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout {
return mPages.get(0).mColumns;
}
/**
* Gets the number of pages in this paged tile layout
*/
public int getNumPages() {
final int nTiles = mTiles.size();
// We should always have at least one page, even if it's empty.
int numPages = Math.max(nTiles / mPages.get(0).maxTiles(), 1);
// Add one more not full page if needed
if (nTiles > numPages * mPages.get(0).maxTiles()) {
numPages++;
}
return numPages;
}
public int getNumVisibleTiles() {
if (mPages.size() == 0) return 0;
TilePage currentPage = mPages.get(getCurrentPageNumber());

View File

@@ -240,8 +240,13 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (mTileLayout instanceof PagedTileLayout) {
// Since PageIndicator gets measured before PagedTileLayout, we preemptively set the
// # of pages before the measurement pass so PageIndicator is measured appropriately
if (mFooterPageIndicator != null) {
mFooterPageIndicator.setNumPages(((PagedTileLayout) mTileLayout).getNumPages());
}
// Allow the UI to be as big as it want's to, we're in a scroll view
int newHeight = 10000;
int availableHeight = MeasureSpec.getSize(heightMeasureSpec);