From 272860f07132db05e52e0d8f7f017d78e59052cb Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 16 Jun 2023 15:51:24 -0400 Subject: [PATCH] Do not animate spoilers if system animations are disabled. --- .../securesms/components/spoiler/SpoilerPaint.kt | 9 +++++---- .../components/spoiler/SpoilerRendererDelegate.kt | 6 +++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/spoiler/SpoilerPaint.kt b/app/src/main/java/org/thoughtcrime/securesms/components/spoiler/SpoilerPaint.kt index 51c3373066..e62bab17e0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/spoiler/SpoilerPaint.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/spoiler/SpoilerPaint.kt @@ -11,6 +11,7 @@ import androidx.annotation.MainThread import org.signal.core.util.DimensionUnit import org.signal.core.util.dp import org.thoughtcrime.securesms.dependencies.ApplicationDependencies +import org.thoughtcrime.securesms.util.AccessibilityUtil import org.thoughtcrime.securesms.util.Util import kotlin.random.Random @@ -64,14 +65,14 @@ object SpoilerPaint { bounds.bottom + strokeWidth.toInt() ) - update() + update(!AccessibilityUtil.areAnimationsDisabled(ApplicationDependencies.getApplication())) } /** * Invoke every time before you need to use the [shader]. */ @MainThread - fun update() { + fun update(animationsEnabled: Boolean) { val now = System.currentTimeMillis() var dt = now - lastDrawTime if (dt < 48) { @@ -86,7 +87,7 @@ object SpoilerPaint { // To avoid that, we draw into a buffer, then swap the buffer into the shader when it's fully drawn. val canvas = Canvas(bufferBitmap) bufferBitmap.eraseColor(Color.TRANSPARENT) - draw(canvas, dt) + draw(canvas, if (animationsEnabled) dt else 0) val swap = shaderBitmap shaderBitmap = bufferBitmap @@ -153,7 +154,7 @@ object SpoilerPaint { y = -1f, xVel = if (random.nextFloat() < 0.5f) 1f else -1f, yVel = if (random.nextFloat() < 0.5f) 1f else -1f, - timeRemaining = 500 + 1000 * random.nextFloat() + timeRemaining = -1f ) } } 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 e6c4248cb9..be0737895d 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 @@ -14,6 +14,7 @@ import androidx.lifecycle.LifecycleOwner import org.signal.core.util.dp import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.components.spoiler.SpoilerAnnotation.SpoilerClickableSpan +import org.thoughtcrime.securesms.util.AccessibilityUtil import org.thoughtcrime.securesms.util.getLifecycle /** @@ -33,9 +34,11 @@ class SpoilerRendererDelegate @JvmOverloads constructor( private val cachedAnnotations = HashMap>() private val cachedMeasurements = HashMap() + private var systemAnimationsEnabled = !AccessibilityUtil.areAnimationsDisabled(view.context) + private val animator = TimeAnimator().apply { setTimeListener { _, _, _ -> - SpoilerPaint.update() + SpoilerPaint.update(systemAnimationsEnabled) view.invalidate() } } @@ -56,6 +59,7 @@ class SpoilerRendererDelegate @JvmOverloads constructor( view.getLifecycle().addObserver(object : DefaultLifecycleObserver { override fun onResume(owner: LifecycleOwner) { canAnimate = true + systemAnimationsEnabled = !AccessibilityUtil.areAnimationsDisabled(view.context) } override fun onPause(owner: LifecycleOwner) {