package com.mikepenz.fastadapter_extensions.drag;
import android.support.annotation.IntDef;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import com.mikepenz.fastadapter.IDraggable;
import com.mikepenz.fastadapter.commons.adapters.FastItemAdapter;
import com.mikepenz.fastadapter.adapters.ItemAdapter;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* based on the sample from
* https://github.com/AleBarreto/DragRecyclerView
*/
public class SimpleDragCallback extends ItemTouchHelper.SimpleCallback {
//our callback
private ItemTouchCallback mCallbackItemTouch; // interface
private boolean mIsDragEnabled = true;
private int mDirections = UP_DOWN;
public static final int ALL = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
public static final int UP_DOWN = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
public static final int LEFT_RIGHT = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
@IntDef({ALL, UP_DOWN, LEFT_RIGHT})
@Retention(RetentionPolicy.SOURCE)
public @interface Directions {
}
public SimpleDragCallback() {
super(UP_DOWN, 0);
}
public SimpleDragCallback(@Directions int directions) {
super(directions, 0);
this.mDirections = directions;
}
public SimpleDragCallback(@Directions int directions, ItemTouchCallback itemTouchCallback) {
super(directions, 0);
this.mDirections = directions;
this.mCallbackItemTouch = itemTouchCallback;
}
public SimpleDragCallback(ItemTouchCallback itemTouchCallback) {
super(UP_DOWN, 0);
this.mCallbackItemTouch = itemTouchCallback;
}
public void setIsDragEnabled(boolean mIsDragEnabled) {
this.mIsDragEnabled = mIsDragEnabled;
}
@Override
public boolean isLongPressDragEnabled() {
return mIsDragEnabled;
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
if (mCallbackItemTouch == null) {
RecyclerView.Adapter adapter = recyclerView.getAdapter();
ItemAdapter itemAdapter = null;
if (adapter instanceof FastItemAdapter) {
itemAdapter = ((FastItemAdapter) adapter).getItemAdapter();
} else if (adapter instanceof ItemAdapter) {
itemAdapter = (ItemAdapter) adapter;
}
if (itemAdapter != null) {
itemAdapter.move(itemAdapter.getFastAdapter().getHolderAdapterPosition(viewHolder), itemAdapter.getFastAdapter().getHolderAdapterPosition(target));
return true;
}
throw new RuntimeException("SimpleDragCallback without an callback is only allowed when using the ItemAdapter or the FastItemAdapter");
}
return mCallbackItemTouch.itemTouchOnMove(viewHolder.getAdapterPosition(), target.getAdapterPosition()); // information to the interface
}
@Override
public int getDragDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
if (viewHolder.itemView.getTag() instanceof IDraggable) {
if (((IDraggable) viewHolder.itemView.getTag()).isDraggable()) {
return super.getDragDirs(recyclerView, viewHolder);
} else {
return 0;
}
} else {
return mDirections;
}
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
// swiped disabled
}
}