diff --git a/frameworks/core/components_ng/pattern/navigation/navigation_pattern.cpp b/frameworks/core/components_ng/pattern/navigation/navigation_pattern.cpp index da2337c467c312ce3b2333bc590bf62908ad21cf..686c6f8fb3a1b0e12bf67f2865aac16d307c5865 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 03fd89437d79214ec9ae342d1c94267b78ffb65f..be2624c9563fb059e124f4aee86302ac37bf848b 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 a2bf2995de3fc04ae25ef825051579ef77838d57..a348a18a74e90fd87873c18833ce4761008b7c5a 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