Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions packages/react-native/Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ let CallInvokerPath = "ReactCommon/callinvoker" // header only target
let ReactFBReactNativeSpecPath = "React/FBReactNativeSpec" // generated
let FBLazyVectorPath = "Libraries/FBLazyVector" // header only
let virtualViewPath = "ReactCommon/react/renderer/components/virtualview" // header only
let virtualViewExperimentalPath = "ReactCommon/react/renderer/components/virtualviewexperimental" // header only

// MARK: Prebuilt Dependencies declaration
let reactNativeDependencies = BinaryTarget(
Expand Down Expand Up @@ -454,7 +453,6 @@ let reactFabric = RNTarget(
"components/textinput/platform/ios/",
"components/unimplementedview",
"components/virtualview",
"components/virtualviewexperimental",
"components/root/tests",
],
dependencies: [.reactNativeDependencies, .reactJsiExecutor, .rctTypesafety, .reactTurboModuleCore, .jsi, .logger, .reactDebug, .reactFeatureFlags, .reactUtils, .reactRuntimeScheduler, .reactCxxReact, .reactRendererDebug, .reactGraphics, .yoga],
Expand Down Expand Up @@ -541,7 +539,7 @@ let reactFabricUnimplementedView = RNTarget(
let reactRCTFabric = RNTarget(
name: .reactRCTFabric,
path: "React/Fabric",
searchPaths: [virtualViewPath, virtualViewExperimentalPath],
searchPaths: [virtualViewPath],
dependencies: [.reactNativeDependencies, .reactCore, .reactRCTImage, .yoga, .reactRCTText, .jsi, .reactFabricInputAccessory, .reactFabricModal, .reactFabricSafeAreaView, .reactFabricSwitch, .reactFabricText, .reactFabricTextInput, .reactFabricUnimplementedView, .reactFabricTextLayoutManager, .reactGraphics, .reactImageManager, .reactDebug, .reactUtils, .reactPerformanceTimeline, .reactRendererDebug, .reactRendererConsistency, .reactRuntimeScheduler, .reactRCTAnimation, .reactJsInspector, .reactJsInspectorNetwork, .reactJsInspectorTracing, .reactFabric, .reactFabricImage, .rctSwiftUIWrapper]
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

NS_ASSUME_NONNULL_BEGIN

@interface RCTVirtualViewExperimentalComponentView : RCTViewComponentView <RCTVirtualViewProtocol>
@interface RCTVirtualViewComponentView : RCTViewComponentView <RCTVirtualViewProtocol>

+ (instancetype)new NS_UNAVAILABLE;
- (instancetype)init NS_UNAVAILABLE;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*/

#import "RCTVirtualViewExperimentalComponentView.h"
#import "RCTVirtualViewComponentView.h"

#import <React/RCTAssert.h>
#import <React/RCTConversions.h>
Expand All @@ -20,8 +20,8 @@
#import <react/renderer/components/FBReactNativeSpec/ComponentDescriptors.h>
#import <react/renderer/components/FBReactNativeSpec/EventEmitters.h>
#import <react/renderer/components/FBReactNativeSpec/Props.h>
#import <react/renderer/components/virtualviewexperimental/VirtualViewExperimentalComponentDescriptor.h>
#import <react/renderer/components/virtualviewexperimental/VirtualViewExperimentalShadowNode.h>
#import <react/renderer/components/virtualview/VirtualViewComponentDescriptor.h>
#import <react/renderer/components/virtualview/VirtualViewShadowNode.h>

#import "RCTFabricComponentsPlugins.h"
#import "RCTVirtualViewMode.h"
Expand All @@ -30,13 +30,13 @@
using namespace facebook;
using namespace facebook::react;

@interface RCTVirtualViewExperimentalComponentView () {
@interface RCTVirtualViewComponentView () {
NSString *_virtualViewID;
}

@end

@implementation RCTVirtualViewExperimentalComponentView {
@implementation RCTVirtualViewComponentView {
id<RCTVirtualViewContainerProtocol> _parentVirtualViewContainer;
std::optional<RCTVirtualViewMode> _mode;
RCTVirtualViewRenderState _renderState;
Expand All @@ -50,7 +50,7 @@ @implementation RCTVirtualViewExperimentalComponentView {
- (instancetype)initWithFrame:(CGRect)frame
{
if ((self = [super initWithFrame:frame]) != nil) {
_props = VirtualViewExperimentalShadowNode::defaultSharedProps();
_props = VirtualViewShadowNode::defaultSharedProps();
_renderState = RCTVirtualViewRenderStateUnknown;
_virtualViewID = [[NSUUID UUID] UUIDString];
_didLayout = NO;
Expand All @@ -61,7 +61,7 @@ - (instancetype)initWithFrame:(CGRect)frame

- (void)updateProps:(const Props::Shared &)props oldProps:(const Props::Shared &)oldProps
{
const auto &newViewProps = static_cast<const VirtualViewExperimentalProps &>(*props);
const auto &newViewProps = static_cast<const VirtualViewProps &>(*props);

if (!_mode.has_value()) {
_mode = newViewProps.initialHidden ? RCTVirtualViewModeHidden : RCTVirtualViewModeVisible;
Expand All @@ -70,19 +70,16 @@ - (void)updateProps:(const Props::Shared &)props oldProps:(const Props::Shared &
}
}

// If disabled, `_renderState` will always be `RCTVirtualViewRenderStateUnknown`.
if (ReactNativeFeatureFlags::enableVirtualViewRenderState()) {
switch (newViewProps.renderState) {
case 1:
_renderState = RCTVirtualViewRenderStateRendered;
break;
case 2:
_renderState = RCTVirtualViewRenderStateNone;
break;
default:
_renderState = RCTVirtualViewRenderStateUnknown;
break;
}
switch (newViewProps.renderState) {
case 1:
_renderState = RCTVirtualViewRenderStateRendered;
break;
case 2:
_renderState = RCTVirtualViewRenderStateNone;
break;
default:
_renderState = RCTVirtualViewRenderStateUnknown;
break;
}

const auto &newBaseViewProps = static_cast<const ViewProps &>(*props);
Expand Down Expand Up @@ -177,7 +174,7 @@ - (void)onModeChange:(RCTVirtualViewMode)newMode targetRect:(CGRect)targetRect t

// NOTE: Make sure to keep these props in sync with dispatchSyncModeChange below where we have to explicitly copy
// all props.
VirtualViewExperimentalEventEmitter::OnModeChange event = {
VirtualViewEventEmitter::OnModeChange event = {
.mode = (int)newMode,
.targetRect =
{.x = targetRect.origin.x,
Expand All @@ -196,17 +193,13 @@ - (void)onModeChange:(RCTVirtualViewMode)newMode targetRect:(CGRect)targetRect t

switch (newMode) {
case RCTVirtualViewModeVisible:
if (_renderState == RCTVirtualViewRenderStateUnknown) {
// Feature flag is disabled, so use the former logic.
// If the previous mode was hidden, emit a mode change even if `renderState` is rendered,
// because the hidden mode change is still pending and will eventually be committed. Only
// skip emitting a mode change if the previous mode was prerender and the result of that
// event has already been committed.
if (!oldMode.has_value() || oldMode == RCTVirtualViewModeHidden ||
_renderState != RCTVirtualViewRenderStateRendered) {
[self _dispatchSyncModeChange:event];
} else {
// If the previous mode was prerender and the result of dispatching that event was committed, we do not need
// to dispatch an event for visible.
const auto wasPrerenderCommitted = oldMode.has_value() && oldMode == RCTVirtualViewModePrerender &&
_renderState == RCTVirtualViewRenderStateRendered;
if (!wasPrerenderCommitted) {
[self _dispatchSyncModeChange:event];
}
}
break;
case RCTVirtualViewModePrerender:
Expand Down Expand Up @@ -260,23 +253,23 @@ - (void)_unhideIfNeeded
return nil;
}

- (void)_dispatchAsyncModeChange:(VirtualViewExperimentalEventEmitter::OnModeChange &)event
- (void)_dispatchAsyncModeChange:(VirtualViewEventEmitter::OnModeChange &)event
{
if (!_eventEmitter) {
return;
}

auto &emitter = static_cast<const VirtualViewExperimentalEventEmitter &>(*_eventEmitter);
auto &emitter = static_cast<const VirtualViewEventEmitter &>(*_eventEmitter);
emitter.onModeChange(event);
}

- (void)_dispatchSyncModeChange:(VirtualViewExperimentalEventEmitter::OnModeChange &)event
- (void)_dispatchSyncModeChange:(VirtualViewEventEmitter::OnModeChange &)event
{
if (!_eventEmitter) {
return;
}

auto &emitter = static_cast<const VirtualViewExperimentalEventEmitter &>(*_eventEmitter);
auto &emitter = static_cast<const VirtualViewEventEmitter &>(*_eventEmitter);

// TODO: Move this into a custom event emitter. We had to duplicate the codegen code here from onModeChange in order
// to dispatch synchronously and discrete.
Expand Down Expand Up @@ -310,12 +303,12 @@ - (void)_dispatchSyncModeChange:(VirtualViewExperimentalEventEmitter::OnModeChan

+ (ComponentDescriptorProvider)componentDescriptorProvider
{
return concreteComponentDescriptorProvider<VirtualViewExperimentalComponentDescriptor>();
return concreteComponentDescriptorProvider<VirtualViewComponentDescriptor>();
}

@end

Class<RCTComponentViewProtocol> VirtualViewExperimentalCls(void)
Class<RCTComponentViewProtocol> VirtualViewCls(void)
{
return RCTVirtualViewExperimentalComponentView.class;
return RCTVirtualViewComponentView.class;
}
16 changes: 8 additions & 8 deletions packages/react-native/ReactAndroid/api/ReactAndroid.api
Original file line number Diff line number Diff line change
Expand Up @@ -6702,7 +6702,7 @@ public final class com/facebook/react/views/virtual/VirtualViewMode : java/lang/
public static fun values ()[Lcom/facebook/react/views/virtual/VirtualViewMode;
}

public final class com/facebook/react/views/virtual/viewexperimental/ReactVirtualViewExperimental : com/facebook/react/views/view/ReactViewGroup, android/view/View$OnLayoutChangeListener, com/facebook/react/views/scroll/VirtualView {
public final class com/facebook/react/views/virtual/view/ReactVirtualView : com/facebook/react/views/view/ReactViewGroup, android/view/View$OnLayoutChangeListener, com/facebook/react/views/scroll/VirtualView {
public fun <init> (Landroid/content/Context;)V
public fun getContainerRelativeRect ()Landroid/graphics/Rect;
public fun getVirtualViewID ()Ljava/lang/String;
Expand All @@ -6712,27 +6712,27 @@ public final class com/facebook/react/views/virtual/viewexperimental/ReactVirtua
public fun updateClippingRect (Ljava/util/Set;)V
}

public final class com/facebook/react/views/virtual/viewexperimental/ReactVirtualViewExperimentalManager : com/facebook/react/views/view/ReactClippingViewManager, com/facebook/react/viewmanagers/VirtualViewExperimentalManagerInterface {
public static final field Companion Lcom/facebook/react/views/virtual/viewexperimental/ReactVirtualViewExperimentalManager$Companion;
public final class com/facebook/react/views/virtual/view/ReactVirtualViewManager : com/facebook/react/views/view/ReactClippingViewManager, com/facebook/react/viewmanagers/VirtualViewManagerInterface {
public static final field Companion Lcom/facebook/react/views/virtual/view/ReactVirtualViewManager$Companion;
public static final field REACT_CLASS Ljava/lang/String;
public fun <init> ()V
public synthetic fun addEventEmitters (Lcom/facebook/react/uimanager/ThemedReactContext;Landroid/view/View;)V
public synthetic fun createViewInstance (Lcom/facebook/react/uimanager/ThemedReactContext;)Landroid/view/View;
public fun getName ()Ljava/lang/String;
public synthetic fun prepareToRecycleView (Lcom/facebook/react/uimanager/ThemedReactContext;Landroid/view/View;)Landroid/view/View;
public synthetic fun setInitialHidden (Landroid/view/View;Z)V
public fun setInitialHidden (Lcom/facebook/react/views/virtual/viewexperimental/ReactVirtualViewExperimental;Z)V
public fun setInitialHidden (Lcom/facebook/react/views/virtual/view/ReactVirtualView;Z)V
public synthetic fun setNativeId (Landroid/view/View;Ljava/lang/String;)V
public fun setNativeId (Lcom/facebook/react/views/virtual/viewexperimental/ReactVirtualViewExperimental;Ljava/lang/String;)V
public fun setNativeId (Lcom/facebook/react/views/virtual/view/ReactVirtualView;Ljava/lang/String;)V
public synthetic fun setRemoveClippedSubviews (Landroid/view/View;Z)V
public synthetic fun setRenderState (Landroid/view/View;I)V
public fun setRenderState (Lcom/facebook/react/views/virtual/viewexperimental/ReactVirtualViewExperimental;I)V
public fun setRenderState (Lcom/facebook/react/views/virtual/view/ReactVirtualView;I)V
}

public final class com/facebook/react/views/virtual/viewexperimental/ReactVirtualViewExperimentalManager$Companion {
public final class com/facebook/react/views/virtual/view/ReactVirtualViewManager$Companion {
}

public final class com/facebook/react/views/virtual/viewexperimental/VirtualViewEventEmitter : com/facebook/react/views/virtual/VirtualViewModeChangeEmitter {
public final class com/facebook/react/views/virtual/view/VirtualViewEventEmitter : com/facebook/react/views/virtual/VirtualViewModeChangeEmitter {
public fun <init> (IILcom/facebook/react/uimanager/events/EventDispatcher;)V
public fun emitModeChange (Lcom/facebook/react/views/virtual/VirtualViewMode;Landroid/graphics/Rect;Landroid/graphics/Rect;Z)V
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<3ee5c6b643fa4065a8168ebbb19d4efc>>
* @generated SignedSource<<e12e5425f1a51acfd0f244e5d4f46a3e>>
*/

/**
Expand Down Expand Up @@ -342,18 +342,6 @@ public object ReactNativeFeatureFlags {
@JvmStatic
public fun enableVirtualViewDebugFeatures(): Boolean = accessor.enableVirtualViewDebugFeatures()

/**
* Enables reading render state when dispatching VirtualView events.
*/
@JvmStatic
public fun enableVirtualViewRenderState(): Boolean = accessor.enableVirtualViewRenderState()

/**
* Enables window focus detection for prioritizing VirtualView events.
*/
@JvmStatic
public fun enableVirtualViewWindowFocusDetection(): Boolean = accessor.enableVirtualViewWindowFocusDetection()

/**
* Uses the default event priority instead of the discreet event priority by default when dispatching events from Fabric to React.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<0c88c86f3085fa7c319b0c0a60102057>>
* @generated SignedSource<<fe103b59da0f78a6e834ca92603531fb>>
*/

/**
Expand Down Expand Up @@ -72,8 +72,6 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
private var enableViewRecyclingForViewCache: Boolean? = null
private var enableVirtualViewContainerStateExperimentalCache: Boolean? = null
private var enableVirtualViewDebugFeaturesCache: Boolean? = null
private var enableVirtualViewRenderStateCache: Boolean? = null
private var enableVirtualViewWindowFocusDetectionCache: Boolean? = null
private var fixMappingOfEventPrioritiesBetweenFabricAndReactCache: Boolean? = null
private var fixTextClippingAndroid15useBoundsForWidthCache: Boolean? = null
private var fuseboxAssertSingleHostStateCache: Boolean? = null
Expand Down Expand Up @@ -574,24 +572,6 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
return cached
}

override fun enableVirtualViewRenderState(): Boolean {
var cached = enableVirtualViewRenderStateCache
if (cached == null) {
cached = ReactNativeFeatureFlagsCxxInterop.enableVirtualViewRenderState()
enableVirtualViewRenderStateCache = cached
}
return cached
}

override fun enableVirtualViewWindowFocusDetection(): Boolean {
var cached = enableVirtualViewWindowFocusDetectionCache
if (cached == null) {
cached = ReactNativeFeatureFlagsCxxInterop.enableVirtualViewWindowFocusDetection()
enableVirtualViewWindowFocusDetectionCache = cached
}
return cached
}

override fun fixMappingOfEventPrioritiesBetweenFabricAndReact(): Boolean {
var cached = fixMappingOfEventPrioritiesBetweenFabricAndReactCache
if (cached == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<ca442b740e44e6eea6a8227f00fa1f99>>
* @generated SignedSource<<0ae5a806950b4bfaaaccde774114ab4e>>
*/

/**
Expand Down Expand Up @@ -132,10 +132,6 @@ public object ReactNativeFeatureFlagsCxxInterop {

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

@DoNotStrip @JvmStatic public external fun enableVirtualViewRenderState(): Boolean

@DoNotStrip @JvmStatic public external fun enableVirtualViewWindowFocusDetection(): Boolean

@DoNotStrip @JvmStatic public external fun fixMappingOfEventPrioritiesBetweenFabricAndReact(): Boolean

@DoNotStrip @JvmStatic public external fun fixTextClippingAndroid15useBoundsForWidth(): Boolean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<15272e1b6cbbcb03b08f453e9cdfccb1>>
* @generated SignedSource<<532504ff7b4a7f4c45649fc59ecade3a>>
*/

/**
Expand Down Expand Up @@ -127,10 +127,6 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi

override fun enableVirtualViewDebugFeatures(): Boolean = false

override fun enableVirtualViewRenderState(): Boolean = true

override fun enableVirtualViewWindowFocusDetection(): Boolean = false

override fun fixMappingOfEventPrioritiesBetweenFabricAndReact(): Boolean = false

override fun fixTextClippingAndroid15useBoundsForWidth(): Boolean = false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<2a0f4c8afaa630631d09e804776197a2>>
* @generated SignedSource<<d4caae6713b5c26f17841839903ea529>>
*/

/**
Expand Down Expand Up @@ -76,8 +76,6 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
private var enableViewRecyclingForViewCache: Boolean? = null
private var enableVirtualViewContainerStateExperimentalCache: Boolean? = null
private var enableVirtualViewDebugFeaturesCache: Boolean? = null
private var enableVirtualViewRenderStateCache: Boolean? = null
private var enableVirtualViewWindowFocusDetectionCache: Boolean? = null
private var fixMappingOfEventPrioritiesBetweenFabricAndReactCache: Boolean? = null
private var fixTextClippingAndroid15useBoundsForWidthCache: Boolean? = null
private var fuseboxAssertSingleHostStateCache: Boolean? = null
Expand Down Expand Up @@ -630,26 +628,6 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
return cached
}

override fun enableVirtualViewRenderState(): Boolean {
var cached = enableVirtualViewRenderStateCache
if (cached == null) {
cached = currentProvider.enableVirtualViewRenderState()
accessedFeatureFlags.add("enableVirtualViewRenderState")
enableVirtualViewRenderStateCache = cached
}
return cached
}

override fun enableVirtualViewWindowFocusDetection(): Boolean {
var cached = enableVirtualViewWindowFocusDetectionCache
if (cached == null) {
cached = currentProvider.enableVirtualViewWindowFocusDetection()
accessedFeatureFlags.add("enableVirtualViewWindowFocusDetection")
enableVirtualViewWindowFocusDetectionCache = cached
}
return cached
}

override fun fixMappingOfEventPrioritiesBetweenFabricAndReact(): Boolean {
var cached = fixMappingOfEventPrioritiesBetweenFabricAndReactCache
if (cached == null) {
Expand Down
Loading
Loading