Treat dotLottie files loaded as content provider URIs a zip files (#2556)
Fixes #2553
diff --git a/lottie-compose/src/main/java/com/airbnb/lottie/compose/rememberLottieComposition.kt b/lottie-compose/src/main/java/com/airbnb/lottie/compose/rememberLottieComposition.kt
index f5ca1fb..766abc2 100644
--- a/lottie-compose/src/main/java/com/airbnb/lottie/compose/rememberLottieComposition.kt
+++ b/lottie-compose/src/main/java/com/airbnb/lottie/compose/rememberLottieComposition.kt
@@ -144,6 +144,7 @@
LottieCompositionFactory.fromRawRes(context, spec.resId, cacheKey)
}
}
+
is LottieCompositionSpec.Url -> {
if (cacheKey == DefaultCacheKey) {
LottieCompositionFactory.fromUrl(context, spec.url)
@@ -151,6 +152,7 @@
LottieCompositionFactory.fromUrl(context, spec.url, cacheKey)
}
}
+
is LottieCompositionSpec.File -> {
if (isWarmingCache) {
// Warming the cache is done from the main thread so we can't
@@ -164,10 +166,12 @@
ZipInputStream(fis),
actualCacheKey,
)
+
spec.fileName.endsWith("tgs") -> LottieCompositionFactory.fromJsonInputStream(
GZIPInputStream(fis),
actualCacheKey,
)
+
else -> LottieCompositionFactory.fromJsonInputStream(
fis,
actualCacheKey,
@@ -175,6 +179,7 @@
}
}
}
+
is LottieCompositionSpec.Asset -> {
if (cacheKey == DefaultCacheKey) {
LottieCompositionFactory.fromAsset(context, spec.assetName)
@@ -182,22 +187,27 @@
LottieCompositionFactory.fromAsset(context, spec.assetName, cacheKey)
}
}
+
is LottieCompositionSpec.JsonString -> {
val jsonStringCacheKey = if (cacheKey == DefaultCacheKey) spec.jsonString.hashCode().toString() else cacheKey
LottieCompositionFactory.fromJsonString(spec.jsonString, jsonStringCacheKey)
}
+
is LottieCompositionSpec.ContentProvider -> {
val fis = context.contentResolver.openInputStream(spec.uri)
val actualCacheKey = if (cacheKey == DefaultCacheKey) spec.uri.toString() else cacheKey
when {
- spec.uri.toString().endsWith("zip") -> LottieCompositionFactory.fromZipStream(
+ spec.uri.toString().endsWith("zip") ||
+ spec.uri.toString().endsWith("lottie") -> LottieCompositionFactory.fromZipStream(
ZipInputStream(fis),
actualCacheKey,
)
+
spec.uri.toString().endsWith("tgs") -> LottieCompositionFactory.fromJsonInputStream(
GZIPInputStream(fis),
actualCacheKey,
)
+
else -> LottieCompositionFactory.fromJsonInputStream(
fis,
actualCacheKey,