From b28706e8a02f77141e74699a818d2649978d1ec7 Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Tue, 17 Oct 2023 04:43:18 -0700 Subject: [PATCH] Make events work for Fabric Interop on Bridgeless (#40941) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/40941 Events are currently not working for Fabric Interop on Bridgeless. That's because the `BridgelessReactContext` is not checking for interop modules on `getJsModule` calls, so the `InteropEventEmitter` is never returned. This extends `BridgelessReactContext` so that `InteropEventEmitter` is returned if the Interop Layer is turned on. Changelog: [Internal] [Changed] - Make events work for Fabric Interop on Bridgeless Reviewed By: cipolleschi Differential Revision: D50266484 fbshipit-source-id: 0188d71bdc7acc8c188d886d45f0258914ad7af7 --- .../main/java/com/facebook/react/bridge/ReactContext.java | 2 +- .../facebook/react/runtime/BridgelessReactContext.java | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java index dfb1e641215fbf..b57513cb67216e 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java @@ -71,7 +71,7 @@ public interface RCTDeviceEventEmitter extends JavaScriptModule { private @Nullable JSExceptionHandler mExceptionHandlerWrapper; private @Nullable WeakReference mCurrentActivity; - private @Nullable InteropModuleRegistry mInteropModuleRegistry; + protected @Nullable InteropModuleRegistry mInteropModuleRegistry; private boolean mIsInitialized = false; public ReactContext(Context base) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessReactContext.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessReactContext.java index de5519395dd043..ad4b76d4b549dc 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessReactContext.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessReactContext.java @@ -22,6 +22,7 @@ import com.facebook.react.bridge.ReactNoCrashBridgeNotAllowedSoftException; import com.facebook.react.bridge.ReactSoftExceptionLogger; import com.facebook.react.bridge.WritableNativeArray; +import com.facebook.react.config.ReactFeatureFlags; import com.facebook.react.devsupport.interfaces.DevSupportManager; import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler; import com.facebook.react.uimanager.events.EventDispatcher; @@ -49,6 +50,9 @@ class BridgelessReactContext extends ReactApplicationContext implements EventDis BridgelessReactContext(Context context, ReactHostImpl host) { super(context); mReactHost = host; + if (ReactFeatureFlags.unstable_useFabricInterop) { + initializeInteropModules(); + } } @Override @@ -124,6 +128,10 @@ public BridgelessJSModuleInvocationHandler( @Override public T getJSModule(Class jsInterface) { + if (mInteropModuleRegistry != null + && mInteropModuleRegistry.shouldReturnInteropModule(jsInterface)) { + return mInteropModuleRegistry.getInteropModule(jsInterface); + } JavaScriptModule interfaceProxy = (JavaScriptModule) Proxy.newProxyInstance(