mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-02-24 03:35:58 +00:00
Do not animate spoilers if system animations are disabled.
This commit is contained in:
@@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user