package androidx.core.widget; import android.content.res.Resources; import android.os.SystemClock; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; import android.view.animation.AccelerateInterpolator; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; import androidx.annotation.NonNull; import androidx.core.view.ViewCompat; /* loaded from: classes.dex */ public abstract class AutoScrollHelper implements View.OnTouchListener { private static final int DEFAULT_ACTIVATION_DELAY = ViewConfiguration.getTapTimeout(); private static final int DEFAULT_EDGE_TYPE = 1; private static final float DEFAULT_MAXIMUM_EDGE = Float.MAX_VALUE; private static final int DEFAULT_MAXIMUM_VELOCITY_DIPS = 1575; private static final int DEFAULT_MINIMUM_VELOCITY_DIPS = 315; private static final int DEFAULT_RAMP_DOWN_DURATION = 500; private static final int DEFAULT_RAMP_UP_DURATION = 500; private static final float DEFAULT_RELATIVE_EDGE = 0.2f; private static final float DEFAULT_RELATIVE_VELOCITY = 1.0f; public static final int EDGE_TYPE_INSIDE = 0; public static final int EDGE_TYPE_INSIDE_EXTEND = 1; public static final int EDGE_TYPE_OUTSIDE = 2; private static final int HORIZONTAL = 0; public static final float NO_MAX = Float.MAX_VALUE; public static final float NO_MIN = 0.0f; public static final float RELATIVE_UNSPECIFIED = 0.0f; private static final int VERTICAL = 1; private int mActivationDelay; private boolean mAlreadyDelayed; boolean mAnimating; private int mEdgeType; private boolean mEnabled; private boolean mExclusive; boolean mNeedsCancel; boolean mNeedsReset; private Runnable mRunnable; final View mTarget; final ClampedScroller mScroller = new ClampedScroller(); private final Interpolator mEdgeInterpolator = new AccelerateInterpolator(); private float[] mRelativeEdges = {0.0f, 0.0f}; private float[] mMaximumEdges = {Float.MAX_VALUE, Float.MAX_VALUE}; private float[] mRelativeVelocity = {0.0f, 0.0f}; private float[] mMinimumVelocity = {0.0f, 0.0f}; private float[] mMaximumVelocity = {Float.MAX_VALUE, Float.MAX_VALUE}; public static float constrain(float f, float f2, float f3) { return f > f3 ? f3 : f < f2 ? f2 : f; } public static int constrain(int i, int i2, int i3) { return i > i3 ? i3 : i < i2 ? i2 : i; } private float constrainEdgeValue(float f, float f2) { if (f2 == 0.0f) { return 0.0f; } int i = this.mEdgeType; if (i == 0 || i == 1) { if (f < f2) { if (f >= 0.0f) { return DEFAULT_RELATIVE_VELOCITY - (f / f2); } if (this.mAnimating && i == 1) { return DEFAULT_RELATIVE_VELOCITY; } } } else if (i == 2 && f < 0.0f) { return f / (-f2); } return 0.0f; } public abstract boolean canTargetScrollHorizontally(int i); public abstract boolean canTargetScrollVertically(int i); public boolean isEnabled() { return this.mEnabled; } public boolean isExclusive() { return this.mExclusive; } public abstract void scrollTargetBy(int i, int i2); @NonNull public AutoScrollHelper setActivationDelay(int i) { this.mActivationDelay = i; return this; } @NonNull public AutoScrollHelper setEdgeType(int i) { this.mEdgeType = i; return this; } public AutoScrollHelper setExclusive(boolean z) { this.mExclusive = z; return this; } public AutoScrollHelper(@NonNull View view) { this.mTarget = view; float f = Resources.getSystem().getDisplayMetrics().density; float f2 = (int) ((1575.0f * f) + 0.5f); setMaximumVelocity(f2, f2); float f3 = (int) ((f * 315.0f) + 0.5f); setMinimumVelocity(f3, f3); setEdgeType(1); setMaximumEdges(Float.MAX_VALUE, Float.MAX_VALUE); setRelativeEdges(DEFAULT_RELATIVE_EDGE, DEFAULT_RELATIVE_EDGE); setRelativeVelocity(DEFAULT_RELATIVE_VELOCITY, DEFAULT_RELATIVE_VELOCITY); setActivationDelay(DEFAULT_ACTIVATION_DELAY); setRampUpDuration(500); setRampDownDuration(500); } public AutoScrollHelper setEnabled(boolean z) { if (this.mEnabled && !z) { requestStop(); } this.mEnabled = z; return this; } @NonNull public AutoScrollHelper setMaximumVelocity(float f, float f2) { float[] fArr = this.mMaximumVelocity; fArr[0] = f / 1000.0f; fArr[1] = f2 / 1000.0f; return this; } @NonNull public AutoScrollHelper setMinimumVelocity(float f, float f2) { float[] fArr = this.mMinimumVelocity; fArr[0] = f / 1000.0f; fArr[1] = f2 / 1000.0f; return this; } @NonNull public AutoScrollHelper setRelativeVelocity(float f, float f2) { float[] fArr = this.mRelativeVelocity; fArr[0] = f / 1000.0f; fArr[1] = f2 / 1000.0f; return this; } @NonNull public AutoScrollHelper setRelativeEdges(float f, float f2) { float[] fArr = this.mRelativeEdges; fArr[0] = f; fArr[1] = f2; return this; } @NonNull public AutoScrollHelper setMaximumEdges(float f, float f2) { float[] fArr = this.mMaximumEdges; fArr[0] = f; fArr[1] = f2; return this; } @NonNull public AutoScrollHelper setRampUpDuration(int i) { this.mScroller.setRampUpDuration(i); return this; } @NonNull public AutoScrollHelper setRampDownDuration(int i) { this.mScroller.setRampDownDuration(i); return this; } /* JADX WARN: Code restructure failed: missing block: B:11:0x0013, code lost: if (r0 != 3) goto L20; */ @Override // android.view.View.OnTouchListener /* Code decompiled incorrectly, please refer to instructions dump. To view partially-correct add '--show-bad-code' argument */ public boolean onTouch(android.view.View r6, android.view.MotionEvent r7) { /* r5 = this; boolean r0 = r5.mEnabled r1 = 0 if (r0 != 0) goto L6 return r1 L6: int r0 = r7.getActionMasked() r2 = 1 if (r0 == 0) goto L1a if (r0 == r2) goto L16 r3 = 2 if (r0 == r3) goto L1e r6 = 3 if (r0 == r6) goto L16 goto L58 L16: r5.requestStop() goto L58 L1a: r5.mNeedsCancel = r2 r5.mAlreadyDelayed = r1 L1e: float r0 = r7.getX() int r3 = r6.getWidth() float r3 = (float) r3 android.view.View r4 = r5.mTarget int r4 = r4.getWidth() float r4 = (float) r4 float r0 = r5.computeTargetVelocity(r1, r0, r3, r4) float r7 = r7.getY() int r6 = r6.getHeight() float r6 = (float) r6 android.view.View r3 = r5.mTarget int r3 = r3.getHeight() float r3 = (float) r3 float r6 = r5.computeTargetVelocity(r2, r7, r6, r3) androidx.core.widget.AutoScrollHelper$ClampedScroller r7 = r5.mScroller r7.setTargetVelocity(r0, r6) boolean r6 = r5.mAnimating if (r6 != 0) goto L58 boolean r6 = r5.shouldAnimate() if (r6 == 0) goto L58 r5.startAnimating() L58: boolean r6 = r5.mExclusive if (r6 == 0) goto L61 boolean r6 = r5.mAnimating if (r6 == 0) goto L61 r1 = r2 L61: return r1 */ throw new UnsupportedOperationException("Method not decompiled: androidx.core.widget.AutoScrollHelper.onTouch(android.view.View, android.view.MotionEvent):boolean"); } public boolean shouldAnimate() { ClampedScroller clampedScroller = this.mScroller; int verticalDirection = clampedScroller.getVerticalDirection(); int horizontalDirection = clampedScroller.getHorizontalDirection(); return (verticalDirection != 0 && canTargetScrollVertically(verticalDirection)) || (horizontalDirection != 0 && canTargetScrollHorizontally(horizontalDirection)); } private void startAnimating() { int i; if (this.mRunnable == null) { this.mRunnable = new ScrollAnimationRunnable(); } this.mAnimating = true; this.mNeedsReset = true; if (!this.mAlreadyDelayed && (i = this.mActivationDelay) > 0) { ViewCompat.postOnAnimationDelayed(this.mTarget, this.mRunnable, i); } else { this.mRunnable.run(); } this.mAlreadyDelayed = true; } private void requestStop() { if (this.mNeedsReset) { this.mAnimating = false; } else { this.mScroller.requestStop(); } } private float computeTargetVelocity(int i, float f, float f2, float f3) { float edgeValue = getEdgeValue(this.mRelativeEdges[i], f2, this.mMaximumEdges[i], f); if (edgeValue == 0.0f) { return 0.0f; } float f4 = this.mRelativeVelocity[i]; float f5 = this.mMinimumVelocity[i]; float f6 = this.mMaximumVelocity[i]; float f7 = f4 * f3; if (edgeValue > 0.0f) { return constrain(edgeValue * f7, f5, f6); } return -constrain((-edgeValue) * f7, f5, f6); } private float getEdgeValue(float f, float f2, float f3, float f4) { float interpolation; float constrain = constrain(f * f2, 0.0f, f3); float constrainEdgeValue = constrainEdgeValue(f2 - f4, constrain) - constrainEdgeValue(f4, constrain); if (constrainEdgeValue < 0.0f) { interpolation = -this.mEdgeInterpolator.getInterpolation(-constrainEdgeValue); } else { if (constrainEdgeValue <= 0.0f) { return 0.0f; } interpolation = this.mEdgeInterpolator.getInterpolation(constrainEdgeValue); } return constrain(interpolation, -1.0f, DEFAULT_RELATIVE_VELOCITY); } public void cancelTargetTouch() { long uptimeMillis = SystemClock.uptimeMillis(); MotionEvent obtain = MotionEvent.obtain(uptimeMillis, uptimeMillis, 3, 0.0f, 0.0f, 0); this.mTarget.onTouchEvent(obtain); obtain.recycle(); } public class ScrollAnimationRunnable implements Runnable { public ScrollAnimationRunnable() { } @Override // java.lang.Runnable public void run() { AutoScrollHelper autoScrollHelper = AutoScrollHelper.this; if (autoScrollHelper.mAnimating) { if (autoScrollHelper.mNeedsReset) { autoScrollHelper.mNeedsReset = false; autoScrollHelper.mScroller.start(); } ClampedScroller clampedScroller = AutoScrollHelper.this.mScroller; if (clampedScroller.isFinished() || !AutoScrollHelper.this.shouldAnimate()) { AutoScrollHelper.this.mAnimating = false; return; } AutoScrollHelper autoScrollHelper2 = AutoScrollHelper.this; if (autoScrollHelper2.mNeedsCancel) { autoScrollHelper2.mNeedsCancel = false; autoScrollHelper2.cancelTargetTouch(); } clampedScroller.computeScrollDelta(); AutoScrollHelper.this.scrollTargetBy(clampedScroller.getDeltaX(), clampedScroller.getDeltaY()); ViewCompat.postOnAnimation(AutoScrollHelper.this.mTarget, this); } } } public static class ClampedScroller { private int mEffectiveRampDown; private int mRampDownDuration; private int mRampUpDuration; private float mStopValue; private float mTargetVelocityX; private float mTargetVelocityY; private long mStartTime = Long.MIN_VALUE; private long mStopTime = -1; private long mDeltaTime = 0; private int mDeltaX = 0; private int mDeltaY = 0; private float interpolateValue(float f) { return ((-4.0f) * f * f) + (f * 4.0f); } public int getDeltaX() { return this.mDeltaX; } public int getDeltaY() { return this.mDeltaY; } public void setRampDownDuration(int i) { this.mRampDownDuration = i; } public void setRampUpDuration(int i) { this.mRampUpDuration = i; } public void setTargetVelocity(float f, float f2) { this.mTargetVelocityX = f; this.mTargetVelocityY = f2; } public void start() { long currentAnimationTimeMillis = AnimationUtils.currentAnimationTimeMillis(); this.mStartTime = currentAnimationTimeMillis; this.mStopTime = -1L; this.mDeltaTime = currentAnimationTimeMillis; this.mStopValue = 0.5f; this.mDeltaX = 0; this.mDeltaY = 0; } public void requestStop() { long currentAnimationTimeMillis = AnimationUtils.currentAnimationTimeMillis(); this.mEffectiveRampDown = AutoScrollHelper.constrain((int) (currentAnimationTimeMillis - this.mStartTime), 0, this.mRampDownDuration); this.mStopValue = getValueAt(currentAnimationTimeMillis); this.mStopTime = currentAnimationTimeMillis; } public boolean isFinished() { return this.mStopTime > 0 && AnimationUtils.currentAnimationTimeMillis() > this.mStopTime + ((long) this.mEffectiveRampDown); } private float getValueAt(long j) { if (j < this.mStartTime) { return 0.0f; } long j2 = this.mStopTime; if (j2 < 0 || j < j2) { return AutoScrollHelper.constrain((j - r0) / this.mRampUpDuration, 0.0f, AutoScrollHelper.DEFAULT_RELATIVE_VELOCITY) * 0.5f; } float f = this.mStopValue; return (AutoScrollHelper.DEFAULT_RELATIVE_VELOCITY - f) + (f * AutoScrollHelper.constrain((j - j2) / this.mEffectiveRampDown, 0.0f, AutoScrollHelper.DEFAULT_RELATIVE_VELOCITY)); } public void computeScrollDelta() { if (this.mDeltaTime == 0) { throw new RuntimeException("Cannot compute scroll delta before calling start()"); } long currentAnimationTimeMillis = AnimationUtils.currentAnimationTimeMillis(); float interpolateValue = interpolateValue(getValueAt(currentAnimationTimeMillis)); long j = currentAnimationTimeMillis - this.mDeltaTime; this.mDeltaTime = currentAnimationTimeMillis; float f = j * interpolateValue; this.mDeltaX = (int) (this.mTargetVelocityX * f); this.mDeltaY = (int) (f * this.mTargetVelocityY); } public int getHorizontalDirection() { float f = this.mTargetVelocityX; return (int) (f / Math.abs(f)); } public int getVerticalDirection() { float f = this.mTargetVelocityY; return (int) (f / Math.abs(f)); } } }