From 4743f40154d9301f2893e21500b9add2e4c45327 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Sat, 9 Jul 2022 10:56:37 +0300 Subject: [PATCH] Refactor animation duraton --- .../kotatsu/base/ui/widgets/FadingSnackbar.kt | 11 ++-- .../kotatsu/base/ui/widgets/FastScroller.kt | 8 ++- .../org/koitharu/kotatsu/utils/ext/CoilExt.kt | 10 ++- .../main/res/anim/bottom_sheet_slide_in.xml | 5 +- .../main/res/anim/bottom_sheet_slide_out.xml | 5 +- .../main/res/drawable/avd_bookshelf_enter.xml | 64 +++++++++---------- .../main/res/drawable/avd_bookshelf_leave.xml | 2 +- .../main/res/drawable/avd_explore_enter.xml | 7 +- .../main/res/drawable/avd_explore_leave.xml | 7 +- app/src/main/res/values/integers.xml | 1 + 10 files changed, 67 insertions(+), 53 deletions(-) diff --git a/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/FadingSnackbar.kt b/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/FadingSnackbar.kt index 909252b48..56c4a7d88 100644 --- a/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/FadingSnackbar.kt +++ b/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/FadingSnackbar.kt @@ -30,12 +30,11 @@ import com.google.android.material.color.MaterialColors import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.shape.ShapeAppearanceModel import com.google.android.material.snackbar.Snackbar +import org.koitharu.kotatsu.R import org.koitharu.kotatsu.databinding.FadingSnackbarLayoutBinding import org.koitharu.kotatsu.utils.ext.getThemeColorStateList import com.google.android.material.R as materialR -private const val ENTER_DURATION = 300L -private const val EXIT_DURATION = 200L private const val SHORT_DURATION_MS = 1_500L private const val LONG_DURATION_MS = 2_750L @@ -53,6 +52,8 @@ class FadingSnackbar @JvmOverloads constructor( ) : FrameLayout(context, attrs, defStyleAttr) { private val binding = FadingSnackbarLayoutBinding.inflate(LayoutInflater.from(context), this) + private val enterDuration = context.resources.getInteger(R.integer.config_defaultAnimTime).toLong() + private val exitDuration = context.resources.getInteger(android.R.integer.config_shortAnimTime).toLong() init { binding.snackbarLayout.background = createThemedBackground() @@ -63,7 +64,7 @@ class FadingSnackbar @JvmOverloads constructor( animate() .alpha(0f) .withEndAction { visibility = GONE } - .duration = EXIT_DURATION + .duration = exitDuration } } @@ -90,11 +91,11 @@ class FadingSnackbar @JvmOverloads constructor( visibility = VISIBLE animate() .alpha(1f) - .duration = ENTER_DURATION + .duration = enterDuration if (duration == Snackbar.LENGTH_INDEFINITE) { return } - val durationMs = ENTER_DURATION + if (duration == Snackbar.LENGTH_LONG) LONG_DURATION_MS else SHORT_DURATION_MS + val durationMs = enterDuration + if (duration == Snackbar.LENGTH_LONG) LONG_DURATION_MS else SHORT_DURATION_MS postDelayed(durationMs) { dismiss() onDismiss?.invoke() diff --git a/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/FastScroller.kt b/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/FastScroller.kt index dae2f7b1f..5ae00b18f 100644 --- a/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/FastScroller.kt +++ b/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/FastScroller.kt @@ -49,7 +49,6 @@ import org.koitharu.kotatsu.utils.ext.* import kotlin.math.roundToInt private const val BUBBLE_ANIM_DURATION = 100L -private const val SCROLLBAR_ANIM_DURATION = 300L private const val SCROLLBAR_HIDE_DELAY = 1000L private const val TRACK_SNAP_RANGE = 5 @@ -63,6 +62,9 @@ class FastScroller : LinearLayout { private val Size.textSize get() = resources.getDimension(textSizeId) + private val animationDuration = (context.resources.getInteger(R.integer.config_defaultAnimTime) * + context.animatorDurationScale).toLong() + private val bubbleView: TextView by lazy { findViewById(R.id.fastscroll_bubble) } private val handleView: ImageView by lazy { findViewById(R.id.fastscroll_handle) } private val trackView: ImageView by lazy { findViewById(R.id.fastscroll_track) } @@ -539,14 +541,14 @@ class FastScroller : LinearLayout { scrollbar.translationX = scrollbarPaddingEnd scrollbar.isVisible = true scrollbarAnimator = scrollbar.animate().translationX(0f).alpha(1f) - .setDuration(SCROLLBAR_ANIM_DURATION) + .setDuration(animationDuration) .setListener(alphaAnimatorListener) } } private fun hideScrollbar() { scrollbarAnimator = scrollbar.animate().translationX(scrollbarPaddingEnd).alpha(0f) - .setDuration(SCROLLBAR_ANIM_DURATION) + .setDuration(animationDuration) .setListener(object : AnimatorListenerAdapter() { override fun onAnimationEnd(animation: Animator) { super.onAnimationEnd(animation) diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/ext/CoilExt.kt b/app/src/main/java/org/koitharu/kotatsu/utils/ext/CoilExt.kt index 8f6906257..f6aadcbcd 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/ext/CoilExt.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/ext/CoilExt.kt @@ -9,6 +9,7 @@ import coil.request.ImageRequest import coil.request.ImageResult import coil.request.SuccessResult import com.google.android.material.progressindicator.BaseProgressIndicator +import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.network.CommonHeaders import org.koitharu.kotatsu.utils.progress.ImageRequestIndicatorListener @@ -41,7 +42,12 @@ fun ImageRequest.Builder.indicator(indicator: BaseProgressIndicator<*>): ImageRe return listener(ImageRequestIndicatorListener(indicator)) } +@Suppress("SpellCheckingInspection") fun ImageRequest.Builder.crossfade(context: Context?): ImageRequest.Builder { - val scale = context?.animatorDurationScale ?: 1f - return crossfade((300 * scale).toInt()) + if (context == null) { + crossfade(true) + return this + } + val duration = context.resources.getInteger(R.integer.config_defaultAnimTime) * context.animatorDurationScale + return crossfade(duration.toInt()) } \ No newline at end of file diff --git a/app/src/main/res/anim/bottom_sheet_slide_in.xml b/app/src/main/res/anim/bottom_sheet_slide_in.xml index 20c7c0d4e..288946773 100644 --- a/app/src/main/res/anim/bottom_sheet_slide_in.xml +++ b/app/src/main/res/anim/bottom_sheet_slide_in.xml @@ -1,6 +1,7 @@ - - - - - - - - - - - - - + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:aapt="http://schemas.android.com/aapt"> + + + + + + + + + + + diff --git a/app/src/main/res/drawable/avd_bookshelf_leave.xml b/app/src/main/res/drawable/avd_bookshelf_leave.xml index 4a7e7fcbc..7b06237b6 100644 --- a/app/src/main/res/drawable/avd_bookshelf_leave.xml +++ b/app/src/main/res/drawable/avd_bookshelf_leave.xml @@ -19,7 +19,7 @@ - - + 300 3 2