diff --git a/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java b/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java
index 38ee1bca285..707b9330394 100644
--- a/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java
+++ b/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java
@@ -79,7 +79,7 @@ public class DevServerHelper {
}
public interface PackagerCommandListener {
- void onPackagerReloadCommand();
+ void onReload();
}
public interface PackagerStatusCallback {
@@ -88,15 +88,15 @@ public class DevServerHelper {
private final DevInternalSettings mSettings;
private final OkHttpClient mClient;
+ private final JSPackagerWebSocketClient mPackagerConnection;
private final Handler mRestartOnChangePollingHandler;
private boolean mOnChangePollingEnabled;
- private @Nullable JSPackagerWebSocketClient mPackagerConnection;
private @Nullable OkHttpClient mOnChangePollingClient;
private @Nullable OnServerContentChangeListener mOnServerContentChangeListener;
private @Nullable Call mDownloadBundleFromURLCall;
- public DevServerHelper(DevInternalSettings settings) {
+ public DevServerHelper(DevInternalSettings settings, final PackagerCommandListener commandListener) {
mSettings = settings;
mClient = new OkHttpClient.Builder()
.connectTimeout(HTTP_CONNECT_TIMEOUT_MS, TimeUnit.MILLISECONDS)
@@ -105,32 +105,18 @@ public class DevServerHelper {
.build();
mRestartOnChangePollingHandler = new Handler();
- }
-
- public void openPackagerConnection(final PackagerCommandListener commandListener) {
- if (mPackagerConnection != null) {
- FLog.w(ReactConstants.TAG, "Packager connection already open, nooping.");
- return;
- }
mPackagerConnection = new JSPackagerWebSocketClient(getPackagerConnectionURL(),
new JSPackagerWebSocketClient.JSPackagerCallback() {
@Override
public void onMessage(String target, String action) {
if (commandListener != null && "bridge".equals(target) && "reload".equals(action)) {
- commandListener.onPackagerReloadCommand();
+ commandListener.onReload();
}
}
});
mPackagerConnection.connect();
}
- public void closePackagerConnection() {
- if (mPackagerConnection != null) {
- mPackagerConnection.closeQuietly();
- mPackagerConnection = null;
- }
- }
-
/** Intent action for reloading the JS */
public static String getReloadAppAction(Context context) {
return context.getPackageName() + RELOAD_APP_ACTION_SUFFIX;
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 f126b951621..68eeec8bd8b 100644
--- a/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java
+++ b/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java
@@ -48,7 +48,6 @@ import com.facebook.react.bridge.UiThreadUtil;
import com.facebook.react.common.ReactConstants;
import com.facebook.react.common.ShakeDetector;
import com.facebook.react.common.futures.SimpleSettableFuture;
-import com.facebook.react.devsupport.DevServerHelper.PackagerCommandListener;
import com.facebook.react.devsupport.StackTraceHelper.StackFrame;
import com.facebook.react.modules.debug.DeveloperSettings;
@@ -83,7 +82,7 @@ import okhttp3.RequestBody;
* {@code }
* {@code }
*/
-public class DevSupportManagerImpl implements DevSupportManager, PackagerCommandListener {
+public class DevSupportManagerImpl implements DevSupportManager {
private static final int JAVA_ERROR_COOKIE = -1;
private static final int JSEXCEPTION_ERROR_COOKIE = -1;
@@ -121,6 +120,7 @@ public class DevSupportManagerImpl implements DevSupportManager, PackagerCommand
private int mLastErrorCookie = 0;
private @Nullable ErrorType mLastErrorType;
+
private static class JscProfileTask extends AsyncTask {
private static final MediaType JSON =
MediaType.parse("application/json; charset=utf-8");
@@ -178,7 +178,19 @@ public class DevSupportManagerImpl implements DevSupportManager, PackagerCommand
mApplicationContext = applicationContext;
mJSAppBundleName = packagerPathForJSBundleName;
mDevSettings = new DevInternalSettings(applicationContext, this);
- mDevServerHelper = new DevServerHelper(mDevSettings);
+ mDevServerHelper = new DevServerHelper(
+ mDevSettings,
+ new DevServerHelper.PackagerCommandListener() {
+ @Override
+ public void onReload() {
+ UiThreadUtil.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ handleReloadJS();
+ }
+ });
+ }
+ });
// Prepare shake gesture detector (will be started/stopped from #reload)
mShakeDetector = new ShakeDetector(new ShakeDetector.ShakeListener() {
@@ -225,11 +237,8 @@ public class DevSupportManagerImpl implements DevSupportManager, PackagerCommand
if (e instanceof JSException) {
FLog.e(ReactConstants.TAG, "Exception in native call from JS", e);
// TODO #11638796: convert the stack into something useful
- showNewError(
- e.getMessage() + "\n\n" + ((JSException) e).getStack(),
- new StackFrame[] {},
- JSEXCEPTION_ERROR_COOKIE,
- ErrorType.JS);
+ showNewError(e.getMessage() + "\n\n" + ((JSException) e).getStack(), new StackFrame[] {},
+ JSEXCEPTION_ERROR_COOKIE, ErrorType.JS);
} else {
showNewJavaError(e.getMessage(), e);
}
@@ -379,7 +388,7 @@ public class DevSupportManagerImpl implements DevSupportManager, PackagerCommand
}
});
options.put(
- mApplicationContext.getString(R.string.catalyst_element_inspector),
+ mApplicationContext.getString(R.string.catalyst_element_inspector),
new DevOptionHandler() {
@Override
public void onOptionSelected() {
@@ -665,16 +674,6 @@ public class DevSupportManagerImpl implements DevSupportManager, PackagerCommand
return mLastErrorStack;
}
- @Override
- public void onPackagerReloadCommand() {
- UiThreadUtil.runOnUiThread(new Runnable() {
- @Override
- public void run() {
- handleReloadJS();
- }
- });
- }
-
private void updateLastErrorInfo(
final String message,
final StackFrame[] stack,
@@ -803,7 +802,6 @@ public class DevSupportManagerImpl implements DevSupportManager, PackagerCommand
mIsReceiverRegistered = true;
}
- mDevServerHelper.openPackagerConnection(this);
if (mDevSettings.isReloadOnJSChangeEnabled()) {
mDevServerHelper.startPollingOnChangeEndpoint(
new DevServerHelper.OnServerContentChangeListener() {
@@ -843,7 +841,6 @@ public class DevSupportManagerImpl implements DevSupportManager, PackagerCommand
mDevOptionsDialog.dismiss();
}
- mDevServerHelper.closePackagerConnection();
mDevServerHelper.stopPollingOnChangeEndpoint();
}
}
diff --git a/ReactAndroid/src/main/java/com/facebook/react/devsupport/JSPackagerWebSocketClient.java b/ReactAndroid/src/main/java/com/facebook/react/devsupport/JSPackagerWebSocketClient.java
index 0a3f96951f0..fd5f93bc018 100644
--- a/ReactAndroid/src/main/java/com/facebook/react/devsupport/JSPackagerWebSocketClient.java
+++ b/ReactAndroid/src/main/java/com/facebook/react/devsupport/JSPackagerWebSocketClient.java
@@ -40,7 +40,6 @@ public class JSPackagerWebSocketClient implements WebSocketListener {
private final String mUrl;
private final Handler mHandler;
- private boolean mClosed = false;
private boolean mSuppressConnectionErrors;
public interface JSPackagerCallback {
@@ -58,9 +57,6 @@ public class JSPackagerWebSocketClient implements WebSocketListener {
}
public void connect() {
- if (mClosed) {
- throw new IllegalStateException("Can't connect closed client");
- }
OkHttpClient httpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
@@ -73,9 +69,6 @@ public class JSPackagerWebSocketClient implements WebSocketListener {
}
private void reconnect() {
- if (mClosed) {
- throw new IllegalStateException("Can't reconnect closed client");
- }
if (!mSuppressConnectionErrors) {
FLog.w(TAG, "Couldn't connect to packager, will silently retry");
mSuppressConnectionErrors = true;
@@ -84,21 +77,12 @@ public class JSPackagerWebSocketClient implements WebSocketListener {
new Runnable() {
@Override
public void run() {
- // check that we haven't been closed in the meantime
- if (!mClosed) {
- connect();
- }
+ connect();
}
- },
- RECONNECT_DELAY_MS);
+ }, RECONNECT_DELAY_MS);
}
public void closeQuietly() {
- mClosed = true;
- closeWebSocketQuietly();
- }
-
- private void closeWebSocketQuietly() {
if (mWebSocket != null) {
try {
mWebSocket.close(1000, "End of session");
@@ -167,9 +151,7 @@ public class JSPackagerWebSocketClient implements WebSocketListener {
if (mWebSocket != null) {
abort("Websocket exception", e);
}
- if (!mClosed) {
- reconnect();
- }
+ reconnect();
}
@Override
@@ -181,9 +163,7 @@ public class JSPackagerWebSocketClient implements WebSocketListener {
@Override
public void onClose(int code, String reason) {
mWebSocket = null;
- if (!mClosed) {
- reconnect();
- }
+ reconnect();
}
@Override
@@ -193,6 +173,6 @@ public class JSPackagerWebSocketClient implements WebSocketListener {
private void abort(String message, Throwable cause) {
FLog.e(TAG, "Error occurred, shutting down websocket connection: " + message, cause);
- closeWebSocketQuietly();
+ closeQuietly();
}
}