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 c.d.b.a.a; import org.xmlpull.v1.XmlPullParser; public class TouchResponse { private static final boolean DEBUG = false; public static final int FLAG_DISABLE_POST_SCROLL = 1; public static final int FLAG_DISABLE_SCROLL = 2; 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 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}}; 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 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 int TOUCH_START = 4; private static final int TOUCH_UP = 0; private float[] mAnchorDpDt = new float[2]; private float mDragScale = 1.0f; private boolean mDragStarted = false; private float mDragThreshold = 10.0f; private int mFlags = 0; private float mLastTouchX; private float mLastTouchY; private int mLimitBoundsTo = -1; private float mMaxAcceleration = 1.2f; private float mMaxVelocity = 4.0f; private final MotionLayout mMotionLayout; private boolean mMoveWhenScrollAtTop = true; private int mOnTouchUp = 0; private int mTouchAnchorId = -1; private int mTouchAnchorSide = 0; private float mTouchAnchorX = 0.5f; private float mTouchAnchorY = 0.5f; private float mTouchDirectionX = 0.0f; private float mTouchDirectionY = 1.0f; private int mTouchRegionId = -1; private int mTouchSide = 0; /* renamed from: androidx.constraintlayout.motion.widget.TouchResponse$1 reason: invalid class name */ public class AnonymousClass1 implements View.OnTouchListener { public AnonymousClass1() { } @Override // android.view.View.OnTouchListener public boolean onTouch(View view, MotionEvent motionEvent) { return false; } } /* renamed from: androidx.constraintlayout.motion.widget.TouchResponse$2 reason: invalid class name */ public class AnonymousClass2 implements NestedScrollView.OnScrollChangeListener { public AnonymousClass2() { } @Override // androidx.core.widget.NestedScrollView.OnScrollChangeListener public void onScrollChange(NestedScrollView nestedScrollView, int i, int i2, int i3, int i4) { } } public TouchResponse(Context context, MotionLayout motionLayout, XmlPullParser xmlPullParser) { this.mMotionLayout = motionLayout; fillFromAttributeList(context, Xml.asAttributeSet(xmlPullParser)); } private void fill(TypedArray typedArray) { int indexCount = typedArray.getIndexCount(); for (int i = 0; i < indexCount; i++) { int index = typedArray.getIndex(i); if (index == R.styleable.OnSwipe_touchAnchorId) { this.mTouchAnchorId = typedArray.getResourceId(index, this.mTouchAnchorId); } else if (index == R.styleable.OnSwipe_touchAnchorSide) { int i2 = typedArray.getInt(index, this.mTouchAnchorSide); this.mTouchAnchorSide = i2; float[][] fArr = TOUCH_SIDES; this.mTouchAnchorX = fArr[i2][0]; this.mTouchAnchorY = fArr[i2][1]; } else if (index == R.styleable.OnSwipe_dragDirection) { int i3 = typedArray.getInt(index, this.mTouchSide); this.mTouchSide = i3; float[][] fArr2 = TOUCH_DIRECTION; this.mTouchDirectionX = fArr2[i3][0]; this.mTouchDirectionY = fArr2[i3][1]; } else if (index == R.styleable.OnSwipe_maxVelocity) { this.mMaxVelocity = typedArray.getFloat(index, this.mMaxVelocity); } else if (index == R.styleable.OnSwipe_maxAcceleration) { this.mMaxAcceleration = typedArray.getFloat(index, this.mMaxAcceleration); } else if (index == R.styleable.OnSwipe_moveWhenScrollAtTop) { this.mMoveWhenScrollAtTop = typedArray.getBoolean(index, this.mMoveWhenScrollAtTop); } else if (index == R.styleable.OnSwipe_dragScale) { this.mDragScale = typedArray.getFloat(index, this.mDragScale); } else if (index == R.styleable.OnSwipe_dragThreshold) { this.mDragThreshold = typedArray.getFloat(index, this.mDragThreshold); } else if (index == R.styleable.OnSwipe_touchRegionId) { this.mTouchRegionId = typedArray.getResourceId(index, this.mTouchRegionId); } else if (index == R.styleable.OnSwipe_onTouchUp) { this.mOnTouchUp = typedArray.getInt(index, this.mOnTouchUp); } else if (index == R.styleable.OnSwipe_nestedScrollFlags) { this.mFlags = typedArray.getInteger(index, 0); } else if (index == R.styleable.OnSwipe_limitBoundsTo) { this.mLimitBoundsTo = typedArray.getResourceId(index, 0); } } } private void fillFromAttributeList(Context context, AttributeSet attributeSet) { TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, R.styleable.OnSwipe); fill(obtainStyledAttributes); obtainStyledAttributes.recycle(); } public float dot(float f, float f2) { return (f2 * this.mTouchDirectionY) + (f * this.mTouchDirectionX); } public int getAnchorId() { return this.mTouchAnchorId; } public int getFlags() { return this.mFlags; } public RectF getLimitBoundsTo(ViewGroup viewGroup, RectF rectF) { View findViewById; int i = this.mLimitBoundsTo; if (i == -1 || (findViewById = viewGroup.findViewById(i)) == null) { return null; } rectF.set((float) findViewById.getLeft(), (float) findViewById.getTop(), (float) findViewById.getRight(), (float) findViewById.getBottom()); return rectF; } public int getLimitBoundsToId() { return this.mLimitBoundsTo; } public float getMaxAcceleration() { return this.mMaxAcceleration; } public float getMaxVelocity() { return this.mMaxVelocity; } public boolean getMoveWhenScrollAtTop() { return this.mMoveWhenScrollAtTop; } public float getProgressDirection(float f, float f2) { this.mMotionLayout.getAnchorDpDt(this.mTouchAnchorId, this.mMotionLayout.getProgress(), this.mTouchAnchorX, this.mTouchAnchorY, this.mAnchorDpDt); float f3 = this.mTouchDirectionX; if (f3 != 0.0f) { float[] fArr = this.mAnchorDpDt; if (fArr[0] == 0.0f) { fArr[0] = 1.0E-7f; } return (f * f3) / fArr[0]; } float[] fArr2 = this.mAnchorDpDt; if (fArr2[1] == 0.0f) { fArr2[1] = 1.0E-7f; } return (f2 * this.mTouchDirectionY) / fArr2[1]; } public RectF getTouchRegion(ViewGroup viewGroup, RectF rectF) { View findViewById; int i = this.mTouchRegionId; if (i == -1 || (findViewById = viewGroup.findViewById(i)) == null) { return null; } rectF.set((float) findViewById.getLeft(), (float) findViewById.getTop(), (float) findViewById.getRight(), (float) findViewById.getBottom()); return rectF; } public int getTouchRegionId() { return this.mTouchRegionId; } public void processTouchEvent(MotionEvent motionEvent, MotionLayout.MotionTracker motionTracker, int i, MotionScene motionScene) { int i2; motionTracker.addMovement(motionEvent); int action = motionEvent.getAction(); if (action == 0) { this.mLastTouchX = motionEvent.getRawX(); this.mLastTouchY = motionEvent.getRawY(); this.mDragStarted = false; } else if (action == 1) { this.mDragStarted = false; motionTracker.computeCurrentVelocity(1000); float xVelocity = motionTracker.getXVelocity(); float yVelocity = motionTracker.getYVelocity(); float progress = this.mMotionLayout.getProgress(); int i3 = this.mTouchAnchorId; if (i3 != -1) { this.mMotionLayout.getAnchorDpDt(i3, progress, this.mTouchAnchorX, this.mTouchAnchorY, this.mAnchorDpDt); } else { float min = (float) Math.min(this.mMotionLayout.getWidth(), this.mMotionLayout.getHeight()); float[] fArr = this.mAnchorDpDt; fArr[1] = this.mTouchDirectionY * min; fArr[0] = min * this.mTouchDirectionX; } float f = this.mTouchDirectionX; float[] fArr2 = this.mAnchorDpDt; float f2 = fArr2[0]; float f3 = fArr2[1]; float f4 = f != 0.0f ? xVelocity / fArr2[0] : yVelocity / fArr2[1]; float f5 = !Float.isNaN(f4) ? (f4 / 3.0f) + progress : progress; if (f5 != 0.0f && f5 != 1.0f && (i2 = this.mOnTouchUp) != 3) { this.mMotionLayout.touchAnimateTo(i2, ((double) f5) < 0.5d ? 0.0f : 1.0f, f4); if (0.0f >= progress || 1.0f <= progress) { this.mMotionLayout.setState(MotionLayout.TransitionState.FINISHED); } } else if (0.0f >= f5 || 1.0f <= f5) { this.mMotionLayout.setState(MotionLayout.TransitionState.FINISHED); } } else if (action == 2) { float rawY = motionEvent.getRawY() - this.mLastTouchY; float rawX = motionEvent.getRawX() - this.mLastTouchX; if (Math.abs((this.mTouchDirectionY * rawY) + (this.mTouchDirectionX * rawX)) > this.mDragThreshold || this.mDragStarted) { float progress2 = this.mMotionLayout.getProgress(); if (!this.mDragStarted) { this.mDragStarted = true; this.mMotionLayout.setProgress(progress2); } int i4 = this.mTouchAnchorId; if (i4 != -1) { this.mMotionLayout.getAnchorDpDt(i4, progress2, this.mTouchAnchorX, this.mTouchAnchorY, this.mAnchorDpDt); } else { float min2 = (float) 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 (((double) Math.abs(((this.mTouchDirectionY * fArr4[1]) + (f6 * fArr4[0])) * this.mDragScale)) < 0.01d) { float[] fArr5 = this.mAnchorDpDt; fArr5[0] = 0.01f; fArr5[1] = 0.01f; } float max = Math.max(Math.min(progress2 + (this.mTouchDirectionX != 0.0f ? rawX / this.mAnchorDpDt[0] : rawY / this.mAnchorDpDt[1]), 1.0f), 0.0f); if (max != this.mMotionLayout.getProgress()) { this.mMotionLayout.setProgress(max); motionTracker.computeCurrentVelocity(1000); this.mMotionLayout.mLastVelocity = this.mTouchDirectionX != 0.0f ? motionTracker.getXVelocity() / this.mAnchorDpDt[0] : motionTracker.getYVelocity() / this.mAnchorDpDt[1]; } else { this.mMotionLayout.mLastVelocity = 0.0f; } this.mLastTouchX = motionEvent.getRawX(); this.mLastTouchY = motionEvent.getRawY(); } } } public void scrollMove(float f, float f2) { 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 f3 = this.mTouchDirectionX; float[] fArr = this.mAnchorDpDt; if (((double) Math.abs((this.mTouchDirectionY * fArr[1]) + (f3 * fArr[0]))) < 0.01d) { float[] fArr2 = this.mAnchorDpDt; fArr2[0] = 0.01f; fArr2[1] = 0.01f; } float f4 = this.mTouchDirectionX; float max = Math.max(Math.min(progress + (f4 != 0.0f ? (f * f4) / this.mAnchorDpDt[0] : (f2 * this.mTouchDirectionY) / this.mAnchorDpDt[1]), 1.0f), 0.0f); if (max != this.mMotionLayout.getProgress()) { this.mMotionLayout.setProgress(max); } } public void scrollUp(float f, float f2) { boolean z2 = false; this.mDragStarted = false; float progress = this.mMotionLayout.getProgress(); this.mMotionLayout.getAnchorDpDt(this.mTouchAnchorId, progress, this.mTouchAnchorX, this.mTouchAnchorY, this.mAnchorDpDt); float f3 = this.mTouchDirectionX; float[] fArr = this.mAnchorDpDt; float f4 = fArr[0]; float f5 = this.mTouchDirectionY; float f6 = fArr[1]; float f7 = 0.0f; float f8 = f3 != 0.0f ? (f * f3) / fArr[0] : (f2 * f5) / fArr[1]; if (!Float.isNaN(f8)) { progress += f8 / 3.0f; } if (progress != 0.0f) { boolean z3 = progress != 1.0f; int i = this.mOnTouchUp; if (i != 3) { z2 = true; } if (z2 && z3) { MotionLayout motionLayout = this.mMotionLayout; if (((double) progress) >= 0.5d) { f7 = 1.0f; } motionLayout.touchAnimateTo(i, f7, f8); } } } public void setAnchorId(int i) { this.mTouchAnchorId = i; } public void setDown(float f, float f2) { this.mLastTouchX = f; this.mLastTouchY = f2; } public void setMaxAcceleration(float f) { this.mMaxAcceleration = f; } public void setMaxVelocity(float f) { this.mMaxVelocity = f; } public void setRTL(boolean z2) { if (z2) { 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; int i = this.mTouchAnchorSide; this.mTouchAnchorX = fArr5[i][0]; this.mTouchAnchorY = fArr5[i][1]; float[][] fArr6 = TOUCH_DIRECTION; int i2 = this.mTouchSide; this.mTouchDirectionX = fArr6[i2][0]; this.mTouchDirectionY = fArr6[i2][1]; } public void setTouchAnchorLocation(float f, float f2) { this.mTouchAnchorX = f; this.mTouchAnchorY = f2; } public void setUpTouchEvent(float f, float f2) { this.mLastTouchX = f; this.mLastTouchY = f2; this.mDragStarted = false; } public void setupTouch() { View view; int i = this.mTouchAnchorId; if (i != -1) { view = this.mMotionLayout.findViewById(i); if (view == null) { StringBuilder L = a.L("cannot find TouchAnchorId @id/"); L.append(Debug.getName(this.mMotionLayout.getContext(), this.mTouchAnchorId)); Log.e(TAG, L.toString()); } } else { view = null; } if (view instanceof NestedScrollView) { NestedScrollView nestedScrollView = (NestedScrollView) view; nestedScrollView.setOnTouchListener(new AnonymousClass1()); nestedScrollView.setOnScrollChangeListener(new AnonymousClass2()); } } public String toString() { return this.mTouchDirectionX + " , " + this.mTouchDirectionY; } }