Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ee947e9a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

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

parents 053e3dcf fa58cfca
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -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);
@@ -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()));
+1 −0
Original line number Diff line number Diff line
@@ -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();
+29 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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) {