diff --git a/android/src/main/java/com/reactnativenavigation/views/animations/BaseViewAppearanceAnimator.kt b/android/src/main/java/com/reactnativenavigation/views/animations/BaseViewAppearanceAnimator.kt index 9769ffef0e4..054e1f19804 100644 --- a/android/src/main/java/com/reactnativenavigation/views/animations/BaseViewAppearanceAnimator.kt +++ b/android/src/main/java/com/reactnativenavigation/views/animations/BaseViewAppearanceAnimator.kt @@ -26,22 +26,19 @@ open class BaseViewAppearanceAnimator( var showAnimator: Animator = AnimatorSet() private set(value) { field = value - field.addListener(showAnimatorListener) + field.addListener(AnimatorListener(AnimationState.AnimatingEnter, View.VISIBLE)) field.doOnEnd { onShowAnimationEnd() } } @VisibleForTesting var hideAnimator: Animator = AnimatorSet() set(value) { field = value - field.addListener(hideAnimatorListener) + field.addListener(AnimatorListener(AnimationState.AnimatingExit, View.GONE)) field.doOnEnd { onHideAnimationEnd() } } - private val showAnimatorListener = AnimatorListener(AnimationState.AnimatingEnter, View.VISIBLE) - private val hideAnimatorListener = AnimatorListener(AnimationState.AnimatingExit, View.GONE) - private inner class AnimatorListener(private val startState: AnimationState, private val endVisibility: Int) : AnimatorListenerAdapter() { - var isCancelled = false + private var isCancelled = false override fun onAnimationStart(animation: Animator) { view.resetViewProperties() @@ -172,4 +169,4 @@ open class BaseViewAppearanceAnimator( start() } } -} \ No newline at end of file +} diff --git a/android/src/test/java/com/reactnativenavigation/views/animations/BaseViewAppearanceAnimatorTest.kt b/android/src/test/java/com/reactnativenavigation/views/animations/BaseViewAppearanceAnimatorTest.kt index 391d58452f4..90d7fbf7fff 100644 --- a/android/src/test/java/com/reactnativenavigation/views/animations/BaseViewAppearanceAnimatorTest.kt +++ b/android/src/test/java/com/reactnativenavigation/views/animations/BaseViewAppearanceAnimatorTest.kt @@ -103,7 +103,19 @@ class BaseViewAppearanceAnimatorTest : BaseTest() { assertThat(uut.hideAnimator).isEqualTo(defaultHideAnimator) } + @Test + fun hide_completesAfterPreviousHideWasCancelled() { + uut.hide() + uut.show() + uut.showAnimator.end() + + uut.hide() + uut.hideAnimator.end() + + assertThat(view.visibility).isEqualTo(View.GONE) + } + private fun assertNotAnimating() = assertThat(uut.isAnimatingHide() && uut.isAnimatingShow()).isFalse() private fun assertAnimatingShow() = assertThat(uut.isAnimatingShow() && !uut.isAnimatingHide()).isTrue() private fun assertAnimatingHide() = assertThat(uut.isAnimatingHide() && !uut.isAnimatingShow()).isTrue() -} \ No newline at end of file +}