Fix crash if animations disabled
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user