package org.wikipedia.views;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import org.wikipedia.R;
import org.wikipedia.util.DimenUtil;
import org.wikipedia.util.ResourceUtil;
public class SwipeableItemTouchHelperCallback extends ItemTouchHelper.Callback {
private static final float DELETE_ICON_PADDING_DP = 16f;
private Paint deleteBackgroundPaint = new Paint();
private Paint deleteIconPaint = new Paint();
private Paint itemBackgroundPaint = new Paint();
@NonNull private Bitmap deleteIcon;
public interface Callback {
void onSwipe();
}
public SwipeableItemTouchHelperCallback(@NonNull Context context) {
deleteBackgroundPaint.setStyle(Paint.Style.FILL);
deleteBackgroundPaint.setColor(Color.RED);
itemBackgroundPaint.setStyle(Paint.Style.FILL);
itemBackgroundPaint.setColor(ContextCompat.getColor(context,
ResourceUtil.getThemedAttributeId(context, R.attr.window_background_color)));
deleteIcon = ResourceUtil.bitmapFromVectorDrawable(context, R.drawable.ic_delete_white_24dp);
}
@Override
public boolean isLongPressDragEnabled() {
return false;
}
@Override
public boolean isItemViewSwipeEnabled() {
return true;
}
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder holder) {
final int dragFlags = 0; //ItemTouchHelper.UP | ItemTouchHelper.DOWN;
final int swipeFlags = holder instanceof Callback
? ItemTouchHelper.START | ItemTouchHelper.END : 0;
return makeMovementFlags(dragFlags, swipeFlags);
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder source, RecyclerView.ViewHolder target) {
return source.getItemViewType() == target.getItemViewType();
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int i) {
if (viewHolder instanceof Callback) {
((Callback) viewHolder).onSwipe();
}
}
@Override
public void onChildDraw(Canvas canvas, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dx, float dy, int actionState, boolean isCurrentlyActive) {
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
canvas.drawRect(0f, viewHolder.itemView.getTop(), viewHolder.itemView.getWidth(), viewHolder.itemView.getTop() + viewHolder.itemView.getHeight(), deleteBackgroundPaint);
canvas.drawRect(dx, viewHolder.itemView.getTop(), viewHolder.itemView.getWidth() + dx, viewHolder.itemView.getTop() + viewHolder.itemView.getHeight(), itemBackgroundPaint);
if (dx >= 0) {
canvas.drawBitmap(deleteIcon, DELETE_ICON_PADDING_DP * DimenUtil.getDensityScalar(), viewHolder.itemView.getTop() + (viewHolder.itemView.getHeight() / 2 - deleteIcon.getHeight() / 2), deleteIconPaint);
} else {
canvas.drawBitmap(deleteIcon, viewHolder.itemView.getRight() - deleteIcon.getWidth() - DELETE_ICON_PADDING_DP * DimenUtil.getDensityScalar(), viewHolder.itemView.getTop() + (viewHolder.itemView.getHeight() / 2 - deleteIcon.getHeight() / 2), deleteIconPaint);
}
viewHolder.itemView.setTranslationX(dx);
} else {
super.onChildDraw(canvas, recyclerView, viewHolder, dx, dy, actionState, isCurrentlyActive);
}
}
}