2021-06-27 20:44:35 +00:00
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.annotation.NonNull ;
import androidx.annotation.Nullable ;
import androidx.annotation.Px ;
import androidx.core.view.ViewCompat ;
2021-12-21 23:37:30 +00:00
import b.d.b.a.a ;
2021-06-27 20:44:35 +00:00
import java.util.Arrays ;
2022-03-02 20:59:20 +00:00
/* loaded from: classes.dex */
2021-06-27 20:44:35 +00:00
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 AnonymousClass1 ( ) ;
private final Callback mCallback ;
private View mCapturedView ;
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 ;
2022-03-02 20:59:20 +00:00
private int mActivePointerId = - 1 ;
private final Runnable mSetIdleRunnable = new AnonymousClass2 ( ) ;
2021-06-27 20:44:35 +00:00
/* renamed from: androidx.customview.widget.ViewDragHelper$1 reason: invalid class name */
2022-03-02 20:59:20 +00:00
/* loaded from: classes.dex */
2021-06-27 20:44:35 +00:00
public static class AnonymousClass1 implements Interpolator {
@Override // android.animation.TimeInterpolator
public float getInterpolation ( float f ) {
float f2 = f - 1 . 0f ;
return ( f2 * f2 * f2 * f2 * f2 ) + 1 . 0f ;
}
}
/* renamed from: androidx.customview.widget.ViewDragHelper$2 reason: invalid class name */
2022-03-02 20:59:20 +00:00
/* loaded from: classes.dex */
2021-06-27 20:44:35 +00:00
public class AnonymousClass2 implements Runnable {
public AnonymousClass2 ( ) {
}
@Override // java.lang.Runnable
public void run ( ) {
ViewDragHelper . this . setDragState ( 0 ) ;
}
}
2022-03-02 20:59:20 +00:00
/* loaded from: classes.dex */
2021-06-27 20:44:35 +00:00
public static abstract class Callback {
public int clampViewPositionHorizontal ( @NonNull View view , int i , int i2 ) {
return 0 ;
}
public int clampViewPositionVertical ( @NonNull View view , int i , int i2 ) {
return 0 ;
}
public int getOrderedChildIndex ( int i ) {
return i ;
}
public int getViewHorizontalDragRange ( @NonNull View view ) {
return 0 ;
}
public int getViewVerticalDragRange ( @NonNull 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 ( @NonNull View view , int i ) {
}
public void onViewDragStateChanged ( int i ) {
}
public void onViewPositionChanged ( @NonNull View view , int i , int i2 , @Px int i3 , @Px int i4 ) {
}
public void onViewReleased ( @NonNull View view , float f , float f2 ) {
}
public abstract boolean tryCaptureView ( @NonNull View view , int i ) ;
}
private ViewDragHelper ( @NonNull Context context , @NonNull ViewGroup viewGroup , @NonNull Callback callback ) {
if ( viewGroup = = null ) {
throw new IllegalArgumentException ( " Parent view may not be null " ) ;
} else if ( callback ! = null ) {
this . mParentView = viewGroup ;
this . mCallback = callback ;
ViewConfiguration viewConfiguration = ViewConfiguration . get ( context ) ;
this . mEdgeSize = ( int ) ( ( context . getResources ( ) . getDisplayMetrics ( ) . density * 20 . 0f ) + 0 . 5f ) ;
this . mTouchSlop = viewConfiguration . getScaledTouchSlop ( ) ;
2022-03-02 20:59:20 +00:00
this . mMaxVelocity = viewConfiguration . getScaledMaximumFlingVelocity ( ) ;
this . mMinVelocity = viewConfiguration . getScaledMinimumFlingVelocity ( ) ;
2021-06-27 20:44:35 +00:00
this . mScroller = new OverScroller ( context , sInterpolator ) ;
} else {
throw new IllegalArgumentException ( " Callback may not be null " ) ;
}
}
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 ;
2022-03-02 20:59:20 +00:00
if ( abs < = i3 & & abs2 < = i3 ) {
2021-06-27 20:44:35 +00:00
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 z2 = this . mCallback . getViewHorizontalDragRange ( view ) > 0 ;
boolean z3 = this . mCallback . getViewVerticalDragRange ( view ) > 0 ;
if ( ! z2 | | ! z3 ) {
return z2 ? Math . abs ( f ) > ( ( float ) this . mTouchSlop ) : z3 & & Math . abs ( f2 ) > ( ( float ) this . mTouchSlop ) ;
}
float f3 = f2 * f2 ;
int i = this . mTouchSlop ;
return f3 + ( f * f ) > ( ( float ) ( i * 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 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 void clearMotionHistory ( ) {
float [ ] fArr = this . mInitialMotionX ;
if ( fArr ! = null ) {
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 ) ) {
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 int computeAxisDuration ( int i , int i2 , int i3 ) {
if ( i = = 0 ) {
return 0 ;
}
int width = this . mParentView . getWidth ( ) ;
2022-03-02 20:59:20 +00:00
float f = width / 2 ;
float distanceInfluenceForSnapDuration = ( distanceInfluenceForSnapDuration ( Math . min ( 1 . 0f , Math . abs ( i ) / width ) ) * f ) + f ;
2021-06-27 20:44:35 +00:00
int abs = Math . abs ( i2 ) ;
2022-03-02 20:59:20 +00:00
return Math . min ( abs > 0 ? Math . round ( Math . abs ( distanceInfluenceForSnapDuration / abs ) * 1000 . 0f ) * 4 : ( int ) ( ( ( Math . abs ( i ) / i3 ) + 1 . 0f ) * 256 . 0f ) , ( int ) MAX_SETTLE_DURATION ) ;
2021-06-27 20:44:35 +00:00
}
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 ) {
2022-03-02 20:59:20 +00:00
f2 = abs3 ;
f = i5 ;
2021-06-27 20:44:35 +00:00
} else {
2022-03-02 20:59:20 +00:00
f2 = abs ;
f = i6 ;
2021-06-27 20:44:35 +00:00
}
float f5 = f2 / f ;
if ( clampMag2 ! = 0 ) {
2022-03-02 20:59:20 +00:00
f4 = abs4 ;
f3 = i5 ;
2021-06-27 20:44:35 +00:00
} else {
2022-03-02 20:59:20 +00:00
f4 = abs2 ;
f3 = i6 ;
2021-06-27 20:44:35 +00:00
}
2022-03-02 20:59:20 +00:00
return ( int ) ( ( computeAxisDuration ( i2 , clampMag2 , this . mCallback . getViewVerticalDragRange ( view ) ) * ( f4 / f3 ) ) + ( computeAxisDuration ( i , clampMag , this . mCallback . getViewHorizontalDragRange ( view ) ) * f5 ) ) ;
2021-06-27 20:44:35 +00:00
}
public static ViewDragHelper create ( @NonNull ViewGroup viewGroup , float f , @NonNull Callback callback ) {
ViewDragHelper create = create ( viewGroup , callback ) ;
2022-03-02 20:59:20 +00:00
create . mTouchSlop = ( int ) ( ( 1 . 0f / f ) * create . mTouchSlop ) ;
2021-06-27 20:44:35 +00:00
return create ;
}
public static ViewDragHelper create ( @NonNull ViewGroup viewGroup , @NonNull Callback callback ) {
return new ViewDragHelper ( viewGroup . getContext ( ) , viewGroup , callback ) ;
}
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 float distanceInfluenceForSnapDuration ( float f ) {
2022-03-02 20:59:20 +00:00
return ( float ) Math . sin ( ( f - 0 . 5f ) * 0 . 47123894f ) ;
2021-06-27 20:44:35 +00:00
}
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 ) ;
}
if ( i4 ! = 0 ) {
i2 = this . mCallback . clampViewPositionVertical ( this . mCapturedView , i2 , i4 ) ;
ViewCompat . offsetTopAndBottom ( this . mCapturedView , i2 - top ) ;
}
if ( i3 ! = 0 | | i4 ! = 0 ) {
this . mCallback . onViewPositionChanged ( this . mCapturedView , i , i2 , i - left , i2 - top ) ;
}
}
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 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 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 ;
}
2021-08-09 22:50:01 +00:00
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. " ) ;
2021-06-27 20:44:35 +00:00
return false ;
}
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 reportNewEdgeDrags ( float f , float f2 , int i ) {
int i2 = 1 ;
if ( ! checkNewEdgeDrag ( f , f2 , i , 1 ) ) {
i2 = 0 ;
}
if ( checkNewEdgeDrag ( f2 , f , i , 4 ) ) {
i2 | = 4 ;
}
if ( checkNewEdgeDrag ( f , f2 , i , 2 ) ) {
i2 | = 2 ;
}
if ( checkNewEdgeDrag ( f2 , f , i , 8 ) ) {
i2 | = 8 ;
}
if ( i2 ! = 0 ) {
int [ ] iArr = this . mEdgeDragsInProgress ;
iArr [ i ] = iArr [ i ] | i2 ;
this . mCallback . onEdgeDragStarted ( i2 , i ) ;
}
}
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 x2 = motionEvent . getX ( i ) ;
float y2 = motionEvent . getY ( i ) ;
this . mLastMotionX [ pointerId ] = x2 ;
this . mLastMotionY [ pointerId ] = y2 ;
}
}
}
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 canScroll ( @NonNull View view , boolean z2 , 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 z2 & & ( view . canScrollHorizontally ( - i ) | | view . canScrollVertically ( - i2 ) ) ;
}
public void cancel ( ) {
this . mActivePointerId = - 1 ;
clearMotionHistory ( ) ;
VelocityTracker velocityTracker = this . mVelocityTracker ;
if ( velocityTracker ! = null ) {
velocityTracker . recycle ( ) ;
this . mVelocityTracker = null ;
}
}
public void captureChildView ( @NonNull View view , int i ) {
if ( view . getParent ( ) = = this . mParentView ) {
this . mCapturedView = view ;
this . mActivePointerId = i ;
this . mCallback . onViewCaptured ( view , i ) ;
setDragState ( 1 ) ;
return ;
}
2022-03-22 15:40:06 +00:00
StringBuilder S = a . S ( " captureChildView: parameter must be a descendant of the ViewDragHelper's tracked parent view ( " ) ;
S . append ( this . mParentView ) ;
S . append ( " ) " ) ;
throw new IllegalArgumentException ( S . toString ( ) ) ;
2021-06-27 20:44:35 +00:00
}
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 z2 = ( i & 1 ) = = 1 ;
boolean z3 = ( i & 2 ) = = 2 ;
float f = this . mLastMotionX [ i2 ] - this . mInitialMotionX [ i2 ] ;
float f2 = this . mLastMotionY [ i2 ] - this . mInitialMotionY [ i2 ] ;
if ( ! z2 | | ! z3 ) {
return z2 ? Math . abs ( f ) > ( ( float ) this . mTouchSlop ) : z3 & & Math . abs ( f2 ) > ( ( float ) this . mTouchSlop ) ;
}
float f3 = f2 * f2 ;
int i3 = this . mTouchSlop ;
return f3 + ( f * f ) > ( ( float ) ( i3 * i3 ) ) ;
}
public boolean continueSettling ( boolean z2 ) {
if ( this . mDragState = = 2 ) {
boolean computeScrollOffset = this . mScroller . computeScrollOffset ( ) ;
int currX = this . mScroller . getCurrX ( ) ;
int currY = this . mScroller . getCurrY ( ) ;
int left = currX - this . mCapturedView . getLeft ( ) ;
int top = currY - this . mCapturedView . getTop ( ) ;
if ( left ! = 0 ) {
ViewCompat . offsetLeftAndRight ( this . mCapturedView , left ) ;
}
if ( top ! = 0 ) {
ViewCompat . offsetTopAndBottom ( this . mCapturedView , top ) ;
}
if ( ! ( left = = 0 & & top = = 0 ) ) {
this . mCallback . onViewPositionChanged ( this . mCapturedView , currX , currY , left , top ) ;
}
if ( computeScrollOffset & & currX = = this . mScroller . getFinalX ( ) & & currY = = this . mScroller . getFinalY ( ) ) {
this . mScroller . abortAnimation ( ) ;
computeScrollOffset = false ;
}
if ( ! computeScrollOffset ) {
if ( z2 ) {
this . mParentView . post ( this . mSetIdleRunnable ) ;
} else {
setDragState ( 0 ) ;
}
}
}
return this . mDragState = = 2 ;
}
@Nullable
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 ;
}
public void flingCapturedView ( int i , int i2 , int i3 , int i4 ) {
if ( this . mReleaseInProgress ) {
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 ) ;
return ;
}
throw new IllegalStateException ( " Cannot flingCapturedView outside of a call to Callback#onViewReleased " ) ;
}
public int getActivePointerId ( ) {
return this . mActivePointerId ;
}
@Nullable
public View getCapturedView ( ) {
return this . mCapturedView ;
}
@Px
public int getEdgeSize ( ) {
return this . mEdgeSize ;
}
public float getMinVelocity ( ) {
return this . mMinVelocity ;
}
@Px
public int getTouchSlop ( ) {
return this . mTouchSlop ;
}
public int getViewDragState ( ) {
return this . mDragState ;
}
public boolean isCapturedViewUnder ( int i , int i2 ) {
return isViewUnder ( this . mCapturedView , i , i2 ) ;
}
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 ;
}
public boolean isPointerDown ( int i ) {
return ( ( 1 < < i ) & this . mPointersDown ) ! = 0 ;
}
public boolean isViewUnder ( @Nullable View view , int i , int i2 ) {
return view ! = null & & i > = view . getLeft ( ) & & i < view . getRight ( ) & & i2 > = view . getTop ( ) & & i2 < view . getBottom ( ) ;
}
public void processTouchEvent ( @NonNull MotionEvent motionEvent ) {
int i ;
int actionMasked = motionEvent . getActionMasked ( ) ;
int actionIndex = motionEvent . getActionIndex ( ) ;
if ( actionMasked = = 0 ) {
cancel ( ) ;
}
if ( this . mVelocityTracker = = null ) {
this . mVelocityTracker = VelocityTracker . obtain ( ) ;
}
this . mVelocityTracker . addMovement ( motionEvent ) ;
int i2 = 0 ;
if ( actionMasked = = 0 ) {
float x2 = motionEvent . getX ( ) ;
float y2 = motionEvent . getY ( ) ;
int pointerId = motionEvent . getPointerId ( 0 ) ;
View findTopChildUnder = findTopChildUnder ( ( int ) x2 , ( int ) y2 ) ;
saveInitialMotion ( x2 , y2 , pointerId ) ;
tryCaptureViewForDrag ( findTopChildUnder , pointerId ) ;
int i3 = this . mInitialEdgesTouched [ pointerId ] ;
int i4 = this . mTrackingEdges ;
if ( ( i3 & i4 ) ! = 0 ) {
this . mCallback . onEdgeTouched ( i3 & i4 , pointerId ) ;
}
} else if ( actionMasked = = 1 ) {
if ( this . mDragState = = 1 ) {
releaseViewForPointerUp ( ) ;
}
cancel ( ) ;
} else if ( actionMasked ! = 2 ) {
if ( actionMasked = = 3 ) {
if ( this . mDragState = = 1 ) {
dispatchViewReleased ( 0 . 0f , 0 . 0f ) ;
}
cancel ( ) ;
} else if ( actionMasked = = 5 ) {
int pointerId2 = motionEvent . getPointerId ( actionIndex ) ;
float x3 = motionEvent . getX ( actionIndex ) ;
float y3 = motionEvent . getY ( actionIndex ) ;
saveInitialMotion ( x3 , y3 , pointerId2 ) ;
if ( this . mDragState = = 0 ) {
tryCaptureViewForDrag ( findTopChildUnder ( ( int ) x3 , ( int ) y3 ) , pointerId2 ) ;
int i5 = this . mInitialEdgesTouched [ pointerId2 ] ;
int i6 = this . mTrackingEdges ;
if ( ( i5 & i6 ) ! = 0 ) {
this . mCallback . onEdgeTouched ( i5 & i6 , pointerId2 ) ;
}
} else if ( isCapturedViewUnder ( ( int ) x3 , ( int ) y3 ) ) {
tryCaptureViewForDrag ( this . mCapturedView , pointerId2 ) ;
}
} else if ( actionMasked = = 6 ) {
int pointerId3 = motionEvent . getPointerId ( actionIndex ) ;
if ( this . mDragState = = 1 & & pointerId3 = = this . mActivePointerId ) {
int pointerCount = motionEvent . getPointerCount ( ) ;
while ( true ) {
if ( i2 > = pointerCount ) {
i = - 1 ;
break ;
}
int pointerId4 = motionEvent . getPointerId ( i2 ) ;
if ( pointerId4 ! = this . mActivePointerId ) {
View findTopChildUnder2 = findTopChildUnder ( ( int ) motionEvent . getX ( i2 ) , ( int ) motionEvent . getY ( i2 ) ) ;
View view = this . mCapturedView ;
if ( findTopChildUnder2 = = view & & tryCaptureViewForDrag ( view , pointerId4 ) ) {
i = this . mActivePointerId ;
break ;
}
}
i2 + + ;
}
if ( i = = - 1 ) {
releaseViewForPointerUp ( ) ;
}
}
clearMotionHistory ( pointerId3 ) ;
}
} else if ( this . mDragState ! = 1 ) {
int pointerCount2 = motionEvent . getPointerCount ( ) ;
while ( i2 < pointerCount2 ) {
int pointerId5 = motionEvent . getPointerId ( i2 ) ;
if ( isValidPointerForActionMove ( pointerId5 ) ) {
float x4 = motionEvent . getX ( i2 ) ;
float y4 = motionEvent . getY ( i2 ) ;
float f = x4 - this . mInitialMotionX [ pointerId5 ] ;
float f2 = y4 - this . mInitialMotionY [ pointerId5 ] ;
reportNewEdgeDrags ( f , f2 , pointerId5 ) ;
if ( this . mDragState ! = 1 ) {
View findTopChildUnder3 = findTopChildUnder ( ( int ) x4 , ( int ) y4 ) ;
if ( checkTouchSlop ( findTopChildUnder3 , f , f2 ) & & tryCaptureViewForDrag ( findTopChildUnder3 , pointerId5 ) ) {
break ;
}
} else {
break ;
}
}
i2 + + ;
}
saveLastMotion ( motionEvent ) ;
} else if ( isValidPointerForActionMove ( this . mActivePointerId ) ) {
int findPointerIndex = motionEvent . findPointerIndex ( this . mActivePointerId ) ;
float x5 = motionEvent . getX ( findPointerIndex ) ;
float y5 = motionEvent . getY ( findPointerIndex ) ;
float [ ] fArr = this . mLastMotionX ;
int i7 = this . mActivePointerId ;
int i8 = ( int ) ( x5 - fArr [ i7 ] ) ;
int i9 = ( int ) ( y5 - this . mLastMotionY [ i7 ] ) ;
dragTo ( this . mCapturedView . getLeft ( ) + i8 , this . mCapturedView . getTop ( ) + i9 , i8 , i9 ) ;
saveLastMotion ( motionEvent ) ;
}
}
public 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 ;
}
}
}
public void setEdgeTrackingEnabled ( int i ) {
this . mTrackingEdges = i ;
}
public void setMinVelocity ( float f ) {
this . mMinVelocity = f ;
}
public boolean settleCapturedViewAt ( int i , int i2 ) {
if ( this . mReleaseInProgress ) {
return forceSettleCapturedViewAt ( i , i2 , ( int ) this . mVelocityTracker . getXVelocity ( this . mActivePointerId ) , ( int ) this . mVelocityTracker . getYVelocity ( this . mActivePointerId ) ) ;
}
throw new IllegalStateException ( " Cannot settleCapturedViewAt outside of a call to Callback#onViewReleased " ) ;
}
2022-03-02 20:59:20 +00:00
/ * JADX WARN : Code restructure failed : missing block : B : 47 : 0x00dd , code lost :
2021-06-27 20:44:35 +00:00
if ( r12 ! = r11 ) goto L_0x00e6 ;
* /
2022-03-02 20:59:20 +00:00
/ *
Code decompiled incorrectly , please refer to instructions dump .
* /
2021-06-27 20:44:35 +00:00
public boolean shouldInterceptTouchEvent ( @NonNull MotionEvent motionEvent ) {
boolean z2 ;
View findTopChildUnder ;
int actionMasked = motionEvent . getActionMasked ( ) ;
int actionIndex = motionEvent . getActionIndex ( ) ;
if ( actionMasked = = 0 ) {
cancel ( ) ;
}
if ( this . mVelocityTracker = = null ) {
this . mVelocityTracker = VelocityTracker . obtain ( ) ;
}
this . mVelocityTracker . addMovement ( motionEvent ) ;
if ( actionMasked ! = 0 ) {
if ( actionMasked ! = 1 ) {
if ( actionMasked ! = 2 ) {
if ( actionMasked ! = 3 ) {
if ( actionMasked = = 5 ) {
int pointerId = motionEvent . getPointerId ( actionIndex ) ;
float x2 = motionEvent . getX ( actionIndex ) ;
float y2 = motionEvent . getY ( actionIndex ) ;
saveInitialMotion ( x2 , y2 , pointerId ) ;
int i = this . mDragState ;
if ( i = = 0 ) {
int i2 = this . mInitialEdgesTouched [ pointerId ] ;
int i3 = this . mTrackingEdges ;
if ( ( i2 & i3 ) ! = 0 ) {
this . mCallback . onEdgeTouched ( i2 & i3 , pointerId ) ;
}
} else if ( i = = 2 & & ( findTopChildUnder = findTopChildUnder ( ( int ) x2 , ( int ) y2 ) ) = = this . mCapturedView ) {
tryCaptureViewForDrag ( findTopChildUnder , pointerId ) ;
}
} else if ( actionMasked = = 6 ) {
clearMotionHistory ( motionEvent . getPointerId ( actionIndex ) ) ;
}
}
} else if ( ! ( this . mInitialMotionX = = null | | this . mInitialMotionY = = null ) ) {
int pointerCount = motionEvent . getPointerCount ( ) ;
for ( int i4 = 0 ; i4 < pointerCount ; i4 + + ) {
int pointerId2 = motionEvent . getPointerId ( i4 ) ;
if ( isValidPointerForActionMove ( pointerId2 ) ) {
float x3 = motionEvent . getX ( i4 ) ;
float y3 = motionEvent . getY ( i4 ) ;
float f = x3 - this . mInitialMotionX [ pointerId2 ] ;
float f2 = y3 - this . mInitialMotionY [ pointerId2 ] ;
View findTopChildUnder2 = findTopChildUnder ( ( int ) x3 , ( int ) y3 ) ;
boolean z3 = findTopChildUnder2 ! = null & & checkTouchSlop ( findTopChildUnder2 , f , f2 ) ;
if ( z3 ) {
int left = findTopChildUnder2 . getLeft ( ) ;
int i5 = ( int ) f ;
int clampViewPositionHorizontal = this . mCallback . clampViewPositionHorizontal ( findTopChildUnder2 , left + i5 , i5 ) ;
int top = findTopChildUnder2 . getTop ( ) ;
int i6 = ( int ) f2 ;
int clampViewPositionVertical = this . mCallback . clampViewPositionVertical ( findTopChildUnder2 , top + i6 , i6 ) ;
int viewHorizontalDragRange = this . mCallback . getViewHorizontalDragRange ( findTopChildUnder2 ) ;
int viewVerticalDragRange = this . mCallback . getViewVerticalDragRange ( findTopChildUnder2 ) ;
if ( viewHorizontalDragRange ! = 0 ) {
if ( viewHorizontalDragRange > 0 ) {
}
}
if ( viewVerticalDragRange ! = 0 ) {
if ( viewVerticalDragRange > 0 & & clampViewPositionVertical = = top ) {
break ;
}
} else {
break ;
}
}
reportNewEdgeDrags ( f , f2 , pointerId2 ) ;
if ( this . mDragState ! = 1 ) {
if ( z3 & & tryCaptureViewForDrag ( findTopChildUnder2 , pointerId2 ) ) {
break ;
}
} else {
break ;
}
}
}
saveLastMotion ( motionEvent ) ;
}
z2 = false ;
}
cancel ( ) ;
z2 = false ;
} else {
float x4 = motionEvent . getX ( ) ;
float y4 = motionEvent . getY ( ) ;
z2 = false ;
int pointerId3 = motionEvent . getPointerId ( 0 ) ;
saveInitialMotion ( x4 , y4 , pointerId3 ) ;
View findTopChildUnder3 = findTopChildUnder ( ( int ) x4 , ( int ) y4 ) ;
if ( findTopChildUnder3 = = this . mCapturedView & & this . mDragState = = 2 ) {
tryCaptureViewForDrag ( findTopChildUnder3 , pointerId3 ) ;
}
int i7 = this . mInitialEdgesTouched [ pointerId3 ] ;
int i8 = this . mTrackingEdges ;
if ( ( i7 & i8 ) ! = 0 ) {
this . mCallback . onEdgeTouched ( i7 & i8 , pointerId3 ) ;
}
}
if ( this . mDragState = = 1 ) {
return true ;
}
return z2 ;
}
public boolean smoothSlideViewTo ( @NonNull 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 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 ;
}
}