Fix BadTokenException and IllegalArgmentException thrown when showing or dismissing Modal
Reviewed By: achen1 Differential Revision: D6531148 fbshipit-source-id: 1d3f6e041ac68ad13120c56ea5223557fca34f0d
This commit is contained in:
parent
1d16923063
commit
c465599a27
|
@ -128,7 +128,10 @@ public class ReactModalHostView extends ViewGroup implements LifecycleEventListe
|
|||
|
||||
private void dismiss() {
|
||||
if (mDialog != null) {
|
||||
Activity currentActivity = getCurrentActivity();
|
||||
if (mDialog.isShowing() && (currentActivity == null || !currentActivity.isFinishing())) {
|
||||
mDialog.dismiss();
|
||||
}
|
||||
mDialog = null;
|
||||
|
||||
// We need to remove the mHostView from the parent
|
||||
|
@ -209,8 +212,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();
|
||||
|
||||
|
@ -233,7 +237,7 @@ public class ReactModalHostView extends ViewGroup implements LifecycleEventListe
|
|||
} else {
|
||||
// We redirect the rest of the key events to the current activity, since the activity
|
||||
// expects to receive those events and react to them, ie. in the case of the dev menu
|
||||
Activity currentActivity = ((ReactContext) getContext()).getCurrentActivity();
|
||||
Activity currentActivity = getCurrentActivity();
|
||||
if (currentActivity != null) {
|
||||
return currentActivity.onKeyUp(keyCode, event);
|
||||
}
|
||||
|
@ -247,8 +251,14 @@ public class ReactModalHostView extends ViewGroup implements LifecycleEventListe
|
|||
if (mHardwareAccelerated) {
|
||||
mDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
|
||||
}
|
||||
if (currentActivity == null || !currentActivity.isFinishing()) {
|
||||
mDialog.show();
|
||||
}
|
||||
}
|
||||
|
||||
private @Nullable Activity getCurrentActivity() {
|
||||
return ((ReactContext) getContext()).getCurrentActivity();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the view that will be the root view of the dialog. We are wrapping this in a
|
||||
|
|
Loading…
Reference in New Issue