mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2024-12-30 11:02:31 -06:00
412 lines
17 KiB
Java
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;
|
|
}
|
|
}
|