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

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

Merge "Limit the suggestions to be shown to 5." into oc-dr1-dev

parents 7f87347e 2798c24d
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -67,6 +67,8 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
    static final String STATE_SUGGESTION_CONDITION_MODE = "suggestion_condition_mode";
    @VisibleForTesting
    static final int SUGGESTION_CONDITION_HEADER_POSITION = 0;
    @VisibleForTesting
    static final int MAX_SUGGESTION_TO_SHOW = 5;

    private final IconCache mCache;
    private final Context mContext;
@@ -174,7 +176,8 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash

        final DashboardData prevData = mDashboardData;
        mDashboardData = new DashboardData.Builder(prevData)
                .setSuggestions(suggestions)
                .setSuggestions(suggestions.subList(0,
                        Math.min(suggestions.size(), MAX_SUGGESTION_TO_SHOW)))
                .setCategories(categories)
                .build();
        notifyDashboardDataChanged(prevData);
@@ -215,9 +218,12 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
        notifyDashboardDataChanged(prevData);
    }

    public void onSuggestionDismissed() {
    public void onSuggestionDismissed(Tile suggestion) {
        final List<Tile> suggestions = mDashboardData.getSuggestions();
        if (suggestions != null && suggestions.size() == 1) {
        if (suggestions == null || suggestions.isEmpty()) {
            return;
        }
        if (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;
@@ -225,6 +231,9 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
                    .setSuggestions(null)
                    .build();
            notifyDashboardDataChanged(prevData);
        } else {
            suggestions.remove(suggestion);
            mSuggestionAdapter.notifyDataSetChanged();
        }
    }

+1 −4
Original line number Diff line number Diff line
@@ -245,10 +245,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();
        mAdapter.onSuggestionDismissed(suggestion);
    }

    private class SuggestionLoader extends AsyncTask<Void, Void, List<Tile>> {
+33 −6
Original line number Diff line number Diff line
@@ -325,17 +325,33 @@ public class DashboardAdapterTest {
    }

    @Test
    public void testSuggestioDismissed_notOnlySuggestion_doNothing() {
    public void testSuggestioDismissed_notOnlySuggestion_updateSuggestionOnly() {
        final DashboardAdapter adapter =
                spy(new DashboardAdapter(mContext, null, null, null, null));
        adapter.setCategoriesAndSuggestions(
                new ArrayList<>(), makeSuggestions("pkg1", "pkg2", "pkg3"));
        final List<Tile> suggestions = makeSuggestions("pkg1", "pkg2", "pkg3");
        adapter.setCategoriesAndSuggestions(new ArrayList<>(), suggestions);

        final RecyclerView data = mock(RecyclerView.class);
        when(data.getResources()).thenReturn(mResources);
        when(data.getContext()).thenReturn(mContext);
        when(mResources.getDisplayMetrics()).thenReturn(mock(DisplayMetrics.class));
        final View itemView = mock(View.class);
        when(itemView.findViewById(R.id.data)).thenReturn(data);
        final DashboardAdapter.SuggestionAndConditionContainerHolder holder =
                new DashboardAdapter.SuggestionAndConditionContainerHolder(itemView);

        adapter.onBindConditionAndSuggestion(
                holder, DashboardAdapter.SUGGESTION_CONDITION_HEADER_POSITION);

        final DashboardData dashboardData = adapter.mDashboardData;
        reset(adapter); // clear interactions tracking

        adapter.onSuggestionDismissed();
        final Tile suggestionToRemove = suggestions.get(1);
        adapter.onSuggestionDismissed(suggestionToRemove);

        assertThat(adapter.mDashboardData).isEqualTo(dashboardData);
        assertThat(suggestions.size()).isEqualTo(2);
        assertThat(suggestions.contains(suggestionToRemove)).isFalse();
        verify(adapter, never()).notifyDashboardDataChanged(any());
    }

@@ -343,11 +359,12 @@ public class DashboardAdapterTest {
    public void testSuggestioDismissed_onlySuggestion_updateDashboardData() {
        DashboardAdapter adapter =
                spy(new DashboardAdapter(mContext, null, null, null, null));
        adapter.setCategoriesAndSuggestions(new ArrayList<>(), makeSuggestions("pkg1"));
        final List<Tile> suggestions = makeSuggestions("pkg1");
        adapter.setCategoriesAndSuggestions(new ArrayList<>(), suggestions);
        final DashboardData dashboardData = adapter.mDashboardData;
        reset(adapter); // clear interactions tracking

        adapter.onSuggestionDismissed();
        adapter.onSuggestionDismissed(suggestions.get(0));

        assertThat(adapter.mDashboardData).isNotEqualTo(dashboardData);
        verify(adapter).notifyDashboardDataChanged(any());
@@ -369,6 +386,16 @@ public class DashboardAdapterTest {
        verify(mockIcon).setTint(eq(0x89000000));
    }

    @Test
    public void testSetCategoriesAndSuggestions_limitSuggestionSize() {
        List<Tile> packages =
                makeSuggestions("pkg1", "pkg2", "pkg3", "pkg4", "pkg5", "pkg6", "pkg7");
        mDashboardAdapter.setCategoriesAndSuggestions(Collections.emptyList(), packages);

        assertThat(mDashboardAdapter.mDashboardData.getSuggestions().size())
                .isEqualTo(DashboardAdapter.MAX_SUGGESTION_TO_SHOW);
    }

    @Test
    public void testBindConditionAndSuggestion_shouldSetSuggestionAdapterAndNoCrash() {
        mDashboardAdapter = new DashboardAdapter(mContext, null, null, null, null);
+2 −3
Original line number Diff line number Diff line
@@ -111,9 +111,8 @@ public class DashboardSummaryTest {
    }

    @Test
    public void onSuggestionDismissed_categoryShouldBeRefreshed() {
        doNothing().when(mSummary).rebuildUI();
    public void onSuggestionDismissed_shouldNotRebuildUI() {
        mSummary.onSuggestionDismissed(mock(Tile.class));
        verify(mSummary).rebuildUI();
        verify(mSummary, never()).rebuildUI();
    }
}
 No newline at end of file