diff --git a/React/Fabric/RCTScheduler.mm b/React/Fabric/RCTScheduler.mm index b9d38d6cd86..e8dc96ac138 100644 --- a/React/Fabric/RCTScheduler.mm +++ b/React/Fabric/RCTScheduler.mm @@ -45,7 +45,8 @@ class SchedulerDelegateProxy : public SchedulerDelegate { [scheduler.delegate schedulerDidDispatchCommand:shadowView commandName:commandName args:args]; } - void schedulerDidSetIsJSResponder(ShadowView const &shadowView, bool isJSResponder) override + void schedulerDidSetIsJSResponder(ShadowView const &shadowView, bool isJSResponder, bool blockNativeResponder) + override { RCTScheduler *scheduler = (__bridge RCTScheduler *)scheduler_; [scheduler.delegate schedulerDidSetIsJSResponder:isJSResponder forShadowView:shadowView]; diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.cpp b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.cpp index 8ba327f1590..f1ff744d17d 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.cpp +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.cpp @@ -1189,7 +1189,8 @@ void Binding::schedulerDidSendAccessibilityEvent( void Binding::schedulerDidSetIsJSResponder( ShadowView const &shadowView, - bool isJSResponder) { + bool isJSResponder, + bool blockNativeResponder) { jni::global_ref localJavaUIManager = getJavaUIManager(); if (!localJavaUIManager) { LOG(ERROR) << "Binding::schedulerSetJSResponder: JavaUIManager disappeared"; @@ -1214,7 +1215,7 @@ void Binding::schedulerDidSetIsJSResponder( // be flattened because the only component that uses this feature - // ScrollView - cannot be flattened. shadowView.tag, - (jboolean) true); + (jboolean)blockNativeResponder); } else { clearJSResponder(localJavaUIManager); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.h b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.h index 92015e5bcd6..b16bd9dc636 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.h +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.h @@ -147,7 +147,8 @@ class Binding : public jni::HybridClass, void schedulerDidSetIsJSResponder( ShadowView const &shadowView, - bool isJSResponder) override; + bool isJSResponder, + bool blockNativeResponder) override; void setPixelDensity(float pointScaleFactor); diff --git a/ReactCommon/react/renderer/scheduler/Scheduler.cpp b/ReactCommon/react/renderer/scheduler/Scheduler.cpp index 4e4dd8f95db..c5107c06a0b 100644 --- a/ReactCommon/react/renderer/scheduler/Scheduler.cpp +++ b/ReactCommon/react/renderer/scheduler/Scheduler.cpp @@ -300,10 +300,11 @@ void Scheduler::uiManagerDidSendAccessibilityEvent( */ void Scheduler::uiManagerDidSetIsJSResponder( ShadowNode::Shared const &shadowNode, - bool isJSResponder) { + bool isJSResponder, + bool blockNativeResponder) { if (delegate_) { delegate_->schedulerDidSetIsJSResponder( - ShadowView(*shadowNode), isJSResponder); + ShadowView(*shadowNode), isJSResponder, blockNativeResponder); } } diff --git a/ReactCommon/react/renderer/scheduler/Scheduler.h b/ReactCommon/react/renderer/scheduler/Scheduler.h index a163a66a5e7..03c8f65d2ea 100644 --- a/ReactCommon/react/renderer/scheduler/Scheduler.h +++ b/ReactCommon/react/renderer/scheduler/Scheduler.h @@ -94,7 +94,8 @@ class Scheduler final : public UIManagerDelegate { std::string const &eventType) override; void uiManagerDidSetIsJSResponder( ShadowNode::Shared const &shadowView, - bool isJSResponder) override; + bool isJSResponder, + bool blockNativeResponder) override; private: friend class SurfaceHandler; diff --git a/ReactCommon/react/renderer/scheduler/SchedulerDelegate.h b/ReactCommon/react/renderer/scheduler/SchedulerDelegate.h index 726e7ef937a..33e247c631b 100644 --- a/ReactCommon/react/renderer/scheduler/SchedulerDelegate.h +++ b/ReactCommon/react/renderer/scheduler/SchedulerDelegate.h @@ -50,7 +50,8 @@ class SchedulerDelegate { */ virtual void schedulerDidSetIsJSResponder( ShadowView const &shadowView, - bool isJSResponder) = 0; + bool isJSResponder, + bool blockNativeResponder) = 0; virtual ~SchedulerDelegate() noexcept = default; }; diff --git a/ReactCommon/react/renderer/uimanager/UIManager.cpp b/ReactCommon/react/renderer/uimanager/UIManager.cpp index 7fca1a5807b..48f4cfaa1d3 100644 --- a/ReactCommon/react/renderer/uimanager/UIManager.cpp +++ b/ReactCommon/react/renderer/uimanager/UIManager.cpp @@ -115,9 +115,11 @@ void UIManager::completeSurface( void UIManager::setIsJSResponder( ShadowNode::Shared const &shadowNode, - bool isJSResponder) const { + bool isJSResponder, + bool blockNativeResponder) const { if (delegate_) { - delegate_->uiManagerDidSetIsJSResponder(shadowNode, isJSResponder); + delegate_->uiManagerDidSetIsJSResponder( + shadowNode, isJSResponder, blockNativeResponder); } } diff --git a/ReactCommon/react/renderer/uimanager/UIManager.h b/ReactCommon/react/renderer/uimanager/UIManager.h index 14250046ea0..dac02a589b5 100644 --- a/ReactCommon/react/renderer/uimanager/UIManager.h +++ b/ReactCommon/react/renderer/uimanager/UIManager.h @@ -131,7 +131,8 @@ class UIManager final : public ShadowTreeDelegate { void setIsJSResponder( ShadowNode::Shared const &shadowNode, - bool isJSResponder) const; + bool isJSResponder, + bool blockNativeResponder) const; ShadowNode::Shared findNodeAtPoint( ShadowNode::Shared const &shadowNode, diff --git a/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp b/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp index dec251ef14e..c6f3327bc44 100644 --- a/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp +++ b/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp @@ -321,7 +321,8 @@ jsi::Value UIManagerBinding::get( size_t count) noexcept -> jsi::Value { uiManager->setIsJSResponder( shadowNodeFromValue(runtime, arguments[0]), - arguments[1].getBool()); + arguments[1].getBool(), + arguments[2].getBool()); return jsi::Value::undefined(); }); diff --git a/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h b/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h index 5e993056c42..a99350fc3c6 100644 --- a/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h +++ b/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h @@ -56,7 +56,8 @@ class UIManagerDelegate { */ virtual void uiManagerDidSetIsJSResponder( ShadowNode::Shared const &shadowNode, - bool isJSResponder) = 0; + bool isJSResponder, + bool blockNativeResponder) = 0; virtual ~UIManagerDelegate() noexcept = default; };