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; } }