diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index 51613c730a0..9168ead3b94 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -527,8 +527,9 @@ public class SettingsActivity extends SettingsDrawerActivity } } - if (DEBUG_TIMING) Log.d(LOG_TAG, "onCreate took " + (System.currentTimeMillis() - startTime) - + " ms"); + if (DEBUG_TIMING) { + Log.d(LOG_TAG, "onCreate took " + (System.currentTimeMillis() - startTime) + " ms"); + } } public void setDisplaySearchMenu(boolean displaySearch) { diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java index b6285ad421b..514eaf2b7a5 100644 --- a/src/com/android/settings/dashboard/DashboardAdapter.java +++ b/src/com/android/settings/dashboard/DashboardAdapter.java @@ -63,6 +63,7 @@ public class DashboardAdapter extends RecyclerView.Adapter category) { + final DashboardData prevData = mDashboardData; + Log.d(TAG, "adapter setCategory called"); + mDashboardData = new DashboardData.Builder(prevData) + .setCategories(category) + .build(); + notifyDashboardDataChanged(prevData); + } + public void setConditions(List conditions) { final DashboardData prevData = mDashboardData; Log.d(TAG, "adapter setConditions called"); @@ -304,11 +314,12 @@ public class DashboardAdapter extends RecyclerView.Adapter { + 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 { updateCategoryAndSuggestion(null /* tiles */); - }, MAX_WAIT_MILLIS); + } } @Override public void onCategoriesChanged() { - rebuildUI(); + rebuildUI(false /* rebuildSuggestions */); } @Override @@ -264,7 +264,6 @@ public class DashboardSummary extends InstrumentedFragment } private class SuggestionLoader extends AsyncTask> { - @Override protected List doInBackground(Void... params) { final Context context = getContext(); @@ -307,7 +306,7 @@ public class DashboardSummary extends InstrumentedFragment } @VisibleForTesting - void updateCategoryAndSuggestion(List tiles) { + void updateCategoryAndSuggestion(List suggestions) { final Activity activity = getActivity(); if (activity == null) { return; @@ -319,10 +318,14 @@ public class DashboardSummary extends InstrumentedFragment List categories = new ArrayList<>(); categories.add(mDashboardFeatureProvider.getTilesForCategory( CategoryKey.CATEGORY_HOMEPAGE)); - mAdapter.setCategoriesAndSuggestions(categories, tiles); + if (suggestions != null) { + mAdapter.setCategoriesAndSuggestions(categories, suggestions); + } else { + mAdapter.setCategory(categories); + } } else { mAdapter.setCategoriesAndSuggestions( - ((SettingsActivity) activity).getDashboardCategories(), tiles); + ((SettingsActivity) activity).getDashboardCategories(), suggestions); } } } diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java index 9627e2ce045..62866c90b98 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java @@ -17,8 +17,8 @@ package com.android.settings.dashboard; import android.app.Activity; - import android.support.v7.widget.LinearLayoutManager; + import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.dashboard.conditional.ConditionManager; @@ -33,6 +33,7 @@ import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; +import static org.mockito.Matchers.anyList; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; @@ -90,4 +91,13 @@ public class DashboardSummaryTest { mSummary.onConditionsChanged(); verify(mDashboard, never()).scrollToPosition(0); } + + @Test + public void onCategoryChanged_updateCategoryOnly() { + doReturn(mock(Activity.class)).when(mSummary).getActivity(); + when(mDashboardFeatureProvider.isEnabled()).thenReturn(true); + + mSummary.onCategoriesChanged(); + verify(mAdapter).setCategory(anyList()); + } } \ No newline at end of file