739 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			739 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| 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);
 | |
|         }
 | |
|     };
 | |
| 
 | |
|     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 ((1 << i) & this.mPointersDown) != 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, 600);
 | |
|     }
 | |
| 
 | |
|     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 r12 = r11.mDragState
 | |
|             if (r12 != 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:50: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: r3v3, 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) && (i & this.mInitialEdgesTouched[i2]) != 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;
 | |
|     }
 | |
| }
 |