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

Commit d5d4ae73 authored by Doris Ling's avatar Doris Ling Committed by android-build-merger
Browse files

Merge "Fix crash when initializing Settings suggestions." into oc-dr1-dev am: c074c1c8

am: da9d2069

Change-Id: Ia2d3416b079c617450562eb0daf3ab3625b83d0f
parents 8e1a32f3 da9d2069
Loading
Loading
Loading
Loading
+13 −7
Original line number Diff line number Diff line
@@ -67,6 +67,9 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
    private static final String STATE_SUGGESTIONS_SHOWN_LOGGED = "suggestions_shown_logged";
    private static final String STATE_SUGGESTION_CONDITION_MODE = "suggestion_condition_mode";

    @VisibleForTesting
    static final int SUGGESTION_CONDITION_HEADER_POSITION = 0;

    private final IconCache mCache;
    private final Context mContext;
    private final MetricsFeatureProvider mMetricsFeatureProvider;
@@ -364,7 +367,8 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
                   2. SuggestionCondition header - the header that shows the summary info for the
                      suggestion/condition that is currently hidden. It has the expand button to
                      expand the section. */
                if (mDashboardData.getDisplayableSuggestionCount() > 0 && position == 1
                if (mDashboardData.getDisplayableSuggestionCount() > 0
                        && position == SUGGESTION_CONDITION_HEADER_POSITION
                        && mDashboardData.getSuggestionConditionMode()
                            != DashboardData.HEADER_MODE_COLLAPSED) {
                    onBindSuggestionHeader((SuggestionAndConditionHeaderHolder) holder);
@@ -382,7 +386,7 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
                    mDashboardData = new DashboardData.Builder(prevData).setSuggestionConditionMode(
                        DashboardData.HEADER_MODE_COLLAPSED).build();
                    notifyDashboardDataChanged(prevData);
                    mRecyclerView.scrollToPosition(1);
                    mRecyclerView.scrollToPosition(SUGGESTION_CONDITION_HEADER_POSITION);
                });
                break;
        }
@@ -616,17 +620,19 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
                .setSuggestionConditionMode(nextMode).build();
            notifyDashboardDataChanged(prevData);
            if (wasCollapsed) {
                mRecyclerView.scrollToPosition(1);
                mRecyclerView.scrollToPosition(SUGGESTION_CONDITION_HEADER_POSITION);
            }
        });
    }

    private void onBindConditionAndSuggestion(final SuggestionAndConditionContainerHolder holder,
    @VisibleForTesting
    void onBindConditionAndSuggestion(final SuggestionAndConditionContainerHolder holder,
            int position) {
        RecyclerView.Adapter<DashboardItemHolder> adapter;
        // If there is suggestions to show, it will be at position 2 (position 0 = header spacer,
        // position 1 is suggestion header.
        if (position == 2 && mDashboardData.getSuggestions() != null) {
        // If there is suggestions to show, it will be at position 1
        // position 0 is suggestion header.
        if (position == (SUGGESTION_CONDITION_HEADER_POSITION + 1)
                && mDashboardData.getSuggestions() != null) {
            mSuggestionAdapter = new SuggestionAdapter(mContext, (List<Tile>)
                mDashboardData.getItemEntityByPosition(position), mSuggestionsShownLogged);
            adapter = mSuggestionAdapter;
+31 −0
Original line number Diff line number Diff line
@@ -36,6 +36,8 @@ import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Icon;
import android.support.v7.widget.RecyclerView;
import android.util.DisplayMetrics;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.View;
@@ -51,6 +53,7 @@ import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.TestConfig;
import com.android.settings.dashboard.conditional.Condition;
import com.android.settings.dashboard.suggestions.SuggestionAdapter;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowResources;
@@ -445,6 +448,34 @@ public class DashboardAdapterTest {
        verify(mockIcon).setTint(eq(0x89000000));
    }

    @Test
    public void testBindConditionAndSuggestion_shouldSetSuggestionAdapterAndNoCrash() {
        when(mFactory.dashboardFeatureProvider.combineSuggestionAndCondition()).thenReturn(true);
        mDashboardAdapter = new DashboardAdapter(mContext, null, null);
        final List<Tile> suggestions = makeSuggestions("pkg1");
        final List<DashboardCategory> categories = new ArrayList<>();
        final DashboardCategory category = mock(DashboardCategory.class);
        final List<Tile> tiles = new ArrayList<>();
        tiles.add(mock(Tile.class));
        category.tiles = tiles;
        mDashboardAdapter.setCategoriesAndSuggestions(categories, 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);

        mDashboardAdapter.onBindConditionAndSuggestion(
                holder, DashboardAdapter.SUGGESTION_CONDITION_HEADER_POSITION + 1);

        verify(data).setAdapter(any(SuggestionAdapter.class));
        // should not crash
    }

    private List<Tile> makeSuggestions(String... pkgNames) {
        final List<Tile> suggestions = new ArrayList<>();
        for (String pkgName : pkgNames) {