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

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

Merge "Fix crash on expanding settings conditions." into oc-dr1-dev

parents 4d3b5343 01fe5b45
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -62,8 +62,9 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
    private static final String STATE_SUGGESTION_LIST = "suggestion_list";
    private static final String STATE_CATEGORY_LIST = "category_list";
    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 String STATE_SUGGESTION_CONDITION_MODE = "suggestion_condition_mode";
    @VisibleForTesting
    static final int SUGGESTION_CONDITION_HEADER_POSITION = 0;

@@ -446,8 +447,9 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
            int position) {
        // If there is suggestions to show, it will be at position 0 as we don't show the suggestion
        // header anymore.
        if (position == (SUGGESTION_CONDITION_HEADER_POSITION)
                && mDashboardData.getSuggestions() != null) {
        final List<Tile> suggestions = mDashboardData.getSuggestions();
        if (position == SUGGESTION_CONDITION_HEADER_POSITION
                && suggestions != null && suggestions.size() > 0) {
            mSuggestionAdapter = new SuggestionAdapter(mContext, (List<Tile>)
                mDashboardData.getItemEntityByPosition(position), mSuggestionsShownLogged);
            mSuggestionDismissHandler = new SuggestionDismissController(mContext,
+40 −4
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Icon;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
@@ -48,6 +49,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.conditional.ConditionAdapter;
import com.android.settings.dashboard.suggestions.SuggestionAdapter;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -97,6 +99,7 @@ public class DashboardAdapterTest {
    private DashboardAdapter mDashboardAdapter;
    private DashboardAdapter.SuggestionAndConditionHeaderHolder mSuggestionHolder;
    private DashboardData.SuggestionConditionHeaderData mSuggestionHeaderData;
    private List<Condition> mConditionList;

    @Before
    public void setUp() {
@@ -115,10 +118,11 @@ public class DashboardAdapterTest {
        when(mResources.getQuantityString(any(int.class), any(int.class), any()))
                .thenReturn("");

        List<Condition> conditions = new ArrayList<>();
        conditions.add(mCondition);
        mDashboardAdapter = new DashboardAdapter(mContext, null, conditions, null, null);
        mSuggestionHeaderData = new DashboardData.SuggestionConditionHeaderData(conditions, 1);
        mConditionList = new ArrayList<>();
        mConditionList.add(mCondition);
        when(mCondition.shouldShow()).thenReturn(true);
        mDashboardAdapter = new DashboardAdapter(mContext, null, mConditionList, null, null);
        mSuggestionHeaderData = new DashboardData.SuggestionConditionHeaderData(mConditionList, 1);
        when(mView.getTag()).thenReturn(mCondition);
    }

@@ -392,6 +396,38 @@ public class DashboardAdapterTest {
        // should not crash
    }

    @Test
    public void testBindConditionAndSuggestion_emptySuggestion_shouldSetConditionAdapter() {
        final Bundle savedInstance = new Bundle();
        savedInstance.putInt(DashboardAdapter.STATE_SUGGESTION_CONDITION_MODE,
                DashboardData.HEADER_MODE_FULLY_EXPANDED);
        mDashboardAdapter = new DashboardAdapter(mContext, savedInstance, mConditionList,
                null /* SuggestionParser */, null /* SuggestionDismissController.Callback */);

        final List<Tile> suggestions = new ArrayList<>();
        final List<DashboardCategory> categories = new ArrayList<>();
        final DashboardCategory category = mock(DashboardCategory.class);
        categories.add(category);
        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);

        verify(data).setAdapter(any(ConditionAdapter.class));
    }

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