Merge "Refresh the dashboard UI when swiping away the only suggestion." into oc-dr1-dev am: ee947e9a31

am: 11a93be4a7

Change-Id: Ib7b082644764d0dd43d29417f5076e99b37e856f
This commit is contained in:
Doris Ling
2017-06-22 01:43:56 +00:00
committed by android-build-merger
3 changed files with 45 additions and 1 deletions

View File

@@ -264,6 +264,19 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
notifyDashboardDataChanged(prevData); 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 @Override
public void notifySummaryChanged(Tile tile) { public void notifySummaryChanged(Tile tile) {
final int position = mDashboardData.getPositionByTile(tile); final int position = mDashboardData.getPositionByTile(tile);
@@ -445,7 +458,8 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
return (Tile) getItem(getItemId(position)); return (Tile) getItem(getItemId(position));
} }
private void notifyDashboardDataChanged(DashboardData prevData) { @VisibleForTesting
void notifyDashboardDataChanged(DashboardData prevData) {
if (mFirstFrameDrawn && prevData != null) { if (mFirstFrameDrawn && prevData != null) {
final DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new DashboardData final DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new DashboardData
.ItemsDataDiffCallback(prevData.getItemList(), mDashboardData.getItemList())); .ItemsDataDiffCallback(prevData.getItemList(), mDashboardData.getItemList()));

View File

@@ -249,6 +249,7 @@ public class DashboardSummary extends InstrumentedFragment
@Override @Override
public void onSuggestionDismissed(Tile suggestion) { public void onSuggestionDismissed(Tile suggestion) {
mAdapter.onSuggestionDismissed();
// Refresh the UI to pick up suggestions that can now be shown because, say, a higher // 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. // priority suggestion has been dismissed, or an exclusive suggestion category is emptied.
rebuildUI(); rebuildUI();

View File

@@ -21,6 +21,8 @@ import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never; 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.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@@ -442,6 +444,33 @@ public class DashboardAdapterTest {
assertThat(itemView.getChildCount()).isEqualTo(1); 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) { private List<Tile> makeSuggestions(String... pkgNames) {
final List<Tile> suggestions = new ArrayList<>(); final List<Tile> suggestions = new ArrayList<>();
for (String pkgName : pkgNames) { for (String pkgName : pkgNames) {