From c1f9a4562c5aef9cfba9ffb42b5ac86a610ce3d7 Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Wed, 9 Dec 2020 21:14:52 -0800 Subject: [PATCH] Remove `clipChildRectsIfOverflowIsHidden` feature flag and associated code Summary: The flag `clipChildRectsIfOverflowIsHidden` has been set to false for a little over a year. Delete it and associated callsites. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D25451696 fbshipit-source-id: a6067b2e25124f6bdef336c2ddead719dd44cca9 --- .../react/config/ReactFeatureFlags.java | 12 ----- .../ReactClippingViewGroupHelper.java | 48 ------------------- .../scroll/ReactHorizontalScrollView.java | 5 +- .../react/views/scroll/ReactScrollView.java | 5 +- .../react/views/view/ReactViewGroup.java | 5 +- 5 files changed, 3 insertions(+), 72 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java b/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java index 15b23bc6fd..626a99fccd 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +++ b/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java @@ -53,18 +53,6 @@ public class ReactFeatureFlags { */ public static boolean useViewManagerDelegatesForCommands = false; - /** - * This react flag enables a custom algorithm for the getChildVisibleRect() method in the classes - * ReactViewGroup, ReactHorizontalScrollView and ReactScrollView. - * - *

This new algorithm clip child rects if overflow is set to ViewProps.HIDDEN. More details in - * https://github.com/facebook/react-native/issues/23870 and - * https://github.com/facebook/react-native/pull/26334 - * - *

The react flag is disabled by default because this is increasing ANRs (T57363204) - */ - public static boolean clipChildRectsIfOverflowIsHidden = false; - /** * Temporary feature flat to control a fix in the transition to layoutOnlyViews TODO T61185028: * remove this when bug is fixed diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactClippingViewGroupHelper.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactClippingViewGroupHelper.java index 077fcd0508..393b7cc602 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactClippingViewGroupHelper.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactClippingViewGroupHelper.java @@ -8,7 +8,6 @@ package com.facebook.react.uimanager; import android.graphics.Rect; -import android.graphics.RectF; import android.view.View; import android.view.ViewParent; import javax.annotation.concurrent.NotThreadSafe; @@ -57,51 +56,4 @@ public class ReactClippingViewGroupHelper { } view.getDrawingRect(outputRect); } - - public static boolean getChildVisibleRectHelper( - View child, Rect r, android.graphics.Point offset, View parent, String overflow) { - // This is based on the Android ViewGroup implementation, modified to clip child rects - // if overflow is set to ViewProps.HIDDEN. This effectively solves Issue #23870 which - // appears to have been introduced by FLAG_CLIP_CHILDREN being forced false - // regardless of whether clipping is desired. - final RectF rect = new RectF(); - rect.set(r); - - child.getMatrix().mapRect(rect); - - final int dx = child.getLeft() - parent.getScrollX(); - final int dy = child.getTop() - parent.getScrollY(); - - rect.offset(dx, dy); - - if (offset != null) { - float[] position = new float[2]; - position[0] = offset.x; - position[1] = offset.y; - child.getMatrix().mapPoints(position); - offset.x = Math.round(position[0]) + dx; - offset.y = Math.round(position[1]) + dy; - } - - final int width = parent.getRight() - parent.getLeft(); - final int height = parent.getBottom() - parent.getTop(); - - boolean rectIsVisible = true; - - ViewParent grandparent = parent.getParent(); - if (grandparent == null || ViewProps.HIDDEN.equals(overflow)) { - rectIsVisible = rect.intersect(0, 0, width, height); - } - - r.set( - (int) Math.floor(rect.left), - (int) Math.floor(rect.top), - (int) Math.ceil(rect.right), - (int) Math.ceil(rect.bottom)); - - if (rectIsVisible && grandparent != null) { - rectIsVisible = grandparent.getChildVisibleRect(parent, r, offset); - } - return rectIsVisible; - } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java b/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java index 57ed5ae6a3..80e64aa9b1 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java @@ -34,7 +34,6 @@ import com.facebook.infer.annotation.Assertions; import com.facebook.react.bridge.WritableMap; import com.facebook.react.bridge.WritableNativeMap; import com.facebook.react.common.ReactConstants; -import com.facebook.react.config.ReactFeatureFlags; import com.facebook.react.uimanager.FabricViewStateManager; import com.facebook.react.uimanager.MeasureSpecAssertions; import com.facebook.react.uimanager.PixelUtil; @@ -546,9 +545,7 @@ public class ReactHorizontalScrollView extends HorizontalScrollView @Override public boolean getChildVisibleRect(View child, Rect r, android.graphics.Point offset) { - return ReactFeatureFlags.clipChildRectsIfOverflowIsHidden - ? ReactClippingViewGroupHelper.getChildVisibleRectHelper(child, r, offset, this, mOverflow) - : super.getChildVisibleRect(child, r, offset); + return super.getChildVisibleRect(child, r, offset); } private int getSnapInterval() { diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java b/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java index 118579c886..52088a8634 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java @@ -30,7 +30,6 @@ import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.WritableMap; import com.facebook.react.bridge.WritableNativeMap; import com.facebook.react.common.ReactConstants; -import com.facebook.react.config.ReactFeatureFlags; import com.facebook.react.uimanager.FabricViewStateManager; import com.facebook.react.uimanager.MeasureSpecAssertions; import com.facebook.react.uimanager.PixelUtil; @@ -383,9 +382,7 @@ public class ReactScrollView extends ScrollView @Override public boolean getChildVisibleRect(View child, Rect r, android.graphics.Point offset) { - return ReactFeatureFlags.clipChildRectsIfOverflowIsHidden - ? ReactClippingViewGroupHelper.getChildVisibleRectHelper(child, r, offset, this, mOverflow) - : super.getChildVisibleRect(child, r, offset); + return super.getChildVisibleRect(child, r, offset); } @Override diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.java b/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.java index cef9b5a3df..14529b4486 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.java @@ -31,7 +31,6 @@ import com.facebook.infer.annotation.Assertions; import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.UiThreadUtil; import com.facebook.react.common.annotations.VisibleForTesting; -import com.facebook.react.config.ReactFeatureFlags; import com.facebook.react.modules.i18nmanager.I18nUtil; import com.facebook.react.touch.OnInterceptTouchEventListener; import com.facebook.react.touch.ReactHitSlopView; @@ -419,9 +418,7 @@ public class ReactViewGroup extends ViewGroup @Override public boolean getChildVisibleRect(View child, Rect r, android.graphics.Point offset) { - return ReactFeatureFlags.clipChildRectsIfOverflowIsHidden - ? ReactClippingViewGroupHelper.getChildVisibleRectHelper(child, r, offset, this, mOverflow) - : super.getChildVisibleRect(child, r, offset); + return super.getChildVisibleRect(child, r, offset); } @Override