Skip to content

Commit

Permalink
Emit modalDismissed event before ViewController is destroyed (#5838)
Browse files Browse the repository at this point in the history
This is required so that a component displayed in a modal can react to the dismiss of the modal it's presented in. This change aligns behaviour with iOS.
closes #5830
  • Loading branch information
guyca authored and yogevbd committed Jan 12, 2020
1 parent a3e025c commit cf591d9
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ public void onAnimationEnd(Animator animation) {
}

private void onDismissEnd(ViewController toDismiss, CommandListener listener) {
toDismiss.destroy();
listener.onSuccess(toDismiss.getId());
toDismiss.destroy();
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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();
}
}

0 comments on commit cf591d9

Please sign in to comment.