Skip to content

Commit 9c61693

Browse files
mdvaccafacebook-github-bot
authored andcommitted
Create ReactFeatureFlag to enable / disable custom implementation of getChildVisibleRect
Summary: This diff introduces a new ReactFeatureFlag that will be used to enable / disable a custom implementation of getChildVisibleRect in the classes ReactViewGroup, ReactHorizontalScrollView and ReactScrollView. The new ReactFeatureFlag is disabled by default bevause of T57363204 This is disabling the code landed as part of D17782658 / #26334 Changelog: Introduce ReactFeatureFlag to disable custom implementation of getChildVisibleRect (disabled by default) This will disable the custom algorithm created on #26334 Reviewed By: yungsters Differential Revision: D18621042 fbshipit-source-id: 35ca3417b596117b47edab29515a824c1726c2ce
1 parent 77ba82a commit 9c61693

File tree

6 files changed

+26
-6
lines changed

6 files changed

+26
-6
lines changed

ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,16 @@ public class ReactFeatureFlags {
7878
* TODO T54997838: remove as followup
7979
*/
8080
public static boolean allowDisablingImmediateExecutionOfScheduleMountItems = false;
81+
82+
/**
83+
* This react flag enables a custom algorithm for the getChildVisibleRect() method in the classes
84+
* ReactViewGroup, ReactHorizontalScrollView and ReactScrollView.
85+
*
86+
* <p>This new algorithm clip child rects if overflow is set to ViewProps.HIDDEN. More details in
87+
* https://github.com/facebook/react-native/issues/23870 and
88+
* https://github.com/facebook/react-native/pull/26334
89+
*
90+
* <p>The react flag is disabled by default because this is increasing ANRs (T57363204)
91+
*/
92+
public static boolean clipChildRectsIfOverflowIsHidden = false;
8193
}

ReactAndroid/src/main/java/com/facebook/react/views/scroll/BUCK

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ rn_android_library(
2020
react_native_dep("third-party/java/jsr-305:jsr-305"),
2121
react_native_target("java/com/facebook/react/bridge:bridge"),
2222
react_native_target("java/com/facebook/react/common:common"),
23+
react_native_target("java/com/facebook/react/config:config"),
2324
react_native_target("java/com/facebook/react/module/annotations:annotations"),
2425
react_native_target("java/com/facebook/react/modules/i18nmanager:i18nmanager"),
2526
react_native_target("java/com/facebook/react/touch:touch"),

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import androidx.core.view.ViewCompat;
2626
import com.facebook.infer.annotation.Assertions;
2727
import com.facebook.react.common.ReactConstants;
28+
import com.facebook.react.config.ReactFeatureFlags;
2829
import com.facebook.react.uimanager.MeasureSpecAssertions;
2930
import com.facebook.react.uimanager.ReactClippingViewGroup;
3031
import com.facebook.react.uimanager.ReactClippingViewGroupHelper;
@@ -494,8 +495,9 @@ public void getClippingRect(Rect outClippingRect) {
494495

495496
@Override
496497
public boolean getChildVisibleRect(View child, Rect r, android.graphics.Point offset) {
497-
return ReactClippingViewGroupHelper.getChildVisibleRectHelper(
498-
child, r, offset, this, mOverflow);
498+
return ReactFeatureFlags.clipChildRectsIfOverflowIsHidden
499+
? ReactClippingViewGroupHelper.getChildVisibleRectHelper(child, r, offset, this, mOverflow)
500+
: super.getChildVisibleRect(child, r, offset);
499501
}
500502

501503
private int getSnapInterval() {

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.facebook.infer.annotation.Assertions;
2525
import com.facebook.react.bridge.ReactContext;
2626
import com.facebook.react.common.ReactConstants;
27+
import com.facebook.react.config.ReactFeatureFlags;
2728
import com.facebook.react.uimanager.MeasureSpecAssertions;
2829
import com.facebook.react.uimanager.ReactClippingViewGroup;
2930
import com.facebook.react.uimanager.ReactClippingViewGroupHelper;
@@ -345,8 +346,9 @@ public void getClippingRect(Rect outClippingRect) {
345346

346347
@Override
347348
public boolean getChildVisibleRect(View child, Rect r, android.graphics.Point offset) {
348-
return ReactClippingViewGroupHelper.getChildVisibleRectHelper(
349-
child, r, offset, this, mOverflow);
349+
return ReactFeatureFlags.clipChildRectsIfOverflowIsHidden
350+
? ReactClippingViewGroupHelper.getChildVisibleRectHelper(child, r, offset, this, mOverflow)
351+
: super.getChildVisibleRect(child, r, offset);
350352
}
351353

352354
@Override

ReactAndroid/src/main/java/com/facebook/react/views/view/BUCK

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ rn_android_library(
2121
react_native_dep("third-party/java/jsr-305:jsr-305"),
2222
react_native_target("java/com/facebook/react/bridge:bridge"),
2323
react_native_target("java/com/facebook/react/common:common"),
24+
react_native_target("java/com/facebook/react/config:config"),
2425
react_native_target("java/com/facebook/react/module/annotations:annotations"),
2526
react_native_target("java/com/facebook/react/touch:touch"),
2627
react_native_target("java/com/facebook/react/views/common:common"),

ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import com.facebook.react.bridge.ReactContext;
3232
import com.facebook.react.bridge.UiThreadUtil;
3333
import com.facebook.react.common.annotations.VisibleForTesting;
34+
import com.facebook.react.config.ReactFeatureFlags;
3435
import com.facebook.react.modules.i18nmanager.I18nUtil;
3536
import com.facebook.react.touch.OnInterceptTouchEventListener;
3637
import com.facebook.react.touch.ReactHitSlopView;
@@ -433,8 +434,9 @@ private void updateSubviewClipStatus(View subview) {
433434

434435
@Override
435436
public boolean getChildVisibleRect(View child, Rect r, android.graphics.Point offset) {
436-
return ReactClippingViewGroupHelper.getChildVisibleRectHelper(
437-
child, r, offset, this, mOverflow);
437+
return ReactFeatureFlags.clipChildRectsIfOverflowIsHidden
438+
? ReactClippingViewGroupHelper.getChildVisibleRectHelper(child, r, offset, this, mOverflow)
439+
: super.getChildVisibleRect(child, r, offset);
438440
}
439441

440442
@Override

0 commit comments

Comments
 (0)