From b9ae0cbe37a85d70c7f1baa369018aff14fc715d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B0=B8=E5=87=AF?= Date: Thu, 19 Jun 2025 11:58:55 +0800 Subject: [PATCH] reset onClick capi frameNode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 刘永凯 --- .../core/components_ng/base/view_abstract.cpp | 3 ++ .../core/interfaces/native/node/node_api.cpp | 2 +- ...w_abstract_test_ng_for_property_config.cpp | 31 +++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/frameworks/core/components_ng/base/view_abstract.cpp b/frameworks/core/components_ng/base/view_abstract.cpp index ce07fad7ece..be5b5a3b727 100644 --- a/frameworks/core/components_ng/base/view_abstract.cpp +++ b/frameworks/core/components_ng/base/view_abstract.cpp @@ -7677,6 +7677,9 @@ void ViewAbstract::ClearJSFrameNodeOnClick(FrameNode* frameNode) auto gestureHub = frameNode->GetOrCreateGestureEventHub(); CHECK_NULL_VOID(gestureHub); gestureHub->ClearJSFrameNodeOnClick(); + auto* uiNode = reinterpret_cast(frameNode); + CHECK_NULL_VOID(uiNode); + uiNode->SetNodeEventRegistrationState(false); } void ViewAbstract::SetJSFrameNodeOnTouch(FrameNode* frameNode, TouchEventFunc&& touchEventFunc) diff --git a/frameworks/core/interfaces/native/node/node_api.cpp b/frameworks/core/interfaces/native/node/node_api.cpp index c9c2269567f..e977ca6c056 100644 --- a/frameworks/core/interfaces/native/node/node_api.cpp +++ b/frameworks/core/interfaces/native/node/node_api.cpp @@ -652,7 +652,7 @@ const ResetComponentAsyncEventHandler COMMON_NODE_RESET_ASYNC_EVENT_HANDLERS[] = nullptr, nullptr, NodeModifier::ResetOnAxisEvent, - nullptr, + NodeModifier::ResetOnClick, nullptr, NodeModifier::ResetOnHoverMove, }; diff --git a/test/unittest/core/base/view_abstract_test_ng_for_property_config.cpp b/test/unittest/core/base/view_abstract_test_ng_for_property_config.cpp index 6596082a571..3946d369395 100644 --- a/test/unittest/core/base/view_abstract_test_ng_for_property_config.cpp +++ b/test/unittest/core/base/view_abstract_test_ng_for_property_config.cpp @@ -1742,4 +1742,35 @@ HWTEST_F(ViewAbstractTestNg, BackgroundResourceTest003, TestSize.Level1) ViewAbstract::SetBackgroundImageSizeUpdateFunc(BACKGROUNDSIZE, nullptr, "width"); EXPECT_TRUE(resMap.find("backgroundImageSizeWidth") == resMap.end()); } + +/** + * @tc.name: ViewAbstractClearJSFrameNodeOnClickTest001 + * @tc.desc: Test ClearJsFrameNodeOnClick. + * @tc.type: FUNC + */ +HWTEST_F(ViewAbstractTestNg, ViewAbstractClearJSFrameNodeOnClickTest001, TestSize.Level1) +{ + /** + * @tc.steps1: Create a FrameNode and set a native onClick event via SetJSFrameNodeOnClick. + * @tc.expected: The nodeEventRegistered should be true. + */ + auto frameNode = FrameNode::CreateFrameNode( + V2::BUTTON_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr()); + ASSERT_NE(frameNode, nullptr); + GestureEventFunc onClick = [](GestureEvent&) {}; + ViewAbstract::SetJSFrameNodeOnClick(AceType::RawPtr(frameNode), std::move(onClick)); + + auto* uiNode = reinterpret_cast(AceType::RawPtr(frameNode)); + ASSERT_NE(uiNode, nullptr); + auto currentInfo = uiNode->GetInteractionEventBindingInfo(); + EXPECT_EQ(currentInfo.nodeEventRegistered, true); + + /** + * @tc.steps2: ClearJSFrameNodeOnClick. + * @tc.expected: The nodeEventRegistered should be false. + */ + ViewAbstract::ClearJSFrameNodeOnClick(AceType::RawPtr(frameNode)); + currentInfo = uiNode->GetInteractionEventBindingInfo(); + EXPECT_EQ(currentInfo.nodeEventRegistered, false); +} } // namespace OHOS::Ace::NG \ No newline at end of file -- Gitee