diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java b/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java index 224c6b1763..3c736abd7e 100644 --- a/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java +++ b/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java @@ -15,7 +15,6 @@ import android.text.TextUtils; import android.util.AttributeSet; import android.util.Log; - import androidx.annotation.AttrRes; import androidx.annotation.DrawableRes; import androidx.annotation.FloatRange; @@ -26,7 +25,6 @@ import androidx.annotation.RequiresApi; import androidx.appcompat.content.res.AppCompatResources; import androidx.appcompat.widget.AppCompatImageView; - import com.airbnb.lottie.model.KeyPath; import com.airbnb.lottie.utils.Logger; import com.airbnb.lottie.utils.Utils; @@ -36,7 +34,6 @@ import java.io.ByteArrayInputStream; import java.io.InputStream; -import java.io.PushbackInputStream; import java.lang.ref.WeakReference; import java.util.HashSet; import java.util.List; @@ -609,6 +606,10 @@ public void setFallbackResource(@DrawableRes int fallbackResource) { } private void setCompositionTask(LottieTask compositionTask) { + LottieResult result = compositionTask.getResult(); + if (result != null && result.getValue() == composition) { + return; + } userActionsTaken.add(UserActionTaken.SET_ANIMATION); clearComposition(); cancelLoaderTask(); diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieCompositionFactory.java b/lottie/src/main/java/com/airbnb/lottie/LottieCompositionFactory.java index 42d9630d35..7b0f9e7706 100644 --- a/lottie/src/main/java/com/airbnb/lottie/LottieCompositionFactory.java +++ b/lottie/src/main/java/com/airbnb/lottie/LottieCompositionFactory.java @@ -704,7 +704,7 @@ private static LottieTask cache(@Nullable final String cacheK LottieTask task = null; final LottieComposition cachedComposition = cacheKey == null ? null : LottieCompositionCache.getInstance().get(cacheKey); if (cachedComposition != null) { - task = new LottieTask<>(() -> new LottieResult<>(cachedComposition)); + task = new LottieTask<>(cachedComposition); } if (cacheKey != null && taskCache.containsKey(cacheKey)) { task = taskCache.get(cacheKey); diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieTask.java b/lottie/src/main/java/com/airbnb/lottie/LottieTask.java index 6d1ae568e0..831c93f2f4 100644 --- a/lottie/src/main/java/com/airbnb/lottie/LottieTask.java +++ b/lottie/src/main/java/com/airbnb/lottie/LottieTask.java @@ -25,7 +25,8 @@ *

* A task will produce a single result or a single failure. */ -@SuppressWarnings("UnusedReturnValue") public class LottieTask { +@SuppressWarnings("UnusedReturnValue") +public class LottieTask { /** * Set this to change the executor that LottieTasks are run on. This will be the executor that composition parsing and url @@ -48,6 +49,10 @@ public LottieTask(Callable> runnable) { this(runnable, false); } + public LottieTask(T result) { + setResult(new LottieResult<>(result)); + } + /** * runNow is only used for testing. */ @@ -124,6 +129,11 @@ public synchronized LottieTask removeFailureListener(LottieListener getResult() { + return result; + } + private void notifyListeners() { // Listeners should be called on the main thread. handler.post(() -> {