Skip to content

Commit d6d1cc9

Browse files
joevilchesfacebook-github-bot
authored andcommitted
Killswitch accessibilityOrder on iOS and Android (#50303)
Summary: Pull Request resolved: #50303 In case something is wrong with our implementation when we expose this we should add a killswitch. The gating is around the props setting in both iOS and Android, which I feel like is the simplest spot. Changelog: [Internal] Reviewed By: jorge-cab Differential Revision: D71919847
1 parent 62536db commit d6d1cc9

24 files changed

+186
-61
lines changed

Diff for: packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm

+2-1
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,8 @@ - (void)updateProps:(const Props::Shared &)props oldProps:(const Props::Shared &
390390
}
391391
}
392392

393-
if (oldViewProps.accessibilityOrder != newViewProps.accessibilityOrder) {
393+
if (ReactNativeFeatureFlags::enableAccessibilityOrder() &&
394+
oldViewProps.accessibilityOrder != newViewProps.accessibilityOrder) {
394395
_accessibleElementsNativeIds = [NSMutableArray new];
395396
for (const std::string &childId : newViewProps.accessibilityOrder) {
396397
[_accessibleElementsNativeIds addObject:RCTNSStringFromString(childId)];

Diff for: 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<<9f43ddaa47a45d604adda2e2296c1484>>
7+
* @generated SignedSource<<cc746968b6f59e6ea299ad645772eb09>>
88
*/
99

1010
/**
@@ -54,6 +54,12 @@ public object ReactNativeFeatureFlags {
5454
@JvmStatic
5555
public fun disableMountItemReorderingAndroid(): Boolean = accessor.disableMountItemReorderingAndroid()
5656

57+
/**
58+
* When enabled, the accessibilityOrder prop will propagate to native platforms and define the accessibility order.
59+
*/
60+
@JvmStatic
61+
public fun enableAccessibilityOrder(): Boolean = accessor.enableAccessibilityOrder()
62+
5763
/**
5864
* When enabled, Android will accumulate updates in rawProps to reduce the number of mounting instructions for cascading re-renders.
5965
*/

Diff for: 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<<7196636e08059866a9324ab57609e492>>
7+
* @generated SignedSource<<e235785126d8172d7fb2d59bbcc75356>>
88
*/
99

1010
/**
@@ -24,6 +24,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
2424
private var animatedShouldSignalBatchCache: Boolean? = null
2525
private var cxxNativeAnimatedEnabledCache: Boolean? = null
2626
private var disableMountItemReorderingAndroidCache: Boolean? = null
27+
private var enableAccessibilityOrderCache: Boolean? = null
2728
private var enableAccumulatedUpdatesInRawPropsAndroidCache: Boolean? = null
2829
private var enableBridgelessArchitectureCache: Boolean? = null
2930
private var enableCppPropsIteratorSetterCache: Boolean? = null
@@ -99,6 +100,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
99100
return cached
100101
}
101102

103+
override fun enableAccessibilityOrder(): Boolean {
104+
var cached = enableAccessibilityOrderCache
105+
if (cached == null) {
106+
cached = ReactNativeFeatureFlagsCxxInterop.enableAccessibilityOrder()
107+
enableAccessibilityOrderCache = cached
108+
}
109+
return cached
110+
}
111+
102112
override fun enableAccumulatedUpdatesInRawPropsAndroid(): Boolean {
103113
var cached = enableAccumulatedUpdatesInRawPropsAndroidCache
104114
if (cached == null) {

Diff for: 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<<463515a955baca809dd6463107ca325c>>
7+
* @generated SignedSource<<681f27528c92403bba81714c8fdd41e2>>
88
*/
99

1010
/**
@@ -36,6 +36,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
3636

3737
@DoNotStrip @JvmStatic public external fun disableMountItemReorderingAndroid(): Boolean
3838

39+
@DoNotStrip @JvmStatic public external fun enableAccessibilityOrder(): Boolean
40+
3941
@DoNotStrip @JvmStatic public external fun enableAccumulatedUpdatesInRawPropsAndroid(): Boolean
4042

4143
@DoNotStrip @JvmStatic public external fun enableBridgelessArchitecture(): Boolean

Diff for: 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<<0c111ea4ea86fce421aa4addb8ad0e4e>>
7+
* @generated SignedSource<<b29b4c08ecc6755e60c439cf778cc18f>>
88
*/
99

1010
/**
@@ -31,6 +31,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
3131

3232
override fun disableMountItemReorderingAndroid(): Boolean = false
3333

34+
override fun enableAccessibilityOrder(): Boolean = true
35+
3436
override fun enableAccumulatedUpdatesInRawPropsAndroid(): Boolean = false
3537

3638
override fun enableBridgelessArchitecture(): Boolean = false

Diff for: 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<<6171c6bc5492b1a0252746e928754f97>>
7+
* @generated SignedSource<<f51a70835e82787ff5295c34b8044092>>
88
*/
99

1010
/**
@@ -28,6 +28,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
2828
private var animatedShouldSignalBatchCache: Boolean? = null
2929
private var cxxNativeAnimatedEnabledCache: Boolean? = null
3030
private var disableMountItemReorderingAndroidCache: Boolean? = null
31+
private var enableAccessibilityOrderCache: Boolean? = null
3132
private var enableAccumulatedUpdatesInRawPropsAndroidCache: Boolean? = null
3233
private var enableBridgelessArchitectureCache: Boolean? = null
3334
private var enableCppPropsIteratorSetterCache: Boolean? = null
@@ -107,6 +108,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
107108
return cached
108109
}
109110

111+
override fun enableAccessibilityOrder(): Boolean {
112+
var cached = enableAccessibilityOrderCache
113+
if (cached == null) {
114+
cached = currentProvider.enableAccessibilityOrder()
115+
accessedFeatureFlags.add("enableAccessibilityOrder")
116+
enableAccessibilityOrderCache = cached
117+
}
118+
return cached
119+
}
120+
110121
override fun enableAccumulatedUpdatesInRawPropsAndroid(): Boolean {
111122
var cached = enableAccumulatedUpdatesInRawPropsAndroidCache
112123
if (cached == null) {

Diff for: 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<<a4f3222340cd676eefdd3794d3f1d4da>>
7+
* @generated SignedSource<<c12f4199c0dcb1bbb55b9a0bda447340>>
88
*/
99

1010
/**
@@ -31,6 +31,8 @@ public interface ReactNativeFeatureFlagsProvider {
3131

3232
@DoNotStrip public fun disableMountItemReorderingAndroid(): Boolean
3333

34+
@DoNotStrip public fun enableAccessibilityOrder(): Boolean
35+
3436
@DoNotStrip public fun enableAccumulatedUpdatesInRawPropsAndroid(): Boolean
3537

3638
@DoNotStrip public fun enableBridgelessArchitecture(): Boolean

Diff for: packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java

+4
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.facebook.react.bridge.ReadableType;
3030
import com.facebook.react.common.MapBuilder;
3131
import com.facebook.react.common.ReactConstants;
32+
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags;
3233
import com.facebook.react.uimanager.ReactAccessibilityDelegate.AccessibilityRole;
3334
import com.facebook.react.uimanager.ReactAccessibilityDelegate.Role;
3435
import com.facebook.react.uimanager.annotations.ReactProp;
@@ -303,6 +304,9 @@ public void setNativeId(@NonNull T view, @Nullable String nativeId) {
303304

304305
@ReactProp(name = ViewProps.ACCESSIBILITY_ORDER)
305306
public void setAccessibilityOrder(@NonNull T view, @Nullable ReadableArray nativeIds) {
307+
if (!ReactNativeFeatureFlags.enableAccessibilityOrder()) {
308+
return;
309+
}
306310

307311
view.setTag(R.id.accessibility_order, nativeIds);
308312
view.setTag(R.id.accessibility_order_dirty, true);

Diff for: packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp

+15-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<<2e1dacd320fd57c091996e3e8e2843a9>>
7+
* @generated SignedSource<<889c4b8e1a2c8fe2d9f8d1fad76ac680>>
88
*/
99

1010
/**
@@ -63,6 +63,12 @@ class ReactNativeFeatureFlagsJavaProvider
6363
return method(javaProvider_);
6464
}
6565

66+
bool enableAccessibilityOrder() override {
67+
static const auto method =
68+
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableAccessibilityOrder");
69+
return method(javaProvider_);
70+
}
71+
6672
bool enableAccumulatedUpdatesInRawPropsAndroid() override {
6773
static const auto method =
6874
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableAccumulatedUpdatesInRawPropsAndroid");
@@ -315,6 +321,11 @@ bool JReactNativeFeatureFlagsCxxInterop::disableMountItemReorderingAndroid(
315321
return ReactNativeFeatureFlags::disableMountItemReorderingAndroid();
316322
}
317323

324+
bool JReactNativeFeatureFlagsCxxInterop::enableAccessibilityOrder(
325+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
326+
return ReactNativeFeatureFlags::enableAccessibilityOrder();
327+
}
328+
318329
bool JReactNativeFeatureFlagsCxxInterop::enableAccumulatedUpdatesInRawPropsAndroid(
319330
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
320331
return ReactNativeFeatureFlags::enableAccumulatedUpdatesInRawPropsAndroid();
@@ -548,6 +559,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
548559
makeNativeMethod(
549560
"disableMountItemReorderingAndroid",
550561
JReactNativeFeatureFlagsCxxInterop::disableMountItemReorderingAndroid),
562+
makeNativeMethod(
563+
"enableAccessibilityOrder",
564+
JReactNativeFeatureFlagsCxxInterop::enableAccessibilityOrder),
551565
makeNativeMethod(
552566
"enableAccumulatedUpdatesInRawPropsAndroid",
553567
JReactNativeFeatureFlagsCxxInterop::enableAccumulatedUpdatesInRawPropsAndroid),

Diff for: packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h

+4-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<<d0b8fdd82018fab8e5532123d5254cf4>>
7+
* @generated SignedSource<<9038af132d0b77220b4d78a955b60403>>
88
*/
99

1010
/**
@@ -42,6 +42,9 @@ class JReactNativeFeatureFlagsCxxInterop
4242
static bool disableMountItemReorderingAndroid(
4343
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
4444

45+
static bool enableAccessibilityOrder(
46+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
47+
4548
static bool enableAccumulatedUpdatesInRawPropsAndroid(
4649
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
4750

Diff for: packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp

+5-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<<ae8953b9c5b0efae6fe67b9b799426d7>>
7+
* @generated SignedSource<<bc71743fe3c22fe68332719c3f4d107e>>
88
*/
99

1010
/**
@@ -42,6 +42,10 @@ bool ReactNativeFeatureFlags::disableMountItemReorderingAndroid() {
4242
return getAccessor().disableMountItemReorderingAndroid();
4343
}
4444

45+
bool ReactNativeFeatureFlags::enableAccessibilityOrder() {
46+
return getAccessor().enableAccessibilityOrder();
47+
}
48+
4549
bool ReactNativeFeatureFlags::enableAccumulatedUpdatesInRawPropsAndroid() {
4650
return getAccessor().enableAccumulatedUpdatesInRawPropsAndroid();
4751
}

Diff for: packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h

+6-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<<cc7536e8280fdc7d3f2106486439676a>>
7+
* @generated SignedSource<<82d7453dbac69e219a719b55a89023a9>>
88
*/
99

1010
/**
@@ -59,6 +59,11 @@ class ReactNativeFeatureFlags {
5959
*/
6060
RN_EXPORT static bool disableMountItemReorderingAndroid();
6161

62+
/**
63+
* When enabled, the accessibilityOrder prop will propagate to native platforms and define the accessibility order.
64+
*/
65+
RN_EXPORT static bool enableAccessibilityOrder();
66+
6267
/**
6368
* When enabled, Android will accumulate updates in rawProps to reduce the number of mounting instructions for cascading re-renders.
6469
*/

0 commit comments

Comments
 (0)