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);
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()));
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;
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) {