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 bf783a9d9b06e44b8b1f922dacda91ade1cbfa1e..19bcd0a58c0b0c35ac785f5fbc3c7225ecabdd85 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 cf31a7e89a6432a799dc49c4d4d91fb5e5d0cc6e..5ade723ac797b7cd8a85680c971533c05bfb9243 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_); diff --git a/wm/test/unittest/window_scene_session_impl_test.cpp b/wm/test/unittest/window_scene_session_impl_test.cpp index b9ee6a8105a5b2bfeb01c83f999225a8cefeaba0..b30f7e220520e39beb240b4734208dd87e6f4b82 100644 --- a/wm/test/unittest/window_scene_session_impl_test.cpp +++ b/wm/test/unittest/window_scene_session_impl_test.cpp @@ -1200,6 +1200,22 @@ 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->property_->SetMaximizeMode(MaximizeMode::MODE_FULL_FILL); + windowSceneSession->property_->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN); + windowSceneSession->windowSystemConfig_.freeMultiWindowEnable_ = false; + windowSceneSession->windowSystemConfig_.freeMultiWindowSupport_ = false; + 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; + 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 e2d17fc949491923a5457924920a1b71222c5683..d98740345ca84378f4996d4b21b3472f9702a23e 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: Recover02 + * @tc.desc: Recover + * @tc.type: FUNC + */ +HWTEST_F(WindowSceneSessionImplTest3, Recover02, 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; + 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_.freeMultiWindowSupport_ = false; + EXPECT_EQ(WMError::WM_OK, windowSceneSessionImpl->Recover()); + EXPECT_EQ(false, windowSceneSessionImpl->enableImmersiveMode_); +} + /** * @tc.name: FindParentSessionByParentId * @tc.desc: FindParentSessionByParentId