From 1d8f3bef71413e143cf10fe8ca2041adb8ea0c92 Mon Sep 17 00:00:00 2001 From: Yun Cheng <129205442+ycheng-kickstarter@users.noreply.github.com> Date: Wed, 30 Jul 2025 14:55:27 -0400 Subject: [PATCH 1/2] Testing if coil supports animated webp --- .../main/java/com/kickstarter/ui/views/ImageWithCaptionView.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/kickstarter/ui/views/ImageWithCaptionView.kt b/app/src/main/java/com/kickstarter/ui/views/ImageWithCaptionView.kt index 2d7430a482..f92feba9fb 100644 --- a/app/src/main/java/com/kickstarter/ui/views/ImageWithCaptionView.kt +++ b/app/src/main/java/com/kickstarter/ui/views/ImageWithCaptionView.kt @@ -16,6 +16,7 @@ import androidx.core.view.isVisible import coil.compose.AsyncImagePainter import coil.compose.SubcomposeAsyncImage import coil.compose.SubcomposeAsyncImageContent +import coil.load import com.kickstarter.R import com.kickstarter.databinding.ViewImageWithCaptionBinding import com.kickstarter.libs.utils.extensions.isGif @@ -46,7 +47,7 @@ class ImageWithCaptionView @JvmOverloads constructor( } else { when { src.isWebp() -> { - binding.imageView.loadWebp(src, context) + binding.imageView.load(src) binding.imageView.visibility = VISIBLE binding.composeViewImage.visibility = GONE } From aa281602ee1f6c804fa48566683036322710d882 Mon Sep 17 00:00:00 2001 From: Yun Cheng <129205442+ycheng-kickstarter@users.noreply.github.com> Date: Wed, 30 Jul 2025 16:34:50 -0400 Subject: [PATCH 2/2] Add coil-gif library --- app/build.gradle | 1 + .../ui/views/ImageWithCaptionView.kt | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 9da2a38065..35be4d0ed7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -269,6 +269,7 @@ dependencies { //Compose Coil implementation("io.coil-kt:coil-compose:2.6.0") + implementation("io.coil-kt:coil-gif:2.6.0") // Firebase implementation platform('com.google.firebase:firebase-bom:32.8.1') diff --git a/app/src/main/java/com/kickstarter/ui/views/ImageWithCaptionView.kt b/app/src/main/java/com/kickstarter/ui/views/ImageWithCaptionView.kt index f92feba9fb..889365cae1 100644 --- a/app/src/main/java/com/kickstarter/ui/views/ImageWithCaptionView.kt +++ b/app/src/main/java/com/kickstarter/ui/views/ImageWithCaptionView.kt @@ -2,6 +2,7 @@ package com.kickstarter.ui.views import android.annotation.SuppressLint import android.content.Context +import android.os.Build.VERSION.SDK_INT import android.util.AttributeSet import android.view.LayoutInflater import android.view.View @@ -13,10 +14,15 @@ import androidx.compose.material.LinearProgressIndicator import androidx.compose.ui.Modifier import androidx.compose.ui.layout.ContentScale.Companion.FillWidth import androidx.core.view.isVisible +import coil.ImageLoader import coil.compose.AsyncImagePainter import coil.compose.SubcomposeAsyncImage import coil.compose.SubcomposeAsyncImageContent +import coil.decode.GifDecoder +import coil.decode.ImageDecoderDecoder + import coil.load + import com.kickstarter.R import com.kickstarter.databinding.ViewImageWithCaptionBinding import com.kickstarter.libs.utils.extensions.isGif @@ -47,7 +53,16 @@ class ImageWithCaptionView @JvmOverloads constructor( } else { when { src.isWebp() -> { - binding.imageView.load(src) + val gifEnabledLoader = ImageLoader.Builder(context) + .components { + if (SDK_INT >= 28) { + add(ImageDecoderDecoder.Factory()) + } else { + add(GifDecoder.Factory()) + } + } + .build() + binding.imageView.load(src, gifEnabledLoader) binding.imageView.visibility = VISIBLE binding.composeViewImage.visibility = GONE }