mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
- 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:
committed by
Facebook Github Bot
parent
62ff7d6863
commit
e76a7df5b5
@@ -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();
|
||||
|
||||
|
||||
+26
-1
@@ -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
|
||||
|
||||
+5
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user