From eb7e89e2864e941b4a21d55a7403a6028e9a26a2 Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Tue, 2 Feb 2021 20:46:40 -0800 Subject: [PATCH] Register TurboModuleManagerDelegate builders without JSIModules Summary: How does an application register a TurboModuleManagerDelegate with ReactInstanceManager? 1. Call ReactInstanceManagerBuilder.setReactPackageTurboModuleManagerDelegateBuilder(ReactPackageTurboModuleManagerDelegate.Builder) 2. Override ReactNativeHost.getReactPackageTurboModuleManagerDelegateBuilder() Changelog: [Android][Added] - Introduce API to allow applications to register TurboModuleManagerDelegates with ReactInstanceManager Reviewed By: mdvacca Differential Revision: D26193055 fbshipit-source-id: bf82e63e6ab1c0c8f12bada92ac6852c992ec9cb --- .../java/com/facebook/react/ReactInstanceManager.java | 5 ++++- .../facebook/react/ReactInstanceManagerBuilder.java | 10 +++++++++- .../main/java/com/facebook/react/ReactNativeHost.java | 9 ++++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java index 0f2656027cc1d7..a3d5ee6780759b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java @@ -173,6 +173,7 @@ public interface ReactInstanceEventListener { private final MemoryPressureRouter mMemoryPressureRouter; private final @Nullable NativeModuleCallExceptionHandler mNativeModuleCallExceptionHandler; private final @Nullable JSIModulePackage mJSIModulePackage; + private final @Nullable ReactPackageTurboModuleManagerDelegate.Builder mTMMDelegateBuilder; private List mViewManagers; private class ReactContextInitParams { @@ -218,7 +219,8 @@ public static ReactInstanceManagerBuilder builder() { int minNumShakes, int minTimeLeftInFrameForNonBatchedOperationMs, @Nullable JSIModulePackage jsiModulePackage, - @Nullable Map customPackagerCommandHandlers) { + @Nullable Map customPackagerCommandHandlers, + @Nullable ReactPackageTurboModuleManagerDelegate.Builder tmmDelegateBuilder) { FLog.d(TAG, "ReactInstanceManager.ctor()"); initializeSoLoaderIfNecessary(applicationContext); @@ -249,6 +251,7 @@ public static ReactInstanceManagerBuilder builder() { mLifecycleState = initialLifecycleState; mMemoryPressureRouter = new MemoryPressureRouter(applicationContext); mNativeModuleCallExceptionHandler = nativeModuleCallExceptionHandler; + mTMMDelegateBuilder = tmmDelegateBuilder; synchronized (mPackages) { PrinterHolder.getPrinter() .logMessage(ReactDebugOverlayTags.RN_CORE, "RNCore: Use Split Packages"); diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java index a3b33f6cfa3b71..c06f71b9a5945f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java @@ -58,6 +58,7 @@ public class ReactInstanceManagerBuilder { private int mMinTimeLeftInFrameForNonBatchedOperationMs = -1; private @Nullable JSIModulePackage mJSIModulesPackage; private @Nullable Map mCustomPackagerCommandHandlers; + private @Nullable ReactPackageTurboModuleManagerDelegate.Builder mTMMDelegateBuilder; /* package protected */ ReactInstanceManagerBuilder() {} @@ -224,6 +225,12 @@ public ReactInstanceManagerBuilder setCustomPackagerCommandHandlers( return this; } + public ReactInstanceManagerBuilder setReactPackageTurboModuleManagerDelegateBuilder( + @Nullable ReactPackageTurboModuleManagerDelegate.Builder builder) { + mTMMDelegateBuilder = builder; + return this; + } + /** * Instantiates a new {@link ReactInstanceManager}. Before calling {@code build}, the following * must be called: @@ -286,7 +293,8 @@ public ReactInstanceManager build() { mMinNumShakes, mMinTimeLeftInFrameForNonBatchedOperationMs, mJSIModulesPackage, - mCustomPackagerCommandHandlers); + mCustomPackagerCommandHandlers, + mTMMDelegateBuilder); } private JavaScriptExecutorFactory getDefaultJSExecutorFactory( diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.java b/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.java index 188ae05f361ee1..d4c457ff87de9c 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.java @@ -72,7 +72,9 @@ protected ReactInstanceManager createReactInstanceManager() { .setJavaScriptExecutorFactory(getJavaScriptExecutorFactory()) .setUIImplementationProvider(getUIImplementationProvider()) .setJSIModulesPackage(getJSIModulePackage()) - .setInitialLifecycleState(LifecycleState.BEFORE_CREATE); + .setInitialLifecycleState(LifecycleState.BEFORE_CREATE) + .setReactPackageTurboModuleManagerDelegateBuilder( + getReactPackageTurboModuleManagerDelegateBuilder()); for (ReactPackage reactPackage : getPackages()) { builder.addPackage(reactPackage); @@ -99,6 +101,11 @@ protected ReactInstanceManager createReactInstanceManager() { return null; } + protected @Nullable ReactPackageTurboModuleManagerDelegate.Builder + getReactPackageTurboModuleManagerDelegateBuilder() { + return null; + } + protected final Application getApplication() { return mApplication; }