From d6800616f2aee50a76079d9f8dcc3b4785603921 Mon Sep 17 00:00:00 2001 From: Emily Janzer Date: Fri, 3 Jan 2020 13:14:41 -0800 Subject: [PATCH] Delegate to the ReactApplicationContext in ThemedReactContext for certain methods Summary: In bridgeless mode, we use BridgelessReactContext, which overrides some methods on ReactApplicationContext like `getJSIModule` and returns true for `isBridgeless`. This is needed for things like getting the EventDispatcher, which is currently accessed from the UIManagerModule (which doesn't exist in bridgeless mode). However, when we create Views in React Native we don't use the ReactApplicationContext directly; instead, we create a ThemedReactContext, which holds a reference to the RAC. It also initializes itself with the RAC's CatalystInstance, so that when you call methods on the TRC it can access native modules, etc. This doesn't work in bridgeless mode, because the methods are overridden on the RAC, *not* the TRC. So in order for this work as expected, we need to delegate these methods to the RAC member variable. In this diff I'm just doing this for `isBridgeless` and `getJSIModule` so that accessing the EventDispatcher works. Changelog: [Internal] Reviewed By: makovkastar Differential Revision: D19190760 fbshipit-source-id: 6dc38560edc1061aec782707306590fa1012d5cb --- .../react/uimanager/ThemedReactContext.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ThemedReactContext.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ThemedReactContext.java index 6ad03ea1b2c..4eff054efe9 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ThemedReactContext.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ThemedReactContext.java @@ -10,6 +10,8 @@ package com.facebook.react.uimanager; import android.app.Activity; import android.content.Context; import androidx.annotation.Nullable; +import com.facebook.react.bridge.JSIModule; +import com.facebook.react.bridge.JSIModuleType; import com.facebook.react.bridge.LifecycleEventListener; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContext; @@ -68,4 +70,17 @@ public class ThemedReactContext extends ReactContext { public @Nullable String getSurfaceID() { return mSurfaceID; } + + @Override + public boolean isBridgeless() { + return mReactApplicationContext.isBridgeless(); + } + + @Override + public JSIModule getJSIModule(JSIModuleType moduleType) { + if (isBridgeless()) { + return mReactApplicationContext.getJSIModule(moduleType); + } + return super.getJSIModule(moduleType); + } }