Skip to content

Commit 32d61d6

Browse files
enableBridgelessArchitecture
Differential Revision: D60100756
1 parent a634b57 commit 32d61d6

28 files changed

+176
-78
lines changed

packages/react-native/ReactAndroid/api/ReactAndroid.api

-1
Original file line numberDiff line numberDiff line change
@@ -1963,7 +1963,6 @@ public class com/facebook/react/common/network/OkHttpCallUtil {
19631963

19641964
public class com/facebook/react/config/ReactFeatureFlags {
19651965
public static field dispatchPointerEvents Z
1966-
public static field enableBridgelessArchitecture Z
19671966
public static field enableCppPropsIteratorSetter Z
19681967
public static field enableEagerRootViewAttachment Z
19691968
public static field enableFabricLogs Z

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/HeadlessJsTaskService.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import com.facebook.infer.annotation.Assertions;
2020
import com.facebook.react.bridge.ReactContext;
2121
import com.facebook.react.bridge.UiThreadUtil;
22-
import com.facebook.react.config.ReactFeatureFlags;
22+
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags;
2323
import com.facebook.react.jstasks.HeadlessJsTaskConfig;
2424
import com.facebook.react.jstasks.HeadlessJsTaskContext;
2525
import com.facebook.react.jstasks.HeadlessJsTaskEventListener;
@@ -171,7 +171,7 @@ protected ReactNativeHost getReactNativeHost() {
171171
}
172172

173173
protected ReactContext getReactContext() {
174-
if (ReactFeatureFlags.enableBridgelessArchitecture) {
174+
if (ReactNativeFeatureFlags.enableBridgelessArchitecture()) {
175175
ReactHost reactHost = getReactHost();
176176
Assertions.assertNotNull(reactHost, "getReactHost() is null in New Architecture");
177177
return reactHost.getCurrentReactContext();

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.facebook.infer.annotation.Assertions;
2020
import com.facebook.react.bridge.Callback;
2121
import com.facebook.react.config.ReactFeatureFlags;
22+
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags;
2223
import com.facebook.react.modules.core.PermissionListener;
2324

2425
/**
@@ -107,7 +108,7 @@ public void onCreate(Bundle savedInstanceState) {
107108
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && isWideColorGamutEnabled()) {
108109
mActivity.getWindow().setColorMode(ActivityInfo.COLOR_MODE_WIDE_COLOR_GAMUT);
109110
}
110-
if (ReactFeatureFlags.enableBridgelessArchitecture) {
111+
if (ReactNativeFeatureFlags.enableBridgelessArchitecture()) {
111112
mReactDelegate =
112113
new ReactDelegate(getPlainActivity(), getReactHost(), mainComponentName, launchOptions);
113114
} else {

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.java

+16-15
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.facebook.react.devsupport.ReleaseDevSupportManager;
2121
import com.facebook.react.devsupport.interfaces.DevSupportManager;
2222
import com.facebook.react.interfaces.fabric.ReactSurface;
23+
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags;
2324
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
2425

2526
/**
@@ -94,7 +95,7 @@ public ReactDelegate(
9495

9596
@Nullable
9697
private DevSupportManager getDevSupportManager() {
97-
if (ReactFeatureFlags.enableBridgelessArchitecture
98+
if (ReactNativeFeatureFlags.enableBridgelessArchitecture()
9899
&& mReactHost != null
99100
&& mReactHost.getDevSupportManager() != null) {
100101
return mReactHost.getDevSupportManager();
@@ -111,7 +112,7 @@ public void onHostResume() {
111112
throw new ClassCastException(
112113
"Host Activity does not implement DefaultHardwareBackBtnHandler");
113114
}
114-
if (ReactFeatureFlags.enableBridgelessArchitecture) {
115+
if (ReactNativeFeatureFlags.enableBridgelessArchitecture()) {
115116
mReactHost.onHostResume(mActivity, (DefaultHardwareBackBtnHandler) mActivity);
116117
} else {
117118
if (getReactNativeHost().hasInstance()) {
@@ -123,7 +124,7 @@ public void onHostResume() {
123124
}
124125

125126
public void onUserLeaveHint() {
126-
if (ReactFeatureFlags.enableBridgelessArchitecture) {
127+
if (ReactNativeFeatureFlags.enableBridgelessArchitecture()) {
127128
mReactHost.onHostLeaveHint(mActivity);
128129
} else {
129130
if (getReactNativeHost().hasInstance()) {
@@ -133,7 +134,7 @@ public void onUserLeaveHint() {
133134
}
134135

135136
public void onHostPause() {
136-
if (ReactFeatureFlags.enableBridgelessArchitecture) {
137+
if (ReactNativeFeatureFlags.enableBridgelessArchitecture()) {
137138
mReactHost.onHostPause(mActivity);
138139
} else {
139140
if (getReactNativeHost().hasInstance()) {
@@ -143,7 +144,7 @@ public void onHostPause() {
143144
}
144145

145146
public void onHostDestroy() {
146-
if (ReactFeatureFlags.enableBridgelessArchitecture) {
147+
if (ReactNativeFeatureFlags.enableBridgelessArchitecture()) {
147148
if (mReactSurface != null) {
148149
mReactSurface.stop();
149150
mReactSurface = null;
@@ -161,7 +162,7 @@ public void onHostDestroy() {
161162
}
162163

163164
public boolean onBackPressed() {
164-
if (ReactFeatureFlags.enableBridgelessArchitecture) {
165+
if (ReactNativeFeatureFlags.enableBridgelessArchitecture()) {
165166
mReactHost.onBackPressed();
166167
return true;
167168
} else {
@@ -174,7 +175,7 @@ public boolean onBackPressed() {
174175
}
175176

176177
public boolean onNewIntent(Intent intent) {
177-
if (ReactFeatureFlags.enableBridgelessArchitecture) {
178+
if (ReactNativeFeatureFlags.enableBridgelessArchitecture()) {
178179
mReactHost.onNewIntent(intent);
179180
return true;
180181
} else {
@@ -188,7 +189,7 @@ public boolean onNewIntent(Intent intent) {
188189

189190
public void onActivityResult(
190191
int requestCode, int resultCode, Intent data, boolean shouldForwardToReactInstance) {
191-
if (ReactFeatureFlags.enableBridgelessArchitecture) {
192+
if (ReactNativeFeatureFlags.enableBridgelessArchitecture()) {
192193
mReactHost.onActivityResult(mActivity, requestCode, resultCode, data);
193194
} else {
194195
if (getReactNativeHost().hasInstance() && shouldForwardToReactInstance) {
@@ -200,7 +201,7 @@ public void onActivityResult(
200201
}
201202

202203
public void onWindowFocusChanged(boolean hasFocus) {
203-
if (ReactFeatureFlags.enableBridgelessArchitecture) {
204+
if (ReactNativeFeatureFlags.enableBridgelessArchitecture()) {
204205
mReactHost.onWindowFocusChange(hasFocus);
205206
} else {
206207
if (getReactNativeHost().hasInstance()) {
@@ -210,7 +211,7 @@ public void onWindowFocusChanged(boolean hasFocus) {
210211
}
211212

212213
public void onConfigurationChanged(Configuration newConfig) {
213-
if (ReactFeatureFlags.enableBridgelessArchitecture) {
214+
if (ReactNativeFeatureFlags.enableBridgelessArchitecture()) {
214215
mReactHost.onConfigurationChanged(Assertions.assertNotNull(mActivity));
215216
} else {
216217
if (getReactNativeHost().hasInstance()) {
@@ -222,7 +223,7 @@ public void onConfigurationChanged(Configuration newConfig) {
222223

223224
public boolean onKeyDown(int keyCode, KeyEvent event) {
224225
if (keyCode == KeyEvent.KEYCODE_MEDIA_FAST_FORWARD
225-
&& ((ReactFeatureFlags.enableBridgelessArchitecture
226+
&& ((ReactNativeFeatureFlags.enableBridgelessArchitecture()
226227
&& mReactHost != null
227228
&& mReactHost.getDevSupportManager() != null)
228229
|| (getReactNativeHost().hasInstance()
@@ -235,7 +236,7 @@ && getReactNativeHost().getUseDeveloperSupport()))) {
235236

236237
public boolean onKeyLongPress(int keyCode) {
237238
if (keyCode == KeyEvent.KEYCODE_MEDIA_FAST_FORWARD) {
238-
if (ReactFeatureFlags.enableBridgelessArchitecture && mReactHost != null) {
239+
if (ReactNativeFeatureFlags.enableBridgelessArchitecture() && mReactHost != null) {
239240
DevSupportManager devSupportManager = mReactHost.getDevSupportManager();
240241
// onKeyLongPress is a Dev API and not supported in RELEASE mode.
241242
if (devSupportManager != null && !(devSupportManager instanceof ReleaseDevSupportManager)) {
@@ -261,7 +262,7 @@ public void reload() {
261262
// Reload in RELEASE mode
262263
if (devSupportManager instanceof ReleaseDevSupportManager) {
263264
// Do not reload the bundle from JS as there is no bundler running in release mode.
264-
if (ReactFeatureFlags.enableBridgelessArchitecture) {
265+
if (ReactNativeFeatureFlags.enableBridgelessArchitecture()) {
265266
if (mReactHost != null) {
266267
mReactHost.reload("ReactDelegate.reload()");
267268
}
@@ -287,7 +288,7 @@ public void loadApp() {
287288

288289
public void loadApp(String appKey) {
289290
// With Bridgeless enabled, create and start the surface
290-
if (ReactFeatureFlags.enableBridgelessArchitecture) {
291+
if (ReactNativeFeatureFlags.enableBridgelessArchitecture()) {
291292
if (mReactSurface == null) {
292293
// Create a ReactSurface
293294
mReactSurface = mReactHost.createSurface(mActivity, appKey, mLaunchOptions);
@@ -306,7 +307,7 @@ public void loadApp(String appKey) {
306307
}
307308

308309
public ReactRootView getReactRootView() {
309-
if (ReactFeatureFlags.enableBridgelessArchitecture) {
310+
if (ReactNativeFeatureFlags.enableBridgelessArchitecture()) {
310311
return (ReactRootView) mReactSurface.getView();
311312
} else {
312313
return mReactRootView;

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackageTurboModuleManagerDelegate.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.facebook.react.bridge.NativeModule;
1616
import com.facebook.react.bridge.ReactApplicationContext;
1717
import com.facebook.react.config.ReactFeatureFlags;
18+
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags;
1819
import com.facebook.react.internal.turbomodule.core.TurboModuleManagerDelegate;
1920
import com.facebook.react.module.annotations.ReactModule;
2021
import com.facebook.react.module.model.ReactModuleInfo;
@@ -36,7 +37,7 @@ interface ModuleProvider {
3637
new HashMap<>();
3738

3839
private final boolean mShouldEnableLegacyModuleInterop =
39-
ReactFeatureFlags.enableBridgelessArchitecture
40+
ReactNativeFeatureFlags.enableBridgelessArchitecture()
4041
&& ReactFeatureFlags.unstable_useTurboModuleInterop;
4142

4243
private final boolean mEnableTurboModuleSyncVoidMethods =

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java

-6
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,6 @@ public class ReactFeatureFlags {
5252
*/
5353
public static volatile boolean unstable_useFabricInterop = false;
5454

55-
/**
56-
* Feature flag to enable the new bridgeless architecture. Note: Enabling this will force enable
57-
* the following flags: `useTurboModules` & `enableFabricRenderer`.
58-
*/
59-
public static boolean enableBridgelessArchitecture = false;
60-
6155
/** This feature flag enables logs for Fabric */
6256
public static boolean enableFabricLogs = false;
6357

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ public object DefaultNewArchitectureEntryPoint {
4343
ReactFeatureFlags.useTurboModules = turboModulesEnabled
4444
ReactFeatureFlags.enableFabricRenderer = fabricEnabled
4545
ReactFeatureFlags.unstable_useFabricInterop = fabricEnabled
46-
ReactFeatureFlags.enableBridgelessArchitecture = bridgelessEnabled
4746
ReactFeatureFlags.unstable_useTurboModuleInterop = bridgelessEnabled
4847
val fuseboxEnabledDebug = fuseboxEnabled
4948

@@ -54,6 +53,8 @@ public object DefaultNewArchitectureEntryPoint {
5453

5554
override fun enableMicrotasks(): Boolean = true
5655

56+
override fun enableBridgelessArchitecture(): Boolean = bridgelessEnabled
57+
5758
override fun batchRenderingUpdatesInEventLoop(): Boolean = true
5859

5960
override fun useNativeViewConfigsInBridgelessMode(): Boolean = true

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ public void invalidate() {
454454
// responsible for initializing and deallocating EventDispatcher. StaticViewConfigs is enabled
455455
// only in Bridgeless for now.
456456
// TODO T83943316: Remove this IF once StaticViewConfigs are enabled by default
457-
if (!ReactFeatureFlags.enableBridgelessArchitecture) {
457+
if (!ReactNativeFeatureFlags.enableBridgelessArchitecture()) {
458458
mEventDispatcher.onCatalystInstanceDestroyed();
459459
}
460460
}

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt

+7-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<ca939ab47fa68fbb5acf5ea34481def9>>
7+
* @generated SignedSource<<56adda271bcc179b28ee274516621130>>
88
*/
99

1010
/**
@@ -76,6 +76,12 @@ public object ReactNativeFeatureFlags {
7676
@JvmStatic
7777
public fun enableAlignItemsBaselineOnFabricIOS(): Boolean = accessor.enableAlignItemsBaselineOnFabricIOS()
7878

79+
/**
80+
* Enables the Bridgeless Architecture. Note: Enabling this will force enable the following flags: `useTurboModules` & `enableFabricRenderer`
81+
*/
82+
@JvmStatic
83+
public fun enableBridgelessArchitecture(): Boolean = accessor.enableBridgelessArchitecture()
84+
7985
/**
8086
* Clean yoga node when <TextInput /> does not change.
8187
*/

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt

+11-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<2a8d5ca8a0ac46b4d3177cb8b12ad7ac>>
7+
* @generated SignedSource<<55c12cd940ea93972522deb07da4c4f7>>
88
*/
99

1010
/**
@@ -28,6 +28,7 @@ public class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAccesso
2828
private var completeReactInstanceCreationOnBgThreadOnAndroidCache: Boolean? = null
2929
private var destroyFabricSurfacesInReactInstanceManagerCache: Boolean? = null
3030
private var enableAlignItemsBaselineOnFabricIOSCache: Boolean? = null
31+
private var enableBridgelessArchitectureCache: Boolean? = null
3132
private var enableCleanTextInputYogaNodeCache: Boolean? = null
3233
private var enableFabricRendererExclusivelyCache: Boolean? = null
3334
private var enableGranularShadowTreeStateReconciliationCache: Boolean? = null
@@ -130,6 +131,15 @@ public class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAccesso
130131
return cached
131132
}
132133

134+
override fun enableBridgelessArchitecture(): Boolean {
135+
var cached = enableBridgelessArchitectureCache
136+
if (cached == null) {
137+
cached = ReactNativeFeatureFlagsCxxInterop.enableBridgelessArchitecture()
138+
enableBridgelessArchitectureCache = cached
139+
}
140+
return cached
141+
}
142+
133143
override fun enableCleanTextInputYogaNode(): Boolean {
134144
var cached = enableCleanTextInputYogaNodeCache
135145
if (cached == null) {

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<aaf205098eaac9171aa15bc8f7bda805>>
7+
* @generated SignedSource<<2c4f316e012720c438a96abf6a4939b0>>
88
*/
99

1010
/**
@@ -44,6 +44,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
4444

4545
@DoNotStrip @JvmStatic public external fun enableAlignItemsBaselineOnFabricIOS(): Boolean
4646

47+
@DoNotStrip @JvmStatic public external fun enableBridgelessArchitecture(): Boolean
48+
4749
@DoNotStrip @JvmStatic public external fun enableCleanTextInputYogaNode(): Boolean
4850

4951
@DoNotStrip @JvmStatic public external fun enableFabricRendererExclusively(): Boolean

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<abdee8d0b85b0d9940207b9cbe6d3f78>>
7+
* @generated SignedSource<<6114babfba822bf81f105b9e2748783e>>
88
*/
99

1010
/**
@@ -39,6 +39,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
3939

4040
override fun enableAlignItemsBaselineOnFabricIOS(): Boolean = true
4141

42+
override fun enableBridgelessArchitecture(): Boolean = false
43+
4244
override fun enableCleanTextInputYogaNode(): Boolean = false
4345

4446
override fun enableFabricRendererExclusively(): Boolean = false

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt

+12-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<82f6d4eda4011bee81810af366f5d677>>
7+
* @generated SignedSource<<c764ec599b576cf412f62e910e82bd15>>
88
*/
99

1010
/**
@@ -32,6 +32,7 @@ public class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcces
3232
private var completeReactInstanceCreationOnBgThreadOnAndroidCache: Boolean? = null
3333
private var destroyFabricSurfacesInReactInstanceManagerCache: Boolean? = null
3434
private var enableAlignItemsBaselineOnFabricIOSCache: Boolean? = null
35+
private var enableBridgelessArchitectureCache: Boolean? = null
3536
private var enableCleanTextInputYogaNodeCache: Boolean? = null
3637
private var enableFabricRendererExclusivelyCache: Boolean? = null
3738
private var enableGranularShadowTreeStateReconciliationCache: Boolean? = null
@@ -142,6 +143,16 @@ public class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcces
142143
return cached
143144
}
144145

146+
override fun enableBridgelessArchitecture(): Boolean {
147+
var cached = enableBridgelessArchitectureCache
148+
if (cached == null) {
149+
cached = currentProvider.enableBridgelessArchitecture()
150+
accessedFeatureFlags.add("enableBridgelessArchitecture")
151+
enableBridgelessArchitectureCache = cached
152+
}
153+
return cached
154+
}
155+
145156
override fun enableCleanTextInputYogaNode(): Boolean {
146157
var cached = enableCleanTextInputYogaNodeCache
147158
if (cached == null) {

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<ece587d5e6643fb906cfee816824f224>>
7+
* @generated SignedSource<<1fe24c487e564478ff0ec5bcd2431587>>
88
*/
99

1010
/**
@@ -39,6 +39,8 @@ public interface ReactNativeFeatureFlagsProvider {
3939

4040
@DoNotStrip public fun enableAlignItemsBaselineOnFabricIOS(): Boolean
4141

42+
@DoNotStrip public fun enableBridgelessArchitecture(): Boolean
43+
4244
@DoNotStrip public fun enableCleanTextInputYogaNode(): Boolean
4345

4446
@DoNotStrip public fun enableFabricRendererExclusively(): Boolean

0 commit comments

Comments
 (0)