Skip to content

Commit 272860f

Browse files
Do not animate spoilers if system animations are disabled.
1 parent 767cfbc commit 272860f

2 files changed

Lines changed: 10 additions & 5 deletions

File tree

app/src/main/java/org/thoughtcrime/securesms/components/spoiler/SpoilerPaint.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import androidx.annotation.MainThread
1111
import org.signal.core.util.DimensionUnit
1212
import org.signal.core.util.dp
1313
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
14+
import org.thoughtcrime.securesms.util.AccessibilityUtil
1415
import org.thoughtcrime.securesms.util.Util
1516
import kotlin.random.Random
1617

@@ -64,14 +65,14 @@ object SpoilerPaint {
6465
bounds.bottom + strokeWidth.toInt()
6566
)
6667

67-
update()
68+
update(!AccessibilityUtil.areAnimationsDisabled(ApplicationDependencies.getApplication()))
6869
}
6970

7071
/**
7172
* Invoke every time before you need to use the [shader].
7273
*/
7374
@MainThread
74-
fun update() {
75+
fun update(animationsEnabled: Boolean) {
7576
val now = System.currentTimeMillis()
7677
var dt = now - lastDrawTime
7778
if (dt < 48) {
@@ -86,7 +87,7 @@ object SpoilerPaint {
8687
// To avoid that, we draw into a buffer, then swap the buffer into the shader when it's fully drawn.
8788
val canvas = Canvas(bufferBitmap)
8889
bufferBitmap.eraseColor(Color.TRANSPARENT)
89-
draw(canvas, dt)
90+
draw(canvas, if (animationsEnabled) dt else 0)
9091

9192
val swap = shaderBitmap
9293
shaderBitmap = bufferBitmap
@@ -153,7 +154,7 @@ object SpoilerPaint {
153154
y = -1f,
154155
xVel = if (random.nextFloat() < 0.5f) 1f else -1f,
155156
yVel = if (random.nextFloat() < 0.5f) 1f else -1f,
156-
timeRemaining = 500 + 1000 * random.nextFloat()
157+
timeRemaining = -1f
157158
)
158159
}
159160
}

app/src/main/java/org/thoughtcrime/securesms/components/spoiler/SpoilerRendererDelegate.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import androidx.lifecycle.LifecycleOwner
1414
import org.signal.core.util.dp
1515
import org.thoughtcrime.securesms.R
1616
import org.thoughtcrime.securesms.components.spoiler.SpoilerAnnotation.SpoilerClickableSpan
17+
import org.thoughtcrime.securesms.util.AccessibilityUtil
1718
import org.thoughtcrime.securesms.util.getLifecycle
1819

1920
/**
@@ -33,9 +34,11 @@ class SpoilerRendererDelegate @JvmOverloads constructor(
3334
private val cachedAnnotations = HashMap<Int, Map<Annotation, SpoilerClickableSpan?>>()
3435
private val cachedMeasurements = HashMap<Int, SpanMeasurements>()
3536

37+
private var systemAnimationsEnabled = !AccessibilityUtil.areAnimationsDisabled(view.context)
38+
3639
private val animator = TimeAnimator().apply {
3740
setTimeListener { _, _, _ ->
38-
SpoilerPaint.update()
41+
SpoilerPaint.update(systemAnimationsEnabled)
3942
view.invalidate()
4043
}
4144
}
@@ -56,6 +59,7 @@ class SpoilerRendererDelegate @JvmOverloads constructor(
5659
view.getLifecycle().addObserver(object : DefaultLifecycleObserver {
5760
override fun onResume(owner: LifecycleOwner) {
5861
canAnimate = true
62+
systemAnimationsEnabled = !AccessibilityUtil.areAnimationsDisabled(view.context)
5963
}
6064

6165
override fun onPause(owner: LifecycleOwner) {

0 commit comments

Comments
 (0)