package androidx.dynamicanimation.animation; import android.os.Handler; import android.os.Looper; import android.os.SystemClock; import android.view.Choreographer; import androidx.collection.SimpleArrayMap; import java.util.ArrayList; /* JADX INFO: Access modifiers changed from: package-private */ /* loaded from: classes.dex */ public class AnimationHandler { private static final long FRAME_DELAY_MS = 10; public static final ThreadLocal sAnimatorHandler = new ThreadLocal<>(); private AnimationFrameCallbackProvider mProvider; private final SimpleArrayMap mDelayedCallbackStartTime = new SimpleArrayMap<>(); final ArrayList mAnimationCallbacks = new ArrayList<>(); private final AnimationCallbackDispatcher mCallbackDispatcher = new AnimationCallbackDispatcher(); long mCurrentFrameTime = 0; private boolean mListDirty = false; /* JADX INFO: Access modifiers changed from: package-private */ /* loaded from: classes.dex */ public interface AnimationFrameCallback { boolean doAnimationFrame(long j); } public void setProvider(AnimationFrameCallbackProvider animationFrameCallbackProvider) { this.mProvider = animationFrameCallbackProvider; } AnimationHandler() { } /* JADX INFO: Access modifiers changed from: package-private */ /* loaded from: classes.dex */ public class AnimationCallbackDispatcher { AnimationCallbackDispatcher() { } 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 static AnimationHandler getInstance() { ThreadLocal threadLocal = sAnimatorHandler; if (threadLocal.get() == null) { threadLocal.set(new AnimationHandler()); } return threadLocal.get(); } public static long getFrameTime() { ThreadLocal threadLocal = sAnimatorHandler; if (threadLocal.get() == null) { return 0L; } return threadLocal.get().mCurrentFrameTime; } AnimationFrameCallbackProvider getProvider() { if (this.mProvider == null) { this.mProvider = new FrameCallbackProvider16(this.mCallbackDispatcher); } return this.mProvider; } 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 removeCallback(AnimationFrameCallback animationFrameCallback) { this.mDelayedCallbackStartTime.remove(animationFrameCallback); int indexOf = this.mAnimationCallbacks.indexOf(animationFrameCallback); if (indexOf >= 0) { this.mAnimationCallbacks.set(indexOf, null); this.mListDirty = true; } } 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(); } 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; } 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; } } /* JADX INFO: Access modifiers changed from: private */ /* loaded from: classes.dex */ public static class FrameCallbackProvider16 extends AnimationFrameCallbackProvider { private final Choreographer mChoreographer; private final Choreographer.FrameCallback mChoreographerCallback; FrameCallbackProvider16(AnimationCallbackDispatcher animationCallbackDispatcher) { super(animationCallbackDispatcher); this.mChoreographer = Choreographer.getInstance(); this.mChoreographerCallback = new Choreographer.FrameCallback() { // from class: androidx.dynamicanimation.animation.AnimationHandler.FrameCallbackProvider16.1 @Override // android.view.Choreographer.FrameCallback public void doFrame(long j) { FrameCallbackProvider16.this.mDispatcher.dispatchAnimationFrame(); } }; } @Override // androidx.dynamicanimation.animation.AnimationHandler.AnimationFrameCallbackProvider void postFrameCallback() { this.mChoreographer.postFrameCallback(this.mChoreographerCallback); } } /* loaded from: classes.dex */ private static class FrameCallbackProvider14 extends AnimationFrameCallbackProvider { private final Handler mHandler; long mLastFrameTime; private final Runnable mRunnable; FrameCallbackProvider14(AnimationCallbackDispatcher animationCallbackDispatcher) { super(animationCallbackDispatcher); this.mLastFrameTime = -1L; this.mRunnable = new Runnable() { // from class: androidx.dynamicanimation.animation.AnimationHandler.FrameCallbackProvider14.1 @Override // java.lang.Runnable public void run() { FrameCallbackProvider14.this.mLastFrameTime = SystemClock.uptimeMillis(); FrameCallbackProvider14.this.mDispatcher.dispatchAnimationFrame(); } }; this.mHandler = new Handler(Looper.myLooper()); } @Override // androidx.dynamicanimation.animation.AnimationHandler.AnimationFrameCallbackProvider void postFrameCallback() { this.mHandler.postDelayed(this.mRunnable, Math.max(AnimationHandler.FRAME_DELAY_MS - (SystemClock.uptimeMillis() - this.mLastFrameTime), 0L)); } } /* JADX INFO: Access modifiers changed from: package-private */ /* loaded from: classes.dex */ public static abstract class AnimationFrameCallbackProvider { final AnimationCallbackDispatcher mDispatcher; abstract void postFrameCallback(); AnimationFrameCallbackProvider(AnimationCallbackDispatcher animationCallbackDispatcher) { this.mDispatcher = animationCallbackDispatcher; } } }