mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
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
This commit is contained in:
committed by
Facebook Github Bot
parent
829a2237d2
commit
d6800616f2
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user