From 3b1760d1d113ddc4211a1e6ff554ad5c912649c5 Mon Sep 17 00:00:00 2001 From: Vojtech Novak Date: Thu, 11 Apr 2019 02:33:11 -0700 Subject: [PATCH] improve dev mode and HMR interop (#24377) Summary: Motivation is following - I'm sure many people encountered this because it has been like this for a long time. 1 . you're developing something on android, HMR and dev mode is enabled 2 . you go to dev settings, you disable dev mode because you want to see how something behaves 3 . you reload the app because that's what is required for the change to take effect 4 . you wait for the bundle to be compiled and served, and when that is done, you get an error message about HMR not being a registered callable module - because HMR is not available when `__DEV__ === false` (todo screenshot) this fixes the described case by checking if HMR is enabled and dev mode disabled when reloading (step 3) and disables HMR in that case. this also fixes the case when dev mode is disabled and without knowing it, you try to enable HRM (will enable both dev hmr and dev mode). [Android] [Changed] - improve developer experience around Dev mode and HMR interop Pull Request resolved: https://github.com/facebook/react-native/pull/24377 Differential Revision: D14890695 Pulled By: cpojer fbshipit-source-id: 95b6ff4131c6d05a32aadd09a9d5ed11f602122c --- .../facebook/react/devsupport/DevInternalSettings.java | 4 ++++ .../facebook/react/devsupport/DevSupportManagerImpl.java | 8 ++++++++ .../src/main/res/devsupport/xml/rn_dev_preferences.xml | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevInternalSettings.java b/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevInternalSettings.java index 4e18237ef7c..123b728d7cb 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevInternalSettings.java +++ b/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevInternalSettings.java @@ -88,6 +88,10 @@ public class DevInternalSettings implements return mPreferences.getBoolean(PREFS_JS_DEV_MODE_DEBUG_KEY, true); } + public void setJSDevModeEnabled(boolean value) { + mPreferences.edit().putBoolean(PREFS_JS_DEV_MODE_DEBUG_KEY, value).apply(); + } + @Override public boolean isJSMinifyEnabled() { return mPreferences.getBoolean(PREFS_JS_MINIFY_DEBUG_KEY, false); 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 2d58c949ff3..b3643e77b74 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java @@ -459,6 +459,10 @@ public class DevSupportManagerImpl implements new DevOptionHandler() { @Override public void onOptionSelected() { + if (!mDevSettings.isJSDevModeEnabled() && mDevSettings.isHotModuleReplacementEnabled()) { + Toast.makeText(mApplicationContext, "HMR cannot be enabled when Dev mode is off. Disabling HMR...", Toast.LENGTH_LONG).show(); + mDevSettings.setHotModuleReplacementEnabled(false); + } handleReloadJS(); } }); @@ -509,6 +513,10 @@ public class DevSupportManagerImpl implements new DevOptionHandler() { @Override public void onOptionSelected() { + if (!mDevSettings.isHotModuleReplacementEnabled() && !mDevSettings.isJSDevModeEnabled()) { + Toast.makeText(mApplicationContext, "You're trying to enable HMR while Dev mode is off. Turning both HMR and the Dev mode on...", Toast.LENGTH_LONG).show(); + mDevSettings.setJSDevModeEnabled(true); + } mDevSettings.setHotModuleReplacementEnabled(!mDevSettings.isHotModuleReplacementEnabled()); handleReloadJS(); } diff --git a/ReactAndroid/src/main/res/devsupport/xml/rn_dev_preferences.xml b/ReactAndroid/src/main/res/devsupport/xml/rn_dev_preferences.xml index c9b1e616ee6..6208e4e8802 100644 --- a/ReactAndroid/src/main/res/devsupport/xml/rn_dev_preferences.xml +++ b/ReactAndroid/src/main/res/devsupport/xml/rn_dev_preferences.xml @@ -10,7 +10,7 @@