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:
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user