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 386dd477a3..51c3373066 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 @@ -27,13 +27,14 @@ object SpoilerPaint { */ var shader: BitmapShader? = null - private val SIZE = if (Util.isLowMemory(ApplicationDependencies.getApplication())) 100.dp else 200.dp - private val PARTICLES_PER_PIXEL = if (Util.isLowMemory(ApplicationDependencies.getApplication())) 0.002f else 0.005f + private val WIDTH = if (Util.isLowMemory(ApplicationDependencies.getApplication())) 50.dp else 100.dp + private val HEIGHT = if (Util.isLowMemory(ApplicationDependencies.getApplication())) 10.dp else 20.dp + private val PARTICLES_PER_PIXEL = if (Util.isLowMemory(ApplicationDependencies.getApplication())) 0.002f else 0.004f - private var shaderBitmap: Bitmap = Bitmap.createBitmap(SIZE, SIZE, Bitmap.Config.ARGB_8888) - private var bufferBitmap: Bitmap = Bitmap.createBitmap(SIZE, SIZE, Bitmap.Config.ARGB_8888) + private var shaderBitmap: Bitmap = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ALPHA_8) + private var bufferBitmap: Bitmap = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ALPHA_8) - private val bounds: Rect = Rect(0, 0, SIZE, SIZE) + private val bounds: Rect = Rect(0, 0, WIDTH, HEIGHT) private val paddedBounds: Rect private val alphaStrength = arrayOf(0.9f, 0.7f, 0.5f) @@ -67,16 +68,16 @@ object SpoilerPaint { } /** - * Invoke every time before you need to use the [paint]. + * Invoke every time before you need to use the [shader]. */ @MainThread fun update() { val now = System.currentTimeMillis() var dt = now - lastDrawTime - if (dt < 32) { + if (dt < 48) { return - } else if (dt > 48) { - dt = 32 + } else if (dt > 64) { + dt = 48 } lastDrawTime = now 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 9b61782927..e6c4248cb9 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 @@ -1,13 +1,12 @@ package org.thoughtcrime.securesms.components.spoiler -import android.animation.ValueAnimator +import android.animation.TimeAnimator 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 androidx.core.content.ContextCompat import androidx.lifecycle.DefaultLifecycleObserver @@ -34,15 +33,11 @@ class SpoilerRendererDelegate @JvmOverloads constructor( private val cachedAnnotations = HashMap>() private val cachedMeasurements = HashMap() - private val animator = ValueAnimator.ofInt(0, 100).apply { - duration = 1000 - interpolator = LinearInterpolator() - addUpdateListener { + private val animator = TimeAnimator().apply { + setTimeListener { _, _, _ -> SpoilerPaint.update() view.invalidate() } - repeatCount = ValueAnimator.INFINITE - repeatMode = ValueAnimator.REVERSE } init {