From a35a167e7a87c57e59e414d961201a17d89cf2cd Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Tue, 11 Apr 2023 15:23:11 -0400 Subject: [PATCH] Fix spoiler animation running after view is returned to cache. --- .../components/spoiler/SpoilerRendererDelegate.kt | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/spoiler/SpoilerRendererDelegate.kt b/app/src/main/java/org/thoughtcrime/securesms/components/spoiler/SpoilerRendererDelegate.kt index 4d096e0884..dff67a4bd3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/spoiler/SpoilerRendererDelegate.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/spoiler/SpoilerRendererDelegate.kt @@ -5,6 +5,8 @@ import android.graphics.Canvas import android.text.Annotation import android.text.Layout import android.text.Spanned +import android.view.View +import android.view.View.OnAttachStateChangeListener import android.view.animation.LinearInterpolator import android.widget.TextView import org.thoughtcrime.securesms.components.spoiler.SpoilerAnnotation.SpoilerClickableSpan @@ -42,6 +44,11 @@ class SpoilerRendererDelegate @JvmOverloads constructor(private val view: TextVi spoilerDrawable = SpoilerDrawable(textColor) single = SingleLineSpoilerRenderer(spoilerDrawable) multi = MultiLineSpoilerRenderer(spoilerDrawable) + + view.addOnAttachStateChangeListener(object : OnAttachStateChangeListener { + override fun onViewDetachedFromWindow(v: View) = stopAnimating() + override fun onViewAttachedToWindow(v: View) = Unit + }) } fun updateFromTextColor() { @@ -90,11 +97,15 @@ class SpoilerRendererDelegate @JvmOverloads constructor(private val view: TextVi animatorRunning = true } } else { - animator.pause() - animatorRunning = false + stopAnimating() } } + private fun stopAnimating() { + animator.pause() + animatorRunning = false + } + private inline fun MutableMap.getFromCache(vararg keys: Any, default: () -> V): V { if (renderForComposing) { return default()