diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenter.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenter.java index 68fec90dbe1..99efffc2e06 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenter.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenter.java @@ -105,7 +105,7 @@ public void onAnimationEnd(Animator animation) { } private void onDismissEnd(ViewController toDismiss, CommandListener listener) { - toDismiss.destroy(); listener.onSuccess(toDismiss.getId()); + toDismiss.destroy(); } } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java index c1c5137b974..284aa5972b6 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java @@ -1,7 +1,6 @@ package com.reactnativenavigation.viewcontrollers.modal; import android.app.Activity; -import androidx.coordinatorlayout.widget.CoordinatorLayout; import android.widget.FrameLayout; import com.reactnativenavigation.BaseTest; @@ -20,11 +19,15 @@ import org.json.JSONException; import org.json.JSONObject; import org.junit.Test; +import org.mockito.InOrder; import org.mockito.Mockito; +import androidx.coordinatorlayout.widget.CoordinatorLayout; + import static org.assertj.core.api.Java6Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -239,4 +242,19 @@ public void dismissModal_rejectIfContentIsNull() { uut.dismissModal(modal1, root, root, listener); verify(listener).onError(any()); } + + @Test + public void dismissModal_successIsReportedBeforeViewIsDestroyed() { + disableShowModalAnimation(modal1); + disableDismissModalAnimation(modal1); + CommandListenerAdapter listener = Mockito.mock(CommandListenerAdapter.class); + ViewController modal = spy(modal1); + InOrder inOrder = inOrder(listener, modal); + + uut.showModal(modal, root, new CommandListenerAdapter()); + + uut.dismissModal(modal, root, root, listener); + inOrder.verify(listener).onSuccess(modal.getId()); + inOrder.verify(modal).destroy(); + } }