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

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

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

am: be704484

Change-Id: I64412b26bacf567973989fbeaa2cfe2ca42e87b4
parents cbedc3f0 be704484
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
    }

}