From 839692c2b510116815e7e044a50705bb092271cb Mon Sep 17 00:00:00 2001 From: zhangdw521 Date: Fri, 12 Sep 2025 16:03:16 +0800 Subject: [PATCH] fix force split bug Signed-off-by: zhangdw521 Change-Id: I7f07c9d780dbf09141d4353cc66a7570a20ff722 --- .../pattern/navigation/navigation_pattern.cpp | 3 +- .../pattern/navigation/navigation_pattern.h | 6 ++-- .../navigation_pattern_test_five_ng.cpp | 28 +++++++++++-------- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/frameworks/core/components_ng/pattern/navigation/navigation_pattern.cpp b/frameworks/core/components_ng/pattern/navigation/navigation_pattern.cpp index da2337c467c..686c6f8fb3a 100644 --- a/frameworks/core/components_ng/pattern/navigation/navigation_pattern.cpp +++ b/frameworks/core/components_ng/pattern/navigation/navigation_pattern.cpp @@ -905,9 +905,10 @@ void NavigationPattern::ClearSecondaryNodesIfNeeded(NavPathList&& preList) * The NavDestination between the homeNode and the first newly added NavDestination will be removed. */ auto homeNode = homeNode_.Upgrade(); - if (!forceSplitSuccess_ || !homeNodeTouched_ || isTopFullScreenPage_) { + if (!forceSplitSuccess_ || !homeNodeTouched_.has_value() || !homeNodeTouched_.value() || isTopFullScreenPage_) { return; } + homeNodeTouched_ = std::nullopt; if (!forceSplitUseNavBar_ && !homeNode) { return; } diff --git a/frameworks/core/components_ng/pattern/navigation/navigation_pattern.h b/frameworks/core/components_ng/pattern/navigation/navigation_pattern.h index 03fd89437d7..be2624c9563 100644 --- a/frameworks/core/components_ng/pattern/navigation/navigation_pattern.h +++ b/frameworks/core/components_ng/pattern/navigation/navigation_pattern.h @@ -527,11 +527,11 @@ public: return forceSplitUseNavBar_; } - bool IsHomeNodeTouched() const + std::optional IsHomeNodeTouched() const { return homeNodeTouched_; } - void SetIsHomeNodeTouched(bool touch) + void SetIsHomeNodeTouched(const std::optional& touch) { homeNodeTouched_ = touch; } @@ -850,7 +850,7 @@ private: bool forceSplitSuccess_ = false; bool isTopFullScreenPage_ = false; bool forceSplitUseNavBar_ = false; - bool homeNodeTouched_ = false; + std::optional homeNodeTouched_; bool navBarIsHome_ = false; bool isTargetForceSplitNav_ = false; WeakPtr homeNode_; diff --git a/test/unittest/core/pattern/navigation/navigation_pattern_test_five_ng.cpp b/test/unittest/core/pattern/navigation/navigation_pattern_test_five_ng.cpp index a2bf2995de3..a348a18a74e 100644 --- a/test/unittest/core/pattern/navigation/navigation_pattern_test_five_ng.cpp +++ b/test/unittest/core/pattern/navigation/navigation_pattern_test_five_ng.cpp @@ -923,7 +923,7 @@ HWTEST_F(NavigationPatternTestFiveNg, GetFirstNewDestinationIndex003, TestSize.L /** * @tc.name: ClearSecondaryNodesIfNeeded001 - * @tc.desc: Branch: if (!forceSplitSuccess_ || !homeNodeTouched_) { => true + * @tc.desc: Branch: if (!forceSplitSuccess_ || !homeNodeTouched_.has_value() || !homeNodeTouched_.value()) { => true * @tc.type: FUNC */ HWTEST_F(NavigationPatternTestFiveNg, ClearSecondaryNodesIfNeeded001, TestSize.Level1) @@ -941,13 +941,17 @@ HWTEST_F(NavigationPatternTestFiveNg, ClearSecondaryNodesIfNeeded001, TestSize.L NavPathList preList; pattern->needSyncWithJsStack_ = true; + pattern->forceSplitSuccess_ = false; + pattern->ClearSecondaryNodesIfNeeded(std::move(preList)); + ASSERT_TRUE(pattern->needSyncWithJsStack_); + pattern->forceSplitSuccess_ = true; - pattern->homeNodeTouched_ = false; + pattern->homeNodeTouched_ = std::nullopt; pattern->ClearSecondaryNodesIfNeeded(std::move(preList)); ASSERT_TRUE(pattern->needSyncWithJsStack_); - pattern->forceSplitSuccess_ = false; - pattern->homeNodeTouched_ = true; + pattern->forceSplitSuccess_ = true; + pattern->homeNodeTouched_ = false; pattern->ClearSecondaryNodesIfNeeded(std::move(preList)); ASSERT_TRUE(pattern->needSyncWithJsStack_); @@ -959,7 +963,7 @@ HWTEST_F(NavigationPatternTestFiveNg, ClearSecondaryNodesIfNeeded001, TestSize.L /** * @tc.name: ClearSecondaryNodesIfNeeded002 - * @tc.desc: Branch: if (!forceSplitSuccess_ || !homeNodeTouched_) { => false + * @tc.desc: Branch: if (!forceSplitSuccess_ || !homeNodeTouched_.has_value() || !homeNodeTouched_.value()) { => false * if (!forceSplitUseNavBar_ && !homeNode) { => true * @tc.type: FUNC */ @@ -987,7 +991,7 @@ HWTEST_F(NavigationPatternTestFiveNg, ClearSecondaryNodesIfNeeded002, TestSize.L /** * @tc.name: ClearSecondaryNodesIfNeeded003 - * @tc.desc: Branch: if (!forceSplitSuccess_ || !homeNodeTouched_) { => false + * @tc.desc: Branch: if (!forceSplitSuccess_ || !homeNodeTouched_.has_value() || !homeNodeTouched_.value()) { => false * if (!forceSplitUseNavBar_ && !homeNode) { => false * if (curList.empty()) { => true * @tc.type: FUNC @@ -1034,7 +1038,7 @@ HWTEST_F(NavigationPatternTestFiveNg, ClearSecondaryNodesIfNeeded003, TestSize.L /** * @tc.name: ClearSecondaryNodesIfNeeded004 - * @tc.desc: Branch: if (!forceSplitSuccess_ || !homeNodeTouched_) { => false + * @tc.desc: Branch: if (!forceSplitSuccess_ || !homeNodeTouched_.has_value() || !homeNodeTouched_.value()) { => false * if (!forceSplitUseNavBar_ && !homeNode) { => false * if (curList.empty()) { => false * if (it != preList.end()) { => true @@ -1074,7 +1078,7 @@ HWTEST_F(NavigationPatternTestFiveNg, ClearSecondaryNodesIfNeeded004, TestSize.L /** * @tc.name: ClearSecondaryNodesIfNeeded005 - * @tc.desc: Branch: if (!forceSplitSuccess_ || !homeNodeTouched_) { => false + * @tc.desc: Branch: if (!forceSplitSuccess_ || !homeNodeTouched_.has_value() || !homeNodeTouched_.value()) { => false * if (!forceSplitUseNavBar_ && !homeNode) { => false * if (curList.empty()) { => false * if (it != preList.end()) { => false @@ -1136,7 +1140,7 @@ HWTEST_F(NavigationPatternTestFiveNg, ClearSecondaryNodesIfNeeded005, TestSize.L /** * @tc.name: ClearSecondaryNodesIfNeeded006 - * @tc.desc: Branch: if (!forceSplitSuccess_ || !homeNodeTouched_) { => false + * @tc.desc: Branch: if (!forceSplitSuccess_ || !homeNodeTouched_.has_value() || !homeNodeTouched_.value()) { => false * if (!forceSplitUseNavBar_ && !homeNode) { => false * if (curList.empty()) { => false * if (it != preList.end()) { => false @@ -1210,7 +1214,7 @@ HWTEST_F(NavigationPatternTestFiveNg, ClearSecondaryNodesIfNeeded006, TestSize.L /** * @tc.name: ClearSecondaryNodesIfNeeded007 - * @tc.desc: Branch: if (!forceSplitSuccess_ || !homeNodeTouched_) { => false + * @tc.desc: Branch: if (!forceSplitSuccess_ || !homeNodeTouched_.has_value() || !homeNodeTouched_.value()) { => false * if (!forceSplitUseNavBar_ && !homeNode) { => false * if (curList.empty()) { => false * if (it != preList.end()) { => false @@ -1267,7 +1271,7 @@ HWTEST_F(NavigationPatternTestFiveNg, ClearSecondaryNodesIfNeeded007, TestSize.L /** * @tc.name: ClearSecondaryNodesIfNeeded008 - * @tc.desc: Branch: if (!forceSplitSuccess_ || !homeNodeTouched_) { => false + * @tc.desc: Branch: if (!forceSplitSuccess_ || !homeNodeTouched_.has_value() || !homeNodeTouched_.value()) { => false * if (!forceSplitUseNavBar_ && !homeNode) { => false * if (curList.empty()) { => false * if (it != preList.end()) { => false @@ -1322,7 +1326,7 @@ HWTEST_F(NavigationPatternTestFiveNg, ClearSecondaryNodesIfNeeded008, TestSize.L /** * @tc.name: ClearSecondaryNodesIfNeeded009 - * @tc.desc: Branch: if (!forceSplitSuccess_ || !homeNodeTouched_) { => false + * @tc.desc: Branch: if (!forceSplitSuccess_ || !homeNodeTouched_.has_value() || !homeNodeTouched_.value()) { => false * if (!forceSplitUseNavBar_ && !homeNode) { => false * if (curList.empty()) { => false * if (it != preList.end()) { => false -- Gitee