From a8ad19a89d31548abd2159eefb43041cad517103 Mon Sep 17 00:00:00 2001 From: Ivan Iskandar <12537387+ivaniskandar@users.noreply.github.com> Date: Fri, 18 Feb 2022 10:08:36 +0700 Subject: [PATCH] Restore bottom nav position earlier after being recreated (#6648) --- .../widget/TachiyomiBottomNavigationView.kt | 30 ++++++++----------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/widget/TachiyomiBottomNavigationView.kt b/app/src/main/java/eu/kanade/tachiyomi/widget/TachiyomiBottomNavigationView.kt index dfe220b0f4..836715b709 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/widget/TachiyomiBottomNavigationView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/widget/TachiyomiBottomNavigationView.kt @@ -10,7 +10,6 @@ import android.util.AttributeSet import android.view.ViewPropertyAnimator import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.view.doOnLayout -import androidx.core.view.doOnNextLayout import androidx.core.view.updateLayoutParams import androidx.customview.view.AbsSavedState import androidx.interpolator.view.animation.FastOutLinearInInterpolator @@ -60,19 +59,15 @@ class TachiyomiBottomNavigationView @JvmOverloads constructor( val superState = super.onSaveInstanceState() return SavedState(superState).also { it.currentState = currentState + it.translationY = translationY } } override fun onRestoreInstanceState(state: Parcelable?) { if (state is SavedState) { super.onRestoreInstanceState(state.superState) - doOnNextLayout { - if (state.currentState == STATE_UP) { - slideUp(animate = false) - } else if (state.currentState == STATE_DOWN) { - slideDown(animate = false) - } - } + super.setTranslationY(state.translationY) + currentState = state.currentState } else { super.onRestoreInstanceState(state) } @@ -86,34 +81,30 @@ class TachiyomiBottomNavigationView @JvmOverloads constructor( /** * Shows this view up. - * - * @param animate True if slide up should be animated */ - fun slideUp(animate: Boolean = true) = post { + fun slideUp() = post { currentAnimator?.cancel() clearAnimation() currentState = STATE_UP animateTranslation( 0F, - if (animate) SLIDE_UP_ANIMATION_DURATION else 0, + SLIDE_UP_ANIMATION_DURATION, LinearOutSlowInInterpolator() ) } /** * Hides this view down. [setTranslationY] won't work until [slideUp] is called. - * - * @param animate True if slide down should be animated */ - fun slideDown(animate: Boolean = true) = post { + fun slideDown() = post { currentAnimator?.cancel() clearAnimation() currentState = STATE_DOWN animateTranslation( height.toFloat(), - if (animate) SLIDE_DOWN_ANIMATION_DURATION else 0, + SLIDE_DOWN_ANIMATION_DURATION, FastOutLinearInInterpolator() ) } @@ -134,16 +125,19 @@ class TachiyomiBottomNavigationView @JvmOverloads constructor( internal class SavedState : AbsSavedState { var currentState = STATE_UP + var translationY = 0F constructor(superState: Parcelable) : super(superState) constructor(source: Parcel, loader: ClassLoader?) : super(source, loader) { - currentState = source.readByte().toInt() + currentState = source.readInt() + translationY = source.readFloat() } override fun writeToParcel(out: Parcel, flags: Int) { super.writeToParcel(out, flags) - out.writeByte(currentState.toByte()) + out.writeInt(currentState) + out.writeFloat(translationY) } companion object {