diff --git a/window_scene/session/host/src/scene_session.cpp b/window_scene/session/host/src/scene_session.cpp index 2a037c2232d96a454c0e6843cbfa83878a80fac4..947df74f0e973b6af4ac529cf0ce0b0944a5e469 100644 --- a/window_scene/session/host/src/scene_session.cpp +++ b/window_scene/session/host/src/scene_session.cpp @@ -9230,7 +9230,7 @@ bool SceneSession::IsSubWindowOutlineEnabled() const WSError SceneSession::SetWindowTransitionAnimation(WindowTransitionType transitionType, const TransitionAnimation& animation) { - if (!(IsPcWindow() || IsFreeMultiWindowMode())) { + if (!(IsPcWindow() || IsFreeMultiWindowMode() || GetSessionProperty()->GetIsPcAppInPad())) { TLOGE(WmsLogTag::WMS_ANIMATION, "Not pc or pad device"); return WSError::WS_ERROR_DEVICE_NOT_SUPPORT; } diff --git a/window_scene/test/unittest/scene_session_test6.cpp b/window_scene/test/unittest/scene_session_test6.cpp index bd244bf0d1cd4449b5d62820bc7c4f2a32f8292f..c279367810bc339f5f92d848de9086b019738e73 100644 --- a/window_scene/test/unittest/scene_session_test6.cpp +++ b/window_scene/test/unittest/scene_session_test6.cpp @@ -1223,6 +1223,13 @@ HWTEST_F(SceneSessionTest6, SetWindowTransitionAnimation, Function | SmallTest | auto ret = session->SetWindowTransitionAnimation(transitionType, animation); ASSERT_EQ(ret, WSError::WS_ERROR_DEVICE_NOT_SUPPORT); + session->GetSessionProperty()->SetIsPcAppInPad(true); + ret = session->SetWindowTransitionAnimation(transitionType, animation); + ASSERT_EQ(ret, WSError::WS_OK); + session->GetSessionProperty()->SetIsPcAppInPad(false); + ret = session->SetWindowTransitionAnimation(transitionType, animation); + ASSERT_EQ(ret, WSError::WS_ERROR_DEVICE_NOT_SUPPORT); + session->systemConfig_.windowUIType_ = WindowUIType::PC_WINDOW; ret = session->SetWindowTransitionAnimation(transitionType, animation); ASSERT_EQ(ret, WSError::WS_OK); diff --git a/wm/src/window_scene_session_impl.cpp b/wm/src/window_scene_session_impl.cpp index 3d98bfda3d9549b0c107096f60c5685e3be2aae1..0b9208529e4c29487920a020ad8bb5ed316ef63b 100644 --- a/wm/src/window_scene_session_impl.cpp +++ b/wm/src/window_scene_session_impl.cpp @@ -6733,7 +6733,7 @@ WMError WindowSceneSessionImpl::SetWindowTransitionAnimation(WindowTransitionTyp if (IsWindowSessionInvalid()) { return WMError::WM_ERROR_INVALID_WINDOW; } - if (!IsPcOrPadFreeMultiWindowMode()) { + if (!(IsPcOrPadFreeMultiWindowMode() || property_->GetIsPcAppInPad())) { return WMError::WM_ERROR_DEVICE_NOT_SUPPORT; } if (!WindowHelper::IsMainWindow(GetType())) { @@ -6759,7 +6759,7 @@ std::shared_ptr WindowSceneSessionImpl::GetWindowTransition if (IsWindowSessionInvalid()) { return nullptr; } - if (!IsPcOrPadFreeMultiWindowMode()) { + if (!(IsPcOrPadFreeMultiWindowMode() || property_->GetIsPcAppInPad())) { return nullptr; } if (!WindowHelper::IsMainWindow(GetType())) { diff --git a/wm/test/unittest/window_scene_session_impl_test5.cpp b/wm/test/unittest/window_scene_session_impl_test5.cpp index 613e221af55017ae824da1c97280e8f523d60085..a9dbacb3f8cb0dddb5574632c3b23df2a9adca83 100644 --- a/wm/test/unittest/window_scene_session_impl_test5.cpp +++ b/wm/test/unittest/window_scene_session_impl_test5.cpp @@ -1698,6 +1698,13 @@ HWTEST_F(WindowSceneSessionImplTest5, SetWindowTransitionAnimation01, Function | ret = window->SetWindowTransitionAnimation(type, animation); ASSERT_EQ(ret, WMError::WM_ERROR_DEVICE_NOT_SUPPORT); + property->SetIsPcAppInPad(true); + ret = window->SetWindowTransitionAnimation(type, animation); + ASSERT_EQ(ret, WMError::WM_OK); + property->SetIsPcAppInPad(false); + ret = window->SetWindowTransitionAnimation(type, animation); + ASSERT_EQ(ret, WMError::WM_ERROR_DEVICE_NOT_SUPPORT); + property->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW); window->windowSystemConfig_.windowUIType_ = WindowUIType::PC_WINDOW; ret = window->SetWindowTransitionAnimation(type, animation); @@ -1734,7 +1741,6 @@ HWTEST_F(WindowSceneSessionImplTest5, GetWindowTransitionAnimation01, Function | auto property = window->GetProperty(); WindowTransitionType type = WindowTransitionType::DESTROY; - property->SetWindowState(WindowState::STATE_DESTROYED); std::shared_ptr ret = window->GetWindowTransitionAnimation(type); ASSERT_EQ(ret, nullptr); @@ -1744,27 +1750,29 @@ HWTEST_F(WindowSceneSessionImplTest5, GetWindowTransitionAnimation01, Function | window->hostSession_ = session; property->persistentId_ = 100; - property->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW); + property->SetWindowState(WindowState::STATE_SHOWN); window->windowSystemConfig_.windowUIType_ = WindowUIType::PHONE_WINDOW; ret = window->GetWindowTransitionAnimation(type); ASSERT_EQ(ret, nullptr); property->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW); - window->windowSystemConfig_.windowUIType_ = WindowUIType::PC_WINDOW; + TransitionAnimation animation; + property->SetTransitionAnimationConfig(type, animation); + property->SetIsPcAppInPad(true); + ret = window->GetWindowTransitionAnimation(type); + ASSERT_NE(ret, nullptr); + property->SetIsPcAppInPad(false); ret = window->GetWindowTransitionAnimation(type); ASSERT_EQ(ret, nullptr); - property->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW); + window->windowSystemConfig_.windowUIType_ = WindowUIType::PC_WINDOW; + ret = window->GetWindowTransitionAnimation(type); + ASSERT_NE(ret, nullptr); + window->windowSystemConfig_.windowUIType_ = WindowUIType::PAD_WINDOW; window->windowSystemConfig_.freeMultiWindowEnable_ = true; window->windowSystemConfig_.freeMultiWindowSupport_ = true; ret = window->GetWindowTransitionAnimation(type); - ASSERT_EQ(ret, nullptr); - - TransitionAnimation animation; - property->SetWindowState(WindowState::STATE_SHOWN); - property->SetTransitionAnimationConfig(type, animation); - ret = window->GetWindowTransitionAnimation(type); ASSERT_NE(ret, nullptr); property->SetWindowType(WindowType::WINDOW_TYPE_APP_SUB_WINDOW);