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

Commit 1f34a5cf 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-mr1-dev

parents 8541d890 49405394
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;
@@ -152,7 +154,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)))
                .setCategory(category)
                .build();
        notifyDashboardDataChanged(prevData);
@@ -194,9 +197,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;
@@ -204,6 +210,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
@@ -251,10 +251,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
@@ -321,17 +321,33 @@ public class DashboardAdapterTest {
    }

    @Test
    public void testSuggestionDismissed_notOnlySuggestion_doNothing() {
    public void testSuggestionDismissed_notOnlySuggestion_updateSuggestionOnly() {
        final DashboardAdapter adapter =
                spy(new DashboardAdapter(mContext, null, null, null, null));
        adapter.setCategoriesAndSuggestions(
                null /* category */, makeSuggestions("pkg1", "pkg2", "pkg3"));
        final List<Tile> suggestions = makeSuggestions("pkg1", "pkg2", "pkg3");
        adapter.setCategoriesAndSuggestions(null /* category */, 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());
    }

@@ -339,11 +355,12 @@ public class DashboardAdapterTest {
    public void testSuggestionDismissed_onlySuggestion_updateDashboardData() {
        DashboardAdapter adapter =
                spy(new DashboardAdapter(mContext, null, null, null, null));
        adapter.setCategoriesAndSuggestions(null /* category */, makeSuggestions("pkg1"));
        final List<Tile> suggestions = makeSuggestions("pkg1");
        adapter.setCategoriesAndSuggestions(null /* category */, 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());
@@ -385,6 +402,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(null /* category */, 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
@@ -118,9 +118,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