Permalink
Browse files

Fix BadTokenException and IllegalArgmentException thrown when showing…

… or dismissing Modal

Reviewed By: achen1

Differential Revision: D6531148

fbshipit-source-id: 1d3f6e041ac68ad13120c56ea5223557fca34f0d
  • Loading branch information...
mdvacca authored and facebook-github-bot committed Dec 11, 2017
1 parent 1d16923 commit c465599a274e6a6e42ebdb0a2289720a19447277
Showing with 15 additions and 5 deletions.
  1. +15 −5 ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java
@@ -128,7 +128,10 @@ public void onDropInstance() {
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
@@ -209,8 +212,9 @@ protected void showOrUpdate() {
} 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 boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
} 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,7 +251,13 @@ public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (mHardwareAccelerated) {
mDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
}
mDialog.show();
if (currentActivity == null || !currentActivity.isFinishing()) {
mDialog.show();
}
}
private @Nullable Activity getCurrentActivity() {
return ((ReactContext) getContext()).getCurrentActivity();
}
/**

0 comments on commit c465599

Please sign in to comment.