Do not animate spoilers if system animations are disabled.

This commit is contained in:
Greyson Parrelli
2023-06-16 15:51:24 -04:00
committed by GitHub
parent 767cfbc717
commit 272860f071
2 changed files with 10 additions and 5 deletions

View File

@@ -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
)
}
}

View File

@@ -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<Int, Map<Annotation, SpoilerClickableSpan?>>()
private val cachedMeasurements = HashMap<Int, SpanMeasurements>()
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) {