content: package com.airbnb.lottie.animation.keyframe;
  
  import androidx.annotation.Nullable;
  
  import com.airbnb.lottie.value.Keyframe;
  import com.airbnb.lottie.value.LottieValueCallback;
  
  import java.util.Collections;
  
  public class ValueCallbackKeyframeAnimation<K, A> extends BaseKeyframeAnimation<K, A> {
    private final A valueCallbackValue;
  
    public ValueCallbackKeyframeAnimation(LottieValueCallback<A> valueCallback) {
      this(valueCallback, null);
    }
  
    public ValueCallbackKeyframeAnimation(LottieValueCallback<A> valueCallback, @Nullable A valueCallbackValue) {
      super(Collections.emptyList());
      setValueCallback(valueCallback);
      this.valueCallbackValue = valueCallbackValue;
    }
  
    @Override public void setProgress(float progress) {
      this.progress = progress;
    }
  
    /**
     * If this doesn't return 1, then {@link #setProgress(float)} will always clamp the progress
     * to 0.
     */
    @Override float getEndProgress() {
      return 1f;
    }
  
    @Override public void notifyListeners() {
      if (this.valueCallback != null) {
        super.notifyListeners();
      }
    }
  
    @Override public A getValue() {
      //noinspection ConstantConditions
      return valueCallback.getValueInternal(0f, 0f, valueCallbackValue, valueCallbackValue, getProgress(), getProgress(), getProgress());
    }
  
    @Override A getValue(Keyframe<K> keyframe, float keyframeProgress) {
      return getValue();
    }
  }
  