diff --git a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java index 0697133a02f98..f92bbf75d0273 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java +++ b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java @@ -364,13 +364,18 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout { private void distributeTiles() { emptyAndInflateOrRemovePages(); - final int tileCount = mPages.get(0).maxTiles(); - if (DEBUG) Log.d(TAG, "Distributing tiles"); + final int tilesPerPageCount = mPages.get(0).maxTiles(); int index = 0; - final int NT = mTiles.size(); - for (int i = 0; i < NT; i++) { + final int totalTilesCount = mTiles.size(); + if (DEBUG) { + Log.d(TAG, "Distributing tiles: " + + "[tilesPerPageCount=" + tilesPerPageCount + "]" + + "[totalTilesCount=" + totalTilesCount + "]" + ); + } + for (int i = 0; i < totalTilesCount; i++) { TileRecord tile = mTiles.get(i); - if (mPages.get(index).mRecords.size() == tileCount) index++; + if (mPages.get(index).mRecords.size() == tilesPerPageCount) index++; if (DEBUG) { Log.d(TAG, "Adding " + tile.tile.getClass().getSimpleName() + " to " + index); @@ -577,8 +582,8 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout { }); setOffscreenPageLimit(lastPageNumber); // Ensure the page to reveal has been inflated. int dx = getWidth() * lastPageNumber; - mScroller.startScroll(getScrollX(), getScrollY(), isLayoutRtl() ? -dx : dx, 0, - REVEAL_SCROLL_DURATION_MILLIS); + mScroller.startScroll(getScrollX(), getScrollY(), isLayoutRtl() ? -dx : dx, 0, + REVEAL_SCROLL_DURATION_MILLIS); postInvalidateOnAnimation(); } @@ -738,6 +743,7 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout { public interface PageListener { int INVALID_PAGE = -1; + void onPageChanged(boolean isFirst, int pageNumber); } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java index 3d00dd49cb1c2..7ee4047566339 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java +++ b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java @@ -123,7 +123,6 @@ public class TileLayout extends ViewGroup implements QSTileLayout { public boolean updateResources() { final Resources res = mContext.getResources(); mResourceColumns = Math.max(1, res.getInteger(R.integer.quick_settings_num_columns)); - updateColumns(); mMaxCellHeight = mContext.getResources().getDimensionPixelSize(mCellHeightResId); mCellMarginHorizontal = res.getDimensionPixelSize(R.dimen.qs_tile_margin_horizontal); mSidePadding = useSidePadding() ? mCellMarginHorizontal / 2 : 0; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/TileLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/TileLayoutTest.java index 5abc0e1f9c890..35c8cc70953d3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/TileLayoutTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/TileLayoutTest.java @@ -27,6 +27,8 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import android.content.Context; +import android.content.res.Resources; import android.test.suitebuilder.annotation.SmallTest; import android.view.accessibility.AccessibilityNodeInfo; @@ -42,16 +44,22 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; +import org.mockito.Mockito; @SmallTest @RunWith(AndroidJUnit4.class) public class TileLayoutTest extends SysuiTestCase { - private TileLayout mTileLayout; + private Resources mResources; private int mLayoutSizeForOneTile; + private TileLayout mTileLayout; // under test @Before public void setUp() throws Exception { - mTileLayout = new TileLayout(mContext); + Context context = Mockito.spy(mContext); + mResources = Mockito.spy(context.getResources()); + Mockito.when(mContext.getResources()).thenReturn(mResources); + + mTileLayout = new TileLayout(context); // Layout needs to leave space for the tile margins. Three times the margin size is // sufficient for any number of columns. mLayoutSizeForOneTile = @@ -203,4 +211,21 @@ public class TileLayoutTest extends SysuiTestCase { verify(tileRecord1.tileView).setPosition(0); verify(tileRecord2.tileView).setPosition(1); } + + @Test + public void resourcesChanged_updateResources_returnsTrue() { + Mockito.when(mResources.getInteger(R.integer.quick_settings_num_columns)).thenReturn(1); + mTileLayout.updateResources(); // setup with 1 + Mockito.when(mResources.getInteger(R.integer.quick_settings_num_columns)).thenReturn(2); + + assertEquals(true, mTileLayout.updateResources()); + } + + @Test + public void resourcesSame_updateResources_returnsFalse() { + Mockito.when(mResources.getInteger(R.integer.quick_settings_num_columns)).thenReturn(1); + mTileLayout.updateResources(); // setup with 1 + + assertEquals(false, mTileLayout.updateResources()); + } }