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

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

Merge "Fix mokey crash on swiping settings condition." into oc-dr1-dev

parents c0ca0846 84c77399
Loading
Loading
Loading
Loading
+27 −21
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
package com.android.settings.dashboard.conditional;

import android.content.Context;
import android.support.annotation.VisibleForTesting;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.util.Log;
@@ -58,6 +59,31 @@ public class ConditionAdapter extends RecyclerView.Adapter<DashboardItemHolder>
        }
    };

    @VisibleForTesting
    ItemTouchHelper.SimpleCallback mSwipeCallback = new ItemTouchHelper.SimpleCallback(0,
            ItemTouchHelper.START | ItemTouchHelper.END) {
        @Override
        public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
                RecyclerView.ViewHolder target) {
            return true;
        }

        @Override
        public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
            return viewHolder.getItemViewType() == R.layout.condition_tile_new_ui
                    ? super.getSwipeDirs(recyclerView, viewHolder) : 0;
        }

        @Override
        public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
            Object item = getItem(viewHolder.getItemId());
            // item can become null when running monkey
            if (item != null) {
                ((Condition) item).silence();
            }
        }
    };

    public ConditionAdapter(Context context, List<Condition> conditions, @HeaderMode int mode) {
        mContext = context;
        mConditions = conditions;
@@ -107,27 +133,7 @@ public class ConditionAdapter extends RecyclerView.Adapter<DashboardItemHolder>
    }

    public void addDismissHandling(final RecyclerView recyclerView) {
        ItemTouchHelper.SimpleCallback callback = new ItemTouchHelper.SimpleCallback(0,
                ItemTouchHelper.START | ItemTouchHelper.END) {
            @Override
            public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
                    RecyclerView.ViewHolder target) {
                return true;
            }

            @Override
            public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
                return viewHolder.getItemViewType() == R.layout.condition_tile_new_ui
                        ? super.getSwipeDirs(recyclerView, viewHolder) : 0;
            }

            @Override
            public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
                Object item = getItem(viewHolder.getItemId());
                ((Condition) item).silence();
            }
        };
        ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callback);
        final ItemTouchHelper itemTouchHelper = new ItemTouchHelper(mSwipeCallback);
        itemTouchHelper.attachToRecyclerView(recyclerView);
    }

+17 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
package com.android.settings.dashboard.conditional;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
@@ -130,4 +131,20 @@ public class ConditionAdapterTest {
        verify(mCondition1).onPrimaryClick();
    }

    @Test
    public void onSwiped_nullCondition_shouldNotCrash() {
        final RecyclerView recyclerView = new RecyclerView(mContext);
        final View view = LayoutInflater.from(mContext).inflate(
                R.layout.condition_tile_new_ui, new LinearLayout(mContext), true);
        final DashboardAdapter.DashboardItemHolder viewHolder =
                new DashboardAdapter.DashboardItemHolder(view);
        mConditionAdapter = new ConditionAdapter(
                mContext, mOneCondition, DashboardData.HEADER_MODE_SUGGESTION_EXPANDED);
        mConditionAdapter.addDismissHandling(recyclerView);

        // do not bind viewholder to simulate the null condition scenario
        mConditionAdapter.mSwipeCallback.onSwiped(viewHolder, 0);
        // no crash
    }

}