- 28,932 files - Full Java source code - Smali files - Resources Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
112 lines
3.6 KiB
Java
112 lines
3.6 KiB
Java
package androidx.core.view;
|
|
|
|
import android.view.MotionEvent;
|
|
import androidx.annotation.NonNull;
|
|
|
|
/* loaded from: classes.dex */
|
|
class VelocityTrackerFallback {
|
|
private static final long ASSUME_POINTER_STOPPED_MS = 40;
|
|
private static final int HISTORY_SIZE = 20;
|
|
private static final long RANGE_MS = 100;
|
|
private final float[] mMovements = new float[20];
|
|
private final long[] mEventTimes = new long[20];
|
|
private float mLastComputedVelocity = 0.0f;
|
|
private int mDataPointsBufferSize = 0;
|
|
private int mDataPointsBufferLastUsedIndex = 0;
|
|
|
|
private void clear() {
|
|
this.mDataPointsBufferSize = 0;
|
|
this.mLastComputedVelocity = 0.0f;
|
|
}
|
|
|
|
public float getAxisVelocity(int i) {
|
|
if (i != 26) {
|
|
return 0.0f;
|
|
}
|
|
return this.mLastComputedVelocity;
|
|
}
|
|
|
|
public void addMovement(@NonNull MotionEvent motionEvent) {
|
|
long eventTime = motionEvent.getEventTime();
|
|
if (this.mDataPointsBufferSize != 0 && eventTime - this.mEventTimes[this.mDataPointsBufferLastUsedIndex] > ASSUME_POINTER_STOPPED_MS) {
|
|
clear();
|
|
}
|
|
int i = (this.mDataPointsBufferLastUsedIndex + 1) % 20;
|
|
this.mDataPointsBufferLastUsedIndex = i;
|
|
int i2 = this.mDataPointsBufferSize;
|
|
if (i2 != 20) {
|
|
this.mDataPointsBufferSize = i2 + 1;
|
|
}
|
|
this.mMovements[i] = motionEvent.getAxisValue(26);
|
|
this.mEventTimes[this.mDataPointsBufferLastUsedIndex] = eventTime;
|
|
}
|
|
|
|
public void computeCurrentVelocity(int i) {
|
|
computeCurrentVelocity(i, Float.MAX_VALUE);
|
|
}
|
|
|
|
public void computeCurrentVelocity(int i, float f) {
|
|
float currentVelocity = getCurrentVelocity() * i;
|
|
this.mLastComputedVelocity = currentVelocity;
|
|
if (currentVelocity < (-Math.abs(f))) {
|
|
this.mLastComputedVelocity = -Math.abs(f);
|
|
} else if (this.mLastComputedVelocity > Math.abs(f)) {
|
|
this.mLastComputedVelocity = Math.abs(f);
|
|
}
|
|
}
|
|
|
|
private float getCurrentVelocity() {
|
|
long[] jArr;
|
|
long j;
|
|
int i = this.mDataPointsBufferSize;
|
|
if (i < 2) {
|
|
return 0.0f;
|
|
}
|
|
int i2 = this.mDataPointsBufferLastUsedIndex;
|
|
int i3 = ((i2 + 20) - (i - 1)) % 20;
|
|
long j2 = this.mEventTimes[i2];
|
|
while (true) {
|
|
jArr = this.mEventTimes;
|
|
j = jArr[i3];
|
|
if (j2 - j <= RANGE_MS) {
|
|
break;
|
|
}
|
|
this.mDataPointsBufferSize--;
|
|
i3 = (i3 + 1) % 20;
|
|
}
|
|
int i4 = this.mDataPointsBufferSize;
|
|
if (i4 < 2) {
|
|
return 0.0f;
|
|
}
|
|
if (i4 == 2) {
|
|
int i5 = (i3 + 1) % 20;
|
|
if (j == jArr[i5]) {
|
|
return 0.0f;
|
|
}
|
|
return this.mMovements[i5] / (r2 - j);
|
|
}
|
|
float f = 0.0f;
|
|
int i6 = 0;
|
|
for (int i7 = 0; i7 < this.mDataPointsBufferSize - 1; i7++) {
|
|
int i8 = i7 + i3;
|
|
long[] jArr2 = this.mEventTimes;
|
|
long j3 = jArr2[i8 % 20];
|
|
int i9 = (i8 + 1) % 20;
|
|
if (jArr2[i9] != j3) {
|
|
i6++;
|
|
float kineticEnergyToVelocity = kineticEnergyToVelocity(f);
|
|
float f2 = this.mMovements[i9] / (this.mEventTimes[i9] - j3);
|
|
f += (f2 - kineticEnergyToVelocity) * Math.abs(f2);
|
|
if (i6 == 1) {
|
|
f *= 0.5f;
|
|
}
|
|
}
|
|
}
|
|
return kineticEnergyToVelocity(f);
|
|
}
|
|
|
|
private static float kineticEnergyToVelocity(float f) {
|
|
return (f < 0.0f ? -1.0f : 1.0f) * ((float) Math.sqrt(Math.abs(f) * 2.0f));
|
|
}
|
|
}
|