diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java index 3a768cc9384..a0841518c30 100644 --- a/src/com/android/settings/dashboard/DashboardAdapter.java +++ b/src/com/android/settings/dashboard/DashboardAdapter.java @@ -264,6 +264,19 @@ public class DashboardAdapter extends RecyclerView.Adapter suggestions = mDashboardData.getSuggestions(); + if (suggestions != null && suggestions.size() == 1) { + // The only suggestion is dismissed, and the the empty suggestion container will + // remain as the dashboard item. Need to refresh the dashboard list. + final DashboardData prevData = mDashboardData; + mDashboardData = new DashboardData.Builder(prevData) + .setSuggestions(null) + .build(); + notifyDashboardDataChanged(prevData); + } + } + @Override public void notifySummaryChanged(Tile tile) { final int position = mDashboardData.getPositionByTile(tile); @@ -449,7 +462,8 @@ public class DashboardAdapter extends RecyclerView.Adapter(), makeSuggestions("pkg1", "pkg2", "pkg3")); + final DashboardData dashboardData = adapter.mDashboardData; + reset(adapter); // clear interactions tracking + + adapter.onSuggestionDismissed(); + + assertThat(adapter.mDashboardData).isEqualTo(dashboardData); + verify(adapter, never()).notifyDashboardDataChanged(any()); + } + + @Test + public void testSuggestioDismissed_onlySuggestion_updateDashboardData() { + DashboardAdapter adapter = spy(new DashboardAdapter(mContext, null, null)); + adapter.setCategoriesAndSuggestions(new ArrayList<>(), makeSuggestions("pkg1")); + final DashboardData dashboardData = adapter.mDashboardData; + reset(adapter); // clear interactions tracking + + adapter.onSuggestionDismissed(); + + assertThat(adapter.mDashboardData).isNotEqualTo(dashboardData); + verify(adapter).notifyDashboardDataChanged(any()); + } + private List makeSuggestions(String... pkgNames) { final List suggestions = new ArrayList<>(); for (String pkgName : pkgNames) {