620 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			620 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.constraintlayout.motion.widget;
 | |
| 
 | |
| import android.content.Context;
 | |
| import android.content.res.TypedArray;
 | |
| import android.graphics.RectF;
 | |
| import android.util.AttributeSet;
 | |
| import android.util.Log;
 | |
| import android.util.Xml;
 | |
| import android.view.MotionEvent;
 | |
| import android.view.View;
 | |
| import android.view.ViewGroup;
 | |
| import androidx.constraintlayout.motion.widget.MotionLayout;
 | |
| import androidx.constraintlayout.widget.R;
 | |
| import androidx.core.widget.NestedScrollView;
 | |
| import org.xmlpull.v1.XmlPullParser;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| class TouchResponse {
 | |
|     public static final int COMPLETE_MODE_CONTINUOUS_VELOCITY = 0;
 | |
|     public static final int COMPLETE_MODE_SPRING = 1;
 | |
|     private static final boolean DEBUG = false;
 | |
|     private static final float EPSILON = 1.0E-7f;
 | |
|     static final int FLAG_DISABLE_POST_SCROLL = 1;
 | |
|     static final int FLAG_DISABLE_SCROLL = 2;
 | |
|     static final int FLAG_SUPPORT_SCROLL_UP = 4;
 | |
|     private static final int SEC_TO_MILLISECONDS = 1000;
 | |
|     private static final int SIDE_BOTTOM = 3;
 | |
|     private static final int SIDE_END = 6;
 | |
|     private static final int SIDE_LEFT = 1;
 | |
|     private static final int SIDE_MIDDLE = 4;
 | |
|     private static final int SIDE_RIGHT = 2;
 | |
|     private static final int SIDE_START = 5;
 | |
|     private static final int SIDE_TOP = 0;
 | |
|     private static final String TAG = "TouchResponse";
 | |
|     private static final int TOUCH_DOWN = 1;
 | |
|     private static final int TOUCH_END = 5;
 | |
|     private static final int TOUCH_LEFT = 2;
 | |
|     private static final int TOUCH_RIGHT = 3;
 | |
|     private static final int TOUCH_START = 4;
 | |
|     private static final int TOUCH_UP = 0;
 | |
|     private float[] mAnchorDpDt;
 | |
|     private int mAutoCompleteMode;
 | |
|     private float mDragScale;
 | |
|     private boolean mDragStarted;
 | |
|     private float mDragThreshold;
 | |
|     private int mFlags;
 | |
|     boolean mIsRotateMode;
 | |
|     private float mLastTouchX;
 | |
|     private float mLastTouchY;
 | |
|     private int mLimitBoundsTo;
 | |
|     private float mMaxAcceleration;
 | |
|     private float mMaxVelocity;
 | |
|     private final MotionLayout mMotionLayout;
 | |
|     private boolean mMoveWhenScrollAtTop;
 | |
|     private int mOnTouchUp;
 | |
|     float mRotateCenterX;
 | |
|     float mRotateCenterY;
 | |
|     private int mRotationCenterId;
 | |
|     private int mSpringBoundary;
 | |
|     private float mSpringDamping;
 | |
|     private float mSpringMass;
 | |
|     private float mSpringStiffness;
 | |
|     private float mSpringStopThreshold;
 | |
|     private int[] mTempLoc;
 | |
|     private int mTouchAnchorId;
 | |
|     private int mTouchAnchorSide;
 | |
|     private float mTouchAnchorX;
 | |
|     private float mTouchAnchorY;
 | |
|     private float mTouchDirectionX;
 | |
|     private float mTouchDirectionY;
 | |
|     private int mTouchRegionId;
 | |
|     private int mTouchSide;
 | |
|     private static final float[][] TOUCH_SIDES = {new float[]{0.5f, 0.0f}, new float[]{0.0f, 0.5f}, new float[]{1.0f, 0.5f}, new float[]{0.5f, 1.0f}, new float[]{0.5f, 0.5f}, new float[]{0.0f, 0.5f}, new float[]{1.0f, 0.5f}};
 | |
|     private static final float[][] TOUCH_DIRECTION = {new float[]{0.0f, -1.0f}, new float[]{0.0f, 1.0f}, new float[]{-1.0f, 0.0f}, new float[]{1.0f, 0.0f}, new float[]{-1.0f, 0.0f}, new float[]{1.0f, 0.0f}};
 | |
| 
 | |
|     float dot(float dx, float dy) {
 | |
|         return (dx * this.mTouchDirectionX) + (dy * this.mTouchDirectionY);
 | |
|     }
 | |
| 
 | |
|     public int getAnchorId() {
 | |
|         return this.mTouchAnchorId;
 | |
|     }
 | |
| 
 | |
|     public int getAutoCompleteMode() {
 | |
|         return this.mAutoCompleteMode;
 | |
|     }
 | |
| 
 | |
|     public int getFlags() {
 | |
|         return this.mFlags;
 | |
|     }
 | |
| 
 | |
|     int getLimitBoundsToId() {
 | |
|         return this.mLimitBoundsTo;
 | |
|     }
 | |
| 
 | |
|     float getMaxAcceleration() {
 | |
|         return this.mMaxAcceleration;
 | |
|     }
 | |
| 
 | |
|     public float getMaxVelocity() {
 | |
|         return this.mMaxVelocity;
 | |
|     }
 | |
| 
 | |
|     boolean getMoveWhenScrollAtTop() {
 | |
|         return this.mMoveWhenScrollAtTop;
 | |
|     }
 | |
| 
 | |
|     public int getSpringBoundary() {
 | |
|         return this.mSpringBoundary;
 | |
|     }
 | |
| 
 | |
|     public float getSpringDamping() {
 | |
|         return this.mSpringDamping;
 | |
|     }
 | |
| 
 | |
|     public float getSpringMass() {
 | |
|         return this.mSpringMass;
 | |
|     }
 | |
| 
 | |
|     public float getSpringStiffness() {
 | |
|         return this.mSpringStiffness;
 | |
|     }
 | |
| 
 | |
|     public float getSpringStopThreshold() {
 | |
|         return this.mSpringStopThreshold;
 | |
|     }
 | |
| 
 | |
|     int getTouchRegionId() {
 | |
|         return this.mTouchRegionId;
 | |
|     }
 | |
| 
 | |
|     boolean isDragStarted() {
 | |
|         return this.mDragStarted;
 | |
|     }
 | |
| 
 | |
|     public void setAnchorId(int id) {
 | |
|         this.mTouchAnchorId = id;
 | |
|     }
 | |
| 
 | |
|     void setAutoCompleteMode(int autoCompleteMode) {
 | |
|         this.mAutoCompleteMode = autoCompleteMode;
 | |
|     }
 | |
| 
 | |
|     void setDown(float lastTouchX, float lastTouchY) {
 | |
|         this.mLastTouchX = lastTouchX;
 | |
|         this.mLastTouchY = lastTouchY;
 | |
|     }
 | |
| 
 | |
|     public void setMaxAcceleration(float acceleration) {
 | |
|         this.mMaxAcceleration = acceleration;
 | |
|     }
 | |
| 
 | |
|     public void setMaxVelocity(float velocity) {
 | |
|         this.mMaxVelocity = velocity;
 | |
|     }
 | |
| 
 | |
|     public void setTouchAnchorLocation(float x, float y) {
 | |
|         this.mTouchAnchorX = x;
 | |
|         this.mTouchAnchorY = y;
 | |
|     }
 | |
| 
 | |
|     public void setTouchUpMode(int touchUpMode) {
 | |
|         this.mOnTouchUp = touchUpMode;
 | |
|     }
 | |
| 
 | |
|     void setUpTouchEvent(float lastTouchX, float lastTouchY) {
 | |
|         this.mLastTouchX = lastTouchX;
 | |
|         this.mLastTouchY = lastTouchY;
 | |
|         this.mDragStarted = false;
 | |
|     }
 | |
| 
 | |
|     TouchResponse(Context context, MotionLayout layout, XmlPullParser parser) {
 | |
|         this.mTouchAnchorSide = 0;
 | |
|         this.mTouchSide = 0;
 | |
|         this.mOnTouchUp = 0;
 | |
|         this.mTouchAnchorId = -1;
 | |
|         this.mTouchRegionId = -1;
 | |
|         this.mLimitBoundsTo = -1;
 | |
|         this.mTouchAnchorY = 0.5f;
 | |
|         this.mTouchAnchorX = 0.5f;
 | |
|         this.mRotateCenterX = 0.5f;
 | |
|         this.mRotateCenterY = 0.5f;
 | |
|         this.mRotationCenterId = -1;
 | |
|         this.mIsRotateMode = false;
 | |
|         this.mTouchDirectionX = 0.0f;
 | |
|         this.mTouchDirectionY = 1.0f;
 | |
|         this.mDragStarted = false;
 | |
|         this.mAnchorDpDt = new float[2];
 | |
|         this.mTempLoc = new int[2];
 | |
|         this.mMaxVelocity = 4.0f;
 | |
|         this.mMaxAcceleration = 1.2f;
 | |
|         this.mMoveWhenScrollAtTop = true;
 | |
|         this.mDragScale = 1.0f;
 | |
|         this.mFlags = 0;
 | |
|         this.mDragThreshold = 10.0f;
 | |
|         this.mSpringDamping = 10.0f;
 | |
|         this.mSpringMass = 1.0f;
 | |
|         this.mSpringStiffness = Float.NaN;
 | |
|         this.mSpringStopThreshold = Float.NaN;
 | |
|         this.mSpringBoundary = 0;
 | |
|         this.mAutoCompleteMode = 0;
 | |
|         this.mMotionLayout = layout;
 | |
|         fillFromAttributeList(context, Xml.asAttributeSet(parser));
 | |
|     }
 | |
| 
 | |
|     public TouchResponse(MotionLayout layout, OnSwipe onSwipe) {
 | |
|         this.mTouchAnchorSide = 0;
 | |
|         this.mTouchSide = 0;
 | |
|         this.mOnTouchUp = 0;
 | |
|         this.mTouchAnchorId = -1;
 | |
|         this.mTouchRegionId = -1;
 | |
|         this.mLimitBoundsTo = -1;
 | |
|         this.mTouchAnchorY = 0.5f;
 | |
|         this.mTouchAnchorX = 0.5f;
 | |
|         this.mRotateCenterX = 0.5f;
 | |
|         this.mRotateCenterY = 0.5f;
 | |
|         this.mRotationCenterId = -1;
 | |
|         this.mIsRotateMode = false;
 | |
|         this.mTouchDirectionX = 0.0f;
 | |
|         this.mTouchDirectionY = 1.0f;
 | |
|         this.mDragStarted = false;
 | |
|         this.mAnchorDpDt = new float[2];
 | |
|         this.mTempLoc = new int[2];
 | |
|         this.mMaxVelocity = 4.0f;
 | |
|         this.mMaxAcceleration = 1.2f;
 | |
|         this.mMoveWhenScrollAtTop = true;
 | |
|         this.mDragScale = 1.0f;
 | |
|         this.mFlags = 0;
 | |
|         this.mDragThreshold = 10.0f;
 | |
|         this.mSpringDamping = 10.0f;
 | |
|         this.mSpringMass = 1.0f;
 | |
|         this.mSpringStiffness = Float.NaN;
 | |
|         this.mSpringStopThreshold = Float.NaN;
 | |
|         this.mSpringBoundary = 0;
 | |
|         this.mAutoCompleteMode = 0;
 | |
|         this.mMotionLayout = layout;
 | |
|         this.mTouchAnchorId = onSwipe.getTouchAnchorId();
 | |
|         int touchAnchorSide = onSwipe.getTouchAnchorSide();
 | |
|         this.mTouchAnchorSide = touchAnchorSide;
 | |
|         if (touchAnchorSide != -1) {
 | |
|             float[] fArr = TOUCH_SIDES[touchAnchorSide];
 | |
|             this.mTouchAnchorX = fArr[0];
 | |
|             this.mTouchAnchorY = fArr[1];
 | |
|         }
 | |
|         int dragDirection = onSwipe.getDragDirection();
 | |
|         this.mTouchSide = dragDirection;
 | |
|         float[][] fArr2 = TOUCH_DIRECTION;
 | |
|         if (dragDirection < fArr2.length) {
 | |
|             float[] fArr3 = fArr2[dragDirection];
 | |
|             this.mTouchDirectionX = fArr3[0];
 | |
|             this.mTouchDirectionY = fArr3[1];
 | |
|         } else {
 | |
|             this.mTouchDirectionY = Float.NaN;
 | |
|             this.mTouchDirectionX = Float.NaN;
 | |
|             this.mIsRotateMode = true;
 | |
|         }
 | |
|         this.mMaxVelocity = onSwipe.getMaxVelocity();
 | |
|         this.mMaxAcceleration = onSwipe.getMaxAcceleration();
 | |
|         this.mMoveWhenScrollAtTop = onSwipe.getMoveWhenScrollAtTop();
 | |
|         this.mDragScale = onSwipe.getDragScale();
 | |
|         this.mDragThreshold = onSwipe.getDragThreshold();
 | |
|         this.mTouchRegionId = onSwipe.getTouchRegionId();
 | |
|         this.mOnTouchUp = onSwipe.getOnTouchUp();
 | |
|         this.mFlags = onSwipe.getNestedScrollFlags();
 | |
|         this.mLimitBoundsTo = onSwipe.getLimitBoundsTo();
 | |
|         this.mRotationCenterId = onSwipe.getRotationCenterId();
 | |
|         this.mSpringBoundary = onSwipe.getSpringBoundary();
 | |
|         this.mSpringDamping = onSwipe.getSpringDamping();
 | |
|         this.mSpringMass = onSwipe.getSpringMass();
 | |
|         this.mSpringStiffness = onSwipe.getSpringStiffness();
 | |
|         this.mSpringStopThreshold = onSwipe.getSpringStopThreshold();
 | |
|         this.mAutoCompleteMode = onSwipe.getAutoCompleteMode();
 | |
|     }
 | |
| 
 | |
|     public void setRTL(boolean rtl) {
 | |
|         if (rtl) {
 | |
|             float[][] fArr = TOUCH_DIRECTION;
 | |
|             fArr[4] = fArr[3];
 | |
|             fArr[5] = fArr[2];
 | |
|             float[][] fArr2 = TOUCH_SIDES;
 | |
|             fArr2[5] = fArr2[2];
 | |
|             fArr2[6] = fArr2[1];
 | |
|         } else {
 | |
|             float[][] fArr3 = TOUCH_DIRECTION;
 | |
|             fArr3[4] = fArr3[2];
 | |
|             fArr3[5] = fArr3[3];
 | |
|             float[][] fArr4 = TOUCH_SIDES;
 | |
|             fArr4[5] = fArr4[1];
 | |
|             fArr4[6] = fArr4[2];
 | |
|         }
 | |
|         float[] fArr5 = TOUCH_SIDES[this.mTouchAnchorSide];
 | |
|         this.mTouchAnchorX = fArr5[0];
 | |
|         this.mTouchAnchorY = fArr5[1];
 | |
|         int i = this.mTouchSide;
 | |
|         float[][] fArr6 = TOUCH_DIRECTION;
 | |
|         if (i >= fArr6.length) {
 | |
|             return;
 | |
|         }
 | |
|         float[] fArr7 = fArr6[i];
 | |
|         this.mTouchDirectionX = fArr7[0];
 | |
|         this.mTouchDirectionY = fArr7[1];
 | |
|     }
 | |
| 
 | |
|     private void fillFromAttributeList(Context context, AttributeSet attrs) {
 | |
|         TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attrs, R.styleable.OnSwipe);
 | |
|         fill(obtainStyledAttributes);
 | |
|         obtainStyledAttributes.recycle();
 | |
|     }
 | |
| 
 | |
|     private void fill(TypedArray a) {
 | |
|         int indexCount = a.getIndexCount();
 | |
|         for (int i = 0; i < indexCount; i++) {
 | |
|             int index = a.getIndex(i);
 | |
|             if (index == R.styleable.OnSwipe_touchAnchorId) {
 | |
|                 this.mTouchAnchorId = a.getResourceId(index, this.mTouchAnchorId);
 | |
|             } else if (index == R.styleable.OnSwipe_touchAnchorSide) {
 | |
|                 int i2 = a.getInt(index, this.mTouchAnchorSide);
 | |
|                 this.mTouchAnchorSide = i2;
 | |
|                 float[] fArr = TOUCH_SIDES[i2];
 | |
|                 this.mTouchAnchorX = fArr[0];
 | |
|                 this.mTouchAnchorY = fArr[1];
 | |
|             } else if (index == R.styleable.OnSwipe_dragDirection) {
 | |
|                 int i3 = a.getInt(index, this.mTouchSide);
 | |
|                 this.mTouchSide = i3;
 | |
|                 float[][] fArr2 = TOUCH_DIRECTION;
 | |
|                 if (i3 < fArr2.length) {
 | |
|                     float[] fArr3 = fArr2[i3];
 | |
|                     this.mTouchDirectionX = fArr3[0];
 | |
|                     this.mTouchDirectionY = fArr3[1];
 | |
|                 } else {
 | |
|                     this.mTouchDirectionY = Float.NaN;
 | |
|                     this.mTouchDirectionX = Float.NaN;
 | |
|                     this.mIsRotateMode = true;
 | |
|                 }
 | |
|             } else if (index == R.styleable.OnSwipe_maxVelocity) {
 | |
|                 this.mMaxVelocity = a.getFloat(index, this.mMaxVelocity);
 | |
|             } else if (index == R.styleable.OnSwipe_maxAcceleration) {
 | |
|                 this.mMaxAcceleration = a.getFloat(index, this.mMaxAcceleration);
 | |
|             } else if (index == R.styleable.OnSwipe_moveWhenScrollAtTop) {
 | |
|                 this.mMoveWhenScrollAtTop = a.getBoolean(index, this.mMoveWhenScrollAtTop);
 | |
|             } else if (index == R.styleable.OnSwipe_dragScale) {
 | |
|                 this.mDragScale = a.getFloat(index, this.mDragScale);
 | |
|             } else if (index == R.styleable.OnSwipe_dragThreshold) {
 | |
|                 this.mDragThreshold = a.getFloat(index, this.mDragThreshold);
 | |
|             } else if (index == R.styleable.OnSwipe_touchRegionId) {
 | |
|                 this.mTouchRegionId = a.getResourceId(index, this.mTouchRegionId);
 | |
|             } else if (index == R.styleable.OnSwipe_onTouchUp) {
 | |
|                 this.mOnTouchUp = a.getInt(index, this.mOnTouchUp);
 | |
|             } else if (index == R.styleable.OnSwipe_nestedScrollFlags) {
 | |
|                 this.mFlags = a.getInteger(index, 0);
 | |
|             } else if (index == R.styleable.OnSwipe_limitBoundsTo) {
 | |
|                 this.mLimitBoundsTo = a.getResourceId(index, 0);
 | |
|             } else if (index == R.styleable.OnSwipe_rotationCenterId) {
 | |
|                 this.mRotationCenterId = a.getResourceId(index, this.mRotationCenterId);
 | |
|             } else if (index == R.styleable.OnSwipe_springDamping) {
 | |
|                 this.mSpringDamping = a.getFloat(index, this.mSpringDamping);
 | |
|             } else if (index == R.styleable.OnSwipe_springMass) {
 | |
|                 this.mSpringMass = a.getFloat(index, this.mSpringMass);
 | |
|             } else if (index == R.styleable.OnSwipe_springStiffness) {
 | |
|                 this.mSpringStiffness = a.getFloat(index, this.mSpringStiffness);
 | |
|             } else if (index == R.styleable.OnSwipe_springStopThreshold) {
 | |
|                 this.mSpringStopThreshold = a.getFloat(index, this.mSpringStopThreshold);
 | |
|             } else if (index == R.styleable.OnSwipe_springBoundary) {
 | |
|                 this.mSpringBoundary = a.getInt(index, this.mSpringBoundary);
 | |
|             } else if (index == R.styleable.OnSwipe_autoCompleteMode) {
 | |
|                 this.mAutoCompleteMode = a.getInt(index, this.mAutoCompleteMode);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /* JADX WARN: Removed duplicated region for block: B:56:0x0273  */
 | |
|     /* JADX WARN: Removed duplicated region for block: B:59:0x02b5  */
 | |
|     /* JADX WARN: Removed duplicated region for block: B:96:0x02c2  */
 | |
|     /* JADX WARN: Removed duplicated region for block: B:97:0x0297  */
 | |
|     /*
 | |
|         Code decompiled incorrectly, please refer to instructions dump.
 | |
|         To view partially-correct add '--show-bad-code' argument
 | |
|     */
 | |
|     void processTouchRotateEvent(android.view.MotionEvent r24, androidx.constraintlayout.motion.widget.MotionLayout.MotionTracker r25, int r26, androidx.constraintlayout.motion.widget.MotionScene r27) {
 | |
|         /*
 | |
|             Method dump skipped, instructions count: 840
 | |
|             To view this dump add '--comments-level debug' option
 | |
|         */
 | |
|         throw new UnsupportedOperationException("Method not decompiled: androidx.constraintlayout.motion.widget.TouchResponse.processTouchRotateEvent(android.view.MotionEvent, androidx.constraintlayout.motion.widget.MotionLayout$MotionTracker, int, androidx.constraintlayout.motion.widget.MotionScene):void");
 | |
|     }
 | |
| 
 | |
|     void processTouchEvent(MotionEvent event, MotionLayout.MotionTracker velocityTracker, int currentState, MotionScene motionScene) {
 | |
|         int i;
 | |
|         float f;
 | |
|         if (this.mIsRotateMode) {
 | |
|             processTouchRotateEvent(event, velocityTracker, currentState, motionScene);
 | |
|             return;
 | |
|         }
 | |
|         velocityTracker.addMovement(event);
 | |
|         int action = event.getAction();
 | |
|         if (action == 0) {
 | |
|             this.mLastTouchX = event.getRawX();
 | |
|             this.mLastTouchY = event.getRawY();
 | |
|             this.mDragStarted = false;
 | |
|             return;
 | |
|         }
 | |
|         if (action == 1) {
 | |
|             this.mDragStarted = false;
 | |
|             velocityTracker.computeCurrentVelocity(1000);
 | |
|             float xVelocity = velocityTracker.getXVelocity();
 | |
|             float yVelocity = velocityTracker.getYVelocity();
 | |
|             float progress = this.mMotionLayout.getProgress();
 | |
|             int i2 = this.mTouchAnchorId;
 | |
|             if (i2 != -1) {
 | |
|                 this.mMotionLayout.getAnchorDpDt(i2, progress, this.mTouchAnchorX, this.mTouchAnchorY, this.mAnchorDpDt);
 | |
|             } else {
 | |
|                 float min = Math.min(this.mMotionLayout.getWidth(), this.mMotionLayout.getHeight());
 | |
|                 float[] fArr = this.mAnchorDpDt;
 | |
|                 fArr[1] = this.mTouchDirectionY * min;
 | |
|                 fArr[0] = min * this.mTouchDirectionX;
 | |
|             }
 | |
|             float f2 = this.mTouchDirectionX;
 | |
|             float[] fArr2 = this.mAnchorDpDt;
 | |
|             float f3 = f2 != 0.0f ? xVelocity / fArr2[0] : yVelocity / fArr2[1];
 | |
|             float f4 = !Float.isNaN(f3) ? (f3 / 3.0f) + progress : progress;
 | |
|             if (f4 == 0.0f || f4 == 1.0f || (i = this.mOnTouchUp) == 3) {
 | |
|                 if (0.0f >= f4 || 1.0f <= f4) {
 | |
|                     this.mMotionLayout.setState(MotionLayout.TransitionState.FINISHED);
 | |
|                     return;
 | |
|                 }
 | |
|                 return;
 | |
|             }
 | |
|             float f5 = ((double) f4) < 0.5d ? 0.0f : 1.0f;
 | |
|             if (i == 6) {
 | |
|                 if (progress + f3 < 0.0f) {
 | |
|                     f3 = Math.abs(f3);
 | |
|                 }
 | |
|                 f5 = 1.0f;
 | |
|             }
 | |
|             if (this.mOnTouchUp == 7) {
 | |
|                 if (progress + f3 > 1.0f) {
 | |
|                     f3 = -Math.abs(f3);
 | |
|                 }
 | |
|                 f5 = 0.0f;
 | |
|             }
 | |
|             this.mMotionLayout.touchAnimateTo(this.mOnTouchUp, f5, f3);
 | |
|             if (0.0f >= progress || 1.0f <= progress) {
 | |
|                 this.mMotionLayout.setState(MotionLayout.TransitionState.FINISHED);
 | |
|                 return;
 | |
|             }
 | |
|             return;
 | |
|         }
 | |
|         if (action != 2) {
 | |
|             return;
 | |
|         }
 | |
|         float rawY = event.getRawY() - this.mLastTouchY;
 | |
|         float rawX = event.getRawX() - this.mLastTouchX;
 | |
|         if (Math.abs((this.mTouchDirectionX * rawX) + (this.mTouchDirectionY * rawY)) > this.mDragThreshold || this.mDragStarted) {
 | |
|             float progress2 = this.mMotionLayout.getProgress();
 | |
|             if (!this.mDragStarted) {
 | |
|                 this.mDragStarted = true;
 | |
|                 this.mMotionLayout.setProgress(progress2);
 | |
|             }
 | |
|             int i3 = this.mTouchAnchorId;
 | |
|             if (i3 != -1) {
 | |
|                 this.mMotionLayout.getAnchorDpDt(i3, progress2, this.mTouchAnchorX, this.mTouchAnchorY, this.mAnchorDpDt);
 | |
|             } else {
 | |
|                 float min2 = Math.min(this.mMotionLayout.getWidth(), this.mMotionLayout.getHeight());
 | |
|                 float[] fArr3 = this.mAnchorDpDt;
 | |
|                 fArr3[1] = this.mTouchDirectionY * min2;
 | |
|                 fArr3[0] = min2 * this.mTouchDirectionX;
 | |
|             }
 | |
|             float f6 = this.mTouchDirectionX;
 | |
|             float[] fArr4 = this.mAnchorDpDt;
 | |
|             if (Math.abs(((f6 * fArr4[0]) + (this.mTouchDirectionY * fArr4[1])) * this.mDragScale) < 0.01d) {
 | |
|                 float[] fArr5 = this.mAnchorDpDt;
 | |
|                 fArr5[0] = 0.01f;
 | |
|                 fArr5[1] = 0.01f;
 | |
|             }
 | |
|             if (this.mTouchDirectionX != 0.0f) {
 | |
|                 f = rawX / this.mAnchorDpDt[0];
 | |
|             } else {
 | |
|                 f = rawY / this.mAnchorDpDt[1];
 | |
|             }
 | |
|             float max = Math.max(Math.min(progress2 + f, 1.0f), 0.0f);
 | |
|             if (this.mOnTouchUp == 6) {
 | |
|                 max = Math.max(max, 0.01f);
 | |
|             }
 | |
|             if (this.mOnTouchUp == 7) {
 | |
|                 max = Math.min(max, 0.99f);
 | |
|             }
 | |
|             float progress3 = this.mMotionLayout.getProgress();
 | |
|             if (max != progress3) {
 | |
|                 if (progress3 == 0.0f || progress3 == 1.0f) {
 | |
|                     this.mMotionLayout.endTrigger(progress3 == 0.0f);
 | |
|                 }
 | |
|                 this.mMotionLayout.setProgress(max);
 | |
|                 velocityTracker.computeCurrentVelocity(1000);
 | |
|                 this.mMotionLayout.mLastVelocity = this.mTouchDirectionX != 0.0f ? velocityTracker.getXVelocity() / this.mAnchorDpDt[0] : velocityTracker.getYVelocity() / this.mAnchorDpDt[1];
 | |
|             } else {
 | |
|                 this.mMotionLayout.mLastVelocity = 0.0f;
 | |
|             }
 | |
|             this.mLastTouchX = event.getRawX();
 | |
|             this.mLastTouchY = event.getRawY();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     float getProgressDirection(float dx, float dy) {
 | |
|         this.mMotionLayout.getAnchorDpDt(this.mTouchAnchorId, this.mMotionLayout.getProgress(), this.mTouchAnchorX, this.mTouchAnchorY, this.mAnchorDpDt);
 | |
|         float f = this.mTouchDirectionX;
 | |
|         if (f != 0.0f) {
 | |
|             float[] fArr = this.mAnchorDpDt;
 | |
|             if (fArr[0] == 0.0f) {
 | |
|                 fArr[0] = 1.0E-7f;
 | |
|             }
 | |
|             return (dx * f) / fArr[0];
 | |
|         }
 | |
|         float[] fArr2 = this.mAnchorDpDt;
 | |
|         if (fArr2[1] == 0.0f) {
 | |
|             fArr2[1] = 1.0E-7f;
 | |
|         }
 | |
|         return (dy * this.mTouchDirectionY) / fArr2[1];
 | |
|     }
 | |
| 
 | |
|     void scrollUp(float dx, float dy) {
 | |
|         this.mDragStarted = false;
 | |
|         float progress = this.mMotionLayout.getProgress();
 | |
|         this.mMotionLayout.getAnchorDpDt(this.mTouchAnchorId, progress, this.mTouchAnchorX, this.mTouchAnchorY, this.mAnchorDpDt);
 | |
|         float f = this.mTouchDirectionX;
 | |
|         float[] fArr = this.mAnchorDpDt;
 | |
|         float f2 = f != 0.0f ? (dx * f) / fArr[0] : (dy * this.mTouchDirectionY) / fArr[1];
 | |
|         if (!Float.isNaN(f2)) {
 | |
|             progress += f2 / 3.0f;
 | |
|         }
 | |
|         if (progress != 0.0f) {
 | |
|             boolean z = progress != 1.0f;
 | |
|             int i = this.mOnTouchUp;
 | |
|             if ((i != 3) && z) {
 | |
|                 this.mMotionLayout.touchAnimateTo(i, ((double) progress) >= 0.5d ? 1.0f : 0.0f, f2);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     void scrollMove(float dx, float dy) {
 | |
|         float f;
 | |
|         float progress = this.mMotionLayout.getProgress();
 | |
|         if (!this.mDragStarted) {
 | |
|             this.mDragStarted = true;
 | |
|             this.mMotionLayout.setProgress(progress);
 | |
|         }
 | |
|         this.mMotionLayout.getAnchorDpDt(this.mTouchAnchorId, progress, this.mTouchAnchorX, this.mTouchAnchorY, this.mAnchorDpDt);
 | |
|         float f2 = this.mTouchDirectionX;
 | |
|         float[] fArr = this.mAnchorDpDt;
 | |
|         if (Math.abs((f2 * fArr[0]) + (this.mTouchDirectionY * fArr[1])) < 0.01d) {
 | |
|             float[] fArr2 = this.mAnchorDpDt;
 | |
|             fArr2[0] = 0.01f;
 | |
|             fArr2[1] = 0.01f;
 | |
|         }
 | |
|         float f3 = this.mTouchDirectionX;
 | |
|         if (f3 != 0.0f) {
 | |
|             f = (dx * f3) / this.mAnchorDpDt[0];
 | |
|         } else {
 | |
|             f = (dy * this.mTouchDirectionY) / this.mAnchorDpDt[1];
 | |
|         }
 | |
|         float max = Math.max(Math.min(progress + f, 1.0f), 0.0f);
 | |
|         if (max != this.mMotionLayout.getProgress()) {
 | |
|             this.mMotionLayout.setProgress(max);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     void setupTouch() {
 | |
|         View view;
 | |
|         int i = this.mTouchAnchorId;
 | |
|         if (i != -1) {
 | |
|             view = this.mMotionLayout.findViewById(i);
 | |
|             if (view == null) {
 | |
|                 Log.e(TAG, "cannot find TouchAnchorId @id/" + Debug.getName(this.mMotionLayout.getContext(), this.mTouchAnchorId));
 | |
|             }
 | |
|         } else {
 | |
|             view = null;
 | |
|         }
 | |
|         if (view instanceof NestedScrollView) {
 | |
|             NestedScrollView nestedScrollView = (NestedScrollView) view;
 | |
|             nestedScrollView.setOnTouchListener(new View.OnTouchListener(this) { // from class: androidx.constraintlayout.motion.widget.TouchResponse.1
 | |
|                 @Override // android.view.View.OnTouchListener
 | |
|                 public boolean onTouch(View view2, MotionEvent motionEvent) {
 | |
|                     return false;
 | |
|                 }
 | |
|             });
 | |
|             nestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener(this) { // from class: androidx.constraintlayout.motion.widget.TouchResponse.2
 | |
|                 @Override // androidx.core.widget.NestedScrollView.OnScrollChangeListener
 | |
|                 public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
 | |
|                 }
 | |
|             });
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     RectF getTouchRegion(ViewGroup layout, RectF rect) {
 | |
|         View findViewById;
 | |
|         int i = this.mTouchRegionId;
 | |
|         if (i == -1 || (findViewById = layout.findViewById(i)) == null) {
 | |
|             return null;
 | |
|         }
 | |
|         rect.set(findViewById.getLeft(), findViewById.getTop(), findViewById.getRight(), findViewById.getBottom());
 | |
|         return rect;
 | |
|     }
 | |
| 
 | |
|     RectF getLimitBoundsTo(ViewGroup layout, RectF rect) {
 | |
|         View findViewById;
 | |
|         int i = this.mLimitBoundsTo;
 | |
|         if (i == -1 || (findViewById = layout.findViewById(i)) == null) {
 | |
|             return null;
 | |
|         }
 | |
|         rect.set(findViewById.getLeft(), findViewById.getTop(), findViewById.getRight(), findViewById.getBottom());
 | |
|         return rect;
 | |
|     }
 | |
| 
 | |
|     public String toString() {
 | |
|         if (Float.isNaN(this.mTouchDirectionX)) {
 | |
|             return Key.ROTATION;
 | |
|         }
 | |
|         return this.mTouchDirectionX + " , " + this.mTouchDirectionY;
 | |
|     }
 | |
| }
 |