blob: e55246af610e1ddb28805e96f79d84c92a58c810 [file] [log] [blame]
package com.airbnb.lottie.utils;
import android.animation.Animator;
import android.animation.TimeInterpolator;
import android.animation.ValueAnimator;
import android.os.Build;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
public abstract class BaseLottieAnimator extends ValueAnimator {
private final Set<ValueAnimator.AnimatorUpdateListener> updateListeners = new CopyOnWriteArraySet<>();
private final Set<AnimatorListener> listeners = new CopyOnWriteArraySet<>();
@Override public long getStartDelay() {
throw new UnsupportedOperationException("LottieAnimator does not support getStartDelay.");
}
@Override public void setStartDelay(long startDelay) {
throw new UnsupportedOperationException("LottieAnimator does not support setStartDelay.");
}
@Override public ValueAnimator setDuration(long duration) {
throw new UnsupportedOperationException("LottieAnimator does not support setDuration.");
}
@Override public void setInterpolator(TimeInterpolator value) {
throw new UnsupportedOperationException("LottieAnimator does not support setInterpolator.");
}
public void addUpdateListener(ValueAnimator.AnimatorUpdateListener listener) {
updateListeners.add(listener);
}
public void removeUpdateListener(ValueAnimator.AnimatorUpdateListener listener) {
updateListeners.remove(listener);
}
public void removeAllUpdateListeners() {
updateListeners.clear();
}
public void addListener(ValueAnimator.AnimatorListener listener) {
listeners.add(listener);
}
public void removeListener(ValueAnimator.AnimatorListener listener) {
listeners.remove(listener);
}
public void removeAllListeners() {
listeners.clear();
}
void notifyStart(boolean isReverse) {
for (Animator.AnimatorListener listener : listeners) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
listener.onAnimationStart(this, isReverse);
} else {
listener.onAnimationStart(this);
}
}
}
void notifyRepeat() {
for (Animator.AnimatorListener listener : listeners) {
listener.onAnimationRepeat(this);
}
}
void notifyEnd(boolean isReverse) {
for (Animator.AnimatorListener listener : listeners) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
listener.onAnimationEnd(this, isReverse);
} else {
listener.onAnimationEnd(this);
}
}
}
void notifyCancel() {
for (Animator.AnimatorListener listener : listeners) {
listener.onAnimationCancel(this);
}
}
void notifyUpdate() {
for (ValueAnimator.AnimatorUpdateListener listener : updateListeners) {
listener.onAnimationUpdate(this);
}
}
}