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 5dd361f1d83..0d37ec5982e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java @@ -140,6 +140,7 @@ public class DevSupportManagerImpl private @Nullable ErrorType mLastErrorType; private @Nullable DevBundleDownloadListener mBundleDownloadListener; private @Nullable List mErrorCustomizers; + private @Nullable PackagerLocationCustomizer mPackagerLocationCustomizer; private InspectorPackagerConnection.BundleStatus mBundleStatus; @@ -877,8 +878,19 @@ public class DevSupportManagerImpl } @Override - public void isPackagerRunning(PackagerStatusCallback callback) { - mDevServerHelper.isPackagerRunning(callback); + public void isPackagerRunning(final PackagerStatusCallback callback) { + Runnable checkPackagerRunning = + new Runnable() { + @Override + public void run() { + mDevServerHelper.isPackagerRunning(callback); + } + }; + if (mPackagerLocationCustomizer != null) { + mPackagerLocationCustomizer.run(checkPackagerRunning); + } else { + checkPackagerRunning.run(); + } } @Override @@ -1240,4 +1252,9 @@ public class DevSupportManagerImpl private static String getReloadAppAction(Context context) { return context.getPackageName() + RELOAD_APP_ACTION_SUFFIX; } + + @Override + public void setPackagerLocationCustomizer(PackagerLocationCustomizer packagerLocationCustomizer) { + mPackagerLocationCustomizer = packagerLocationCustomizer; + } } 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 267a455e6eb..2001f11ff45 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/devsupport/DisabledDevSupportManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/devsupport/DisabledDevSupportManager.java @@ -130,7 +130,7 @@ public class DisabledDevSupportManager implements DevSupportManager { public void reloadJSFromServer(String bundleURL) {} @Override - public void isPackagerRunning(PackagerStatusCallback callback) {} + public void isPackagerRunning(final PackagerStatusCallback callback) {} @Override public @Nullable File downloadBundleResourceFromUrlSync( @@ -151,6 +151,10 @@ public class DisabledDevSupportManager implements DevSupportManager { @Override public void registerErrorCustomizer(ErrorCustomizer errorCustomizer) {} + @Override + public void setPackagerLocationCustomizer( + PackagerLocationCustomizer packagerLocationCustomizer) {} + @Override public void handleException(Exception e) { mDefaultNativeModuleCallExceptionHandler.handleException(e); 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 43a477e3fad..10684ce3d4f 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 @@ -89,4 +89,15 @@ public interface DevSupportManager extends NativeModuleCallExceptionHandler { StackFrame[] getLastErrorStack(); void registerErrorCustomizer(ErrorCustomizer errorCustomizer); + + /** + * The PackagerLocationCustomizer allows you to have a dynamic packager location that is + * determined right before loading the packager. Your customizer must call |callback|, as loading + * will be blocked waiting for it to resolve. + */ + public interface PackagerLocationCustomizer { + void run(Runnable callback); + } + + void setPackagerLocationCustomizer(PackagerLocationCustomizer packagerLocationCustomizer); }