From 83e76a5e79c58b8d17617348269092ce441f398b Mon Sep 17 00:00:00 2001 From: Gabriel Peal <gabriel@watershedclimate.com> Date: Wed, 9 Aug 2023 20:55:24 -0700 Subject: [PATCH 1/2] Allow configuring a default global value for async updates --- lottie/src/main/java/com/airbnb/lottie/L.java | 10 +++++++++- .../main/java/com/airbnb/lottie/Lottie.java | 1 + .../java/com/airbnb/lottie/LottieConfig.java | 19 +++++++++++++++++-- .../com/airbnb/lottie/LottieDrawable.java | 12 +++++++++--- 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/lottie/src/main/java/com/airbnb/lottie/L.java b/lottie/src/main/java/com/airbnb/lottie/L.java index ae9f92c57c..c22cb114ad 100644 --- a/lottie/src/main/java/com/airbnb/lottie/L.java +++ b/lottie/src/main/java/com/airbnb/lottie/L.java @@ -5,7 +5,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RestrictTo; -import androidx.core.os.TraceCompat; import com.airbnb.lottie.network.DefaultLottieNetworkFetcher; import com.airbnb.lottie.network.LottieNetworkCacheProvider; @@ -25,6 +24,7 @@ public class L { private static boolean traceEnabled = false; private static boolean networkCacheEnabled = true; private static boolean disablePathInterpolatorCache = true; + private static AsyncUpdates defaultAsyncUpdates = AsyncUpdates.AUTOMATIC; private static LottieNetworkFetcher fetcher; private static LottieNetworkCacheProvider cacheProvider; @@ -131,4 +131,12 @@ public static void setDisablePathInterpolatorCache(boolean disablePathInterpolat public static boolean getDisablePathInterpolatorCache() { return disablePathInterpolatorCache; } + + public static void setDefaultAsyncUpdates(AsyncUpdates asyncUpdates) { + L.defaultAsyncUpdates = asyncUpdates; + } + + public static AsyncUpdates getDefaultAsyncUpdates() { + return L.defaultAsyncUpdates; + } } diff --git a/lottie/src/main/java/com/airbnb/lottie/Lottie.java b/lottie/src/main/java/com/airbnb/lottie/Lottie.java index 816fff71bf..c6274a39cb 100644 --- a/lottie/src/main/java/com/airbnb/lottie/Lottie.java +++ b/lottie/src/main/java/com/airbnb/lottie/Lottie.java @@ -21,5 +21,6 @@ public static void initialize(@NonNull final LottieConfig lottieConfig) { L.setTraceEnabled(lottieConfig.enableSystraceMarkers); L.setNetworkCacheEnabled(lottieConfig.enableNetworkCache); L.setDisablePathInterpolatorCache(lottieConfig.disablePathInterpolatorCache); + L.setDefaultAsyncUpdates(lottieConfig.defaultAsyncUpdates); } } diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieConfig.java b/lottie/src/main/java/com/airbnb/lottie/LottieConfig.java index b186058635..497a5c14ab 100644 --- a/lottie/src/main/java/com/airbnb/lottie/LottieConfig.java +++ b/lottie/src/main/java/com/airbnb/lottie/LottieConfig.java @@ -20,14 +20,17 @@ public class LottieConfig { final boolean enableSystraceMarkers; final boolean enableNetworkCache; final boolean disablePathInterpolatorCache; + final AsyncUpdates defaultAsyncUpdates; private LottieConfig(@Nullable LottieNetworkFetcher networkFetcher, @Nullable LottieNetworkCacheProvider cacheProvider, - boolean enableSystraceMarkers, boolean enableNetworkCache, boolean disablePathInterpolatorCache) { + boolean enableSystraceMarkers, boolean enableNetworkCache, boolean disablePathInterpolatorCache, + AsyncUpdates defaultAsyncUpdates) { this.networkFetcher = networkFetcher; this.cacheProvider = cacheProvider; this.enableSystraceMarkers = enableSystraceMarkers; this.enableNetworkCache = enableNetworkCache; this.disablePathInterpolatorCache = disablePathInterpolatorCache; + this.defaultAsyncUpdates = defaultAsyncUpdates; } public static final class Builder { @@ -39,6 +42,7 @@ public static final class Builder { private boolean enableSystraceMarkers = false; private boolean enableNetworkCache = true; private boolean disablePathInterpolatorCache = true; + private AsyncUpdates enableAsyncUpdatesByDefault = AsyncUpdates.AUTOMATIC; /** * Lottie has a default network fetching stack built on {@link java.net.HttpURLConnection}. However, if you would like to hook into your own @@ -127,9 +131,20 @@ public Builder setDisablePathInterpolatorCache(boolean disable) { return this; } + /** + * Sets the default value for async updates. + * @see LottieDrawable#setAsyncUpdates(AsyncUpdates) + */ + @NonNull + public Builder setDefaultAsyncUpdates(AsyncUpdates asyncUpdates) { + enableAsyncUpdatesByDefault = asyncUpdates; + return this; + } + @NonNull public LottieConfig build() { - return new LottieConfig(networkFetcher, cacheProvider, enableSystraceMarkers, enableNetworkCache, disablePathInterpolatorCache); + return new LottieConfig(networkFetcher, cacheProvider, enableSystraceMarkers, enableNetworkCache, disablePathInterpolatorCache, + enableAsyncUpdatesByDefault); } } } diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java b/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java index 82233c0afd..abf094f56b 100644 --- a/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java +++ b/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java @@ -31,6 +31,7 @@ import androidx.annotation.RestrictTo; import com.airbnb.lottie.animation.LPaint; +import com.airbnb.lottie.animation.keyframe.PathKeyframe; import com.airbnb.lottie.manager.FontAssetManager; import com.airbnb.lottie.manager.ImageAssetManager; import com.airbnb.lottie.model.Font; @@ -145,7 +146,8 @@ private enum OnVisibleAction { private Matrix softwareRenderingOriginalCanvasMatrix; private Matrix softwareRenderingOriginalCanvasMatrixInverse; - private AsyncUpdates asyncUpdates = AsyncUpdates.AUTOMATIC; + /** Use the getter so that it can fall back to {@link L#getDefaultAsyncUpdates()}. */ + @Nullable private AsyncUpdates asyncUpdates; private final ValueAnimator.AnimatorUpdateListener progressUpdateListener = animation -> { if (getAsyncUpdatesEnabled()) { // Render a new frame. @@ -411,7 +413,11 @@ public void setRenderMode(RenderMode renderMode) { * Returns the current value of {@link AsyncUpdates}. Refer to the docs for {@link AsyncUpdates} for more info. */ public AsyncUpdates getAsyncUpdates() { - return asyncUpdates; + AsyncUpdates asyncUpdates = this.asyncUpdates; + if (asyncUpdates != null) { + return asyncUpdates; + } + return L.getDefaultAsyncUpdates(); } /** @@ -421,7 +427,7 @@ public AsyncUpdates getAsyncUpdates() { * whether automatic is defaulting to enabled or not. */ public boolean getAsyncUpdatesEnabled() { - return asyncUpdates == AsyncUpdates.ENABLED; + return getAsyncUpdates() == AsyncUpdates.ENABLED; } /** From 9d7e8d6b21312a6c09b2a84e7f6c1f31c41d66bf Mon Sep 17 00:00:00 2001 From: Gabriel Peal <gabriel@watershedclimate.com> Date: Sat, 2 Sep 2023 16:43:56 -0700 Subject: [PATCH 2/2] Fix name --- lottie/src/main/java/com/airbnb/lottie/LottieConfig.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieConfig.java b/lottie/src/main/java/com/airbnb/lottie/LottieConfig.java index 497a5c14ab..09f5e57bcb 100644 --- a/lottie/src/main/java/com/airbnb/lottie/LottieConfig.java +++ b/lottie/src/main/java/com/airbnb/lottie/LottieConfig.java @@ -42,7 +42,7 @@ public static final class Builder { private boolean enableSystraceMarkers = false; private boolean enableNetworkCache = true; private boolean disablePathInterpolatorCache = true; - private AsyncUpdates enableAsyncUpdatesByDefault = AsyncUpdates.AUTOMATIC; + private AsyncUpdates defaultAsyncUpdates = AsyncUpdates.AUTOMATIC; /** * Lottie has a default network fetching stack built on {@link java.net.HttpURLConnection}. However, if you would like to hook into your own @@ -137,14 +137,14 @@ public Builder setDisablePathInterpolatorCache(boolean disable) { */ @NonNull public Builder setDefaultAsyncUpdates(AsyncUpdates asyncUpdates) { - enableAsyncUpdatesByDefault = asyncUpdates; + defaultAsyncUpdates = asyncUpdates; return this; } @NonNull public LottieConfig build() { return new LottieConfig(networkFetcher, cacheProvider, enableSystraceMarkers, enableNetworkCache, disablePathInterpolatorCache, - enableAsyncUpdatesByDefault); + defaultAsyncUpdates); } } }