Skip to content

Commit

Permalink
Fix bridge mode by constructing ReactDelegate correctly. (#43999)
Browse files Browse the repository at this point in the history
Summary:
Pull Request resolved: #43999

Currently NewArch-BridgeMode is partially broken when creating views via `ReactDelegate`.
That's because we're using the ctor that doesn't account for `Boolean: fabricEnabled`.

That means that the `RootView` that it will be created are all having setIsFabric(FALSE).
This is causing problems like whitescreens on several reload + multiple warnings such as:
```
                         E  com.facebook.react.bridge.ReactNoCrashSoftException: Cannot get UIManager because the context doesn't contain an active CatalystInstance.
```

Fixes #43692

See for more context on this issues: #43692

Changelog:
[Android] [Fixed] - Fix bridge mode by constructing ReactDelegate correctly

Reviewed By: cipolleschi

Differential Revision: D55921078

fbshipit-source-id: 2c21d089a49538402d546177bcdb26c8d7d5fbc1
  • Loading branch information
cortinico committed Apr 9, 2024
1 parent 4eb0534 commit 03d526f
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,11 @@ protected void onCreate(Bundle savedInstanceState) {
} else {
mReactDelegate =
new ReactDelegate(
getPlainActivity(), getReactNativeHost(), mainComponentName, launchOptions) {
getPlainActivity(),
getReactNativeHost(),
mainComponentName,
launchOptions,
isFabricEnabled()) {
@Override
protected ReactRootView createRootView() {
return ReactActivityDelegate.this.createRootView(launchOptions);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,15 @@ public class ReactDelegate {

private boolean mFabricEnabled = false;

/**
* Do not use this constructor as it's not accounting for New Architecture at all. You should
* either use {@link ReactDelegate#ReactDelegate(Activity, ReactHost, String, Bundle)} if you're
* on bridgeless mode or {@link ReactDelegate#ReactDelegate(Activity, ReactNativeHost, String,
* Bundle, boolean)} and use the last parameter to toggle paper/fabric.
*
* @deprecated Use one of the other constructors instead to account for New Architecture.
*/
@Deprecated
public ReactDelegate(
Activity activity,
ReactNativeHost reactNativeHost,
Expand Down

0 comments on commit 03d526f

Please sign in to comment.