react-native 0.84.0-nightly-20251118-d314e5f4e → 0.84.0-nightly-20251120-88447cf20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/Libraries/Components/View/ViewPropTypes.js +10 -0
  2. package/Libraries/Core/ReactNativeVersion.js +1 -1
  3. package/Libraries/NativeComponent/BaseViewConfig.android.js +12 -0
  4. package/Libraries/Types/CoreEventTypes.js +31 -0
  5. package/React/Base/RCTVersion.m +1 -1
  6. package/React/CxxModule/RCTCxxUtils.mm +1 -1
  7. package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +8 -0
  8. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/Props.h +14 -0
  9. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTEnhancedScrollView.mm +6 -0
  10. package/ReactAndroid/api/ReactAndroid.api +2 -14
  11. package/ReactAndroid/gradle.properties +1 -1
  12. package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +0 -7
  13. package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.kt +0 -10
  14. package/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +58 -2
  15. package/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstance.kt +0 -18
  16. package/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java +0 -54
  17. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +7 -1
  18. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +11 -1
  19. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +3 -1
  20. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +3 -1
  21. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +12 -1
  22. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +3 -1
  23. package/ReactAndroid/src/main/java/com/facebook/react/modules/debug/FpsDebugFrameCallback.kt +3 -27
  24. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
  25. package/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessCatalystInstance.kt +0 -9
  26. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactSurfaceView.kt +52 -0
  27. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java +33 -0
  28. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSKeyDispatcher.kt +65 -0
  29. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java +0 -8
  30. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +0 -8
  31. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java +0 -16
  32. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/KeyDownEvent.kt +23 -0
  33. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/KeyEvent.kt +156 -0
  34. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/KeyUpEvent.kt +24 -0
  35. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +15 -1
  36. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +4 -1
  37. package/ReactAndroid/src/main/jni/react/tracing/PerformanceTracerCxxInterop.cpp +1 -1
  38. package/ReactAndroid/src/main/res/views/uimanager/values-ne/strings.xml +1 -0
  39. package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
  40. package/ReactCommon/jsi/jsi/test/testlib.cpp +2 -2
  41. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +5 -1
  42. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +6 -1
  43. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +37 -19
  44. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +4 -2
  45. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +5 -1
  46. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +10 -1
  47. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +2 -1
  48. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +6 -1
  49. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +3 -1
  50. package/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/HostPlatformViewProps.cpp +1 -1
  51. package/ReactCommon/react/runtime/ReactInstance.cpp +1 -1
  52. package/index.js.flow +3 -0
  53. package/package.json +9 -9
  54. package/sdks/hermes-engine/version.properties +1 -1
  55. package/src/private/featureflags/ReactNativeFeatureFlags.js +6 -1
  56. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +2 -1
  57. package/types_generated/Libraries/Components/View/ViewPropTypes.d.ts +9 -3
  58. package/types_generated/Libraries/Types/CoreEventTypes.d.ts +29 -1
  59. package/types_generated/index.d.ts +2 -2
  60. package/ReactAndroid/src/main/java/com/facebook/react/bridge/NotThreadSafeBridgeIdleDebugListener.kt +0 -36
  61. package/ReactAndroid/src/main/java/com/facebook/react/modules/debug/DidJSUpdateUiDuringFrameDetector.kt +0 -157
  62. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/debug/NotThreadSafeViewHierarchyUpdateDebugListener.kt +0 -30
@@ -0,0 +1,156 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ package com.facebook.react.uimanager.events
9
+
10
+ import android.view.KeyEvent as AndroidKeyEvent
11
+ import com.facebook.react.bridge.Arguments
12
+ import com.facebook.react.bridge.WritableMap
13
+
14
+ internal abstract class KeyEvent(
15
+ surfaceId: Int,
16
+ viewTag: Int,
17
+ keyEvent: AndroidKeyEvent,
18
+ ) : Event<KeyEvent>(surfaceId, viewTag) {
19
+
20
+ // Extract all needed data from keyEvent immediately to avoid storing the AndroidKeyEvent itself
21
+ private val keyCode: Int = keyEvent.keyCode
22
+ private val unicodeChar: Int = keyEvent.unicodeChar
23
+ private val isAltPressed: Boolean = keyEvent.isAltPressed
24
+ private val isCtrlPressed: Boolean = keyEvent.isCtrlPressed
25
+ private val isMetaPressed: Boolean = keyEvent.isMetaPressed
26
+ private val isShiftPressed: Boolean = keyEvent.isShiftPressed
27
+
28
+ override fun canCoalesce(): Boolean = false
29
+
30
+ override fun getEventCategory(): Int = EventCategoryDef.DISCRETE
31
+
32
+ override fun getEventData(): WritableMap {
33
+ val eventData = Arguments.createMap()
34
+
35
+ eventData.putInt("target", viewTag)
36
+
37
+ // W3C KeyboardEvent properties
38
+ eventData.putString("key", getKeyString())
39
+ eventData.putString("code", getCodeString())
40
+
41
+ // Modifier keys
42
+ eventData.putBoolean("altKey", isAltPressed)
43
+ eventData.putBoolean("ctrlKey", isCtrlPressed)
44
+ eventData.putBoolean("metaKey", isMetaPressed)
45
+ eventData.putBoolean("shiftKey", isShiftPressed)
46
+
47
+ // Additional properties
48
+ eventData.putDouble("timestamp", timestampMs.toDouble())
49
+
50
+ return eventData
51
+ }
52
+
53
+ private fun getKeyString(): String {
54
+ return when {
55
+ unicodeChar != 0 && !Character.isISOControl(unicodeChar) -> unicodeChar.toChar().toString()
56
+ else -> KEY_NAME_MAP[keyCode] ?: UNIDENTIFIED
57
+ }
58
+ }
59
+
60
+ private fun getCodeString(): String {
61
+ return CODE_MAP[keyCode] ?: UNIDENTIFIED
62
+ }
63
+
64
+ internal companion object {
65
+ private const val UNIDENTIFIED = "Unidentified"
66
+
67
+ private val CODE_MAP: Map<Int, String> by
68
+ lazy(LazyThreadSafetyMode.PUBLICATION) {
69
+ mapOf(
70
+ // Letter keys
71
+ AndroidKeyEvent.KEYCODE_A to "KeyA",
72
+ AndroidKeyEvent.KEYCODE_B to "KeyB",
73
+ AndroidKeyEvent.KEYCODE_C to "KeyC",
74
+ AndroidKeyEvent.KEYCODE_D to "KeyD",
75
+ AndroidKeyEvent.KEYCODE_E to "KeyE",
76
+ AndroidKeyEvent.KEYCODE_F to "KeyF",
77
+ AndroidKeyEvent.KEYCODE_G to "KeyG",
78
+ AndroidKeyEvent.KEYCODE_H to "KeyH",
79
+ AndroidKeyEvent.KEYCODE_I to "KeyI",
80
+ AndroidKeyEvent.KEYCODE_J to "KeyJ",
81
+ AndroidKeyEvent.KEYCODE_K to "KeyK",
82
+ AndroidKeyEvent.KEYCODE_L to "KeyL",
83
+ AndroidKeyEvent.KEYCODE_M to "KeyM",
84
+ AndroidKeyEvent.KEYCODE_N to "KeyN",
85
+ AndroidKeyEvent.KEYCODE_O to "KeyO",
86
+ AndroidKeyEvent.KEYCODE_P to "KeyP",
87
+ AndroidKeyEvent.KEYCODE_Q to "KeyQ",
88
+ AndroidKeyEvent.KEYCODE_R to "KeyR",
89
+ AndroidKeyEvent.KEYCODE_S to "KeyS",
90
+ AndroidKeyEvent.KEYCODE_T to "KeyT",
91
+ AndroidKeyEvent.KEYCODE_U to "KeyU",
92
+ AndroidKeyEvent.KEYCODE_V to "KeyV",
93
+ AndroidKeyEvent.KEYCODE_W to "KeyW",
94
+ AndroidKeyEvent.KEYCODE_X to "KeyX",
95
+ AndroidKeyEvent.KEYCODE_Y to "KeyY",
96
+ AndroidKeyEvent.KEYCODE_Z to "KeyZ",
97
+ // Digit keys
98
+ AndroidKeyEvent.KEYCODE_0 to "Digit0",
99
+ AndroidKeyEvent.KEYCODE_1 to "Digit1",
100
+ AndroidKeyEvent.KEYCODE_2 to "Digit2",
101
+ AndroidKeyEvent.KEYCODE_3 to "Digit3",
102
+ AndroidKeyEvent.KEYCODE_4 to "Digit4",
103
+ AndroidKeyEvent.KEYCODE_5 to "Digit5",
104
+ AndroidKeyEvent.KEYCODE_6 to "Digit6",
105
+ AndroidKeyEvent.KEYCODE_7 to "Digit7",
106
+ AndroidKeyEvent.KEYCODE_8 to "Digit8",
107
+ AndroidKeyEvent.KEYCODE_9 to "Digit9",
108
+ // Special keys
109
+ AndroidKeyEvent.KEYCODE_ENTER to "Enter",
110
+ AndroidKeyEvent.KEYCODE_SPACE to "Space",
111
+ AndroidKeyEvent.KEYCODE_TAB to "Tab",
112
+ AndroidKeyEvent.KEYCODE_DEL to "Backspace",
113
+ AndroidKeyEvent.KEYCODE_ESCAPE to "Escape",
114
+ // Modifier keys
115
+ AndroidKeyEvent.KEYCODE_SHIFT_LEFT to "ShiftLeft",
116
+ AndroidKeyEvent.KEYCODE_SHIFT_RIGHT to "ShiftRight",
117
+ AndroidKeyEvent.KEYCODE_CTRL_LEFT to "ControlLeft",
118
+ AndroidKeyEvent.KEYCODE_CTRL_RIGHT to "ControlRight",
119
+ AndroidKeyEvent.KEYCODE_ALT_LEFT to "AltLeft",
120
+ AndroidKeyEvent.KEYCODE_ALT_RIGHT to "AltRight",
121
+ AndroidKeyEvent.KEYCODE_META_LEFT to "MetaLeft",
122
+ AndroidKeyEvent.KEYCODE_META_RIGHT to "MetaRight",
123
+ // Arrow keys
124
+ AndroidKeyEvent.KEYCODE_DPAD_UP to "ArrowUp",
125
+ AndroidKeyEvent.KEYCODE_DPAD_DOWN to "ArrowDown",
126
+ AndroidKeyEvent.KEYCODE_DPAD_LEFT to "ArrowLeft",
127
+ AndroidKeyEvent.KEYCODE_DPAD_RIGHT to "ArrowRight",
128
+ AndroidKeyEvent.KEYCODE_DPAD_CENTER to "Enter",
129
+ )
130
+ }
131
+
132
+ private val KEY_NAME_MAP: Map<Int, String> by
133
+ lazy(LazyThreadSafetyMode.PUBLICATION) {
134
+ mapOf(
135
+ AndroidKeyEvent.KEYCODE_ENTER to "Enter",
136
+ AndroidKeyEvent.KEYCODE_DPAD_CENTER to "Enter",
137
+ AndroidKeyEvent.KEYCODE_SPACE to " ",
138
+ AndroidKeyEvent.KEYCODE_TAB to "Tab",
139
+ AndroidKeyEvent.KEYCODE_DEL to "Backspace",
140
+ AndroidKeyEvent.KEYCODE_ESCAPE to "Escape",
141
+ AndroidKeyEvent.KEYCODE_SHIFT_LEFT to "Shift",
142
+ AndroidKeyEvent.KEYCODE_SHIFT_RIGHT to "Shift",
143
+ AndroidKeyEvent.KEYCODE_CTRL_LEFT to "Control",
144
+ AndroidKeyEvent.KEYCODE_CTRL_RIGHT to "Control",
145
+ AndroidKeyEvent.KEYCODE_ALT_LEFT to "Alt",
146
+ AndroidKeyEvent.KEYCODE_ALT_RIGHT to "Alt",
147
+ AndroidKeyEvent.KEYCODE_META_LEFT to "Meta",
148
+ AndroidKeyEvent.KEYCODE_META_RIGHT to "Meta",
149
+ AndroidKeyEvent.KEYCODE_DPAD_UP to "ArrowUp",
150
+ AndroidKeyEvent.KEYCODE_DPAD_DOWN to "ArrowDown",
151
+ AndroidKeyEvent.KEYCODE_DPAD_LEFT to "ArrowLeft",
152
+ AndroidKeyEvent.KEYCODE_DPAD_RIGHT to "ArrowRight",
153
+ )
154
+ }
155
+ }
156
+ }
@@ -0,0 +1,24 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ package com.facebook.react.uimanager.events
9
+
10
+ import android.view.KeyEvent as AndroidKeyEvent
11
+
12
+ /** An event representing a key release (keyup). Corresponds to W3C KeyboardEvent specification. */
13
+ internal class KeyUpEvent(
14
+ surfaceId: Int,
15
+ viewTag: Int,
16
+ keyEvent: AndroidKeyEvent,
17
+ ) : KeyEvent(surfaceId, viewTag, keyEvent) {
18
+
19
+ override fun getEventName(): String = EVENT_NAME
20
+
21
+ companion object {
22
+ private const val EVENT_NAME: String = "topKeyUp"
23
+ }
24
+ }
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<5e4e22e976ce1724191c7b7e381ea5a1>>
7
+ * @generated SignedSource<<2f04d4a48caf61c182d412b2ae335e3a>>
8
8
  */
9
9
 
10
10
  /**
@@ -465,6 +465,12 @@ class ReactNativeFeatureFlagsJavaProvider
465
465
  return method(javaProvider_);
466
466
  }
467
467
 
468
+ bool shouldSetIsClickableByDefault() override {
469
+ static const auto method =
470
+ getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("shouldSetIsClickableByDefault");
471
+ return method(javaProvider_);
472
+ }
473
+
468
474
  bool shouldTriggerResponderTransferOnScrollAndroid() override {
469
475
  static const auto method =
470
476
  getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("shouldTriggerResponderTransferOnScrollAndroid");
@@ -932,6 +938,11 @@ bool JReactNativeFeatureFlagsCxxInterop::shouldSetEnabledBasedOnAccessibilitySta
932
938
  return ReactNativeFeatureFlags::shouldSetEnabledBasedOnAccessibilityState();
933
939
  }
934
940
 
941
+ bool JReactNativeFeatureFlagsCxxInterop::shouldSetIsClickableByDefault(
942
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
943
+ return ReactNativeFeatureFlags::shouldSetIsClickableByDefault();
944
+ }
945
+
935
946
  bool JReactNativeFeatureFlagsCxxInterop::shouldTriggerResponderTransferOnScrollAndroid(
936
947
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
937
948
  return ReactNativeFeatureFlags::shouldTriggerResponderTransferOnScrollAndroid();
@@ -1266,6 +1277,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
1266
1277
  makeNativeMethod(
1267
1278
  "shouldSetEnabledBasedOnAccessibilityState",
1268
1279
  JReactNativeFeatureFlagsCxxInterop::shouldSetEnabledBasedOnAccessibilityState),
1280
+ makeNativeMethod(
1281
+ "shouldSetIsClickableByDefault",
1282
+ JReactNativeFeatureFlagsCxxInterop::shouldSetIsClickableByDefault),
1269
1283
  makeNativeMethod(
1270
1284
  "shouldTriggerResponderTransferOnScrollAndroid",
1271
1285
  JReactNativeFeatureFlagsCxxInterop::shouldTriggerResponderTransferOnScrollAndroid),
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<1cb8ed4a72e9d2b8dd34694485704f60>>
7
+ * @generated SignedSource<<7bfc976ab923620e57f62282272dedb9>>
8
8
  */
9
9
 
10
10
  /**
@@ -243,6 +243,9 @@ class JReactNativeFeatureFlagsCxxInterop
243
243
  static bool shouldSetEnabledBasedOnAccessibilityState(
244
244
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
245
245
 
246
+ static bool shouldSetIsClickableByDefault(
247
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
248
+
246
249
  static bool shouldTriggerResponderTransferOnScrollAndroid(
247
250
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
248
251
 
@@ -200,7 +200,7 @@ jint PerformanceTracerCxxInterop::subscribeToTracingStateChanges(
200
200
  onTracingStateChangedMethod(
201
201
  callback, static_cast<jboolean>(isTracing));
202
202
  });
203
- } catch (const std::exception& e) {
203
+ } catch (const std::exception&) {
204
204
  }
205
205
  }
206
206
  });
@@ -10,6 +10,7 @@
10
10
  <string name="menu_description" gender="unknown">मेनु</string>
11
11
  <string name="rn_tab_description" gender="unknown">टयाब</string>
12
12
  <string name="state_expanded_description" gender="unknown">विस्तार गरियो</string>
13
+ <string name="state_unselected_description" gender="unknown">चयन हटाइयो</string>
13
14
  <string name="state_on_description" gender="unknown">अन</string>
14
15
  <string name="state_off_description" gender="unknown">अफ</string>
15
16
  </resources>
@@ -22,7 +22,7 @@ constexpr struct {
22
22
  int32_t Major = 0;
23
23
  int32_t Minor = 84;
24
24
  int32_t Patch = 0;
25
- std::string_view Prerelease = "nightly-20251118-d314e5f4e";
25
+ std::string_view Prerelease = "nightly-20251120-88447cf20";
26
26
  } ReactNativeVersion;
27
27
 
28
28
  } // namespace facebook::react
@@ -1455,7 +1455,7 @@ TEST_P(JSITest, MicrotasksTest) {
1455
1455
  EXPECT_EQ(
1456
1456
  rt.global().getProperty(rt, "globalValue").asString(rt).utf8(rt),
1457
1457
  "hello world");
1458
- } catch (const JSINativeException& ex) {
1458
+ } catch (const JSINativeException&) {
1459
1459
  // queueMicrotask() is unimplemented by some runtimes, ignore such failures.
1460
1460
  }
1461
1461
  }
@@ -1550,7 +1550,7 @@ TEST_P(JSITest, ArrayBufferSizeTest) {
1550
1550
  try {
1551
1551
  // Ensure we can safely write some data to the buffer.
1552
1552
  memset(ab.data(rt), 0xab, 10);
1553
- } catch (const JSINativeException& ex) {
1553
+ } catch (const JSINativeException&) {
1554
1554
  // data() is unimplemented by some runtimes, ignore such failures.
1555
1555
  }
1556
1556
 
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<9c10486574fdff78933aed6acd90533c>>
7
+ * @generated SignedSource<<6f9513178d03ce6e69dfc1b0182af336>>
8
8
  */
9
9
 
10
10
  /**
@@ -310,6 +310,10 @@ bool ReactNativeFeatureFlags::shouldSetEnabledBasedOnAccessibilityState() {
310
310
  return getAccessor().shouldSetEnabledBasedOnAccessibilityState();
311
311
  }
312
312
 
313
+ bool ReactNativeFeatureFlags::shouldSetIsClickableByDefault() {
314
+ return getAccessor().shouldSetIsClickableByDefault();
315
+ }
316
+
313
317
  bool ReactNativeFeatureFlags::shouldTriggerResponderTransferOnScrollAndroid() {
314
318
  return getAccessor().shouldTriggerResponderTransferOnScrollAndroid();
315
319
  }
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<72ed560f90d44db777469315e0865c6c>>
7
+ * @generated SignedSource<<de1a8e6ded1184b11d868d3daa637073>>
8
8
  */
9
9
 
10
10
  /**
@@ -394,6 +394,11 @@ class ReactNativeFeatureFlags {
394
394
  */
395
395
  RN_EXPORT static bool shouldSetEnabledBasedOnAccessibilityState();
396
396
 
397
+ /**
398
+ * Sets isClickable=true by default on all React Native views on Android to improve UI harvesting detection while maintaining focusable=false to preserve expected behavior.
399
+ */
400
+ RN_EXPORT static bool shouldSetIsClickableByDefault();
401
+
397
402
  /**
398
403
  * Do not emit touchcancel from Android ScrollView, instead native topScroll event will trigger responder transfer and terminate in RN renderer.
399
404
  */
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<d97cf9dd1fb1696f46aa408871a7b05c>>
7
+ * @generated SignedSource<<1a0223f0ee3e85edae5238e9248a83c2>>
8
8
  */
9
9
 
10
10
  /**
@@ -1307,6 +1307,24 @@ bool ReactNativeFeatureFlagsAccessor::shouldSetEnabledBasedOnAccessibilityState(
1307
1307
  return flagValue.value();
1308
1308
  }
1309
1309
 
1310
+ bool ReactNativeFeatureFlagsAccessor::shouldSetIsClickableByDefault() {
1311
+ auto flagValue = shouldSetIsClickableByDefault_.load();
1312
+
1313
+ if (!flagValue.has_value()) {
1314
+ // This block is not exclusive but it is not necessary.
1315
+ // If multiple threads try to initialize the feature flag, we would only
1316
+ // be accessing the provider multiple times but the end state of this
1317
+ // instance and the returned flag value would be the same.
1318
+
1319
+ markFlagAsAccessed(71, "shouldSetIsClickableByDefault");
1320
+
1321
+ flagValue = currentProvider_->shouldSetIsClickableByDefault();
1322
+ shouldSetIsClickableByDefault_ = flagValue;
1323
+ }
1324
+
1325
+ return flagValue.value();
1326
+ }
1327
+
1310
1328
  bool ReactNativeFeatureFlagsAccessor::shouldTriggerResponderTransferOnScrollAndroid() {
1311
1329
  auto flagValue = shouldTriggerResponderTransferOnScrollAndroid_.load();
1312
1330
 
@@ -1316,7 +1334,7 @@ bool ReactNativeFeatureFlagsAccessor::shouldTriggerResponderTransferOnScrollAndr
1316
1334
  // be accessing the provider multiple times but the end state of this
1317
1335
  // instance and the returned flag value would be the same.
1318
1336
 
1319
- markFlagAsAccessed(71, "shouldTriggerResponderTransferOnScrollAndroid");
1337
+ markFlagAsAccessed(72, "shouldTriggerResponderTransferOnScrollAndroid");
1320
1338
 
1321
1339
  flagValue = currentProvider_->shouldTriggerResponderTransferOnScrollAndroid();
1322
1340
  shouldTriggerResponderTransferOnScrollAndroid_ = flagValue;
@@ -1334,7 +1352,7 @@ bool ReactNativeFeatureFlagsAccessor::skipActivityIdentityAssertionOnHostPause()
1334
1352
  // be accessing the provider multiple times but the end state of this
1335
1353
  // instance and the returned flag value would be the same.
1336
1354
 
1337
- markFlagAsAccessed(72, "skipActivityIdentityAssertionOnHostPause");
1355
+ markFlagAsAccessed(73, "skipActivityIdentityAssertionOnHostPause");
1338
1356
 
1339
1357
  flagValue = currentProvider_->skipActivityIdentityAssertionOnHostPause();
1340
1358
  skipActivityIdentityAssertionOnHostPause_ = flagValue;
@@ -1352,7 +1370,7 @@ bool ReactNativeFeatureFlagsAccessor::traceTurboModulePromiseRejectionsOnAndroid
1352
1370
  // be accessing the provider multiple times but the end state of this
1353
1371
  // instance and the returned flag value would be the same.
1354
1372
 
1355
- markFlagAsAccessed(73, "traceTurboModulePromiseRejectionsOnAndroid");
1373
+ markFlagAsAccessed(74, "traceTurboModulePromiseRejectionsOnAndroid");
1356
1374
 
1357
1375
  flagValue = currentProvider_->traceTurboModulePromiseRejectionsOnAndroid();
1358
1376
  traceTurboModulePromiseRejectionsOnAndroid_ = flagValue;
@@ -1370,7 +1388,7 @@ bool ReactNativeFeatureFlagsAccessor::updateRuntimeShadowNodeReferencesOnCommit(
1370
1388
  // be accessing the provider multiple times but the end state of this
1371
1389
  // instance and the returned flag value would be the same.
1372
1390
 
1373
- markFlagAsAccessed(74, "updateRuntimeShadowNodeReferencesOnCommit");
1391
+ markFlagAsAccessed(75, "updateRuntimeShadowNodeReferencesOnCommit");
1374
1392
 
1375
1393
  flagValue = currentProvider_->updateRuntimeShadowNodeReferencesOnCommit();
1376
1394
  updateRuntimeShadowNodeReferencesOnCommit_ = flagValue;
@@ -1388,7 +1406,7 @@ bool ReactNativeFeatureFlagsAccessor::useAlwaysAvailableJSErrorHandling() {
1388
1406
  // be accessing the provider multiple times but the end state of this
1389
1407
  // instance and the returned flag value would be the same.
1390
1408
 
1391
- markFlagAsAccessed(75, "useAlwaysAvailableJSErrorHandling");
1409
+ markFlagAsAccessed(76, "useAlwaysAvailableJSErrorHandling");
1392
1410
 
1393
1411
  flagValue = currentProvider_->useAlwaysAvailableJSErrorHandling();
1394
1412
  useAlwaysAvailableJSErrorHandling_ = flagValue;
@@ -1406,7 +1424,7 @@ bool ReactNativeFeatureFlagsAccessor::useFabricInterop() {
1406
1424
  // be accessing the provider multiple times but the end state of this
1407
1425
  // instance and the returned flag value would be the same.
1408
1426
 
1409
- markFlagAsAccessed(76, "useFabricInterop");
1427
+ markFlagAsAccessed(77, "useFabricInterop");
1410
1428
 
1411
1429
  flagValue = currentProvider_->useFabricInterop();
1412
1430
  useFabricInterop_ = flagValue;
@@ -1424,7 +1442,7 @@ bool ReactNativeFeatureFlagsAccessor::useNativeEqualsInNativeReadableArrayAndroi
1424
1442
  // be accessing the provider multiple times but the end state of this
1425
1443
  // instance and the returned flag value would be the same.
1426
1444
 
1427
- markFlagAsAccessed(77, "useNativeEqualsInNativeReadableArrayAndroid");
1445
+ markFlagAsAccessed(78, "useNativeEqualsInNativeReadableArrayAndroid");
1428
1446
 
1429
1447
  flagValue = currentProvider_->useNativeEqualsInNativeReadableArrayAndroid();
1430
1448
  useNativeEqualsInNativeReadableArrayAndroid_ = flagValue;
@@ -1442,7 +1460,7 @@ bool ReactNativeFeatureFlagsAccessor::useNativeTransformHelperAndroid() {
1442
1460
  // be accessing the provider multiple times but the end state of this
1443
1461
  // instance and the returned flag value would be the same.
1444
1462
 
1445
- markFlagAsAccessed(78, "useNativeTransformHelperAndroid");
1463
+ markFlagAsAccessed(79, "useNativeTransformHelperAndroid");
1446
1464
 
1447
1465
  flagValue = currentProvider_->useNativeTransformHelperAndroid();
1448
1466
  useNativeTransformHelperAndroid_ = flagValue;
@@ -1460,7 +1478,7 @@ bool ReactNativeFeatureFlagsAccessor::useNativeViewConfigsInBridgelessMode() {
1460
1478
  // be accessing the provider multiple times but the end state of this
1461
1479
  // instance and the returned flag value would be the same.
1462
1480
 
1463
- markFlagAsAccessed(79, "useNativeViewConfigsInBridgelessMode");
1481
+ markFlagAsAccessed(80, "useNativeViewConfigsInBridgelessMode");
1464
1482
 
1465
1483
  flagValue = currentProvider_->useNativeViewConfigsInBridgelessMode();
1466
1484
  useNativeViewConfigsInBridgelessMode_ = flagValue;
@@ -1478,7 +1496,7 @@ bool ReactNativeFeatureFlagsAccessor::useRawPropsJsiValue() {
1478
1496
  // be accessing the provider multiple times but the end state of this
1479
1497
  // instance and the returned flag value would be the same.
1480
1498
 
1481
- markFlagAsAccessed(80, "useRawPropsJsiValue");
1499
+ markFlagAsAccessed(81, "useRawPropsJsiValue");
1482
1500
 
1483
1501
  flagValue = currentProvider_->useRawPropsJsiValue();
1484
1502
  useRawPropsJsiValue_ = flagValue;
@@ -1496,7 +1514,7 @@ bool ReactNativeFeatureFlagsAccessor::useShadowNodeStateOnClone() {
1496
1514
  // be accessing the provider multiple times but the end state of this
1497
1515
  // instance and the returned flag value would be the same.
1498
1516
 
1499
- markFlagAsAccessed(81, "useShadowNodeStateOnClone");
1517
+ markFlagAsAccessed(82, "useShadowNodeStateOnClone");
1500
1518
 
1501
1519
  flagValue = currentProvider_->useShadowNodeStateOnClone();
1502
1520
  useShadowNodeStateOnClone_ = flagValue;
@@ -1514,7 +1532,7 @@ bool ReactNativeFeatureFlagsAccessor::useSharedAnimatedBackend() {
1514
1532
  // be accessing the provider multiple times but the end state of this
1515
1533
  // instance and the returned flag value would be the same.
1516
1534
 
1517
- markFlagAsAccessed(82, "useSharedAnimatedBackend");
1535
+ markFlagAsAccessed(83, "useSharedAnimatedBackend");
1518
1536
 
1519
1537
  flagValue = currentProvider_->useSharedAnimatedBackend();
1520
1538
  useSharedAnimatedBackend_ = flagValue;
@@ -1532,7 +1550,7 @@ bool ReactNativeFeatureFlagsAccessor::useTraitHiddenOnAndroid() {
1532
1550
  // be accessing the provider multiple times but the end state of this
1533
1551
  // instance and the returned flag value would be the same.
1534
1552
 
1535
- markFlagAsAccessed(83, "useTraitHiddenOnAndroid");
1553
+ markFlagAsAccessed(84, "useTraitHiddenOnAndroid");
1536
1554
 
1537
1555
  flagValue = currentProvider_->useTraitHiddenOnAndroid();
1538
1556
  useTraitHiddenOnAndroid_ = flagValue;
@@ -1550,7 +1568,7 @@ bool ReactNativeFeatureFlagsAccessor::useTurboModuleInterop() {
1550
1568
  // be accessing the provider multiple times but the end state of this
1551
1569
  // instance and the returned flag value would be the same.
1552
1570
 
1553
- markFlagAsAccessed(84, "useTurboModuleInterop");
1571
+ markFlagAsAccessed(85, "useTurboModuleInterop");
1554
1572
 
1555
1573
  flagValue = currentProvider_->useTurboModuleInterop();
1556
1574
  useTurboModuleInterop_ = flagValue;
@@ -1568,7 +1586,7 @@ bool ReactNativeFeatureFlagsAccessor::useTurboModules() {
1568
1586
  // be accessing the provider multiple times but the end state of this
1569
1587
  // instance and the returned flag value would be the same.
1570
1588
 
1571
- markFlagAsAccessed(85, "useTurboModules");
1589
+ markFlagAsAccessed(86, "useTurboModules");
1572
1590
 
1573
1591
  flagValue = currentProvider_->useTurboModules();
1574
1592
  useTurboModules_ = flagValue;
@@ -1586,7 +1604,7 @@ double ReactNativeFeatureFlagsAccessor::viewCullingOutsetRatio() {
1586
1604
  // be accessing the provider multiple times but the end state of this
1587
1605
  // instance and the returned flag value would be the same.
1588
1606
 
1589
- markFlagAsAccessed(86, "viewCullingOutsetRatio");
1607
+ markFlagAsAccessed(87, "viewCullingOutsetRatio");
1590
1608
 
1591
1609
  flagValue = currentProvider_->viewCullingOutsetRatio();
1592
1610
  viewCullingOutsetRatio_ = flagValue;
@@ -1604,7 +1622,7 @@ double ReactNativeFeatureFlagsAccessor::virtualViewHysteresisRatio() {
1604
1622
  // be accessing the provider multiple times but the end state of this
1605
1623
  // instance and the returned flag value would be the same.
1606
1624
 
1607
- markFlagAsAccessed(87, "virtualViewHysteresisRatio");
1625
+ markFlagAsAccessed(88, "virtualViewHysteresisRatio");
1608
1626
 
1609
1627
  flagValue = currentProvider_->virtualViewHysteresisRatio();
1610
1628
  virtualViewHysteresisRatio_ = flagValue;
@@ -1622,7 +1640,7 @@ double ReactNativeFeatureFlagsAccessor::virtualViewPrerenderRatio() {
1622
1640
  // be accessing the provider multiple times but the end state of this
1623
1641
  // instance and the returned flag value would be the same.
1624
1642
 
1625
- markFlagAsAccessed(88, "virtualViewPrerenderRatio");
1643
+ markFlagAsAccessed(89, "virtualViewPrerenderRatio");
1626
1644
 
1627
1645
  flagValue = currentProvider_->virtualViewPrerenderRatio();
1628
1646
  virtualViewPrerenderRatio_ = flagValue;
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<fb735bdc4e4085fd415f21894340dd75>>
7
+ * @generated SignedSource<<f393dacf78f8595e8eaa35f694d9f74f>>
8
8
  */
9
9
 
10
10
  /**
@@ -103,6 +103,7 @@ class ReactNativeFeatureFlagsAccessor {
103
103
  bool preventShadowTreeCommitExhaustion();
104
104
  bool shouldPressibilityUseW3CPointerEventsForHover();
105
105
  bool shouldSetEnabledBasedOnAccessibilityState();
106
+ bool shouldSetIsClickableByDefault();
106
107
  bool shouldTriggerResponderTransferOnScrollAndroid();
107
108
  bool skipActivityIdentityAssertionOnHostPause();
108
109
  bool traceTurboModulePromiseRejectionsOnAndroid();
@@ -132,7 +133,7 @@ class ReactNativeFeatureFlagsAccessor {
132
133
  std::unique_ptr<ReactNativeFeatureFlagsProvider> currentProvider_;
133
134
  bool wasOverridden_;
134
135
 
135
- std::array<std::atomic<const char*>, 89> accessedFeatureFlags_;
136
+ std::array<std::atomic<const char*>, 90> accessedFeatureFlags_;
136
137
 
137
138
  std::atomic<std::optional<bool>> commonTestFlag_;
138
139
  std::atomic<std::optional<bool>> cdpInteractionMetricsEnabled_;
@@ -205,6 +206,7 @@ class ReactNativeFeatureFlagsAccessor {
205
206
  std::atomic<std::optional<bool>> preventShadowTreeCommitExhaustion_;
206
207
  std::atomic<std::optional<bool>> shouldPressibilityUseW3CPointerEventsForHover_;
207
208
  std::atomic<std::optional<bool>> shouldSetEnabledBasedOnAccessibilityState_;
209
+ std::atomic<std::optional<bool>> shouldSetIsClickableByDefault_;
208
210
  std::atomic<std::optional<bool>> shouldTriggerResponderTransferOnScrollAndroid_;
209
211
  std::atomic<std::optional<bool>> skipActivityIdentityAssertionOnHostPause_;
210
212
  std::atomic<std::optional<bool>> traceTurboModulePromiseRejectionsOnAndroid_;
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<e5affd56757a5b815ac0a16305d1a82d>>
7
+ * @generated SignedSource<<a7123e265a748fe2d69d266fcd56e9b6>>
8
8
  */
9
9
 
10
10
  /**
@@ -311,6 +311,10 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider {
311
311
  return true;
312
312
  }
313
313
 
314
+ bool shouldSetIsClickableByDefault() override {
315
+ return false;
316
+ }
317
+
314
318
  bool shouldTriggerResponderTransferOnScrollAndroid() override {
315
319
  return false;
316
320
  }
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<c345dba878d470a42fcff41aac490083>>
7
+ * @generated SignedSource<<2126c6978235d194eb9826c4574ad0c0>>
8
8
  */
9
9
 
10
10
  /**
@@ -684,6 +684,15 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef
684
684
  return ReactNativeFeatureFlagsDefaults::shouldSetEnabledBasedOnAccessibilityState();
685
685
  }
686
686
 
687
+ bool shouldSetIsClickableByDefault() override {
688
+ auto value = values_["shouldSetIsClickableByDefault"];
689
+ if (!value.isNull()) {
690
+ return value.getBool();
691
+ }
692
+
693
+ return ReactNativeFeatureFlagsDefaults::shouldSetIsClickableByDefault();
694
+ }
695
+
687
696
  bool shouldTriggerResponderTransferOnScrollAndroid() override {
688
697
  auto value = values_["shouldTriggerResponderTransferOnScrollAndroid"];
689
698
  if (!value.isNull()) {
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<3e8df9a7ff492fee6b5755c1691e150c>>
7
+ * @generated SignedSource<<7d90280397feb8127f130b0e9e65ec23>>
8
8
  */
9
9
 
10
10
  /**
@@ -96,6 +96,7 @@ class ReactNativeFeatureFlagsProvider {
96
96
  virtual bool preventShadowTreeCommitExhaustion() = 0;
97
97
  virtual bool shouldPressibilityUseW3CPointerEventsForHover() = 0;
98
98
  virtual bool shouldSetEnabledBasedOnAccessibilityState() = 0;
99
+ virtual bool shouldSetIsClickableByDefault() = 0;
99
100
  virtual bool shouldTriggerResponderTransferOnScrollAndroid() = 0;
100
101
  virtual bool skipActivityIdentityAssertionOnHostPause() = 0;
101
102
  virtual bool traceTurboModulePromiseRejectionsOnAndroid() = 0;
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<0cdf0b920d8c8a083781028ff0490bf3>>
7
+ * @generated SignedSource<<51cc73881a03e3d58e035b6ea5ee341b>>
8
8
  */
9
9
 
10
10
  /**
@@ -399,6 +399,11 @@ bool NativeReactNativeFeatureFlags::shouldSetEnabledBasedOnAccessibilityState(
399
399
  return ReactNativeFeatureFlags::shouldSetEnabledBasedOnAccessibilityState();
400
400
  }
401
401
 
402
+ bool NativeReactNativeFeatureFlags::shouldSetIsClickableByDefault(
403
+ jsi::Runtime& /*runtime*/) {
404
+ return ReactNativeFeatureFlags::shouldSetIsClickableByDefault();
405
+ }
406
+
402
407
  bool NativeReactNativeFeatureFlags::shouldTriggerResponderTransferOnScrollAndroid(
403
408
  jsi::Runtime& /*runtime*/) {
404
409
  return ReactNativeFeatureFlags::shouldTriggerResponderTransferOnScrollAndroid();
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<dc1786ebed10af9cf4343d88b6336960>>
7
+ * @generated SignedSource<<a973cf276f9f61a96e717b1ec8561c78>>
8
8
  */
9
9
 
10
10
  /**
@@ -178,6 +178,8 @@ class NativeReactNativeFeatureFlags
178
178
 
179
179
  bool shouldSetEnabledBasedOnAccessibilityState(jsi::Runtime& runtime);
180
180
 
181
+ bool shouldSetIsClickableByDefault(jsi::Runtime& runtime);
182
+
181
183
  bool shouldTriggerResponderTransferOnScrollAndroid(jsi::Runtime& runtime);
182
184
 
183
185
  bool skipActivityIdentityAssertionOnHostPause(jsi::Runtime& runtime);