Skip to content

Commit b0e754b

Browse files
yungstersmeta-codesync[bot]
authored andcommitted
VirtualView: Ship enableVirtualViewClippingWithoutScrollViewClipping (#54747)
Summary: Pull Request resolved: #54747 Cleans up the `enableVirtualViewClippingWithoutScrollViewClipping` feature flag and enables the new behavior. Changelog: [Android][Changed] - `VirtualView` not clips subviews even if its parent `ScrollView` does not have `removeClippedSubviews` enabled. Reviewed By: lunaleaps Differential Revision: D88096820 fbshipit-source-id: d61061f3612b048ed22be33f48e24511c7e010d2
1 parent 5884ec3 commit b0e754b

22 files changed

+64
-197
lines changed

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

Lines changed: 1 addition & 7 deletions
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<<c0e50c34e468462ec0b019db612f2d07>>
7+
* @generated SignedSource<<2e69f1b64e18567abff05a1f8bc7014d>>
88
*/
99

1010
/**
@@ -342,12 +342,6 @@ public object ReactNativeFeatureFlags {
342342
@JvmStatic
343343
public fun enableViewRecyclingForView(): Boolean = accessor.enableViewRecyclingForView()
344344

345-
/**
346-
* Set clipping to drawingRect of ScrollView.
347-
*/
348-
@JvmStatic
349-
public fun enableVirtualViewClippingWithoutScrollViewClipping(): Boolean = accessor.enableVirtualViewClippingWithoutScrollViewClipping()
350-
351345
/**
352346
* Enables the experimental version of `VirtualViewContainerState`.
353347
*/

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

Lines changed: 1 addition & 11 deletions
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<<41539a9583965f55605a6d3e03e6f6fe>>
7+
* @generated SignedSource<<82bc3d80b3f36ee448ede8f69ba90248>>
88
*/
99

1010
/**
@@ -72,7 +72,6 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
7272
private var enableViewRecyclingForScrollViewCache: Boolean? = null
7373
private var enableViewRecyclingForTextCache: Boolean? = null
7474
private var enableViewRecyclingForViewCache: Boolean? = null
75-
private var enableVirtualViewClippingWithoutScrollViewClippingCache: Boolean? = null
7675
private var enableVirtualViewContainerStateExperimentalCache: Boolean? = null
7776
private var enableVirtualViewDebugFeaturesCache: Boolean? = null
7877
private var enableVirtualViewRenderStateCache: Boolean? = null
@@ -580,15 +579,6 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
580579
return cached
581580
}
582581

583-
override fun enableVirtualViewClippingWithoutScrollViewClipping(): Boolean {
584-
var cached = enableVirtualViewClippingWithoutScrollViewClippingCache
585-
if (cached == null) {
586-
cached = ReactNativeFeatureFlagsCxxInterop.enableVirtualViewClippingWithoutScrollViewClipping()
587-
enableVirtualViewClippingWithoutScrollViewClippingCache = cached
588-
}
589-
return cached
590-
}
591-
592582
override fun enableVirtualViewContainerStateExperimental(): Boolean {
593583
var cached = enableVirtualViewContainerStateExperimentalCache
594584
if (cached == null) {

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

Lines changed: 1 addition & 3 deletions
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<<c137f35e76302d02f6b5ac344b6ffaab>>
7+
* @generated SignedSource<<c94da1f2b880dbcbd02b2ccc1da0c387>>
88
*/
99

1010
/**
@@ -132,8 +132,6 @@ public object ReactNativeFeatureFlagsCxxInterop {
132132

133133
@DoNotStrip @JvmStatic public external fun enableViewRecyclingForView(): Boolean
134134

135-
@DoNotStrip @JvmStatic public external fun enableVirtualViewClippingWithoutScrollViewClipping(): Boolean
136-
137135
@DoNotStrip @JvmStatic public external fun enableVirtualViewContainerStateExperimental(): Boolean
138136

139137
@DoNotStrip @JvmStatic public external fun enableVirtualViewDebugFeatures(): Boolean

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

Lines changed: 1 addition & 3 deletions
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<<198b09049f5459ae5a037555bc57d2ee>>
7+
* @generated SignedSource<<a5795c5441af8d4e4151e4c89304fb2f>>
88
*/
99

1010
/**
@@ -127,8 +127,6 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
127127

128128
override fun enableViewRecyclingForView(): Boolean = true
129129

130-
override fun enableVirtualViewClippingWithoutScrollViewClipping(): Boolean = true
131-
132130
override fun enableVirtualViewContainerStateExperimental(): Boolean = false
133131

134132
override fun enableVirtualViewDebugFeatures(): Boolean = false

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

Lines changed: 1 addition & 12 deletions
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<<cdd551b82f51be4eb0ca7e90ea5f572f>>
7+
* @generated SignedSource<<ceaebd9c6453b8d6a44e5d45343e0ba4>>
88
*/
99

1010
/**
@@ -76,7 +76,6 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
7676
private var enableViewRecyclingForScrollViewCache: Boolean? = null
7777
private var enableViewRecyclingForTextCache: Boolean? = null
7878
private var enableViewRecyclingForViewCache: Boolean? = null
79-
private var enableVirtualViewClippingWithoutScrollViewClippingCache: Boolean? = null
8079
private var enableVirtualViewContainerStateExperimentalCache: Boolean? = null
8180
private var enableVirtualViewDebugFeaturesCache: Boolean? = null
8281
private var enableVirtualViewRenderStateCache: Boolean? = null
@@ -636,16 +635,6 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
636635
return cached
637636
}
638637

639-
override fun enableVirtualViewClippingWithoutScrollViewClipping(): Boolean {
640-
var cached = enableVirtualViewClippingWithoutScrollViewClippingCache
641-
if (cached == null) {
642-
cached = currentProvider.enableVirtualViewClippingWithoutScrollViewClipping()
643-
accessedFeatureFlags.add("enableVirtualViewClippingWithoutScrollViewClipping")
644-
enableVirtualViewClippingWithoutScrollViewClippingCache = cached
645-
}
646-
return cached
647-
}
648-
649638
override fun enableVirtualViewContainerStateExperimental(): Boolean {
650639
var cached = enableVirtualViewContainerStateExperimentalCache
651640
if (cached == null) {

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

Lines changed: 1 addition & 3 deletions
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<<0e1c6445e6b34484aadc436cedc811de>>
7+
* @generated SignedSource<<91441ffa16383203cf8ef82e1edf4451>>
88
*/
99

1010
/**
@@ -127,8 +127,6 @@ public interface ReactNativeFeatureFlagsProvider {
127127

128128
@DoNotStrip public fun enableViewRecyclingForView(): Boolean
129129

130-
@DoNotStrip public fun enableVirtualViewClippingWithoutScrollViewClipping(): Boolean
131-
132130
@DoNotStrip public fun enableVirtualViewContainerStateExperimental(): Boolean
133131

134132
@DoNotStrip public fun enableVirtualViewDebugFeatures(): Boolean

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

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -195,18 +195,10 @@ public class ReactVirtualView(context: Context) :
195195
val clippingRect = checkNotNull(clippingRect)
196196
val parentScrollView = checkNotNull(parentScrollView) as ReactClippingViewGroup
197197

198-
if (ReactNativeFeatureFlags.enableVirtualViewClippingWithoutScrollViewClipping()) {
199-
if (parentScrollView.removeClippedSubviews) {
200-
parentScrollView.getClippingRect(clippingRect)
201-
} else {
202-
(parentScrollView as View).getDrawingRect(clippingRect)
203-
}
204-
} else {
205-
if (!(parentScrollView.removeClippedSubviews ?: false)) {
206-
super.updateClippingRect(excludedViews)
207-
return
208-
}
198+
if (parentScrollView.removeClippedSubviews) {
209199
parentScrollView.getClippingRect(clippingRect)
200+
} else {
201+
(parentScrollView as View).getDrawingRect(clippingRect)
210202
}
211203

212204
clippingRect.intersect(targetRect)

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/virtual/viewexperimental/ReactVirtualViewExperimental.kt

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -216,19 +216,10 @@ public class ReactVirtualViewExperimental(context: Context) :
216216
val clippingRect = checkNotNull(clippingRect)
217217
val scrollView = checkNotNull(scrollView) as ReactClippingViewGroup
218218

219-
if (ReactNativeFeatureFlags.enableVirtualViewClippingWithoutScrollViewClipping()) {
220-
if (scrollView.removeClippedSubviews) {
221-
scrollView.getClippingRect(clippingRect)
222-
} else {
223-
(scrollView as View).getDrawingRect(clippingRect)
224-
}
225-
} else {
226-
if (!(scrollView.removeClippedSubviews ?: false)) {
227-
super.updateClippingRect(excludedViews)
228-
return
229-
}
230-
219+
if (scrollView.removeClippedSubviews) {
231220
scrollView.getClippingRect(clippingRect)
221+
} else {
222+
(scrollView as View).getDrawingRect(clippingRect)
232223
}
233224

234225
clippingRect.intersect(containerRelativeRect)

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

Lines changed: 1 addition & 15 deletions
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<<9fb3e60f99756f099b573d4fb852d18b>>
7+
* @generated SignedSource<<95616bb241e59e35a9f4b3667cbc0822>>
88
*/
99

1010
/**
@@ -351,12 +351,6 @@ class ReactNativeFeatureFlagsJavaProvider
351351
return method(javaProvider_);
352352
}
353353

354-
bool enableVirtualViewClippingWithoutScrollViewClipping() override {
355-
static const auto method =
356-
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableVirtualViewClippingWithoutScrollViewClipping");
357-
return method(javaProvider_);
358-
}
359-
360354
bool enableVirtualViewContainerStateExperimental() override {
361355
static const auto method =
362356
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableVirtualViewContainerStateExperimental");
@@ -849,11 +843,6 @@ bool JReactNativeFeatureFlagsCxxInterop::enableViewRecyclingForView(
849843
return ReactNativeFeatureFlags::enableViewRecyclingForView();
850844
}
851845

852-
bool JReactNativeFeatureFlagsCxxInterop::enableVirtualViewClippingWithoutScrollViewClipping(
853-
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
854-
return ReactNativeFeatureFlags::enableVirtualViewClippingWithoutScrollViewClipping();
855-
}
856-
857846
bool JReactNativeFeatureFlagsCxxInterop::enableVirtualViewContainerStateExperimental(
858847
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
859848
return ReactNativeFeatureFlags::enableVirtualViewContainerStateExperimental();
@@ -1231,9 +1220,6 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
12311220
makeNativeMethod(
12321221
"enableViewRecyclingForView",
12331222
JReactNativeFeatureFlagsCxxInterop::enableViewRecyclingForView),
1234-
makeNativeMethod(
1235-
"enableVirtualViewClippingWithoutScrollViewClipping",
1236-
JReactNativeFeatureFlagsCxxInterop::enableVirtualViewClippingWithoutScrollViewClipping),
12371223
makeNativeMethod(
12381224
"enableVirtualViewContainerStateExperimental",
12391225
JReactNativeFeatureFlagsCxxInterop::enableVirtualViewContainerStateExperimental),

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

Lines changed: 1 addition & 4 deletions
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<<a6d7e6584be4740706031e483e7f6319>>
7+
* @generated SignedSource<<4c8932d29eda2db32a3e82cfae202bab>>
88
*/
99

1010
/**
@@ -186,9 +186,6 @@ class JReactNativeFeatureFlagsCxxInterop
186186
static bool enableViewRecyclingForView(
187187
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
188188

189-
static bool enableVirtualViewClippingWithoutScrollViewClipping(
190-
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
191-
192189
static bool enableVirtualViewContainerStateExperimental(
193190
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
194191

0 commit comments

Comments
 (0)