diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.java b/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.java index 720131283887..2cd1dab1e732 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.java @@ -128,7 +128,7 @@ public boolean shouldShowDevMenuOrReload(int keyCode, KeyEvent event) { Assertions.assertNotNull(mDoubleTapReloadRecognizer) .didDoubleTapR(keyCode, mActivity.getCurrentFocus()); if (didDoubleTapR) { - getReactNativeHost().getReactInstanceManager().getDevSupportManager().handleReloadJS(); + getReactNativeHost().getReactInstanceManager().getDevSupportManager().reloadExpoApp(); return true; } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java b/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java index 1bf470d1478f..e05977894d6f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java @@ -106,8 +106,8 @@ private enum ErrorType { private static final String EXOPACKAGE_LOCATION_FORMAT = "/data/local/tmp/exopackage/%s//secondary-dex"; - public static final String EMOJI_HUNDRED_POINTS_SYMBOL = " \uD83D\uDCAF"; - public static final String EMOJI_FACE_WITH_NO_GOOD_GESTURE = " \uD83D\uDE45"; + public static String EMOJI_HUNDRED_POINTS_SYMBOL = " 💯"; + public static String EMOJI_FACE_WITH_NO_GOOD_GESTURE = " 🙅"; private final List mExceptionLoggers = new ArrayList<>(); @@ -424,6 +424,26 @@ public void run() { }); } + private int getExponentActivityId() { + return -1; + } + + @Override + public void reloadExpoApp() { + try { + Class.forName("host.exp.exponent.ReactNativeStaticHelpers").getMethod("reloadFromManifest", int.class).invoke(null, getExponentActivityId()); + } catch (Exception expoHandleErrorException) { + expoHandleErrorException.printStackTrace(); + + // reloadExpoApp replaces handleReloadJS in some places + // where in Expo we would like to reload from manifest. + // If so, if anything goes wrong here, we can fall back + // to plain JS reload. + handleReloadJS(); + } + } + + @Override public void showDevOptionsDialog() { if (mDevOptionsDialog != null || !mIsDevSupportEnabled || ActivityManager.isUserAMonkey()) { @@ -445,7 +465,10 @@ public void onOptionSelected() { .show(); mDevSettings.setHotModuleReplacementEnabled(false); } - handleReloadJS(); + + // NOTE(brentvatne): rather than reload just JS we need to reload the entire project from manifest + // handleReloadJS(); + reloadExpoApp(); } }); options.put( @@ -463,7 +486,7 @@ public void onOptionSelected() { handleReloadJS(); } }); - if (mDevSettings.isNuclideJSDebugEnabled()) { + expo_transformer_remove: if (mDevSettings.isNuclideJSDebugEnabled()) { options.put( mApplicationContext.getString(R.string.reactandroid_catalyst_debug_nuclide), new DevOptionHandler() { @@ -473,7 +496,8 @@ public void onOptionSelected() { } }); } - options.put( + // NOTE(brentvatne): This option does not make sense for Expo + expo_transformer_remove: options.put( mApplicationContext.getString(R.string.reactandroid_catalyst_change_bundle_location), new DevOptionHandler() { @Override @@ -537,7 +561,7 @@ public void onOptionSelected() { mCurrentContext.getJSModule(HMRClient.class).disable(); } } - if (nextEnabled && !mDevSettings.isJSDevModeEnabled()) { + expo_transformer_remove: if (nextEnabled && !mDevSettings.isJSDevModeEnabled()) { Toast.makeText( mApplicationContext, mApplicationContext.getString(R.string.reactandroid_catalyst_hot_reloading_auto_enable), @@ -549,7 +573,7 @@ public void onOptionSelected() { } }); - options.put( + expo_transformer_remove: options.put( mIsSamplingProfilerEnabled ? mApplicationContext.getString(R.string.reactandroid_catalyst_sample_profiler_disable) : mApplicationContext.getString(R.string.reactandroid_catalyst_sample_profiler_enable), @@ -579,7 +603,7 @@ public void onOptionSelected() { mDevSettings.setFpsDebugEnabled(!mDevSettings.isFpsDebugEnabled()); } }); - options.put( + expo_transformer_remove: options.put( mApplicationContext.getString(R.string.reactandroid_catalyst_settings), new DevOptionHandler() { @Override @@ -838,6 +862,7 @@ public void onInternalSettingsChanged() { reloadSettings(); } + // NOTE(brentvatne): this is confusingly called the first time the app loads! @Override public void handleReloadJS() { @@ -1180,6 +1205,7 @@ public void run() { }); } + // NOTE(brentvatne): this is confusingly called the first time the app loads! private void reload() { UiThreadUtil.assertOnUiThread(); diff --git a/ReactAndroid/src/main/java/com/facebook/react/devsupport/DisabledDevSupportManager.java b/ReactAndroid/src/main/java/com/facebook/react/devsupport/DisabledDevSupportManager.java index 09de892ecdf8..b2f6a704d672 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/devsupport/DisabledDevSupportManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/devsupport/DisabledDevSupportManager.java @@ -119,6 +119,10 @@ public void reloadSettings() {} @Override public void handleReloadJS() {} + + @Override + public void reloadExpoApp() {} + @Override public void reloadJSFromServer(String bundleURL) {} diff --git a/ReactAndroid/src/main/java/com/facebook/react/devsupport/RedBoxDialog.java b/ReactAndroid/src/main/java/com/facebook/react/devsupport/RedBoxDialog.java index d44574972b52..5cba5343fdd5 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/devsupport/RedBoxDialog.java +++ b/ReactAndroid/src/main/java/com/facebook/react/devsupport/RedBoxDialog.java @@ -249,7 +249,7 @@ protected RedBoxDialog( new View.OnClickListener() { @Override public void onClick(View v) { - mDevSupportManager.handleReloadJS(); + mDevSupportManager.reloadExpoApp(); } }); mDismissButton = (Button) findViewById(R.id.rn_redbox_dismiss_button); @@ -303,7 +303,7 @@ public boolean onKeyUp(int keyCode, KeyEvent event) { return true; } if (mDoubleTapReloadRecognizer.didDoubleTapR(keyCode, getCurrentFocus())) { - mDevSupportManager.handleReloadJS(); + mDevSupportManager.reloadExpoApp(); } return super.onKeyUp(keyCode, event); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevSupportManager.java b/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevSupportManager.java index 360b76c04e7e..b5d3295966ab 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevSupportManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevSupportManager.java @@ -60,6 +60,8 @@ public interface DevSupportManager extends NativeModuleCallExceptionHandler { void handleReloadJS(); + void reloadExpoApp(); + void reloadJSFromServer(final String bundleURL); void isPackagerRunning(PackagerStatusCallback callback);