Loading src/com/android/settings/dashboard/DashboardAdapter.java +15 −1 Original line number Diff line number Diff line Loading @@ -264,6 +264,19 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash notifyDashboardDataChanged(prevData); } public void onSuggestionDismissed() { final List<Tile> 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); Loading Loading @@ -449,7 +462,8 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash return (Tile) getItem(getItemId(position)); } private void notifyDashboardDataChanged(DashboardData prevData) { @VisibleForTesting void notifyDashboardDataChanged(DashboardData prevData) { if (mFirstFrameDrawn && prevData != null) { final DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new DashboardData .ItemsDataDiffCallback(prevData.getItemList(), mDashboardData.getItemList())); Loading src/com/android/settings/dashboard/DashboardSummary.java +1 −0 Original line number Diff line number Diff line Loading @@ -249,6 +249,7 @@ public class DashboardSummary extends InstrumentedFragment @Override public void onSuggestionDismissed(Tile suggestion) { mAdapter.onSuggestionDismissed(); // Refresh the UI to pick up suggestions that can now be shown because, say, a higher // priority suggestion has been dismissed, or an exclusive suggestion category is emptied. rebuildUI(); Loading tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java +29 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ import static org.mockito.Mockito.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading Loading @@ -442,6 +444,33 @@ public class DashboardAdapterTest { assertThat(itemView.getChildCount()).isEqualTo(1); } @Test public void testSuggestioDismissed_notOnlySuggestion_doNothing() { final DashboardAdapter adapter = spy(new DashboardAdapter(mContext, null, null)); adapter.setCategoriesAndSuggestions( new ArrayList<>(), 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<Tile> makeSuggestions(String... pkgNames) { final List<Tile> suggestions = new ArrayList<>(); for (String pkgName : pkgNames) { Loading Loading
src/com/android/settings/dashboard/DashboardAdapter.java +15 −1 Original line number Diff line number Diff line Loading @@ -264,6 +264,19 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash notifyDashboardDataChanged(prevData); } public void onSuggestionDismissed() { final List<Tile> 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); Loading Loading @@ -449,7 +462,8 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash return (Tile) getItem(getItemId(position)); } private void notifyDashboardDataChanged(DashboardData prevData) { @VisibleForTesting void notifyDashboardDataChanged(DashboardData prevData) { if (mFirstFrameDrawn && prevData != null) { final DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new DashboardData .ItemsDataDiffCallback(prevData.getItemList(), mDashboardData.getItemList())); Loading
src/com/android/settings/dashboard/DashboardSummary.java +1 −0 Original line number Diff line number Diff line Loading @@ -249,6 +249,7 @@ public class DashboardSummary extends InstrumentedFragment @Override public void onSuggestionDismissed(Tile suggestion) { mAdapter.onSuggestionDismissed(); // Refresh the UI to pick up suggestions that can now be shown because, say, a higher // priority suggestion has been dismissed, or an exclusive suggestion category is emptied. rebuildUI(); Loading
tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java +29 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ import static org.mockito.Mockito.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading Loading @@ -442,6 +444,33 @@ public class DashboardAdapterTest { assertThat(itemView.getChildCount()).isEqualTo(1); } @Test public void testSuggestioDismissed_notOnlySuggestion_doNothing() { final DashboardAdapter adapter = spy(new DashboardAdapter(mContext, null, null)); adapter.setCategoriesAndSuggestions( new ArrayList<>(), 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<Tile> makeSuggestions(String... pkgNames) { final List<Tile> suggestions = new ArrayList<>(); for (String pkgName : pkgNames) { Loading