alexandroid/decompiled/jadx/sources/androidx/dynamicanimation/animation/AnimationHandler.java
KaKi87 a47fad5135 📦 Add decompiled Alexa 2.2.730155.0 (jadx, apktool, Hermes strings)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 00:04:16 +01:00

228 lines
9.3 KiB
Java

package androidx.dynamicanimation.animation;
import android.animation.ValueAnimator;
import android.os.Build;
import android.os.Looper;
import android.os.SystemClock;
import android.view.Choreographer;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.annotation.VisibleForTesting;
import androidx.collection.SimpleArrayMap;
import androidx.dynamicanimation.animation.AnimationHandler;
import java.util.ArrayList;
/* compiled from: r8-map-id-b9432e0f623b4a4bff4ba50a8a24c4aafad2c1e11092747b9fb5e6a22af5a940 */
/* loaded from: classes14.dex */
public class AnimationHandler {
private static final ThreadLocal<AnimationHandler> sAnimatorHandler = new ThreadLocal<>();
@RestrictTo({RestrictTo.Scope.LIBRARY})
@VisibleForTesting
public DurationScaleChangeListener mDurationScaleChangeListener;
private FrameCallbackScheduler mScheduler;
private final SimpleArrayMap<AnimationFrameCallback, Long> mDelayedCallbackStartTime = new SimpleArrayMap<>();
final ArrayList<AnimationFrameCallback> mAnimationCallbacks = new ArrayList<>();
private final AnimationCallbackDispatcher mCallbackDispatcher = new AnimationCallbackDispatcher();
private final Runnable mRunnable = new Runnable() { // from class: androidx.dynamicanimation.animation.AnimationHandler$$ExternalSyntheticLambda0
@Override // java.lang.Runnable
public final void run() {
AnimationHandler.this.lambda$new$0();
}
};
long mCurrentFrameTime = 0;
private boolean mListDirty = false;
@RestrictTo({RestrictTo.Scope.LIBRARY})
@VisibleForTesting
public float mDurationScale = 1.0f;
/* compiled from: r8-map-id-b9432e0f623b4a4bff4ba50a8a24c4aafad2c1e11092747b9fb5e6a22af5a940 */
public class AnimationCallbackDispatcher {
private 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.mScheduler.postFrameCallback(AnimationHandler.this.mRunnable);
}
}
}
/* compiled from: r8-map-id-b9432e0f623b4a4bff4ba50a8a24c4aafad2c1e11092747b9fb5e6a22af5a940 */
public interface AnimationFrameCallback {
boolean doAnimationFrame(long j);
}
/* compiled from: r8-map-id-b9432e0f623b4a4bff4ba50a8a24c4aafad2c1e11092747b9fb5e6a22af5a940 */
@RestrictTo({RestrictTo.Scope.LIBRARY})
@VisibleForTesting
public interface DurationScaleChangeListener {
boolean register();
boolean unregister();
}
/* compiled from: r8-map-id-b9432e0f623b4a4bff4ba50a8a24c4aafad2c1e11092747b9fb5e6a22af5a940 */
@VisibleForTesting
@RequiresApi(api = 33)
@RestrictTo({RestrictTo.Scope.LIBRARY})
public class DurationScaleChangeListener33 implements DurationScaleChangeListener {
ValueAnimator.DurationScaleChangeListener mListener;
public DurationScaleChangeListener33() {
}
/* JADX INFO: Access modifiers changed from: private */
public /* synthetic */ void lambda$register$0(float f) {
AnimationHandler.this.mDurationScale = f;
}
@Override // androidx.dynamicanimation.animation.AnimationHandler.DurationScaleChangeListener
public boolean register() {
if (this.mListener != null) {
return true;
}
ValueAnimator.DurationScaleChangeListener durationScaleChangeListener = new ValueAnimator.DurationScaleChangeListener() { // from class: androidx.dynamicanimation.animation.AnimationHandler$DurationScaleChangeListener33$$ExternalSyntheticLambda0
@Override // android.animation.ValueAnimator.DurationScaleChangeListener
public final void onChanged(float f) {
AnimationHandler.DurationScaleChangeListener33.this.lambda$register$0(f);
}
};
this.mListener = durationScaleChangeListener;
return ValueAnimator.registerDurationScaleChangeListener(durationScaleChangeListener);
}
@Override // androidx.dynamicanimation.animation.AnimationHandler.DurationScaleChangeListener
public boolean unregister() {
boolean unregisterDurationScaleChangeListener = ValueAnimator.unregisterDurationScaleChangeListener(this.mListener);
this.mListener = null;
return unregisterDurationScaleChangeListener;
}
}
/* compiled from: r8-map-id-b9432e0f623b4a4bff4ba50a8a24c4aafad2c1e11092747b9fb5e6a22af5a940 */
public static final class FrameCallbackScheduler16 implements FrameCallbackScheduler {
private final Choreographer mChoreographer = Choreographer.getInstance();
private final Looper mLooper = Looper.myLooper();
@Override // androidx.dynamicanimation.animation.FrameCallbackScheduler
public boolean isCurrentThread() {
return Thread.currentThread() == this.mLooper.getThread();
}
@Override // androidx.dynamicanimation.animation.FrameCallbackScheduler
public void postFrameCallback(final Runnable runnable) {
this.mChoreographer.postFrameCallback(new Choreographer.FrameCallback() { // from class: androidx.dynamicanimation.animation.AnimationHandler$FrameCallbackScheduler16$$ExternalSyntheticLambda0
@Override // android.view.Choreographer.FrameCallback
public final void doFrame(long j) {
runnable.run();
}
});
}
}
public AnimationHandler(FrameCallbackScheduler frameCallbackScheduler) {
this.mScheduler = frameCallbackScheduler;
}
private void cleanUpList() {
ArrayList<AnimationFrameCallback> arrayList;
if (this.mListDirty) {
int size = this.mAnimationCallbacks.size();
while (true) {
size--;
arrayList = this.mAnimationCallbacks;
if (size < 0) {
break;
} else if (arrayList.get(size) == null) {
this.mAnimationCallbacks.remove(size);
}
}
if (arrayList.size() == 0 && Build.VERSION.SDK_INT >= 33) {
this.mDurationScaleChangeListener.unregister();
}
this.mListDirty = false;
}
}
public static AnimationHandler getInstance() {
ThreadLocal<AnimationHandler> threadLocal = sAnimatorHandler;
if (threadLocal.get() == null) {
threadLocal.set(new AnimationHandler(new FrameCallbackScheduler16()));
}
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;
}
/* JADX INFO: Access modifiers changed from: private */
public /* synthetic */ void lambda$new$0() {
this.mCallbackDispatcher.dispatchAnimationFrame();
}
public void addAnimationFrameCallback(AnimationFrameCallback animationFrameCallback, long j) {
if (this.mAnimationCallbacks.size() == 0) {
this.mScheduler.postFrameCallback(this.mRunnable);
if (Build.VERSION.SDK_INT >= 33) {
this.mDurationScale = ValueAnimator.getDurationScale();
if (this.mDurationScaleChangeListener == null) {
this.mDurationScaleChangeListener = new DurationScaleChangeListener33();
}
this.mDurationScaleChangeListener.register();
}
}
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();
}
@VisibleForTesting
public float getDurationScale() {
return this.mDurationScale;
}
public FrameCallbackScheduler getScheduler() {
return this.mScheduler;
}
public boolean isCurrentThread() {
return this.mScheduler.isCurrentThread();
}
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;
}
}
}