diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java index 32b9c57c742..5206336927b 100644 --- a/src/com/android/settings/dashboard/DashboardSummary.java +++ b/src/com/android/settings/dashboard/DashboardSummary.java @@ -70,6 +70,7 @@ public class DashboardSummary extends InstrumentedFragment private SuggestionsChecks mSuggestionsChecks; private DashboardFeatureProvider mDashboardFeatureProvider; private SuggestionFeatureProvider mSuggestionFeatureProvider; + private boolean isOnCategoriesChangedCalled; @Override public int getMetricsCategory() { @@ -204,25 +205,27 @@ public class DashboardSummary extends InstrumentedFragment Log.d(TAG, "onViewCreated took " + (System.currentTimeMillis() - startTime) + " ms"); } - rebuildUI(true /* rebuildSuggestions */); + rebuildUI(); } - private void rebuildUI(boolean rebuildSuggestions) { - if (rebuildSuggestions) { - // recheck to see if any suggestions have been changed. - new SuggestionLoader().execute(); - // Set categories on their own if loading suggestions takes too long. - mHandler.postDelayed(() -> { - updateCategoryAndSuggestion(null /* tiles */); - }, MAX_WAIT_MILLIS); - } else { + @VisibleForTesting + void rebuildUI() { + new SuggestionLoader().execute(); + // Set categories on their own if loading suggestions takes too long. + mHandler.postDelayed(() -> { updateCategoryAndSuggestion(null /* tiles */); - } + }, MAX_WAIT_MILLIS); } @Override public void onCategoriesChanged() { - rebuildUI(false /* rebuildSuggestions */); + // Bypass rebuildUI() on the first call of onCategoriesChanged, since rebuildUI() happens + // in onViewCreated as well when app starts. But, on the subsequent calls we need to + // rebuildUI() because there might be some changes to suggestions and categories. + if (isOnCategoriesChangedCalled) { + rebuildUI(); + } + isOnCategoriesChangedCalled = true; } @Override diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java index 62866c90b98..b3f9fe059ed 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java @@ -34,6 +34,7 @@ import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; import static org.mockito.Matchers.anyList; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; @@ -41,6 +42,7 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; + @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class DashboardSummaryTest { @@ -93,11 +95,19 @@ public class DashboardSummaryTest { } @Test - public void onCategoryChanged_updateCategoryOnly() { + public void onCategoryChanged_noRebuildOnFirstCall() { doReturn(mock(Activity.class)).when(mSummary).getActivity(); - when(mDashboardFeatureProvider.isEnabled()).thenReturn(true); - + doNothing().when(mSummary).rebuildUI(); mSummary.onCategoriesChanged(); - verify(mAdapter).setCategory(anyList()); + verify(mSummary, never()).rebuildUI(); + } + + @Test + public void onCategoryChanged_rebuildOnSecondCall() { + doReturn(mock(Activity.class)).when(mSummary).getActivity(); + doNothing().when(mSummary).rebuildUI(); + mSummary.onCategoriesChanged(); + mSummary.onCategoriesChanged(); + verify(mSummary).rebuildUI(); } } \ No newline at end of file