239 lines
9.8 KiB
Java
239 lines
9.8 KiB
Java
package com.chad.library.adapter.base;
|
|
|
|
import android.graphics.Canvas;
|
|
import android.view.MotionEvent;
|
|
import android.view.View;
|
|
import androidx.core.view.MotionEventCompat;
|
|
import androidx.recyclerview.widget.ItemTouchHelper;
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
import com.chad.library.R$id;
|
|
import com.chad.library.adapter.base.BaseViewHolder;
|
|
import com.chad.library.adapter.base.listener.OnItemDragListener;
|
|
import com.chad.library.adapter.base.listener.OnItemSwipeListener;
|
|
import java.util.Collections;
|
|
import java.util.List;
|
|
|
|
/* loaded from: classes.dex */
|
|
public abstract class BaseItemDraggableAdapter<T, K extends BaseViewHolder> extends BaseQuickAdapter<T, K> {
|
|
private static final String ERROR_NOT_SAME_ITEMTOUCHHELPER = "Item drag and item swipe should pass the same ItemTouchHelper";
|
|
private static final int NO_TOGGLE_VIEW = 0;
|
|
protected boolean itemDragEnabled;
|
|
protected boolean itemSwipeEnabled;
|
|
protected boolean mDragOnLongPress;
|
|
protected ItemTouchHelper mItemTouchHelper;
|
|
protected OnItemDragListener mOnItemDragListener;
|
|
protected OnItemSwipeListener mOnItemSwipeListener;
|
|
protected View.OnLongClickListener mOnToggleViewLongClickListener;
|
|
protected View.OnTouchListener mOnToggleViewTouchListener;
|
|
protected int mToggleViewId;
|
|
|
|
public BaseItemDraggableAdapter(List<T> list) {
|
|
super(list);
|
|
this.mToggleViewId = 0;
|
|
this.itemDragEnabled = false;
|
|
this.itemSwipeEnabled = false;
|
|
this.mDragOnLongPress = true;
|
|
}
|
|
|
|
private boolean inRange(int i) {
|
|
return i >= 0 && i < this.mData.size();
|
|
}
|
|
|
|
public void disableDragItem() {
|
|
this.itemDragEnabled = false;
|
|
this.mItemTouchHelper = null;
|
|
}
|
|
|
|
public void disableSwipeItem() {
|
|
this.itemSwipeEnabled = false;
|
|
}
|
|
|
|
public void enableDragItem(ItemTouchHelper itemTouchHelper) {
|
|
enableDragItem(itemTouchHelper, 0, true);
|
|
}
|
|
|
|
public void enableSwipeItem() {
|
|
this.itemSwipeEnabled = true;
|
|
}
|
|
|
|
public int getViewHolderPosition(RecyclerView.ViewHolder viewHolder) {
|
|
return viewHolder.getAdapterPosition() - getHeaderLayoutCount();
|
|
}
|
|
|
|
public boolean isItemDraggable() {
|
|
return this.itemDragEnabled;
|
|
}
|
|
|
|
public boolean isItemSwipeEnable() {
|
|
return this.itemSwipeEnabled;
|
|
}
|
|
|
|
public void onItemDragEnd(RecyclerView.ViewHolder viewHolder) {
|
|
OnItemDragListener onItemDragListener = this.mOnItemDragListener;
|
|
if (onItemDragListener == null || !this.itemDragEnabled) {
|
|
return;
|
|
}
|
|
onItemDragListener.onItemDragEnd(viewHolder, getViewHolderPosition(viewHolder));
|
|
}
|
|
|
|
public void onItemDragMoving(RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder viewHolder2) {
|
|
int viewHolderPosition = getViewHolderPosition(viewHolder);
|
|
int viewHolderPosition2 = getViewHolderPosition(viewHolder2);
|
|
if (inRange(viewHolderPosition) && inRange(viewHolderPosition2)) {
|
|
if (viewHolderPosition < viewHolderPosition2) {
|
|
int i = viewHolderPosition;
|
|
while (i < viewHolderPosition2) {
|
|
int i2 = i + 1;
|
|
Collections.swap(this.mData, i, i2);
|
|
i = i2;
|
|
}
|
|
} else {
|
|
for (int i3 = viewHolderPosition; i3 > viewHolderPosition2; i3--) {
|
|
Collections.swap(this.mData, i3, i3 - 1);
|
|
}
|
|
}
|
|
notifyItemMoved(viewHolder.getAdapterPosition(), viewHolder2.getAdapterPosition());
|
|
}
|
|
OnItemDragListener onItemDragListener = this.mOnItemDragListener;
|
|
if (onItemDragListener == null || !this.itemDragEnabled) {
|
|
return;
|
|
}
|
|
onItemDragListener.onItemDragMoving(viewHolder, viewHolderPosition, viewHolder2, viewHolderPosition2);
|
|
}
|
|
|
|
public void onItemDragStart(RecyclerView.ViewHolder viewHolder) {
|
|
OnItemDragListener onItemDragListener = this.mOnItemDragListener;
|
|
if (onItemDragListener == null || !this.itemDragEnabled) {
|
|
return;
|
|
}
|
|
onItemDragListener.onItemDragStart(viewHolder, getViewHolderPosition(viewHolder));
|
|
}
|
|
|
|
public void onItemSwipeClear(RecyclerView.ViewHolder viewHolder) {
|
|
OnItemSwipeListener onItemSwipeListener = this.mOnItemSwipeListener;
|
|
if (onItemSwipeListener == null || !this.itemSwipeEnabled) {
|
|
return;
|
|
}
|
|
onItemSwipeListener.clearView(viewHolder, getViewHolderPosition(viewHolder));
|
|
}
|
|
|
|
public void onItemSwipeStart(RecyclerView.ViewHolder viewHolder) {
|
|
OnItemSwipeListener onItemSwipeListener = this.mOnItemSwipeListener;
|
|
if (onItemSwipeListener == null || !this.itemSwipeEnabled) {
|
|
return;
|
|
}
|
|
onItemSwipeListener.onItemSwipeStart(viewHolder, getViewHolderPosition(viewHolder));
|
|
}
|
|
|
|
public void onItemSwiped(RecyclerView.ViewHolder viewHolder) {
|
|
int viewHolderPosition = getViewHolderPosition(viewHolder);
|
|
if (inRange(viewHolderPosition)) {
|
|
this.mData.remove(viewHolderPosition);
|
|
notifyItemRemoved(viewHolder.getAdapterPosition());
|
|
}
|
|
OnItemSwipeListener onItemSwipeListener = this.mOnItemSwipeListener;
|
|
if (onItemSwipeListener == null || !this.itemSwipeEnabled) {
|
|
return;
|
|
}
|
|
onItemSwipeListener.onItemSwiped(viewHolder, getViewHolderPosition(viewHolder));
|
|
}
|
|
|
|
public void onItemSwiping(Canvas canvas, RecyclerView.ViewHolder viewHolder, float f, float f2, boolean z) {
|
|
OnItemSwipeListener onItemSwipeListener = this.mOnItemSwipeListener;
|
|
if (onItemSwipeListener == null || !this.itemSwipeEnabled) {
|
|
return;
|
|
}
|
|
onItemSwipeListener.onItemSwipeMoving(canvas, viewHolder, f, f2, z);
|
|
}
|
|
|
|
public void setOnItemDragListener(OnItemDragListener onItemDragListener) {
|
|
this.mOnItemDragListener = onItemDragListener;
|
|
}
|
|
|
|
public void setOnItemSwipeListener(OnItemSwipeListener onItemSwipeListener) {
|
|
this.mOnItemSwipeListener = onItemSwipeListener;
|
|
}
|
|
|
|
public void setToggleDragOnLongPress(boolean z) {
|
|
this.mDragOnLongPress = z;
|
|
if (this.mDragOnLongPress) {
|
|
this.mOnToggleViewTouchListener = null;
|
|
this.mOnToggleViewLongClickListener = new View.OnLongClickListener() { // from class: com.chad.library.adapter.base.BaseItemDraggableAdapter.1
|
|
@Override // android.view.View.OnLongClickListener
|
|
public boolean onLongClick(View view) {
|
|
BaseItemDraggableAdapter baseItemDraggableAdapter = BaseItemDraggableAdapter.this;
|
|
ItemTouchHelper itemTouchHelper = baseItemDraggableAdapter.mItemTouchHelper;
|
|
if (itemTouchHelper == null || !baseItemDraggableAdapter.itemDragEnabled) {
|
|
return true;
|
|
}
|
|
itemTouchHelper.a((RecyclerView.ViewHolder) view.getTag(R$id.BaseQuickAdapter_viewholder_support));
|
|
throw null;
|
|
}
|
|
};
|
|
} else {
|
|
this.mOnToggleViewTouchListener = new View.OnTouchListener() { // from class: com.chad.library.adapter.base.BaseItemDraggableAdapter.2
|
|
@Override // android.view.View.OnTouchListener
|
|
public boolean onTouch(View view, MotionEvent motionEvent) {
|
|
if (MotionEventCompat.a(motionEvent) != 0) {
|
|
return false;
|
|
}
|
|
BaseItemDraggableAdapter baseItemDraggableAdapter = BaseItemDraggableAdapter.this;
|
|
if (baseItemDraggableAdapter.mDragOnLongPress) {
|
|
return false;
|
|
}
|
|
ItemTouchHelper itemTouchHelper = baseItemDraggableAdapter.mItemTouchHelper;
|
|
if (itemTouchHelper == null || !baseItemDraggableAdapter.itemDragEnabled) {
|
|
return true;
|
|
}
|
|
itemTouchHelper.a((RecyclerView.ViewHolder) view.getTag(R$id.BaseQuickAdapter_viewholder_support));
|
|
throw null;
|
|
}
|
|
};
|
|
this.mOnToggleViewLongClickListener = null;
|
|
}
|
|
}
|
|
|
|
public void setToggleViewId(int i) {
|
|
this.mToggleViewId = i;
|
|
}
|
|
|
|
public void enableDragItem(ItemTouchHelper itemTouchHelper, int i, boolean z) {
|
|
this.itemDragEnabled = true;
|
|
this.mItemTouchHelper = itemTouchHelper;
|
|
setToggleViewId(i);
|
|
setToggleDragOnLongPress(z);
|
|
}
|
|
|
|
@Override // com.chad.library.adapter.base.BaseQuickAdapter, androidx.recyclerview.widget.RecyclerView.Adapter
|
|
public void onBindViewHolder(K k, int i) {
|
|
super.onBindViewHolder((BaseItemDraggableAdapter<T, K>) k, i);
|
|
int itemViewType = k.getItemViewType();
|
|
if (this.mItemTouchHelper == null || !this.itemDragEnabled || itemViewType == 546 || itemViewType == 273 || itemViewType == 1365 || itemViewType == 819) {
|
|
return;
|
|
}
|
|
int i2 = this.mToggleViewId;
|
|
if (i2 == 0) {
|
|
k.itemView.setTag(R$id.BaseQuickAdapter_viewholder_support, k);
|
|
k.itemView.setOnLongClickListener(this.mOnToggleViewLongClickListener);
|
|
return;
|
|
}
|
|
View view = k.getView(i2);
|
|
if (view != null) {
|
|
view.setTag(R$id.BaseQuickAdapter_viewholder_support, k);
|
|
if (this.mDragOnLongPress) {
|
|
view.setOnLongClickListener(this.mOnToggleViewLongClickListener);
|
|
} else {
|
|
view.setOnTouchListener(this.mOnToggleViewTouchListener);
|
|
}
|
|
}
|
|
}
|
|
|
|
public BaseItemDraggableAdapter(int i, List<T> list) {
|
|
super(i, list);
|
|
this.mToggleViewId = 0;
|
|
this.itemDragEnabled = false;
|
|
this.itemSwipeEnabled = false;
|
|
this.mDragOnLongPress = true;
|
|
}
|
|
}
|