From e5c2a66897b9c562c549e63adcf70783ea34c418 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Mon, 8 Jan 2018 09:57:33 -0800 Subject: [PATCH] Fix Modal not disappearing when navigating from inside a Modal to another activity Reviewed By: achen1 Differential Revision: D6668368 fbshipit-source-id: 809e9c978032e731478bcc8e290eb030e4ee6eca --- .../react/views/modal/ReactModalHostView.java | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java index 674c6ef8067..8dfa9dd4020 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java @@ -128,7 +128,10 @@ public class ReactModalHostView extends ViewGroup implements LifecycleEventListe private void dismiss() { if (mDialog != null) { - mDialog.dismiss(); + Activity currentActivity = getCurrentActivity(); + if (mDialog.isShowing() && (currentActivity == null || !currentActivity.isFinishing())) { + mDialog.dismiss(); + } mDialog = null; // We need to remove the mHostView from the parent @@ -168,8 +171,7 @@ public class ReactModalHostView extends ViewGroup implements LifecycleEventListe @Override public void onHostPause() { - // We dismiss the dialog and reconstitute it onHostResume - dismiss(); + // do nothing } @Override @@ -183,6 +185,10 @@ public class ReactModalHostView extends ViewGroup implements LifecycleEventListe return mDialog; } + private @Nullable Activity getCurrentActivity() { + return ((ReactContext) getContext()).getCurrentActivity(); + } + /** * showOrUpdate will display the Dialog. It is called by the manager once all properties are set * because we need to know all of them before creating the Dialog. It is also smart during @@ -209,7 +215,9 @@ public class ReactModalHostView extends ViewGroup implements LifecycleEventListe } else if (mAnimationType.equals("slide")) { theme = R.style.Theme_FullScreenDialogAnimatedSlide; } - mDialog = new Dialog(getContext(), theme); + Activity currentActivity = getCurrentActivity(); + Context context = currentActivity == null ? getContext() : currentActivity; + mDialog = new Dialog(context, theme); mDialog.setContentView(getContentView()); updateProperties(); @@ -247,7 +255,9 @@ public class ReactModalHostView extends ViewGroup implements LifecycleEventListe if (mHardwareAccelerated) { mDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); } - mDialog.show(); + if (currentActivity == null || !currentActivity.isFinishing()) { + mDialog.show(); + } } /**