From d039b3be8ed74dfcb8b22d2f1caa26c9accd1b3a Mon Sep 17 00:00:00 2001 From: zyh990312 Date: Mon, 1 Sep 2025 16:07:17 +0800 Subject: [PATCH 1/2] =?UTF-8?q?setwindowlayoutfullscreen=20=E5=BC=80?= =?UTF-8?q?=E6=94=BE=E8=87=AA=E7=94=B1=E5=A4=9A=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zyh990312 --- .../window_runtime/window_napi/js_window.cpp | 4 +- wm/src/window_scene_session_impl.cpp | 10 +---- .../window_scene_session_impl_test.cpp | 12 ++++++ .../window_scene_session_impl_test3.cpp | 37 +++++++++++++++++++ 4 files changed, 53 insertions(+), 10 deletions(-) diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window.cpp b/interfaces/kits/napi/window_runtime/window_napi/js_window.cpp index bf783a9d9b..19bcd0a58c 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window.cpp +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window.cpp @@ -3256,7 +3256,7 @@ napi_value JsWindow::OnSetWindowLayoutFullScreen(napi_env env, napi_callback_inf return; } // compatibleMode app adapt to immersive need apply avoidArea method - if (window->IsPcOrPadFreeMultiWindowMode() && !window->IsAdaptToCompatibleImmersive()) { + if (window->IsPcWindow() && !window->IsAdaptToCompatibleImmersive()) { TLOGNE(WmsLogTag::WMS_IMMS, "%{public}s device not support", where); window->SetIgnoreSafeArea(isLayoutFullScreen); task.Resolve(env, NapiGetUndefined(env)); @@ -8131,7 +8131,7 @@ napi_value JsWindow::OnSetImmersiveModeEnabledState(napi_env env, napi_callback_ napi_get_value_bool(env, nativeVal, &enable); } TLOGI(WmsLogTag::WMS_IMMS, "enable %{public}d", static_cast(enable)); - if (windowToken_->IsPcOrPadFreeMultiWindowMode()) { + if (windowToken_->IsPcWindow()) { TLOGE(WmsLogTag::WMS_IMMS, "id:%{public}u device not support", windowToken_->GetWindowId()); windowToken_->SetIgnoreSafeArea(enable); return NapiGetUndefined(env); diff --git a/wm/src/window_scene_session_impl.cpp b/wm/src/window_scene_session_impl.cpp index cf31a7e89a..1034409fd0 100644 --- a/wm/src/window_scene_session_impl.cpp +++ b/wm/src/window_scene_session_impl.cpp @@ -3491,7 +3491,7 @@ WMError WindowSceneSessionImpl::Recover() TLOGW(WmsLogTag::WMS_LAYOUT_PC, "Recover fail, already MODE_RECOVER"); return WMError::WM_ERROR_REPEAT_OPERATION; } - if (enableImmersiveMode_) { + if (enableImmersiveMode_ && !IsFreeMultiWindowMode()) { enableImmersiveMode_ = false; property_->SetIsLayoutFullScreen(enableImmersiveMode_); hostSession->OnLayoutFullScreenChange(enableImmersiveMode_); @@ -3561,7 +3561,7 @@ WMError WindowSceneSessionImpl::Recover(uint32_t reason) TLOGW(WmsLogTag::WMS_LAYOUT_PC, "Recover fail, already MODE_RECOVER"); return WMError::WM_ERROR_REPEAT_OPERATION; } - if (enableImmersiveMode_) { + if (enableImmersiveMode_ && !IsFreeMultiWindowMode()) { enableImmersiveMode_ = false; property_->SetIsLayoutFullScreen(enableImmersiveMode_); hostSession->OnLayoutFullScreenChange(enableImmersiveMode_); @@ -5552,12 +5552,6 @@ WSError WindowSceneSessionImpl::SwitchFreeMultiWindow(bool enable) WindowMode::WINDOW_MODE_FULLSCREEN)) { UpdateDecorEnable(true); } - auto mainWindow = FindMainWindowWithContext(); - bool isAnco = mainWindow != nullptr && mainWindow->IsAnco(); - if (WindowHelper::IsWindowModeSupported(property_->GetWindowModeSupportType(), WindowMode::WINDOW_MODE_FLOATING) && - !isAnco) { - UpdateImmersiveBySwitchMode(enable); - } SwitchSubWindow(enable, GetPersistentId()); return WSError::WS_OK; } diff --git a/wm/test/unittest/window_scene_session_impl_test.cpp b/wm/test/unittest/window_scene_session_impl_test.cpp index b9ee6a8105..01e4418d48 100644 --- a/wm/test/unittest/window_scene_session_impl_test.cpp +++ b/wm/test/unittest/window_scene_session_impl_test.cpp @@ -1200,6 +1200,18 @@ HWTEST_F(WindowSceneSessionImplTest, Recover01, TestSize.Level1) windowSceneSession->hostSession_ = session; ASSERT_EQ(WMError::WM_OK, windowSceneSession->Recover()); + + windowSceneSession->windowSystemConfig_.windowUIType_ = WindowUIType::PAD_WINDOW; + windowSceneSession->enableImmersiveMode_ = true; + windowSceneSession->windowSystemConfig_.freeMultiWindowEnable_ = false; + windowSceneSession->windowSystemConfig_.freeMultiWindowSupport_ = false; + ASSERT_EQ(WMError::WM_OK, windowSceneSession->Recover()); + ASSERT_EQ(false, windowSceneSession->enableImmersiveMode_); + windowSceneSession->enableImmersiveMode_ = true; + windowSceneSession->windowSystemConfig_.freeMultiWindowEnable_ = true; + windowSceneSession->windowSystemConfig_.freeMultiWindowSupport_ = true; + ASSERT_EQ(WMError::WM_OK, windowSceneSession->Recover()); + ASSERT_EQ(true, windowSceneSession->enableImmersiveMode_); } /** diff --git a/wm/test/unittest/window_scene_session_impl_test3.cpp b/wm/test/unittest/window_scene_session_impl_test3.cpp index e2d17fc949..9a585181d6 100644 --- a/wm/test/unittest/window_scene_session_impl_test3.cpp +++ b/wm/test/unittest/window_scene_session_impl_test3.cpp @@ -1726,6 +1726,43 @@ HWTEST_F(WindowSceneSessionImplTest3, Recover01, TestSize.Level1) EXPECT_EQ(WMError::WM_OK, ret); } +/** + * @tc.name: Recover01 + * @tc.desc: Recover + * @tc.type: FUNC + */ +HWTEST_F(WindowSceneSessionImplTest3, Recover01, TestSize.Level1) +{ + sptr option = sptr::MakeSptr(); + option->SetWindowName("Recover"); + sptr windowSceneSessionImpl = sptr::MakeSptr(option); + windowSceneSessionImpl->hostSession_ = nullptr; + auto ret = windowSceneSessionImpl->Recover(1); + EXPECT_EQ(WMError::WM_ERROR_INVALID_WINDOW, ret); + SessionInfo sessionInfo = { "CreateTestBundle", "CreateTestModule", "CreateTestAbility" }; + sptr session = sptr::MakeSptr(sessionInfo); + windowSceneSessionImpl->property_->SetPersistentId(1); + windowSceneSessionImpl->hostSession_ = session; + windowSceneSessionImpl->state_ = WindowState::STATE_SHOWN; + windowSceneSessionImpl->windowSystemConfig_.windowUIType_ = WindowUIType::PAD_WINDOW; + windowSceneSessionImpl->property_->SetWindowType(WindowType::APP_MAIN_WINDOW_BASE); + windowSceneSessionImpl->property_->SetMaximizeMode(MaximizeMode::MODE_FULL_FILL); + windowSceneSessionImpl->property_->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN); + windowSceneSessionImpl->windowSystemConfig_.freeMultiWindowEnable_ = true; + windowSceneSessionImpl->windowSystemConfig_.freeMultiWindowSupport_ = true; + windowSceneSessionImpl->enableImmersiveMode_ = true; + ASSERT_EQ(WMError::WM_OK, windowSceneSessionImpl->Recover()); + ASSERT_EQ(false, windowSceneSessionImpl->enableImmersiveMode_); + + windowSceneSessionImpl->enableImmersiveMode_ = true; + windowSceneSessionImpl->windowSystemConfig_.windowUIType_ = WindowUIType::PC_WINDOW; + windowSceneSessionImpl->property_->SetMaximizeMode(MaximizeMode::MODE_FULL_FILL); + windowSceneSessionImpl->property_->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN); + windowSceneSessionImpl->windowSystemConfig_.freeMultiWindowEnable_ = false; + ASSERT_EQ(WMError::WM_OK, windowSceneSessionImpl->Recover()); + ASSERT_EQ(true, windowSceneSessionImpl->enableImmersiveMode_); +} + /** * @tc.name: FindParentSessionByParentId * @tc.desc: FindParentSessionByParentId -- Gitee From 3fde93eff649843f1cfbb3c49b32b6ae3af554c2 Mon Sep 17 00:00:00 2001 From: zyh990312 Date: Tue, 2 Sep 2025 18:13:19 +0800 Subject: [PATCH 2/2] xiugai1 Signed-off-by: zyh990312 --- wm/src/window_scene_session_impl.cpp | 6 ++++++ .../unittest/window_scene_session_impl_test.cpp | 12 ++++++++---- .../unittest/window_scene_session_impl_test3.cpp | 14 +++++++------- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/wm/src/window_scene_session_impl.cpp b/wm/src/window_scene_session_impl.cpp index 1034409fd0..5ade723ac7 100644 --- a/wm/src/window_scene_session_impl.cpp +++ b/wm/src/window_scene_session_impl.cpp @@ -5552,6 +5552,12 @@ WSError WindowSceneSessionImpl::SwitchFreeMultiWindow(bool enable) WindowMode::WINDOW_MODE_FULLSCREEN)) { UpdateDecorEnable(true); } + auto mainWindow = FindMainWindowWithContext(); + bool isAnco = mainWindow != nullptr && mainWindow->IsAnco(); + if (WindowHelper::IsWindowModeSupported(property_->GetWindowModeSupportType(), WindowMode::WINDOW_MODE_FLOATING) && + !isAnco) { + UpdateImmersiveBySwitchMode(enable); + } SwitchSubWindow(enable, GetPersistentId()); return WSError::WS_OK; } diff --git a/wm/test/unittest/window_scene_session_impl_test.cpp b/wm/test/unittest/window_scene_session_impl_test.cpp index 01e4418d48..b30f7e2205 100644 --- a/wm/test/unittest/window_scene_session_impl_test.cpp +++ b/wm/test/unittest/window_scene_session_impl_test.cpp @@ -1203,15 +1203,19 @@ HWTEST_F(WindowSceneSessionImplTest, Recover01, TestSize.Level1) windowSceneSession->windowSystemConfig_.windowUIType_ = WindowUIType::PAD_WINDOW; windowSceneSession->enableImmersiveMode_ = true; + windowSceneSession->property_->SetMaximizeMode(MaximizeMode::MODE_FULL_FILL); + windowSceneSession->property_->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN); windowSceneSession->windowSystemConfig_.freeMultiWindowEnable_ = false; windowSceneSession->windowSystemConfig_.freeMultiWindowSupport_ = false; - ASSERT_EQ(WMError::WM_OK, windowSceneSession->Recover()); - ASSERT_EQ(false, windowSceneSession->enableImmersiveMode_); + EXPECT_EQ(WMError::WM_OK, windowSceneSession->Recover()); + EXPECT_EQ(false, windowSceneSession->enableImmersiveMode_); windowSceneSession->enableImmersiveMode_ = true; + windowSceneSession->property_->SetMaximizeMode(MaximizeMode::MODE_FULL_FILL); + windowSceneSession->property_->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN); windowSceneSession->windowSystemConfig_.freeMultiWindowEnable_ = true; windowSceneSession->windowSystemConfig_.freeMultiWindowSupport_ = true; - ASSERT_EQ(WMError::WM_OK, windowSceneSession->Recover()); - ASSERT_EQ(true, windowSceneSession->enableImmersiveMode_); + EXPECT_EQ(WMError::WM_OK, windowSceneSession->Recover()); + EXPECT_EQ(true, windowSceneSession->enableImmersiveMode_); } /** diff --git a/wm/test/unittest/window_scene_session_impl_test3.cpp b/wm/test/unittest/window_scene_session_impl_test3.cpp index 9a585181d6..d98740345c 100644 --- a/wm/test/unittest/window_scene_session_impl_test3.cpp +++ b/wm/test/unittest/window_scene_session_impl_test3.cpp @@ -1727,11 +1727,11 @@ HWTEST_F(WindowSceneSessionImplTest3, Recover01, TestSize.Level1) } /** - * @tc.name: Recover01 + * @tc.name: Recover02 * @tc.desc: Recover * @tc.type: FUNC */ -HWTEST_F(WindowSceneSessionImplTest3, Recover01, TestSize.Level1) +HWTEST_F(WindowSceneSessionImplTest3, Recover02, TestSize.Level1) { sptr option = sptr::MakeSptr(); option->SetWindowName("Recover"); @@ -1751,16 +1751,16 @@ HWTEST_F(WindowSceneSessionImplTest3, Recover01, TestSize.Level1) windowSceneSessionImpl->windowSystemConfig_.freeMultiWindowEnable_ = true; windowSceneSessionImpl->windowSystemConfig_.freeMultiWindowSupport_ = true; windowSceneSessionImpl->enableImmersiveMode_ = true; - ASSERT_EQ(WMError::WM_OK, windowSceneSessionImpl->Recover()); - ASSERT_EQ(false, windowSceneSessionImpl->enableImmersiveMode_); + EXPECT_EQ(WMError::WM_OK, windowSceneSessionImpl->Recover()); + EXPECT_EQ(true, windowSceneSessionImpl->enableImmersiveMode_); windowSceneSessionImpl->enableImmersiveMode_ = true; windowSceneSessionImpl->windowSystemConfig_.windowUIType_ = WindowUIType::PC_WINDOW; windowSceneSessionImpl->property_->SetMaximizeMode(MaximizeMode::MODE_FULL_FILL); windowSceneSessionImpl->property_->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN); - windowSceneSessionImpl->windowSystemConfig_.freeMultiWindowEnable_ = false; - ASSERT_EQ(WMError::WM_OK, windowSceneSessionImpl->Recover()); - ASSERT_EQ(true, windowSceneSessionImpl->enableImmersiveMode_); + windowSceneSessionImpl->windowSystemConfig_.freeMultiWindowSupport_ = false; + EXPECT_EQ(WMError::WM_OK, windowSceneSessionImpl->Recover()); + EXPECT_EQ(false, windowSceneSessionImpl->enableImmersiveMode_); } /** -- Gitee