jimu-decompiled/sources/androidx/recyclerview/widget/ItemTouchHelper.java
2025-05-13 19:24:51 +02:00

331 lines
14 KiB
Java

package androidx.recyclerview.widget;
import android.animation.Animator;
import android.graphics.Canvas;
import android.view.View;
import android.view.animation.Interpolator;
import androidx.core.view.ViewCompat;
import androidx.recyclerview.R$dimen;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
/* loaded from: classes.dex */
public class ItemTouchHelper extends RecyclerView.ItemDecoration implements RecyclerView.OnChildAttachStateChangeListener {
public static abstract class Callback {
private static final int ABS_HORIZONTAL_DIR_FLAGS = 789516;
public static final int DEFAULT_DRAG_ANIMATION_DURATION = 200;
public static final int DEFAULT_SWIPE_ANIMATION_DURATION = 250;
private static final long DRAG_SCROLL_ACCELERATION_LIMIT_TIME_MS = 2000;
static final int RELATIVE_DIR_FLAGS = 3158064;
private static final Interpolator sDragScrollInterpolator = new Interpolator() { // from class: androidx.recyclerview.widget.ItemTouchHelper.Callback.1
@Override // android.animation.TimeInterpolator
public float getInterpolation(float f) {
return f * f * f * f * f;
}
};
private static final Interpolator sDragViewScrollCapInterpolator = new Interpolator() { // from class: androidx.recyclerview.widget.ItemTouchHelper.Callback.2
@Override // android.animation.TimeInterpolator
public float getInterpolation(float f) {
float f2 = f - 1.0f;
return (f2 * f2 * f2 * f2 * f2) + 1.0f;
}
};
private int mCachedMaxScrollSpeed = -1;
public static int convertToRelativeDirection(int i, int i2) {
int i3;
int i4 = i & ABS_HORIZONTAL_DIR_FLAGS;
if (i4 == 0) {
return i;
}
int i5 = i & (~i4);
if (i2 == 0) {
i3 = i4 << 2;
} else {
int i6 = i4 << 1;
i5 |= (-789517) & i6;
i3 = (i6 & ABS_HORIZONTAL_DIR_FLAGS) << 2;
}
return i5 | i3;
}
public static ItemTouchUIUtil getDefaultUIUtil() {
return ItemTouchUIUtilImpl.a;
}
private int getMaxDragScroll(RecyclerView recyclerView) {
if (this.mCachedMaxScrollSpeed == -1) {
this.mCachedMaxScrollSpeed = recyclerView.getResources().getDimensionPixelSize(R$dimen.item_touch_helper_max_drag_scroll_per_frame);
}
return this.mCachedMaxScrollSpeed;
}
public static int makeFlag(int i, int i2) {
return i2 << (i * 8);
}
public static int makeMovementFlags(int i, int i2) {
return makeFlag(2, i) | makeFlag(1, i2) | makeFlag(0, i2 | i);
}
public boolean canDropOver(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder viewHolder2) {
return true;
}
public RecyclerView.ViewHolder chooseDropTarget(RecyclerView.ViewHolder viewHolder, List<RecyclerView.ViewHolder> list, int i, int i2) {
int i3;
int bottom;
int top;
int abs;
int left;
int abs2;
int right;
int width = i + viewHolder.itemView.getWidth();
int height = i2 + viewHolder.itemView.getHeight();
int left2 = i - viewHolder.itemView.getLeft();
int top2 = i2 - viewHolder.itemView.getTop();
int size = list.size();
RecyclerView.ViewHolder viewHolder2 = null;
int i4 = -1;
for (int i5 = 0; i5 < size; i5++) {
RecyclerView.ViewHolder viewHolder3 = list.get(i5);
if (left2 <= 0 || (right = viewHolder3.itemView.getRight() - width) >= 0 || viewHolder3.itemView.getRight() <= viewHolder.itemView.getRight() || (i3 = Math.abs(right)) <= i4) {
i3 = i4;
} else {
viewHolder2 = viewHolder3;
}
if (left2 < 0 && (left = viewHolder3.itemView.getLeft() - i) > 0 && viewHolder3.itemView.getLeft() < viewHolder.itemView.getLeft() && (abs2 = Math.abs(left)) > i3) {
i3 = abs2;
viewHolder2 = viewHolder3;
}
if (top2 < 0 && (top = viewHolder3.itemView.getTop() - i2) > 0 && viewHolder3.itemView.getTop() < viewHolder.itemView.getTop() && (abs = Math.abs(top)) > i3) {
i3 = abs;
viewHolder2 = viewHolder3;
}
if (top2 <= 0 || (bottom = viewHolder3.itemView.getBottom() - height) >= 0 || viewHolder3.itemView.getBottom() <= viewHolder.itemView.getBottom() || (i4 = Math.abs(bottom)) <= i3) {
i4 = i3;
} else {
viewHolder2 = viewHolder3;
}
}
return viewHolder2;
}
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
ItemTouchUIUtilImpl.a.a(viewHolder.itemView);
}
public int convertToAbsoluteDirection(int i, int i2) {
int i3;
int i4 = i & RELATIVE_DIR_FLAGS;
if (i4 == 0) {
return i;
}
int i5 = i & (~i4);
if (i2 == 0) {
i3 = i4 >> 2;
} else {
int i6 = i4 >> 1;
i5 |= (-3158065) & i6;
i3 = (i6 & RELATIVE_DIR_FLAGS) >> 2;
}
return i5 | i3;
}
final int getAbsoluteMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
return convertToAbsoluteDirection(getMovementFlags(recyclerView, viewHolder), ViewCompat.k(recyclerView));
}
public long getAnimationDuration(RecyclerView recyclerView, int i, float f, float f2) {
RecyclerView.ItemAnimator itemAnimator = recyclerView.getItemAnimator();
return itemAnimator == null ? i == 8 ? 200L : 250L : i == 8 ? itemAnimator.e() : itemAnimator.f();
}
public int getBoundingBoxMargin() {
return 0;
}
public abstract float getMoveThreshold(RecyclerView.ViewHolder viewHolder);
public abstract int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder);
public float getSwipeEscapeVelocity(float f) {
return f;
}
public abstract float getSwipeThreshold(RecyclerView.ViewHolder viewHolder);
public float getSwipeVelocityThreshold(float f) {
return f;
}
boolean hasDragFlag(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
return (getAbsoluteMovementFlags(recyclerView, viewHolder) & 16711680) != 0;
}
boolean hasSwipeFlag(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
return (getAbsoluteMovementFlags(recyclerView, viewHolder) & 65280) != 0;
}
public int interpolateOutOfBoundsScroll(RecyclerView recyclerView, int i, int i2, int i3, long j) {
int signum = (int) (((int) (((int) Math.signum(i2)) * getMaxDragScroll(recyclerView) * sDragViewScrollCapInterpolator.getInterpolation(Math.min(1.0f, (Math.abs(i2) * 1.0f) / i)))) * sDragScrollInterpolator.getInterpolation(j <= DRAG_SCROLL_ACCELERATION_LIMIT_TIME_MS ? j / 2000.0f : 1.0f));
return signum == 0 ? i2 > 0 ? 1 : -1 : signum;
}
public abstract boolean isItemViewSwipeEnabled();
public abstract boolean isLongPressDragEnabled();
public void onChildDraw(Canvas canvas, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float f, float f2, int i, boolean z) {
ItemTouchUIUtilImpl.a.b(canvas, recyclerView, viewHolder.itemView, f, f2, i, z);
}
public void onChildDrawOver(Canvas canvas, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float f, float f2, int i, boolean z) {
ItemTouchUIUtilImpl.a.a(canvas, recyclerView, viewHolder.itemView, f, f2, i, z);
}
void onDraw(Canvas canvas, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, List<RecoverAnimation> list, int i, float f, float f2) {
int size = list.size();
for (int i2 = 0; i2 < size; i2++) {
RecoverAnimation recoverAnimation = list.get(i2);
recoverAnimation.a();
int save = canvas.save();
onChildDraw(canvas, recyclerView, recoverAnimation.e, recoverAnimation.h, recoverAnimation.i, recoverAnimation.f, false);
canvas.restoreToCount(save);
}
if (viewHolder != null) {
int save2 = canvas.save();
onChildDraw(canvas, recyclerView, viewHolder, f, f2, i, true);
canvas.restoreToCount(save2);
}
}
void onDrawOver(Canvas canvas, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, List<RecoverAnimation> list, int i, float f, float f2) {
int size = list.size();
boolean z = false;
for (int i2 = 0; i2 < size; i2++) {
RecoverAnimation recoverAnimation = list.get(i2);
int save = canvas.save();
onChildDrawOver(canvas, recyclerView, recoverAnimation.e, recoverAnimation.h, recoverAnimation.i, recoverAnimation.f, false);
canvas.restoreToCount(save);
}
if (viewHolder != null) {
int save2 = canvas.save();
onChildDrawOver(canvas, recyclerView, viewHolder, f, f2, i, true);
canvas.restoreToCount(save2);
}
for (int i3 = size - 1; i3 >= 0; i3--) {
RecoverAnimation recoverAnimation2 = list.get(i3);
if (recoverAnimation2.j && !recoverAnimation2.g) {
list.remove(i3);
} else if (!recoverAnimation2.j) {
z = true;
}
}
if (z) {
recyclerView.invalidate();
}
}
public abstract boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder viewHolder2);
/* JADX WARN: Multi-variable type inference failed */
public void onMoved(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, int i, RecyclerView.ViewHolder viewHolder2, int i2, int i3, int i4) {
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
if (layoutManager instanceof ViewDropHandler) {
((ViewDropHandler) layoutManager).a(viewHolder.itemView, viewHolder2.itemView, i3, i4);
return;
}
if (layoutManager.a()) {
if (layoutManager.f(viewHolder2.itemView) <= recyclerView.getPaddingLeft()) {
recyclerView.j(i2);
}
if (layoutManager.i(viewHolder2.itemView) >= recyclerView.getWidth() - recyclerView.getPaddingRight()) {
recyclerView.j(i2);
}
}
if (layoutManager.b()) {
if (layoutManager.j(viewHolder2.itemView) <= recyclerView.getPaddingTop()) {
recyclerView.j(i2);
}
if (layoutManager.e(viewHolder2.itemView) >= recyclerView.getHeight() - recyclerView.getPaddingBottom()) {
recyclerView.j(i2);
}
}
}
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int i) {
if (viewHolder != null) {
ItemTouchUIUtilImpl.a.b(viewHolder.itemView);
}
}
public abstract void onSwiped(RecyclerView.ViewHolder viewHolder, int i);
}
private static class RecoverAnimation implements Animator.AnimatorListener {
final float a;
final float b;
final float c;
final float d;
final RecyclerView.ViewHolder e;
final int f;
boolean g;
float h;
float i;
boolean j;
private float k;
public void a(float f) {
this.k = f;
}
@Override // android.animation.Animator.AnimatorListener
public void onAnimationCancel(Animator animator) {
a(1.0f);
}
@Override // android.animation.Animator.AnimatorListener
public void onAnimationEnd(Animator animator) {
if (!this.j) {
this.e.setIsRecyclable(true);
}
this.j = true;
}
@Override // android.animation.Animator.AnimatorListener
public void onAnimationRepeat(Animator animator) {
}
@Override // android.animation.Animator.AnimatorListener
public void onAnimationStart(Animator animator) {
}
public void a() {
float f = this.a;
float f2 = this.c;
if (f == f2) {
this.h = this.e.itemView.getTranslationX();
} else {
this.h = f + (this.k * (f2 - f));
}
float f3 = this.b;
float f4 = this.d;
if (f3 == f4) {
this.i = this.e.itemView.getTranslationY();
} else {
this.i = f3 + (this.k * (f4 - f3));
}
}
}
public interface ViewDropHandler {
void a(View view, View view2, int i, int i2);
}
public void a(RecyclerView.ViewHolder viewHolder) {
throw null;
}
}