diff --git a/frameworks/core/components_ng/manager/focus/focus_view.cpp b/frameworks/core/components_ng/manager/focus/focus_view.cpp index e05c73b7e7808e50459d7d29b5ec9b4b52318e74..f41b79fb8cd378c4111c4609bb80ceb44cd73958 100644 --- a/frameworks/core/components_ng/manager/focus/focus_view.cpp +++ b/frameworks/core/components_ng/manager/focus/focus_view.cpp @@ -338,7 +338,8 @@ bool FocusView::RequestDefaultFocus() SetIsViewRootScopeFocused(true); auto ret = viewRootScope->RequestFocusImmediatelyInner(FocusReason::VIEW_SWITCH); // set neverShown_ false when request focus on focus view success - neverShown_ &= !ret; + neverShown_ &= (!ret | firstFlush_); + firstFlush_ = false; TAG_LOGI(AceLogTag::ACE_FOCUS, "Request rootScope: %{public}s/%{public}d ret: %{public}d.", viewRootScope->GetFrameName().c_str(), viewRootScope->GetFrameId(), ret); return ret; @@ -354,7 +355,8 @@ bool FocusView::RequestDefaultFocus() ret = lastViewFocusNode->RequestFocusImmediatelyInner(FocusReason::VIEW_SWITCH); } // set neverShown_ false when request focus on focus view success - neverShown_ &= !ret; + neverShown_ &= (!ret | firstFlush_); + firstFlush_ = false; TAG_LOGD(AceLogTag::ACE_FOCUS, "Request focus on focus view return: %{public}d.", ret); return ret; } diff --git a/frameworks/core/components_ng/manager/focus/focus_view.h b/frameworks/core/components_ng/manager/focus/focus_view.h index f693c46772793ee44caefb4f287161be4a0dc90f..04ba662a63f1748fa09ad55b23fd67791dd43d50 100644 --- a/frameworks/core/components_ng/manager/focus/focus_view.h +++ b/frameworks/core/components_ng/manager/focus/focus_view.h @@ -111,6 +111,7 @@ private: bool isViewRootScopeFocused_ = true; bool isViewHasFocused_ = false; bool isViewHasShow_ = false; + bool firstFlush_ = true; WeakPtr rootScopeSpecified_; bool GetFocusViewFocusable(); diff --git a/test/unittest/core/manager/focus_view_test_ng.cpp b/test/unittest/core/manager/focus_view_test_ng.cpp index 494b5a42440ede7fbcb119e3fbf1f3b048701048..ecf7d07f746e358f63f4d470e4006ff73e5fa043 100644 --- a/test/unittest/core/manager/focus_view_test_ng.cpp +++ b/test/unittest/core/manager/focus_view_test_ng.cpp @@ -251,7 +251,7 @@ HWTEST_F(FocusViewTestNg, FocusViewTest002, TestSize.Level1) PipelineContext::GetCurrentContext()->FlushFocusView(); EXPECT_TRUE(pagePattern->isViewHasFocused_); EXPECT_TRUE(pagePattern->isViewRootScopeFocused_); - EXPECT_FALSE(pagePattern->neverShown_); + EXPECT_TRUE(pagePattern->neverShown_); EXPECT_TRUE(pageFocusHub->IsCurrentFocus()); EXPECT_TRUE(pagePattern->IsRootScopeCurrentFocus()); EXPECT_TRUE(columnFocusHub->IsCurrentFocus()); @@ -387,7 +387,7 @@ HWTEST_F(FocusViewTestNg, FocusViewTest004, TestSize.Level1) PipelineContext::GetCurrentContext()->FlushFocusView(); EXPECT_TRUE(pagePattern->isViewHasFocused_); EXPECT_FALSE(pagePattern->isViewRootScopeFocused_); - EXPECT_FALSE(pagePattern->neverShown_); + EXPECT_TRUE(pagePattern->neverShown_); EXPECT_TRUE(pageFocusHub->IsCurrentFocus()); EXPECT_TRUE(pagePattern->IsRootScopeCurrentFocus()); EXPECT_TRUE(columnFocusHub->IsCurrentFocus()); @@ -488,7 +488,7 @@ HWTEST_F(FocusViewTestNg, FocusViewTest005, TestSize.Level1) PipelineContext::GetCurrentContext()->FlushFocusView(); EXPECT_TRUE(pagePattern1->isViewHasFocused_); EXPECT_TRUE(pagePattern1->isViewRootScopeFocused_); - EXPECT_FALSE(pagePattern1->neverShown_); + EXPECT_TRUE(pagePattern1->neverShown_); EXPECT_TRUE(pageFocusHub1->IsCurrentFocus()); EXPECT_TRUE(pagePattern1->IsRootScopeCurrentFocus()); EXPECT_TRUE(columnFocusHub1->IsCurrentFocus()); @@ -526,7 +526,7 @@ HWTEST_F(FocusViewTestNg, FocusViewTest005, TestSize.Level1) PipelineContext::GetCurrentContext()->FlushFocusView(); EXPECT_TRUE(pagePattern1->isViewHasFocused_); EXPECT_TRUE(pagePattern1->isViewRootScopeFocused_); - EXPECT_FALSE(pagePattern1->neverShown_); + EXPECT_TRUE(pagePattern1->neverShown_); EXPECT_FALSE(pageFocusHub1->IsCurrentFocus()); EXPECT_FALSE(pagePattern1->IsRootScopeCurrentFocus()); EXPECT_FALSE(columnFocusHub1->IsCurrentFocus()); @@ -535,7 +535,7 @@ HWTEST_F(FocusViewTestNg, FocusViewTest005, TestSize.Level1) EXPECT_TRUE(pagePattern2->isViewHasFocused_); EXPECT_TRUE(pagePattern2->isViewRootScopeFocused_); - EXPECT_FALSE(pagePattern2->neverShown_); + EXPECT_TRUE(pagePattern2->neverShown_); EXPECT_TRUE(pageFocusHub2->IsCurrentFocus()); EXPECT_TRUE(pagePattern2->IsRootScopeCurrentFocus()); EXPECT_TRUE(columnFocusHub2->IsCurrentFocus()); @@ -572,7 +572,7 @@ HWTEST_F(FocusViewTestNg, FocusViewTest005, TestSize.Level1) EXPECT_TRUE(pagePattern2->isViewHasFocused_); EXPECT_TRUE(pagePattern2->isViewRootScopeFocused_); - EXPECT_FALSE(pagePattern2->neverShown_); + EXPECT_TRUE(pagePattern2->neverShown_); EXPECT_FALSE(pageFocusHub2->IsCurrentFocus()); EXPECT_FALSE(pagePattern2->IsRootScopeCurrentFocus()); EXPECT_FALSE(columnFocusHub2->IsCurrentFocus()); @@ -639,7 +639,7 @@ HWTEST_F(FocusViewTestNg, FocusViewTest006, TestSize.Level1) PipelineContext::GetCurrentContext()->FlushFocusView(); EXPECT_TRUE(pagePattern->isViewHasFocused_); EXPECT_TRUE(pagePattern->isViewRootScopeFocused_); - EXPECT_FALSE(pagePattern->neverShown_); + EXPECT_TRUE(pagePattern->neverShown_); EXPECT_TRUE(pageFocusHub->IsCurrentFocus()); EXPECT_TRUE(pagePattern->IsRootScopeCurrentFocus()); EXPECT_TRUE(columnFocusHub->IsCurrentFocus()); @@ -718,7 +718,7 @@ HWTEST_F(FocusViewTestNg, FocusViewTest007, TestSize.Level1) PipelineContext::GetCurrentContext()->FlushFocusView(); EXPECT_TRUE(pagePattern->isViewHasFocused_); EXPECT_TRUE(pagePattern->isViewRootScopeFocused_); - EXPECT_FALSE(pagePattern->neverShown_); + EXPECT_TRUE(pagePattern->neverShown_); EXPECT_TRUE(pageFocusHub->IsCurrentFocus()); EXPECT_TRUE(pagePattern->IsRootScopeCurrentFocus()); EXPECT_TRUE(columnFocusHub->IsCurrentFocus());