diff --git a/frameworks/core/components_ng/manager/select_content_overlay/select_content_overlay_manager.cpp b/frameworks/core/components_ng/manager/select_content_overlay/select_content_overlay_manager.cpp index e8623189d2233863097a08cc9eb8dfd6a66ec443..b7354d0f570bd6d9c47ca885d6ca69ac56b43a1d 100644 --- a/frameworks/core/components_ng/manager/select_content_overlay/select_content_overlay_manager.cpp +++ b/frameworks/core/components_ng/manager/select_content_overlay/select_content_overlay_manager.cpp @@ -164,11 +164,6 @@ void SelectContentOverlayManager::NotifyAccessibilityOwner() context->AddAfterLayoutTask([weakNode = WeakClaim(RawPtr(owner)), weakManager = WeakClaim(this)]() { auto owner = weakNode.Upgrade(); CHECK_NULL_VOID(owner); - auto manager = weakManager.Upgrade(); - CHECK_NULL_VOID(manager); - if (!manager->IsMenuShow()) { - return; - } owner->OnAccessibilityEvent(AccessibilityEventType::REQUEST_FOCUS); }); } @@ -801,7 +796,7 @@ bool SelectContentOverlayManager::CloseInternal(int32_t id, bool animation, Clos auto menuNode = menuNode_.Upgrade(); auto handleNode = handleNode_.Upgrade(); auto owner = selectOverlayHolder_->GetOwner(); - if (owner) { + if (owner && IsMenuShow()) { auto ownerTag = owner->GetTag(); if (ownerTag != V2::RICH_EDITOR_ETS_TAG || (reason != CloseReason::CLOSE_REASON_SELECT_ALL && reason != CloseReason::CLOSE_REASON_BY_RECREATE)) { diff --git a/test/unittest/core/manager/select_overlay_manager_test_ng.cpp b/test/unittest/core/manager/select_overlay_manager_test_ng.cpp index 0135bbafeb0a1b407c24de73c9a6b5e4a7d7ab43..36c411d75d52646a532e978b6e0d03701819b99e 100644 --- a/test/unittest/core/manager/select_overlay_manager_test_ng.cpp +++ b/test/unittest/core/manager/select_overlay_manager_test_ng.cpp @@ -1796,11 +1796,11 @@ HWTEST_F(SelectOverlayManagerTestNg, GetSelectOverlayRoot, TestSize.Level1) } /** - * @tc.name: CloseInternal + * @tc.name: CloseInternalTest001 * @tc.desc: test CloseInternal * @tc.type: FUNC */ -HWTEST_F(SelectOverlayManagerTestNg, CloseInternal, TestSize.Level1) +HWTEST_F(SelectOverlayManagerTestNg, CloseInternalTest001, TestSize.Level1) { /** * @tc.steps: step1. CloseInternal @@ -1815,6 +1815,91 @@ HWTEST_F(SelectOverlayManagerTestNg, CloseInternal, TestSize.Level1) EXPECT_EQ(content.selectionHoldId_, -1); } +/** + * @tc.name: CloseInternalTest002 + * @tc.desc: test CloseInternal + * @tc.type: FUNC + */ +HWTEST_F(SelectOverlayManagerTestNg, CloseInternalTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. CloseInternal + */ + Init(); + auto content = SelectContentOverlayManager(root_); + auto holder = AceType::MakeRefPtr(); + holder->SetOwner(root_); + content.SetHolder(holder); + SelectOverlayInfo selectInfo; + selectInfo.enableHandleLevel = true; + selectInfo.menuInfo.showCut = true; + content.shareOverlayInfo_ = std::make_shared(selectInfo); + ASSERT_NE(content.shareOverlayInfo_, nullptr); + auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(content.shareOverlayInfo_); + ASSERT_NE(frameNode, nullptr); + content.menuNode_ = AceType::WeakClaim(AceType::RawPtr(frameNode)); + ASSERT_NE(content.menuNode_.Upgrade(), nullptr); + + /** + * @tc.steps: step2. mount menuNode to root node + */ + frameNode->SetParent(root_); + + /** + * @tc.steps: step3. call CloseInternal + */ + int32_t id = root_->GetId(); + bool animation = true; + CloseReason reason = CloseReason::CLOSE_REASON_NORMAL; + content.shareOverlayInfo_ = std::make_shared(); + content.shareOverlayInfo_->menuInfo.menuIsShow = true; + content.shareOverlayInfo_->enableHandleLevel = true; + bool result = content.CloseInternal(id, animation, reason); + EXPECT_TRUE(result); +} + +/** + * @tc.name: CloseInternalTest003 + * @tc.desc: test CloseInternal + * @tc.type: FUNC + */ +HWTEST_F(SelectOverlayManagerTestNg, CloseInternalTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. CloseInternal + */ + Init(); + auto content = SelectContentOverlayManager(root_); + auto holder = AceType::MakeRefPtr(); + content.SetHolder(holder); + SelectOverlayInfo selectInfo; + selectInfo.enableHandleLevel = true; + selectInfo.menuInfo.showCut = true; + content.shareOverlayInfo_ = std::make_shared(selectInfo); + ASSERT_NE(content.shareOverlayInfo_, nullptr); + auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(content.shareOverlayInfo_); + ASSERT_NE(frameNode, nullptr); + content.menuNode_ = AceType::WeakClaim(AceType::RawPtr(frameNode)); + ASSERT_NE(content.menuNode_.Upgrade(), nullptr); + + /** + * @tc.steps: step2. mount menuNode to root node + */ + frameNode->SetParent(root_); + + /** + * @tc.steps: step3. call CloseInternal + */ + int32_t id = root_->GetId(); + bool animation = true; + CloseReason reason = CloseReason::CLOSE_REASON_NORMAL; + content.shareOverlayInfo_ = std::make_shared(); + content.shareOverlayInfo_->menuInfo.menuIsShow = true; + content.shareOverlayInfo_->enableHandleLevel = false; + bool result = content.CloseInternal(id, animation, reason); + EXPECT_TRUE(result); +} + /** * @tc.name: DestroySelectOverlayNode * @tc.desc: test DestroySelectOverlayNode