discord-jadx/app/src/main/java/androidx/dynamicanimation/animation/AnimationHandler.java

183 lines
7.2 KiB
Java

package androidx.dynamicanimation.animation;
import android.os.Handler;
import android.os.Looper;
import android.os.SystemClock;
import android.view.Choreographer;
import androidx.annotation.RequiresApi;
import androidx.collection.SimpleArrayMap;
import java.util.ArrayList;
public class AnimationHandler {
private static final long FRAME_DELAY_MS = 10;
public static final ThreadLocal<AnimationHandler> sAnimatorHandler = new ThreadLocal<>();
public final ArrayList<AnimationFrameCallback> mAnimationCallbacks = new ArrayList<>();
private final AnimationCallbackDispatcher mCallbackDispatcher = new AnimationCallbackDispatcher();
public long mCurrentFrameTime = 0;
private final SimpleArrayMap<AnimationFrameCallback, Long> mDelayedCallbackStartTime = new SimpleArrayMap<>();
private boolean mListDirty = false;
private AnimationFrameCallbackProvider mProvider;
public class AnimationCallbackDispatcher {
public AnimationCallbackDispatcher() {
}
public void dispatchAnimationFrame() {
AnimationHandler.this.mCurrentFrameTime = SystemClock.uptimeMillis();
AnimationHandler animationHandler = AnimationHandler.this;
animationHandler.doAnimationFrame(animationHandler.mCurrentFrameTime);
if (AnimationHandler.this.mAnimationCallbacks.size() > 0) {
AnimationHandler.this.getProvider().postFrameCallback();
}
}
}
public interface AnimationFrameCallback {
boolean doAnimationFrame(long j);
}
public static abstract class AnimationFrameCallbackProvider {
public final AnimationCallbackDispatcher mDispatcher;
public AnimationFrameCallbackProvider(AnimationCallbackDispatcher animationCallbackDispatcher) {
this.mDispatcher = animationCallbackDispatcher;
}
public abstract void postFrameCallback();
}
public static class FrameCallbackProvider14 extends AnimationFrameCallbackProvider {
private final Handler mHandler = new Handler(Looper.myLooper());
public long mLastFrameTime = -1;
private final Runnable mRunnable = new AnonymousClass1();
/* renamed from: androidx.dynamicanimation.animation.AnimationHandler$FrameCallbackProvider14$1 reason: invalid class name */
public class AnonymousClass1 implements Runnable {
public AnonymousClass1() {
}
@Override // java.lang.Runnable
public void run() {
FrameCallbackProvider14.this.mLastFrameTime = SystemClock.uptimeMillis();
FrameCallbackProvider14.this.mDispatcher.dispatchAnimationFrame();
}
}
public FrameCallbackProvider14(AnimationCallbackDispatcher animationCallbackDispatcher) {
super(animationCallbackDispatcher);
}
@Override // androidx.dynamicanimation.animation.AnimationHandler.AnimationFrameCallbackProvider
public void postFrameCallback() {
this.mHandler.postDelayed(this.mRunnable, Math.max(10 - (SystemClock.uptimeMillis() - this.mLastFrameTime), 0L));
}
}
@RequiresApi(16)
public static class FrameCallbackProvider16 extends AnimationFrameCallbackProvider {
private final Choreographer mChoreographer = Choreographer.getInstance();
private final Choreographer.FrameCallback mChoreographerCallback = new AnonymousClass1();
/* renamed from: androidx.dynamicanimation.animation.AnimationHandler$FrameCallbackProvider16$1 reason: invalid class name */
public class AnonymousClass1 implements Choreographer.FrameCallback {
public AnonymousClass1() {
}
@Override // android.view.Choreographer.FrameCallback
public void doFrame(long j) {
FrameCallbackProvider16.this.mDispatcher.dispatchAnimationFrame();
}
}
public FrameCallbackProvider16(AnimationCallbackDispatcher animationCallbackDispatcher) {
super(animationCallbackDispatcher);
}
@Override // androidx.dynamicanimation.animation.AnimationHandler.AnimationFrameCallbackProvider
public void postFrameCallback() {
this.mChoreographer.postFrameCallback(this.mChoreographerCallback);
}
}
private void cleanUpList() {
if (this.mListDirty) {
for (int size = this.mAnimationCallbacks.size() - 1; size >= 0; size--) {
if (this.mAnimationCallbacks.get(size) == null) {
this.mAnimationCallbacks.remove(size);
}
}
this.mListDirty = false;
}
}
public static long getFrameTime() {
ThreadLocal<AnimationHandler> threadLocal = sAnimatorHandler;
if (threadLocal.get() == null) {
return 0;
}
return threadLocal.get().mCurrentFrameTime;
}
public static AnimationHandler getInstance() {
ThreadLocal<AnimationHandler> threadLocal = sAnimatorHandler;
if (threadLocal.get() == null) {
threadLocal.set(new AnimationHandler());
}
return threadLocal.get();
}
private boolean isCallbackDue(AnimationFrameCallback animationFrameCallback, long j) {
Long l = this.mDelayedCallbackStartTime.get(animationFrameCallback);
if (l == null) {
return true;
}
if (l.longValue() >= j) {
return false;
}
this.mDelayedCallbackStartTime.remove(animationFrameCallback);
return true;
}
public void addAnimationFrameCallback(AnimationFrameCallback animationFrameCallback, long j) {
if (this.mAnimationCallbacks.size() == 0) {
getProvider().postFrameCallback();
}
if (!this.mAnimationCallbacks.contains(animationFrameCallback)) {
this.mAnimationCallbacks.add(animationFrameCallback);
}
if (j > 0) {
this.mDelayedCallbackStartTime.put(animationFrameCallback, Long.valueOf(SystemClock.uptimeMillis() + j));
}
}
public void doAnimationFrame(long j) {
long uptimeMillis = SystemClock.uptimeMillis();
for (int i = 0; i < this.mAnimationCallbacks.size(); i++) {
AnimationFrameCallback animationFrameCallback = this.mAnimationCallbacks.get(i);
if (animationFrameCallback != null && isCallbackDue(animationFrameCallback, uptimeMillis)) {
animationFrameCallback.doAnimationFrame(j);
}
}
cleanUpList();
}
public AnimationFrameCallbackProvider getProvider() {
if (this.mProvider == null) {
this.mProvider = new FrameCallbackProvider16(this.mCallbackDispatcher);
}
return this.mProvider;
}
public void removeCallback(AnimationFrameCallback animationFrameCallback) {
this.mDelayedCallbackStartTime.remove(animationFrameCallback);
int indexOf = this.mAnimationCallbacks.indexOf(animationFrameCallback);
if (indexOf >= 0) {
this.mAnimationCallbacks.set(indexOf, null);
this.mListDirty = true;
}
}
public void setProvider(AnimationFrameCallbackProvider animationFrameCallbackProvider) {
this.mProvider = animationFrameCallbackProvider;
}
}