Skip to content

Commit 8123f31

Browse files
Nick Lefevermeta-codesync[bot]
authored andcommitted
Add feature flag to disable subview clipping (#54416)
Summary: Pull Request resolved: #54416 See title Changelog: [Internal] Reviewed By: christophpurrer Differential Revision: D86262692 fbshipit-source-id: bf7fb2a45e33a0c6974af6138b3735cfeef1ae0c
1 parent 5ec5cc3 commit 8123f31

23 files changed

Lines changed: 230 additions & 95 deletions

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

Lines changed: 7 additions & 1 deletion
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<<890156e9513bff7c7c6252f8cf4402e4>>
7+
* @generated SignedSource<<66a87f8b82a1b3497eb9181a4ac6bab7>>
88
*/
99

1010
/**
@@ -78,6 +78,12 @@ public object ReactNativeFeatureFlags {
7878
@JvmStatic
7979
public fun disableOldAndroidAttachmentMetricsWorkarounds(): Boolean = accessor.disableOldAndroidAttachmentMetricsWorkarounds()
8080

81+
/**
82+
* Force disable subview clipping for ReactViewGroup on Android
83+
*/
84+
@JvmStatic
85+
public fun disableSubviewClippingAndroid(): Boolean = accessor.disableSubviewClippingAndroid()
86+
8187
/**
8288
* Turns off the global measurement cache used by TextLayoutManager on Android.
8389
*/

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

Lines changed: 11 additions & 1 deletion
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<<c62242068e649aa652b1a8f700bf0ab3>>
7+
* @generated SignedSource<<5112bb2a180751673d4197088af9fdd1>>
88
*/
99

1010
/**
@@ -28,6 +28,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
2828
private var disableFabricCommitInCXXAnimatedCache: Boolean? = null
2929
private var disableMountItemReorderingAndroidCache: Boolean? = null
3030
private var disableOldAndroidAttachmentMetricsWorkaroundsCache: Boolean? = null
31+
private var disableSubviewClippingAndroidCache: Boolean? = null
3132
private var disableTextLayoutManagerCacheAndroidCache: Boolean? = null
3233
private var enableAccessibilityOrderCache: Boolean? = null
3334
private var enableAccumulatedUpdatesInRawPropsAndroidCache: Boolean? = null
@@ -175,6 +176,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
175176
return cached
176177
}
177178

179+
override fun disableSubviewClippingAndroid(): Boolean {
180+
var cached = disableSubviewClippingAndroidCache
181+
if (cached == null) {
182+
cached = ReactNativeFeatureFlagsCxxInterop.disableSubviewClippingAndroid()
183+
disableSubviewClippingAndroidCache = cached
184+
}
185+
return cached
186+
}
187+
178188
override fun disableTextLayoutManagerCacheAndroid(): Boolean {
179189
var cached = disableTextLayoutManagerCacheAndroidCache
180190
if (cached == null) {

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

Lines changed: 3 additions & 1 deletion
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<<9a1bdbc2a3ae299433e690b254d7bf0a>>
7+
* @generated SignedSource<<d98233be82b913d6327c29a897d09eb7>>
88
*/
99

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

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

47+
@DoNotStrip @JvmStatic public external fun disableSubviewClippingAndroid(): Boolean
48+
4749
@DoNotStrip @JvmStatic public external fun disableTextLayoutManagerCacheAndroid(): Boolean
4850

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

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

Lines changed: 3 additions & 1 deletion
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<<0d78a0405db2a10c14bd69aaf2a3708a>>
7+
* @generated SignedSource<<32ad8dfa8f1c1d662ff0ea7b424eb070>>
88
*/
99

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

4040
override fun disableOldAndroidAttachmentMetricsWorkarounds(): Boolean = true
4141

42+
override fun disableSubviewClippingAndroid(): Boolean = false
43+
4244
override fun disableTextLayoutManagerCacheAndroid(): Boolean = false
4345

4446
override fun enableAccessibilityOrder(): Boolean = false

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

Lines changed: 12 additions & 1 deletion
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<<98f16fd1bb180b247ee87bb24b10120e>>
7+
* @generated SignedSource<<b10ff10cb0d389a563da50c75a49c746>>
88
*/
99

1010
/**
@@ -32,6 +32,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
3232
private var disableFabricCommitInCXXAnimatedCache: Boolean? = null
3333
private var disableMountItemReorderingAndroidCache: Boolean? = null
3434
private var disableOldAndroidAttachmentMetricsWorkaroundsCache: Boolean? = null
35+
private var disableSubviewClippingAndroidCache: Boolean? = null
3536
private var disableTextLayoutManagerCacheAndroidCache: Boolean? = null
3637
private var enableAccessibilityOrderCache: Boolean? = null
3738
private var enableAccumulatedUpdatesInRawPropsAndroidCache: Boolean? = null
@@ -187,6 +188,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
187188
return cached
188189
}
189190

191+
override fun disableSubviewClippingAndroid(): Boolean {
192+
var cached = disableSubviewClippingAndroidCache
193+
if (cached == null) {
194+
cached = currentProvider.disableSubviewClippingAndroid()
195+
accessedFeatureFlags.add("disableSubviewClippingAndroid")
196+
disableSubviewClippingAndroidCache = cached
197+
}
198+
return cached
199+
}
200+
190201
override fun disableTextLayoutManagerCacheAndroid(): Boolean {
191202
var cached = disableTextLayoutManagerCacheAndroidCache
192203
if (cached == null) {

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

Lines changed: 3 additions & 1 deletion
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<<c810245ced5a83806ace12572e112a70>>
7+
* @generated SignedSource<<c4917c92012d904810ef7d832adf124c>>
88
*/
99

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

4040
@DoNotStrip public fun disableOldAndroidAttachmentMetricsWorkarounds(): Boolean
4141

42+
@DoNotStrip public fun disableSubviewClippingAndroid(): Boolean
43+
4244
@DoNotStrip public fun disableTextLayoutManagerCacheAndroid(): Boolean
4345

4446
@DoNotStrip public fun enableAccessibilityOrder(): Boolean

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,10 @@ public void setScrollPerfTag(@Nullable String scrollPerfTag) {
291291

292292
@Override
293293
public void setRemoveClippedSubviews(boolean removeClippedSubviews) {
294+
if (ReactNativeFeatureFlags.disableSubviewClippingAndroid()) {
295+
return;
296+
}
297+
294298
if (removeClippedSubviews && mClippingRect == null) {
295299
mClippingRect = new Rect();
296300
}

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -719,6 +719,10 @@ public boolean executeKeyEvent(KeyEvent event) {
719719

720720
@Override
721721
public void setRemoveClippedSubviews(boolean removeClippedSubviews) {
722+
if (ReactNativeFeatureFlags.disableSubviewClippingAndroid()) {
723+
return;
724+
}
725+
722726
if (removeClippedSubviews && mClippingRect == null) {
723727
mClippingRect = new Rect();
724728
}

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import com.facebook.react.bridge.UiThreadUtil.assertOnUiThread
3232
import com.facebook.react.bridge.UiThreadUtil.runOnUiThread
3333
import com.facebook.react.common.ReactConstants.TAG
3434
import com.facebook.react.config.ReactFeatureFlags
35+
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags
3536
import com.facebook.react.touch.OnInterceptTouchEventListener
3637
import com.facebook.react.touch.ReactHitSlopView
3738
import com.facebook.react.touch.ReactInterceptingViewGroup
@@ -362,8 +363,17 @@ public open class ReactViewGroup public constructor(context: Context?) :
362363
}
363364

364365
override var removeClippedSubviews: Boolean
365-
get() = _removeClippedSubviews
366+
get() {
367+
if (ReactNativeFeatureFlags.disableSubviewClippingAndroid()) {
368+
return false
369+
}
370+
return _removeClippedSubviews
371+
}
366372
set(newValue) {
373+
if (ReactNativeFeatureFlags.disableSubviewClippingAndroid()) {
374+
return
375+
}
376+
367377
if (newValue == _removeClippedSubviews) {
368378
return
369379
}

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

Lines changed: 15 additions & 1 deletion
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<<b83a74b94f72ed85c7a5323bb56a38a0>>
7+
* @generated SignedSource<<ddcb4ebb0a1e5e80364d081650286b96>>
88
*/
99

1010
/**
@@ -87,6 +87,12 @@ class ReactNativeFeatureFlagsJavaProvider
8787
return method(javaProvider_);
8888
}
8989

90+
bool disableSubviewClippingAndroid() override {
91+
static const auto method =
92+
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("disableSubviewClippingAndroid");
93+
return method(javaProvider_);
94+
}
95+
9096
bool disableTextLayoutManagerCacheAndroid() override {
9197
static const auto method =
9298
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("disableTextLayoutManagerCacheAndroid");
@@ -575,6 +581,11 @@ bool JReactNativeFeatureFlagsCxxInterop::disableOldAndroidAttachmentMetricsWorka
575581
return ReactNativeFeatureFlags::disableOldAndroidAttachmentMetricsWorkarounds();
576582
}
577583

584+
bool JReactNativeFeatureFlagsCxxInterop::disableSubviewClippingAndroid(
585+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
586+
return ReactNativeFeatureFlags::disableSubviewClippingAndroid();
587+
}
588+
578589
bool JReactNativeFeatureFlagsCxxInterop::disableTextLayoutManagerCacheAndroid(
579590
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
580591
return ReactNativeFeatureFlags::disableTextLayoutManagerCacheAndroid();
@@ -1000,6 +1011,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
10001011
makeNativeMethod(
10011012
"disableOldAndroidAttachmentMetricsWorkarounds",
10021013
JReactNativeFeatureFlagsCxxInterop::disableOldAndroidAttachmentMetricsWorkarounds),
1014+
makeNativeMethod(
1015+
"disableSubviewClippingAndroid",
1016+
JReactNativeFeatureFlagsCxxInterop::disableSubviewClippingAndroid),
10031017
makeNativeMethod(
10041018
"disableTextLayoutManagerCacheAndroid",
10051019
JReactNativeFeatureFlagsCxxInterop::disableTextLayoutManagerCacheAndroid),

0 commit comments

Comments
 (0)