- Add DevSetting native module (making it cross-platform) (#24441)

Summary:
React Native has a `NativeModule` to manipulate programmatically the dev menu options (live reload, hot reload, remote debugging, etc), called [`DevSettings`](https://github.com/facebook/react-native/blob/master/React/Modules/RCTDevSettings.mm#L120). However this module is only available for iOS.

This PR brings the same `DevSettings` for Android, making it a cross-platform NativeModule.

Motivation: Right now if your app needs to programmatically reload RN, one option is to install [`react-native-restart`](https://www.npmjs.com/package/react-native-restart). It's a tiny dependency, but it's annoying to have to install it, while the code to do so is inside RN codebase. According to NPM, react-native-restart has ~12k weekly downloads, shows it's a recurring feature for many apps (my case).

Thus making `NativeModules.DevSettings` is a small increment in the codebase, just exposing the dev menu methods, to improve the Development Experience

[Android] [Added] - Add DevSetting native module (making it cross-platform)

With expection of `setIsShakeToShowDevMenuEnabled`, the following methods will be available for both platforms:
* reload
* setHotLoadingEnabled
* setIsDebuggingRemotely
* setIsShakeToShowDevMenuEnabled
* setLiveReloadEnabled
* setProfilingEnabled
* toggleElementInspector
Pull Request resolved: https://github.com/facebook/react-native/pull/24441

Differential Revision: D14932751

Pulled By: cpojer

fbshipit-source-id: 465e6a89c3beb5fd1ea22e80ea02e9438f596a09
This commit is contained in:
Estevão Lucas
2019-04-17 11:00:17 -07:00
committed by Facebook Github Bot
parent 62ff7d6863
commit e76a7df5b5
6 changed files with 193 additions and 1 deletions
@@ -1040,6 +1040,90 @@ public class DevSupportManagerImpl implements
mDevServerHelper.closeInspectorConnection();
}
@Override
public void setHotModuleReplacementEnabled(final boolean isHotModuleReplacementEnabled) {
if (!mIsDevSupportEnabled) {
return;
}
UiThreadUtil.runOnUiThread(
new Runnable() {
@Override
public void run() {
mDevSettings.setHotModuleReplacementEnabled(isHotModuleReplacementEnabled);
handleReloadJS();
}
}
);
}
@Override
public void setRemoteJSDebugEnabled(final boolean isRemoteJSDebugEnabled) {
if (!mIsDevSupportEnabled) {
return;
}
UiThreadUtil.runOnUiThread(
new Runnable() {
@Override
public void run() {
mDevSettings.setRemoteJSDebugEnabled(isRemoteJSDebugEnabled);
handleReloadJS();
}
}
);
}
@Override
public void setReloadOnJSChangeEnabled(final boolean isReloadOnJSChangeEnabled) {
if (!mIsDevSupportEnabled) {
return;
}
UiThreadUtil.runOnUiThread(
new Runnable() {
@Override
public void run() {
mDevSettings.setReloadOnJSChangeEnabled(isReloadOnJSChangeEnabled);
handleReloadJS();
}
}
);
}
@Override
public void setFpsDebugEnabled(final boolean isFpsDebugEnabled) {
if (!mIsDevSupportEnabled) {
return;
}
UiThreadUtil.runOnUiThread(
new Runnable() {
@Override
public void run() {
mDevSettings.setFpsDebugEnabled(isFpsDebugEnabled);
}
}
);
}
@Override
public void toggleElementInspector() {
if (!mIsDevSupportEnabled) {
return;
}
UiThreadUtil.runOnUiThread(
new Runnable() {
@Override
public void run() {
mDevSettings.setElementInspectorEnabled(!mDevSettings.isElementInspectorEnabled());
mReactInstanceManagerHelper.toggleElementInspector();
}
}
);
}
private void reload() {
UiThreadUtil.assertOnUiThread();
@@ -78,6 +78,31 @@ public class DisabledDevSupportManager implements DevSupportManager {
}
@Override
public void setHotModuleReplacementEnabled(boolean isHotModuleReplacementEnabled) {
}
@Override
public void setRemoteJSDebugEnabled(boolean isRemoteJSDebugEnabled) {
}
@Override
public void setReloadOnJSChangeEnabled(boolean isReloadOnJSChangeEnabled) {
}
@Override
public void setFpsDebugEnabled(boolean isFpsDebugEnabled) {
}
@Override
public void toggleElementInspector() {
}
@Override
public boolean getDevSupportEnabled() {
return false;
@@ -162,7 +187,7 @@ public class DisabledDevSupportManager implements DevSupportManager {
@Override
public void registerErrorCustomizer(ErrorCustomizer errorCustomizer) {
}
@Override
@@ -45,6 +45,11 @@ public interface DevSupportManager extends NativeModuleCallExceptionHandler {
void handleReloadJS();
void reloadJSFromServer(final String bundleURL);
void isPackagerRunning(PackagerStatusCallback callback);
void setHotModuleReplacementEnabled(final boolean isHotModuleReplacementEnabled);
void setRemoteJSDebugEnabled(final boolean isRemoteJSDebugEnabled);
void setReloadOnJSChangeEnabled(final boolean isReloadOnJSChangeEnabled);
void setFpsDebugEnabled(final boolean isFpsDebugEnabled);
void toggleElementInspector();
@Nullable File downloadBundleResourceFromUrlSync(
final String resourceURL,
final File outputFile);