Fix crash if animations disabled

master
Koitharu 2 years ago
parent e330be5d13
commit e6c8591bf8
Signed by: Koitharu
GPG Key ID: 676DEE768C17A9D7

@ -16,8 +16,8 @@ android {
applicationId 'org.koitharu.kotatsu' applicationId 'org.koitharu.kotatsu'
minSdk = 21 minSdk = 21
targetSdk = 34 targetSdk = 34
versionCode = 638 versionCode = 639
versionName = '7.0-rc1' versionName = '7.0-rc2'
generatedDensities = [] generatedDensities = []
testInstrumentationRunner 'org.koitharu.kotatsu.HiltTestRunner' testInstrumentationRunner 'org.koitharu.kotatsu.HiltTestRunner'
ksp { ksp {

@ -7,7 +7,6 @@ import android.graphics.ColorFilter
import android.graphics.PixelFormat import android.graphics.PixelFormat
import android.graphics.drawable.Animatable import android.graphics.drawable.Animatable
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import androidx.core.graphics.ColorUtils
import androidx.interpolator.view.animation.FastOutSlowInInterpolator import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import com.google.android.material.animation.ArgbEvaluatorCompat import com.google.android.material.animation.ArgbEvaluatorCompat
import org.koitharu.kotatsu.R import org.koitharu.kotatsu.R
@ -21,7 +20,6 @@ class AnimatedPlaceholderDrawable(context: Context) : Drawable(), Animatable, Ti
private val colorLow = context.getThemeColor(materialR.attr.colorSurfaceContainerLowest) private val colorLow = context.getThemeColor(materialR.attr.colorSurfaceContainerLowest)
private val colorHigh = context.getThemeColor(materialR.attr.colorSurfaceContainerHighest) private val colorHigh = context.getThemeColor(materialR.attr.colorSurfaceContainerHighest)
private var currentColor: Int = colorLow private var currentColor: Int = colorLow
private var alpha: Int = 255
private val interpolator = FastOutSlowInInterpolator() private val interpolator = FastOutSlowInInterpolator()
private val period = context.getAnimationDuration(R.integer.config_longAnimTime) * 2 private val period = context.getAnimationDuration(R.integer.config_longAnimTime) * 2
private val timeAnimator = TimeAnimator() private val timeAnimator = TimeAnimator()
@ -32,7 +30,7 @@ class AnimatedPlaceholderDrawable(context: Context) : Drawable(), Animatable, Ti
} }
override fun draw(canvas: Canvas) { override fun draw(canvas: Canvas) {
if (!isRunning) { if (!isRunning && period > 0) {
updateColor() updateColor()
start() start()
} }
@ -45,10 +43,11 @@ class AnimatedPlaceholderDrawable(context: Context) : Drawable(), Animatable, Ti
override fun setColorFilter(colorFilter: ColorFilter?) = Unit override fun setColorFilter(colorFilter: ColorFilter?) = Unit
@Suppress("DeprecatedCallableAddReplaceWith")
@Deprecated("Deprecated in Java") @Deprecated("Deprecated in Java")
override fun getOpacity(): Int = if (alpha == 255) PixelFormat.OPAQUE else PixelFormat.TRANSLUCENT override fun getOpacity(): Int = PixelFormat.OPAQUE
override fun getAlpha(): Int = alpha override fun getAlpha(): Int = 255
override fun onTimeUpdate(animation: TimeAnimator?, totalTime: Long, deltaTime: Long) { override fun onTimeUpdate(animation: TimeAnimator?, totalTime: Long, deltaTime: Long) {
callback?.also { callback?.also {
@ -68,13 +67,12 @@ class AnimatedPlaceholderDrawable(context: Context) : Drawable(), Animatable, Ti
override fun isRunning(): Boolean = timeAnimator.isStarted override fun isRunning(): Boolean = timeAnimator.isStarted
private fun updateColor() { private fun updateColor() {
if (period <= 0f) {
return
}
val ph = period / 2 val ph = period / 2
val fraction = abs((System.currentTimeMillis() % period) - ph) / ph.toFloat() val fraction = abs((System.currentTimeMillis() % period) - ph) / ph.toFloat()
var color = ArgbEvaluatorCompat.getInstance() currentColor = ArgbEvaluatorCompat.getInstance()
.evaluate(interpolator.getInterpolation(fraction), colorLow, colorHigh) .evaluate(interpolator.getInterpolation(fraction), colorLow, colorHigh)
if (alpha != 255) {
color = ColorUtils.setAlphaComponent(color, alpha)
}
currentColor = color
} }
} }

@ -22,6 +22,7 @@ import androidx.core.widget.TextViewCompat
import org.koitharu.kotatsu.R import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.core.util.ext.getAnimationDuration import org.koitharu.kotatsu.core.util.ext.getAnimationDuration
import org.koitharu.kotatsu.core.util.ext.getThemeColorStateList import org.koitharu.kotatsu.core.util.ext.getThemeColorStateList
import org.koitharu.kotatsu.core.util.ext.isAnimationsEnabled
import org.koitharu.kotatsu.core.util.ext.resolveDp import org.koitharu.kotatsu.core.util.ext.resolveDp
import org.koitharu.kotatsu.core.util.ext.setTextAndVisible import org.koitharu.kotatsu.core.util.ext.setTextAndVisible
import org.koitharu.kotatsu.core.util.ext.textAndVisible import org.koitharu.kotatsu.core.util.ext.textAndVisible
@ -146,7 +147,7 @@ class ProgressButton @JvmOverloads constructor(
fun setProgress(value: Float, animate: Boolean) { fun setProgress(value: Float, animate: Boolean) {
val prevAnimator = progressAnimator val prevAnimator = progressAnimator
if (animate) { if (animate && context.isAnimationsEnabled) {
if (value == targetProgress) { if (value == targetProgress) {
return return
} }

Loading…
Cancel
Save