Rabbit-R1/original r1/java/sources/androidx/constraintlayout/motion/widget/TouchResponse.java
2024-05-21 17:08:36 -04:00

412 lines
17 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;
/* JADX INFO: Access modifiers changed from: package-private */
/* loaded from: classes.dex */
public class TouchResponse {
private static final boolean DEBUG = false;
static final int FLAG_DISABLE_POST_SCROLL = 1;
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 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 mLastTouchX;
private float mLastTouchY;
private final MotionLayout mMotionLayout;
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}};
private int mTouchAnchorSide = 0;
private int mTouchSide = 0;
private int mOnTouchUp = 0;
private int mTouchAnchorId = -1;
private int mTouchRegionId = -1;
private int mLimitBoundsTo = -1;
private float mTouchAnchorY = 0.5f;
private float mTouchAnchorX = 0.5f;
private float mTouchDirectionX = 0.0f;
private float mTouchDirectionY = 1.0f;
private boolean mDragStarted = false;
private float[] mAnchorDpDt = new float[2];
private float mMaxVelocity = 4.0f;
private float mMaxAcceleration = 1.2f;
private boolean mMoveWhenScrollAtTop = true;
private float mDragScale = 1.0f;
private int mFlags = 0;
private float mDragThreshold = 10.0f;
/* JADX INFO: Access modifiers changed from: package-private */
public float dot(float f, float f2) {
return (f * this.mTouchDirectionX) + (f2 * this.mTouchDirectionY);
}
public int getAnchorId() {
return this.mTouchAnchorId;
}
public int getFlags() {
return this.mFlags;
}
int getLimitBoundsToId() {
return this.mLimitBoundsTo;
}
/* JADX INFO: Access modifiers changed from: package-private */
public float getMaxAcceleration() {
return this.mMaxAcceleration;
}
public float getMaxVelocity() {
return this.mMaxVelocity;
}
/* JADX INFO: Access modifiers changed from: package-private */
public boolean getMoveWhenScrollAtTop() {
return this.mMoveWhenScrollAtTop;
}
/* JADX INFO: Access modifiers changed from: package-private */
public int getTouchRegionId() {
return this.mTouchRegionId;
}
public void setAnchorId(int i) {
this.mTouchAnchorId = i;
}
/* JADX INFO: Access modifiers changed from: package-private */
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 setTouchAnchorLocation(float f, float f2) {
this.mTouchAnchorX = f;
this.mTouchAnchorY = f2;
}
/* JADX INFO: Access modifiers changed from: package-private */
public void setUpTouchEvent(float f, float f2) {
this.mLastTouchX = f;
this.mLastTouchY = f2;
this.mDragStarted = false;
}
/* JADX INFO: Access modifiers changed from: package-private */
public TouchResponse(Context context, MotionLayout motionLayout, XmlPullParser xmlPullParser) {
this.mMotionLayout = motionLayout;
fillFromAttributeList(context, Xml.asAttributeSet(xmlPullParser));
}
public void setRTL(boolean z) {
if (z) {
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];
float[] fArr6 = TOUCH_DIRECTION[this.mTouchSide];
this.mTouchDirectionX = fArr6[0];
this.mTouchDirectionY = fArr6[1];
}
private void fillFromAttributeList(Context context, AttributeSet attributeSet) {
TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, R.styleable.OnSwipe);
fill(obtainStyledAttributes);
obtainStyledAttributes.recycle();
}
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[i2];
this.mTouchAnchorX = fArr[0];
this.mTouchAnchorY = fArr[1];
} else if (index == R.styleable.OnSwipe_dragDirection) {
int i3 = typedArray.getInt(index, this.mTouchSide);
this.mTouchSide = i3;
float[] fArr2 = TOUCH_DIRECTION[i3];
this.mTouchDirectionX = fArr2[0];
this.mTouchDirectionY = fArr2[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);
}
}
}
/* JADX INFO: Access modifiers changed from: package-private */
public void processTouchEvent(MotionEvent motionEvent, MotionLayout.MotionTracker motionTracker, int i, MotionScene motionScene) {
int i2;
float f;
motionTracker.addMovement(motionEvent);
int action = motionEvent.getAction();
if (action == 0) {
this.mLastTouchX = motionEvent.getRawX();
this.mLastTouchY = motionEvent.getRawY();
this.mDragStarted = false;
return;
}
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 = 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 || (i2 = this.mOnTouchUp) == 3) {
if (0.0f >= f4 || 1.0f <= f4) {
this.mMotionLayout.setState(MotionLayout.TransitionState.FINISHED);
return;
}
return;
}
this.mMotionLayout.touchAnimateTo(i2, ((double) f4) < 0.5d ? 0.0f : 1.0f, f3);
if (0.0f >= progress || 1.0f <= progress) {
this.mMotionLayout.setState(MotionLayout.TransitionState.FINISHED);
return;
}
return;
}
if (action != 2) {
return;
}
float rawY = motionEvent.getRawY() - this.mLastTouchY;
float rawX = motionEvent.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 i4 = this.mTouchAnchorId;
if (i4 != -1) {
this.mMotionLayout.getAnchorDpDt(i4, 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 f5 = this.mTouchDirectionX;
float[] fArr4 = this.mAnchorDpDt;
if (Math.abs(((f5 * 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 (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();
}
}
/* JADX INFO: Access modifiers changed from: package-private */
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];
}
/* JADX INFO: Access modifiers changed from: package-private */
public void scrollUp(float f, float f2) {
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 = f3 != 0.0f ? (f * f3) / fArr[0] : (f2 * this.mTouchDirectionY) / fArr[1];
if (!Float.isNaN(f4)) {
progress += f4 / 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, f4);
}
}
}
/* JADX INFO: Access modifiers changed from: package-private */
public void scrollMove(float f, float f2) {
float f3;
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 f4 = this.mTouchDirectionX;
float[] fArr = this.mAnchorDpDt;
if (Math.abs((f4 * fArr[0]) + (this.mTouchDirectionY * fArr[1])) < 0.01d) {
float[] fArr2 = this.mAnchorDpDt;
fArr2[0] = 0.01f;
fArr2[1] = 0.01f;
}
float f5 = this.mTouchDirectionX;
if (f5 != 0.0f) {
f3 = (f * f5) / this.mAnchorDpDt[0];
} else {
f3 = (f2 * this.mTouchDirectionY) / this.mAnchorDpDt[1];
}
float max = Math.max(Math.min(progress + f3, 1.0f), 0.0f);
if (max != this.mMotionLayout.getProgress()) {
this.mMotionLayout.setProgress(max);
}
}
/* JADX INFO: Access modifiers changed from: package-private */
public 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() { // 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() { // from class: androidx.constraintlayout.motion.widget.TouchResponse.2
@Override // androidx.core.widget.NestedScrollView.OnScrollChangeListener
public void onScrollChange(NestedScrollView nestedScrollView2, int i2, int i3, int i4, int i5) {
}
});
}
}
/* JADX INFO: Access modifiers changed from: package-private */
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(findViewById.getLeft(), findViewById.getTop(), findViewById.getRight(), findViewById.getBottom());
return rectF;
}
/* JADX INFO: Access modifiers changed from: package-private */
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(findViewById.getLeft(), findViewById.getTop(), findViewById.getRight(), findViewById.getBottom());
return rectF;
}
public String toString() {
return this.mTouchDirectionX + " , " + this.mTouchDirectionY;
}
}