From b6ecda131973aaad442a1b398d32775acec7f63e Mon Sep 17 00:00:00 2001 From: adbenitez Date: Tue, 11 Aug 2020 20:08:46 -0400 Subject: [PATCH] avoid paused animations --- .../securesms/components/DocumentView.java | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/org/thoughtcrime/securesms/components/DocumentView.java b/src/org/thoughtcrime/securesms/components/DocumentView.java index 77c729cd5..00c41eaa6 100644 --- a/src/org/thoughtcrime/securesms/components/DocumentView.java +++ b/src/org/thoughtcrime/securesms/components/DocumentView.java @@ -13,6 +13,7 @@ import android.widget.FrameLayout; import android.widget.TextView; import com.airbnb.lottie.LottieAnimationView; +import com.google.gson.JsonParser; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.mms.DocumentSlide; @@ -21,6 +22,7 @@ import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.guava.Optional; +import java.io.InputStreamReader; import java.util.zip.GZIPInputStream; public class DocumentView extends FrameLayout { @@ -59,7 +61,9 @@ public class DocumentView extends FrameLayout { public void setDocument(final @NonNull DocumentSlide documentSlide) { - if ((documentSlide.hasAnimation())) { + this.documentSlide = documentSlide; + + if (hasAnimation()) { container.setVisibility(GONE); lottie.setVisibility(VISIBLE); lottie.setOnFocusChangeListener((v, hasFocus) -> { @@ -82,14 +86,13 @@ public class DocumentView extends FrameLayout { } } }); - lottie.clearAnimation(); - lottie.animate(); + if (!lottie.isAnimating()) { + lottie.playAnimation(); + } } else { container.setVisibility(VISIBLE); lottie.setVisibility(GONE); - this.documentSlide = documentSlide; - this.fileName.setText(documentSlide.getFileName().or(getContext().getString(R.string.unknown))); String fileSize = Util.getPrettyFileSize(documentSlide.getFileSize()) @@ -100,6 +103,19 @@ public class DocumentView extends FrameLayout { } } + public boolean hasAnimation() { + boolean animated = false; + if(documentSlide.hasAnimation()){ + try { + new JsonParser().parse(new InputStreamReader(new GZIPInputStream( getContext().getContentResolver().openInputStream(documentSlide.getUri())))).isJsonArray(); + animated = true; + } catch (Exception e) { + e.printStackTrace(); + } + } + return animated; + } + @Override public void setFocusable(boolean focusable) { super.setFocusable(focusable);