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

Commit a54ebe87 authored by Doris Ling's avatar Doris Ling Committed by Android (Google) Code Review
Browse files

Merge "Fix crash on expanding settings conditions."

parents 0ac6f8f4 11f46198
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;

@@ -421,8 +422,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,
+38 −4
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.content.Intent;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.drawable.Icon;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
@@ -32,6 +33,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;
@@ -93,6 +95,7 @@ public class DashboardAdapterTest {
    private DashboardAdapter mDashboardAdapter;
    private DashboardAdapter.SuggestionAndConditionHeaderHolder mSuggestionHolder;
    private DashboardData.SuggestionConditionHeaderData mSuggestionHeaderData;
    private List<Condition> mConditionList;

    @Before
    public void setUp() {
@@ -111,10 +114,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);
    }

@@ -408,6 +412,36 @@ public class DashboardAdapterTest {
        // should not crash
    }

    @Test
    public void testBindConditionAndSuggestion_emptySuggestion_shouldSetConditionAdpater() {
        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 DashboardCategory category = mock(DashboardCategory.class);
        final List<Tile> tiles = new ArrayList<>();
        tiles.add(mock(Tile.class));
        category.tiles = tiles;
        mDashboardAdapter.setCategoriesAndSuggestions(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);

        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) {