package androidx.customview.widget; import android.content.Context; import android.util.Log; import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewGroup; import android.view.animation.Interpolator; import android.widget.OverScroller; import androidx.core.view.ViewCompat; import java.util.Arrays; /* loaded from: classes.dex */ public class ViewDragHelper { private static final int BASE_SETTLE_DURATION = 256; public static final int DIRECTION_ALL = 3; public static final int DIRECTION_HORIZONTAL = 1; public static final int DIRECTION_VERTICAL = 2; public static final int EDGE_ALL = 15; public static final int EDGE_BOTTOM = 8; public static final int EDGE_LEFT = 1; public static final int EDGE_RIGHT = 2; private static final int EDGE_SIZE = 20; public static final int EDGE_TOP = 4; public static final int INVALID_POINTER = -1; private static final int MAX_SETTLE_DURATION = 600; public static final int STATE_DRAGGING = 1; public static final int STATE_IDLE = 0; public static final int STATE_SETTLING = 2; private static final String TAG = "ViewDragHelper"; private static final Interpolator sInterpolator = new Interpolator() { // from class: androidx.customview.widget.ViewDragHelper.1 @Override // android.animation.TimeInterpolator public float getInterpolation(float f) { float f2 = f - 1.0f; return (f2 * f2 * f2 * f2 * f2) + 1.0f; } }; private final Callback mCallback; private View mCapturedView; private final int mDefaultEdgeSize; private int mDragState; private int[] mEdgeDragsInProgress; private int[] mEdgeDragsLocked; private int mEdgeSize; private int[] mInitialEdgesTouched; private float[] mInitialMotionX; private float[] mInitialMotionY; private float[] mLastMotionX; private float[] mLastMotionY; private float mMaxVelocity; private float mMinVelocity; private final ViewGroup mParentView; private int mPointersDown; private boolean mReleaseInProgress; private OverScroller mScroller; private int mTouchSlop; private int mTrackingEdges; private VelocityTracker mVelocityTracker; private int mActivePointerId = -1; private final Runnable mSetIdleRunnable = new Runnable() { // from class: androidx.customview.widget.ViewDragHelper.2 @Override // java.lang.Runnable public void run() { ViewDragHelper.this.setDragState(0); } }; /* loaded from: classes.dex */ public static abstract class Callback { public int clampViewPositionHorizontal(View view, int i, int i2) { return 0; } public int clampViewPositionVertical(View view, int i, int i2) { return 0; } public int getOrderedChildIndex(int i) { return i; } public int getViewHorizontalDragRange(View view) { return 0; } public int getViewVerticalDragRange(View view) { return 0; } public void onEdgeDragStarted(int i, int i2) { } public boolean onEdgeLock(int i) { return false; } public void onEdgeTouched(int i, int i2) { } public void onViewCaptured(View view, int i) { } public void onViewDragStateChanged(int i) { } public void onViewPositionChanged(View view, int i, int i2, int i3, int i4) { } public void onViewReleased(View view, float f, float f2) { } public abstract boolean tryCaptureView(View view, int i); } public int getActivePointerId() { return this.mActivePointerId; } public View getCapturedView() { return this.mCapturedView; } public int getDefaultEdgeSize() { return this.mDefaultEdgeSize; } public int getEdgeSize() { return this.mEdgeSize; } public float getMinVelocity() { return this.mMinVelocity; } public int getTouchSlop() { return this.mTouchSlop; } public int getViewDragState() { return this.mDragState; } public boolean isPointerDown(int i) { return (this.mPointersDown & (1 << i)) != 0; } public void setEdgeSize(int i) { this.mEdgeSize = i; } public void setEdgeTrackingEnabled(int i) { this.mTrackingEdges = i; } public void setMinVelocity(float f) { this.mMinVelocity = f; } public static ViewDragHelper create(ViewGroup viewGroup, Callback callback) { return new ViewDragHelper(viewGroup.getContext(), viewGroup, callback); } public static ViewDragHelper create(ViewGroup viewGroup, float f, Callback callback) { ViewDragHelper create = create(viewGroup, callback); create.mTouchSlop = (int) (create.mTouchSlop * (1.0f / f)); return create; } private ViewDragHelper(Context context, ViewGroup viewGroup, Callback callback) { if (viewGroup == null) { throw new IllegalArgumentException("Parent view may not be null"); } if (callback == null) { throw new IllegalArgumentException("Callback may not be null"); } this.mParentView = viewGroup; this.mCallback = callback; ViewConfiguration viewConfiguration = ViewConfiguration.get(context); int i = (int) ((context.getResources().getDisplayMetrics().density * 20.0f) + 0.5f); this.mDefaultEdgeSize = i; this.mEdgeSize = i; this.mTouchSlop = viewConfiguration.getScaledTouchSlop(); this.mMaxVelocity = viewConfiguration.getScaledMaximumFlingVelocity(); this.mMinVelocity = viewConfiguration.getScaledMinimumFlingVelocity(); this.mScroller = new OverScroller(context, sInterpolator); } public void captureChildView(View view, int i) { if (view.getParent() != this.mParentView) { throw new IllegalArgumentException("captureChildView: parameter must be a descendant of the ViewDragHelper's tracked parent view (" + this.mParentView + ")"); } this.mCapturedView = view; this.mActivePointerId = i; this.mCallback.onViewCaptured(view, i); setDragState(1); } public void cancel() { this.mActivePointerId = -1; clearMotionHistory(); VelocityTracker velocityTracker = this.mVelocityTracker; if (velocityTracker != null) { velocityTracker.recycle(); this.mVelocityTracker = null; } } public void abort() { cancel(); if (this.mDragState == 2) { int currX = this.mScroller.getCurrX(); int currY = this.mScroller.getCurrY(); this.mScroller.abortAnimation(); int currX2 = this.mScroller.getCurrX(); int currY2 = this.mScroller.getCurrY(); this.mCallback.onViewPositionChanged(this.mCapturedView, currX2, currY2, currX2 - currX, currY2 - currY); } setDragState(0); } public boolean smoothSlideViewTo(View view, int i, int i2) { this.mCapturedView = view; this.mActivePointerId = -1; boolean forceSettleCapturedViewAt = forceSettleCapturedViewAt(i, i2, 0, 0); if (!forceSettleCapturedViewAt && this.mDragState == 0 && this.mCapturedView != null) { this.mCapturedView = null; } return forceSettleCapturedViewAt; } public boolean settleCapturedViewAt(int i, int i2) { if (!this.mReleaseInProgress) { throw new IllegalStateException("Cannot settleCapturedViewAt outside of a call to Callback#onViewReleased"); } return forceSettleCapturedViewAt(i, i2, (int) this.mVelocityTracker.getXVelocity(this.mActivePointerId), (int) this.mVelocityTracker.getYVelocity(this.mActivePointerId)); } private boolean forceSettleCapturedViewAt(int i, int i2, int i3, int i4) { int left = this.mCapturedView.getLeft(); int top = this.mCapturedView.getTop(); int i5 = i - left; int i6 = i2 - top; if (i5 == 0 && i6 == 0) { this.mScroller.abortAnimation(); setDragState(0); return false; } this.mScroller.startScroll(left, top, i5, i6, computeSettleDuration(this.mCapturedView, i5, i6, i3, i4)); setDragState(2); return true; } private int computeSettleDuration(View view, int i, int i2, int i3, int i4) { float f; float f2; float f3; float f4; int clampMag = clampMag(i3, (int) this.mMinVelocity, (int) this.mMaxVelocity); int clampMag2 = clampMag(i4, (int) this.mMinVelocity, (int) this.mMaxVelocity); int abs = Math.abs(i); int abs2 = Math.abs(i2); int abs3 = Math.abs(clampMag); int abs4 = Math.abs(clampMag2); int i5 = abs3 + abs4; int i6 = abs + abs2; if (clampMag != 0) { f = abs3; f2 = i5; } else { f = abs; f2 = i6; } float f5 = f / f2; if (clampMag2 != 0) { f3 = abs4; f4 = i5; } else { f3 = abs2; f4 = i6; } return (int) ((computeAxisDuration(i, clampMag, this.mCallback.getViewHorizontalDragRange(view)) * f5) + (computeAxisDuration(i2, clampMag2, this.mCallback.getViewVerticalDragRange(view)) * (f3 / f4))); } private int computeAxisDuration(int i, int i2, int i3) { int abs; if (i == 0) { return 0; } int width = this.mParentView.getWidth(); float f = width / 2; float distanceInfluenceForSnapDuration = f + (distanceInfluenceForSnapDuration(Math.min(1.0f, Math.abs(i) / width)) * f); int abs2 = Math.abs(i2); if (abs2 > 0) { abs = Math.round(Math.abs(distanceInfluenceForSnapDuration / abs2) * 1000.0f) * 4; } else { abs = (int) (((Math.abs(i) / i3) + 1.0f) * 256.0f); } return Math.min(abs, MAX_SETTLE_DURATION); } private int clampMag(int i, int i2, int i3) { int abs = Math.abs(i); if (abs < i2) { return 0; } return abs > i3 ? i > 0 ? i3 : -i3 : i; } private float clampMag(float f, float f2, float f3) { float abs = Math.abs(f); if (abs < f2) { return 0.0f; } return abs > f3 ? f > 0.0f ? f3 : -f3 : f; } private float distanceInfluenceForSnapDuration(float f) { return (float) Math.sin((f - 0.5f) * 0.47123894f); } public void flingCapturedView(int i, int i2, int i3, int i4) { if (!this.mReleaseInProgress) { throw new IllegalStateException("Cannot flingCapturedView outside of a call to Callback#onViewReleased"); } this.mScroller.fling(this.mCapturedView.getLeft(), this.mCapturedView.getTop(), (int) this.mVelocityTracker.getXVelocity(this.mActivePointerId), (int) this.mVelocityTracker.getYVelocity(this.mActivePointerId), i, i3, i2, i4); setDragState(2); } /* JADX WARN: Code restructure failed: missing block: B:19:0x005b, code lost: if (r0 == false) goto L19; */ /* Code decompiled incorrectly, please refer to instructions dump. To view partially-correct add '--show-bad-code' argument */ public boolean continueSettling(boolean r12) { /* r11 = this; int r0 = r11.mDragState r1 = 0 r2 = 2 if (r0 != r2) goto L6a android.widget.OverScroller r0 = r11.mScroller boolean r0 = r0.computeScrollOffset() android.widget.OverScroller r3 = r11.mScroller int r3 = r3.getCurrX() android.widget.OverScroller r4 = r11.mScroller int r10 = r4.getCurrY() android.view.View r4 = r11.mCapturedView int r4 = r4.getLeft() int r8 = r3 - r4 android.view.View r4 = r11.mCapturedView int r4 = r4.getTop() int r9 = r10 - r4 if (r8 == 0) goto L2f android.view.View r4 = r11.mCapturedView androidx.core.view.ViewCompat.offsetLeftAndRight(r4, r8) L2f: if (r9 == 0) goto L36 android.view.View r4 = r11.mCapturedView androidx.core.view.ViewCompat.offsetTopAndBottom(r4, r9) L36: if (r8 != 0) goto L3a if (r9 == 0) goto L43 L3a: androidx.customview.widget.ViewDragHelper$Callback r4 = r11.mCallback android.view.View r5 = r11.mCapturedView r6 = r3 r7 = r10 r4.onViewPositionChanged(r5, r6, r7, r8, r9) L43: if (r0 == 0) goto L5b android.widget.OverScroller r4 = r11.mScroller int r4 = r4.getFinalX() if (r3 != r4) goto L5b android.widget.OverScroller r3 = r11.mScroller int r3 = r3.getFinalY() if (r10 != r3) goto L5b android.widget.OverScroller r0 = r11.mScroller r0.abortAnimation() goto L5d L5b: if (r0 != 0) goto L6a L5d: if (r12 == 0) goto L67 android.view.ViewGroup r12 = r11.mParentView java.lang.Runnable r0 = r11.mSetIdleRunnable r12.post(r0) goto L6a L67: r11.setDragState(r1) L6a: int r11 = r11.mDragState if (r11 != r2) goto L6f r1 = 1 L6f: return r1 */ throw new UnsupportedOperationException("Method not decompiled: androidx.customview.widget.ViewDragHelper.continueSettling(boolean):boolean"); } private void dispatchViewReleased(float f, float f2) { this.mReleaseInProgress = true; this.mCallback.onViewReleased(this.mCapturedView, f, f2); this.mReleaseInProgress = false; if (this.mDragState == 1) { setDragState(0); } } private void clearMotionHistory() { float[] fArr = this.mInitialMotionX; if (fArr == null) { return; } Arrays.fill(fArr, 0.0f); Arrays.fill(this.mInitialMotionY, 0.0f); Arrays.fill(this.mLastMotionX, 0.0f); Arrays.fill(this.mLastMotionY, 0.0f); Arrays.fill(this.mInitialEdgesTouched, 0); Arrays.fill(this.mEdgeDragsInProgress, 0); Arrays.fill(this.mEdgeDragsLocked, 0); this.mPointersDown = 0; } private void clearMotionHistory(int i) { if (this.mInitialMotionX == null || !isPointerDown(i)) { return; } this.mInitialMotionX[i] = 0.0f; this.mInitialMotionY[i] = 0.0f; this.mLastMotionX[i] = 0.0f; this.mLastMotionY[i] = 0.0f; this.mInitialEdgesTouched[i] = 0; this.mEdgeDragsInProgress[i] = 0; this.mEdgeDragsLocked[i] = 0; this.mPointersDown = (~(1 << i)) & this.mPointersDown; } private void ensureMotionHistorySizeForId(int i) { float[] fArr = this.mInitialMotionX; if (fArr == null || fArr.length <= i) { int i2 = i + 1; float[] fArr2 = new float[i2]; float[] fArr3 = new float[i2]; float[] fArr4 = new float[i2]; float[] fArr5 = new float[i2]; int[] iArr = new int[i2]; int[] iArr2 = new int[i2]; int[] iArr3 = new int[i2]; if (fArr != null) { System.arraycopy(fArr, 0, fArr2, 0, fArr.length); float[] fArr6 = this.mInitialMotionY; System.arraycopy(fArr6, 0, fArr3, 0, fArr6.length); float[] fArr7 = this.mLastMotionX; System.arraycopy(fArr7, 0, fArr4, 0, fArr7.length); float[] fArr8 = this.mLastMotionY; System.arraycopy(fArr8, 0, fArr5, 0, fArr8.length); int[] iArr4 = this.mInitialEdgesTouched; System.arraycopy(iArr4, 0, iArr, 0, iArr4.length); int[] iArr5 = this.mEdgeDragsInProgress; System.arraycopy(iArr5, 0, iArr2, 0, iArr5.length); int[] iArr6 = this.mEdgeDragsLocked; System.arraycopy(iArr6, 0, iArr3, 0, iArr6.length); } this.mInitialMotionX = fArr2; this.mInitialMotionY = fArr3; this.mLastMotionX = fArr4; this.mLastMotionY = fArr5; this.mInitialEdgesTouched = iArr; this.mEdgeDragsInProgress = iArr2; this.mEdgeDragsLocked = iArr3; } } private void saveInitialMotion(float f, float f2, int i) { ensureMotionHistorySizeForId(i); float[] fArr = this.mInitialMotionX; this.mLastMotionX[i] = f; fArr[i] = f; float[] fArr2 = this.mInitialMotionY; this.mLastMotionY[i] = f2; fArr2[i] = f2; this.mInitialEdgesTouched[i] = getEdgesTouched((int) f, (int) f2); this.mPointersDown |= 1 << i; } private void saveLastMotion(MotionEvent motionEvent) { int pointerCount = motionEvent.getPointerCount(); for (int i = 0; i < pointerCount; i++) { int pointerId = motionEvent.getPointerId(i); if (isValidPointerForActionMove(pointerId)) { float x = motionEvent.getX(i); float y = motionEvent.getY(i); this.mLastMotionX[pointerId] = x; this.mLastMotionY[pointerId] = y; } } } void setDragState(int i) { this.mParentView.removeCallbacks(this.mSetIdleRunnable); if (this.mDragState != i) { this.mDragState = i; this.mCallback.onViewDragStateChanged(i); if (this.mDragState == 0) { this.mCapturedView = null; } } } boolean tryCaptureViewForDrag(View view, int i) { if (view == this.mCapturedView && this.mActivePointerId == i) { return true; } if (view == null || !this.mCallback.tryCaptureView(view, i)) { return false; } this.mActivePointerId = i; captureChildView(view, i); return true; } protected boolean canScroll(View view, boolean z, int i, int i2, int i3, int i4) { int i5; if (view instanceof ViewGroup) { ViewGroup viewGroup = (ViewGroup) view; int scrollX = view.getScrollX(); int scrollY = view.getScrollY(); for (int childCount = viewGroup.getChildCount() - 1; childCount >= 0; childCount--) { View childAt = viewGroup.getChildAt(childCount); int i6 = i3 + scrollX; if (i6 >= childAt.getLeft() && i6 < childAt.getRight() && (i5 = i4 + scrollY) >= childAt.getTop() && i5 < childAt.getBottom() && canScroll(childAt, true, i, i2, i6 - childAt.getLeft(), i5 - childAt.getTop())) { return true; } } } return z && (view.canScrollHorizontally(-i) || view.canScrollVertically(-i2)); } /* JADX WARN: Code restructure failed: missing block: B:51:0x00dd, code lost: if (r12 != r11) goto L54; */ /* Code decompiled incorrectly, please refer to instructions dump. To view partially-correct add '--show-bad-code' argument */ public boolean shouldInterceptTouchEvent(android.view.MotionEvent r17) { /* Method dump skipped, instructions count: 315 To view this dump add '--comments-level debug' option */ throw new UnsupportedOperationException("Method not decompiled: androidx.customview.widget.ViewDragHelper.shouldInterceptTouchEvent(android.view.MotionEvent):boolean"); } /* JADX WARN: Code restructure failed: missing block: B:33:0x0066, code lost: if (r9.mActivePointerId == (-1)) goto L38; */ /* JADX WARN: Code restructure failed: missing block: B:34:0x006c, code lost: releaseViewForPointerUp(); */ /* Code decompiled incorrectly, please refer to instructions dump. To view partially-correct add '--show-bad-code' argument */ public void processTouchEvent(android.view.MotionEvent r10) { /* Method dump skipped, instructions count: 377 To view this dump add '--comments-level debug' option */ throw new UnsupportedOperationException("Method not decompiled: androidx.customview.widget.ViewDragHelper.processTouchEvent(android.view.MotionEvent):void"); } /* JADX WARN: Multi-variable type inference failed */ /* JADX WARN: Type inference failed for: r0v15 */ /* JADX WARN: Type inference failed for: r0v16 */ /* JADX WARN: Type inference failed for: r0v4, types: [int] */ /* JADX WARN: Type inference failed for: r0v6 */ /* JADX WARN: Type inference failed for: r0v7 */ /* JADX WARN: Type inference failed for: r2v1, types: [androidx.customview.widget.ViewDragHelper$Callback] */ private void reportNewEdgeDrags(float f, float f2, int i) { boolean checkNewEdgeDrag = checkNewEdgeDrag(f, f2, i, 1); boolean z = checkNewEdgeDrag; if (checkNewEdgeDrag(f2, f, i, 4)) { z = (checkNewEdgeDrag ? 1 : 0) | 4; } boolean z2 = z; if (checkNewEdgeDrag(f, f2, i, 2)) { z2 = (z ? 1 : 0) | 2; } ?? r0 = z2; if (checkNewEdgeDrag(f2, f, i, 8)) { r0 = (z2 ? 1 : 0) | 8; } if (r0 != 0) { int[] iArr = this.mEdgeDragsInProgress; iArr[i] = iArr[i] | r0; this.mCallback.onEdgeDragStarted(r0, i); } } private boolean checkNewEdgeDrag(float f, float f2, int i, int i2) { float abs = Math.abs(f); float abs2 = Math.abs(f2); if ((this.mInitialEdgesTouched[i] & i2) != i2 || (this.mTrackingEdges & i2) == 0 || (this.mEdgeDragsLocked[i] & i2) == i2 || (this.mEdgeDragsInProgress[i] & i2) == i2) { return false; } int i3 = this.mTouchSlop; if (abs <= i3 && abs2 <= i3) { return false; } if (abs >= abs2 * 0.5f || !this.mCallback.onEdgeLock(i2)) { return (this.mEdgeDragsInProgress[i] & i2) == 0 && abs > ((float) this.mTouchSlop); } int[] iArr = this.mEdgeDragsLocked; iArr[i] = iArr[i] | i2; return false; } private boolean checkTouchSlop(View view, float f, float f2) { if (view == null) { return false; } boolean z = this.mCallback.getViewHorizontalDragRange(view) > 0; boolean z2 = this.mCallback.getViewVerticalDragRange(view) > 0; if (!z || !z2) { return z ? Math.abs(f) > ((float) this.mTouchSlop) : z2 && Math.abs(f2) > ((float) this.mTouchSlop); } float f3 = (f * f) + (f2 * f2); int i = this.mTouchSlop; return f3 > ((float) (i * i)); } public boolean checkTouchSlop(int i) { int length = this.mInitialMotionX.length; for (int i2 = 0; i2 < length; i2++) { if (checkTouchSlop(i, i2)) { return true; } } return false; } public boolean checkTouchSlop(int i, int i2) { if (!isPointerDown(i2)) { return false; } boolean z = (i & 1) == 1; boolean z2 = (i & 2) == 2; float f = this.mLastMotionX[i2] - this.mInitialMotionX[i2]; float f2 = this.mLastMotionY[i2] - this.mInitialMotionY[i2]; if (!z || !z2) { return z ? Math.abs(f) > ((float) this.mTouchSlop) : z2 && Math.abs(f2) > ((float) this.mTouchSlop); } float f3 = (f * f) + (f2 * f2); int i3 = this.mTouchSlop; return f3 > ((float) (i3 * i3)); } public boolean isEdgeTouched(int i) { int length = this.mInitialEdgesTouched.length; for (int i2 = 0; i2 < length; i2++) { if (isEdgeTouched(i, i2)) { return true; } } return false; } public boolean isEdgeTouched(int i, int i2) { return isPointerDown(i2) && (this.mInitialEdgesTouched[i2] & i) != 0; } private void releaseViewForPointerUp() { this.mVelocityTracker.computeCurrentVelocity(1000, this.mMaxVelocity); dispatchViewReleased(clampMag(this.mVelocityTracker.getXVelocity(this.mActivePointerId), this.mMinVelocity, this.mMaxVelocity), clampMag(this.mVelocityTracker.getYVelocity(this.mActivePointerId), this.mMinVelocity, this.mMaxVelocity)); } private void dragTo(int i, int i2, int i3, int i4) { int left = this.mCapturedView.getLeft(); int top = this.mCapturedView.getTop(); if (i3 != 0) { i = this.mCallback.clampViewPositionHorizontal(this.mCapturedView, i, i3); ViewCompat.offsetLeftAndRight(this.mCapturedView, i - left); } int i5 = i; if (i4 != 0) { i2 = this.mCallback.clampViewPositionVertical(this.mCapturedView, i2, i4); ViewCompat.offsetTopAndBottom(this.mCapturedView, i2 - top); } int i6 = i2; if (i3 == 0 && i4 == 0) { return; } this.mCallback.onViewPositionChanged(this.mCapturedView, i5, i6, i5 - left, i6 - top); } public boolean isCapturedViewUnder(int i, int i2) { return isViewUnder(this.mCapturedView, i, i2); } public boolean isViewUnder(View view, int i, int i2) { return view != null && i >= view.getLeft() && i < view.getRight() && i2 >= view.getTop() && i2 < view.getBottom(); } public View findTopChildUnder(int i, int i2) { for (int childCount = this.mParentView.getChildCount() - 1; childCount >= 0; childCount--) { View childAt = this.mParentView.getChildAt(this.mCallback.getOrderedChildIndex(childCount)); if (i >= childAt.getLeft() && i < childAt.getRight() && i2 >= childAt.getTop() && i2 < childAt.getBottom()) { return childAt; } } return null; } private int getEdgesTouched(int i, int i2) { int i3 = i < this.mParentView.getLeft() + this.mEdgeSize ? 1 : 0; if (i2 < this.mParentView.getTop() + this.mEdgeSize) { i3 |= 4; } if (i > this.mParentView.getRight() - this.mEdgeSize) { i3 |= 2; } return i2 > this.mParentView.getBottom() - this.mEdgeSize ? i3 | 8 : i3; } private boolean isValidPointerForActionMove(int i) { if (isPointerDown(i)) { return true; } Log.e(TAG, "Ignoring pointerId=" + i + " because ACTION_DOWN was not received for this pointer before ACTION_MOVE. It likely happened because ViewDragHelper did not receive all the events in the event stream."); return false; } }