diff --git a/window_scene/session/host/include/main_session.h b/window_scene/session/host/include/main_session.h index ba208807778466d2f60fe47489eff78bbff7f72f..a62e60df203d4114a597931b59310175786f8c2d 100644 --- a/window_scene/session/host/include/main_session.h +++ b/window_scene/session/host/include/main_session.h @@ -95,8 +95,7 @@ private: void SetSubWindowBoundsDuringCross(const WSRect& parentRect, bool isGlobal, bool needFlush) override; void NotifySubSessionRectChangeByAnchor(const WSRect& parentRect, SizeChangeReason reason = SizeChangeReason::UNDEFINED, DisplayId displayId = DISPLAY_ID_INVALID) override; - void HandleSubSessionSurfaceNodeByWindowAnchor(SizeChangeReason reason, - const sptr& screenSession) override; + void HandleSubSessionSurfaceNodeByWindowAnchor(SizeChangeReason reason, DisplayId displayId) override; }; } // namespace OHOS::Rosen #endif // OHOS_ROSEN_WINDOW_SCENE_MAIN_SESSION_H diff --git a/window_scene/session/host/include/scene_session.h b/window_scene/session/host/include/scene_session.h index 9d327a9443fa3d6d00dac83ef09b00f5ebb3d281..bbe979689912da2976790a455f43df6592d29fb3 100644 --- a/window_scene/session/host/include/scene_session.h +++ b/window_scene/session/host/include/scene_session.h @@ -147,6 +147,9 @@ using NotifyAnimateToFunc = std::function>&()>; using GetFbPanelWindowIdFunc = std::function; +using FindScenePanelRsNodeByZOrderFunc = std::function(DisplayId displayId, + uint32_t targetZOrder)>; + struct UIExtensionTokenInfo { bool canShowOnLockScreen { false }; uint32_t callingTokenId { 0 }; @@ -263,8 +266,7 @@ public: void HandleCrossMoveTo(WSRect& globalRect); virtual void HandleCrossMoveToSurfaceNode(WSRect& globalRect) {} virtual bool IsNeedCrossDisplayRendering() const { return false; } - virtual void HandleCrossSurfaceNodeByWindowAnchor(SizeChangeReason reason, - const sptr& screenSession) {} + virtual void HandleCrossSurfaceNodeByWindowAnchor(SizeChangeReason reason, DisplayId displayId) {} virtual void SetSurfaceBounds(const WSRect& rect, bool isGlobal, bool needFlush = true); virtual void OpenKeyboardSyncTransaction() {} @@ -302,6 +304,7 @@ public: void SetFloatingScale(float floatingScale) override; WSError RaiseAboveTarget(int32_t subWindowId) override; WSError RaiseMainWindowAboveTarget(int32_t targetId) override; + std::shared_ptr GetWindowDragMoveMountedNode(DisplayId displayId, uint32_t targetZOrder); /* * PiP Window @@ -783,6 +786,7 @@ public: void ResetCompatibleModeDragScaleFlags(); void RegisterAppHookWindowInfoFunc(GetHookWindowInfoFunc&& func); WMError GetAppHookWindowInfoFromServer(HookWindowInfo& hookWindowInfo) override; + void SetFindScenePanelRsNodeByZOrderFunc(FindScenePanelRsNodeByZOrderFunc&& func); /* * Gesture Back @@ -962,6 +966,7 @@ protected: bool isFollowParentLayout_ = false; NotifyWindowAnchorInfoChangeFunc onWindowAnchorInfoChangeFunc_ = nullptr; WindowAnchorInfo windowAnchorInfo_; + FindScenePanelRsNodeByZOrderFunc FindScenePanelRsNodeByZOrderFunc_; int32_t cloneNodeCount_ = 0; virtual void NotifySubSessionRectChangeByAnchor(const WSRect& parentRect, @@ -1237,12 +1242,15 @@ private: WSError UpdateRectForDrag(const WSRect& rect); void UpdateSessionRectPosYFromClient(SizeChangeReason reason, DisplayId& configDisplayId, WSRect& rect); void HandleSubSessionSurfaceNode(bool isAdd, DisplayId draggingOrMovingParentDisplayId); - virtual void HandleSubSessionSurfaceNodeByWindowAnchor(SizeChangeReason reason, - const sptr& screenSession) {} + virtual void HandleSubSessionSurfaceNodeByWindowAnchor(SizeChangeReason reason, DisplayId displayId) {} virtual void AddSurfaceNodeToScreen(DisplayId draggingOrMovingParentDisplayId) {} virtual void RemoveSurfaceNodeFromScreen() {} void SetParentRect(); WSRect GetGlobalOrWinRect(); + void SceneSession::HandleMoveDragSurfaceNodeOnDrag(const std::shared_ptr& movedSurfaceNode, + uint64_t displayId); + void SceneSession::HandleMoveDragSurfaceNodeOnDragEnd(const std::shared_ptr& movedSurfaceNode, + uint64_t displayId); /* * Window Decor diff --git a/window_scene/session/host/include/sub_session.h b/window_scene/session/host/include/sub_session.h index a46f24497a97a73116055ab690cea912453e55e8..045f9cf945f4fb700c50371e970921ff9c5d8ae4 100644 --- a/window_scene/session/host/include/sub_session.h +++ b/window_scene/session/host/include/sub_session.h @@ -37,8 +37,7 @@ public: bool IsNeedCrossDisplayRendering() const override; void HandleCrossMoveToSurfaceNode(WSRect& globalRect) override; std::set GetNewDisplayIdsDuringMoveTo(WSRect& newRect); - void HandleCrossSurfaceNodeByWindowAnchor(SizeChangeReason reason, - const sptr& screenSession) override; + void HandleCrossSurfaceNodeByWindowAnchor(SizeChangeReason reason, DisplayId displayId) override; void SetParentSessionCallback(NotifySetParentSessionFunc&& func) override; WMError NotifySetParentSession(int32_t oldParentWindowId, int32_t newParentWindowId) override; diff --git a/window_scene/session/host/src/main_session.cpp b/window_scene/session/host/src/main_session.cpp index f45e13b645e3eb602876a7d6cb8982102c55b048..221fbc14b4aa4808ebfafa35c5620de2ad77ac1d 100644 --- a/window_scene/session/host/src/main_session.cpp +++ b/window_scene/session/host/src/main_session.cpp @@ -413,12 +413,11 @@ void MainSession::NotifySubSessionRectChangeByAnchor(const WSRect& parentRect, } } -void MainSession::HandleSubSessionSurfaceNodeByWindowAnchor(SizeChangeReason reason, - const sptr& screenSession) +void MainSession::HandleSubSessionSurfaceNodeByWindowAnchor(SizeChangeReason reason, DisplayId displayId) { for (const auto& subSession : GetSubSession()) { if (subSession && subSession->GetWindowAnchorInfo().isAnchorEnabled_ && subSession->IsSessionForeground()) { - subSession->HandleCrossSurfaceNodeByWindowAnchor(reason, screenSession); + subSession->HandleCrossSurfaceNodeByWindowAnchor(reason, displayId); } } } diff --git a/window_scene/session/host/src/scene_session.cpp b/window_scene/session/host/src/scene_session.cpp index 932968ca909a7b7512d33b613608b83fac76769a..0ad78c9c1ab6daea89098463348c312cd69431dc 100644 --- a/window_scene/session/host/src/scene_session.cpp +++ b/window_scene/session/host/src/scene_session.cpp @@ -4223,6 +4223,73 @@ WSError SceneSession::KeyFrameAnimateEnd() return WSError::WS_OK; } +std::shared_ptr SceneSession::GetWindowDragMoveMountedNode(DisplayId displayId, uint32_t targetZOrder) +{ + if (!FindScenePanelRsNodeByZOrderFunc_) { + TLOGE(WmsLogTag::WMS_LAYOUT, "FindScenePanelRsNodeByZOrderFunc_ is null"); + return nullptr; + } + return FindScenePanelRsNodeByZOrderFunc_(displayId, targetZOrder); +} + +void SceneSession::HandleMoveDragSurfaceNodeOnDrag(const std::shared_ptr& movedSurfaceNode, + uint64_t displayId); +{ + if (displayId == moveDragController_->GetMoveDragStartDisplayId()) { + continue; + } + auto screenSession = ScreenSessionManagerClient::GetInstance().GetScreenSessionById(displayId); + if (screenSession == nullptr) { + TLOGD(WmsLogTag::WMS_LAYOUT, "ScreenSession is null"); + continue; + } + bool isStartScreenMainOrExtend = startScreenSession->GetSourceMode() == ScreenSourceMode::SCREEN_MAIN + || startScreenSession->GetSourceMode() == ScreenSourceMode::SCREEN_EXTEND; + bool isDestScreenMainOrExtend = screenSession->GetSourceMode() == ScreenSourceMode::SCREEN_MAIN + || screenSession->GetSourceMode() == ScreenSourceMode::SCREEN_EXTEND; + // Not main to extend or extend to main or extend to extend, no need to add cross parent child + if (!(isStartScreenMainOrExtend && isDestScreenMainOrExtend)) { + TLOGD(WmsLogTag::WMS_LAYOUT, "No need to add cross-parent child elements for out-of-scope situations, " + "DisplayId: %{public}" PRIu64, displayId); + continue; + } + auto dragMoveMountedNode = GetWindowDragMoveMountedNode(displayId, this->GetZOrder()); + if (dragMoveMountedNode == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT, "dragMoveMountedNode is null"); + continue; + } + { + AutoRSTransaction trans(movedSurfaceNode->GetRSUIContext()); + movedSurfaceNode->SetPositionZ(MOVE_DRAG_POSITION_Z); + movedSurfaceNode->SetIsCrossNode(true); + } + + { + AutoRSTransaction trans(dragMoveMountedNode->GetRSUIContext()); + dragMoveMountedNode->AddCrossScreenChild(movedSurfaceNode, -1, true); + TLOGI(WmsLogTag::WMS_LAYOUT, "Add window to display: %{public}" PRIu64 "persistentId: %{public}d", + displayId, GetPersistentId()); + } +} + +void SceneSession::HandleMoveDragSurfaceNodeOnDragEnd(const std::shared_ptr& movedSurfaceNode, + uint64_t displayId) +{ + if (displayId == moveDragController_->GetMoveDragStartDisplayId()) { + continue; + } + auto dragMoveMountedNode = GetWindowDragMoveMountedNode(displayId, this->GetZOrder()); + if (dragMoveMountedNode == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT, "dragMoveMountedNode is null"); + continue; + } + movedSurfaceNode->SetPositionZ(moveDragController_->GetOriginalPositionZ()); + dragMoveMountedNode->RemoveCrossScreenChild(movedSurfaceNode); + movedSurfaceNode->SetIsCrossNode(false); + TLOGI(WmsLogTag::WMS_LAYOUT, "Remove window from display: %{public}" PRIu64 "persistentId: %{public}d", + displayId, GetPersistentId()); +} + /** @note @window.drag */ void SceneSession::HandleMoveDragSurfaceNode(SizeChangeReason reason) { @@ -4239,63 +4306,13 @@ void SceneSession::HandleMoveDragSurfaceNode(SizeChangeReason reason) } if (reason == SizeChangeReason::DRAG || reason == SizeChangeReason::DRAG_MOVE) { for (const auto displayId : moveDragController_->GetNewAddedDisplayIdsDuringMoveDrag()) { - if (displayId == moveDragController_->GetMoveDragStartDisplayId()) { - continue; - } - auto screenSession = ScreenSessionManagerClient::GetInstance().GetScreenSessionById(displayId); - if (screenSession == nullptr) { - TLOGD(WmsLogTag::WMS_LAYOUT, "ScreenSession is null"); - continue; - } - bool isStartScreenMainOrExtend = startScreenSession->GetSourceMode() == ScreenSourceMode::SCREEN_MAIN - || startScreenSession->GetSourceMode() == ScreenSourceMode::SCREEN_EXTEND; - bool isDestScreenMainOrExtend = screenSession->GetSourceMode() == ScreenSourceMode::SCREEN_MAIN - || screenSession->GetSourceMode() == ScreenSourceMode::SCREEN_EXTEND; - // Not main to extend or extend to main or extend to extend, no need to add cross parent child - if (!(isStartScreenMainOrExtend && isDestScreenMainOrExtend)) { - TLOGD(WmsLogTag::WMS_LAYOUT, "No need to add cross-parent child elements for out-of-scope situations, " - "DisplayId: %{public}" PRIu64, displayId); - continue; - } - - { - AutoRSTransaction trans(movedSurfaceNode->GetRSUIContext()); - movedSurfaceNode->SetPositionZ(MOVE_DRAG_POSITION_Z); - movedSurfaceNode->SetIsCrossNode(true); - } - - { - AutoRSTransaction trans(screenSession->GetRSUIContext()); - TLOGI(WmsLogTag::WMS_LAYOUT, "Add window to display: %{public}" PRIu64, displayId); - screenSession->GetDisplayNode()->AddCrossScreenChild(movedSurfaceNode, -1, true); - } - HandleSubSessionSurfaceNodeByWindowAnchor(reason, screenSession); + HandleMoveDragSurfaceNodeOnDrag(movedSurfaceNode, displayId); + HandleSubSessionSurfaceNodeByWindowAnchor(reason, displayId); } } else if (reason == SizeChangeReason::DRAG_END) { for (const auto displayId : moveDragController_->GetDisplayIdsDuringMoveDrag()) { - if (displayId == moveDragController_->GetMoveDragStartDisplayId()) { - continue; - } - auto screenSession = ScreenSessionManagerClient::GetInstance().GetScreenSessionById(displayId); - if (screenSession == nullptr) { - TLOGD(WmsLogTag::WMS_LAYOUT, "ScreenSession is null"); - continue; - } - bool isStartScreenMainOrExtend = startScreenSession->GetSourceMode() == ScreenSourceMode::SCREEN_MAIN - || startScreenSession->GetSourceMode() == ScreenSourceMode::SCREEN_EXTEND; - bool isDestScreenMainOrExtend = screenSession->GetSourceMode() == ScreenSourceMode::SCREEN_MAIN - || screenSession->GetSourceMode() == ScreenSourceMode::SCREEN_EXTEND; - // Not main to extend or extend to main or extend to extend, no need to add cross parent child - if (!(isStartScreenMainOrExtend && isDestScreenMainOrExtend)) { - TLOGD(WmsLogTag::WMS_LAYOUT, "No need to add cross-parent child elements for out-of-scope situations, " - "DisplayId: %{public}" PRIu64, displayId); - continue; - } - movedSurfaceNode->SetPositionZ(moveDragController_->GetOriginalPositionZ()); - screenSession->GetDisplayNode()->RemoveCrossScreenChild(movedSurfaceNode); - movedSurfaceNode->SetIsCrossNode(false); - TLOGI(WmsLogTag::WMS_LAYOUT, "Remove window from display: %{public}" PRIu64, displayId); - HandleSubSessionSurfaceNodeByWindowAnchor(reason, screenSession); + HandleMoveDragSurfaceNodeOnDragEnd(movedSurfaceNode, displayId); + HandleSubSessionSurfaceNodeByWindowAnchor(reason, displayId); } } } @@ -9250,4 +9267,9 @@ WSError SceneSession::SetFrameRectForPartialZoomInInner(const Rect& frameRect) TLOGI(WmsLogTag::WMS_ANIMATION, "frameRect: %{public}s", frameRect.ToString().c_str()); return WSError::WS_OK; } + +void SceneSession::SetFindScenePanelRsNodeByZOrderFunc(FindScenePanelRsNodeByZOrderFunc&& func) +{ + FindScenePanelRsNodeByZOrderFunc_ = std::move(func); +} } // namespace OHOS::Rosen diff --git a/window_scene/session/host/src/sub_session.cpp b/window_scene/session/host/src/sub_session.cpp index 307d48786633037516a34ecabd844a30a051e8f9..f99df8680a2501e252fc092dfb0c7cf5c5f1200b 100644 --- a/window_scene/session/host/src/sub_session.cpp +++ b/window_scene/session/host/src/sub_session.cpp @@ -361,12 +361,8 @@ WMError SubSession::NotifySetParentSession(int32_t oldParentWindowId, int32_t ne }, __func__); } -void SubSession::HandleCrossSurfaceNodeByWindowAnchor(SizeChangeReason reason, const sptr& screenSession) +void SubSession::HandleCrossSurfaceNodeByWindowAnchor(SizeChangeReason reason, DisplayId displayId) { - if (!screenSession) { - TLOGE(WmsLogTag::WMS_LAYOUT, "Id:%{public}d, ScreenSession is null", GetPersistentId()); - return; - } auto surfaceNode = GetSurfaceNodeForMoveDrag(); if (!surfaceNode) { TLOGE(WmsLogTag::WMS_LAYOUT, "Id:%{public}d, SurfaceNode is null", GetPersistentId()); @@ -374,21 +370,31 @@ void SubSession::HandleCrossSurfaceNodeByWindowAnchor(SizeChangeReason reason, c } DisplayId displayId = screenSession->GetDisplayId(); if (reason == SizeChangeReason::DRAG || reason == SizeChangeReason::DRAG_MOVE) { + auto dragMoveMountedNode = GetWindowDragMoveMountedNode(displayId, this->GetZOrder()); + if (dragMoveMountedNode == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT, "dragMoveMountedNode is null"); + return; + } { AutoRSTransaction trans(surfaceNode->GetRSUIContext()); surfaceNode->SetPositionZ(GetZOrder()); surfaceNode->SetIsCrossNode(true); } { - AutoRSTransaction trans(screenSession->GetRSUIContext()); - screenSession->GetDisplayNode()->AddCrossScreenChild(surfaceNode, SUFFIX_INDEX, true); + AutoRSTransaction trans(dragMoveMountedNode->GetRSUIContext()); + dragMoveMountedNode->AddCrossScreenChild(surfaceNode, SUFFIX_INDEX, true); } cloneNodeCountDuringCross_.fetch_add(1); TLOGI(WmsLogTag::WMS_LAYOUT, "Add sub window to display:%{public}" PRIu64 " persistentId:%{public}d, " "cloneNodeCountDuringCross:%{public}d", displayId, GetPersistentId(), cloneNodeCountDuringCross_.load()); } else if (reason == SizeChangeReason::DRAG_END) { surfaceNode->SetPositionZ(moveDragController_->GetOriginalPositionZ()); - screenSession->GetDisplayNode()->RemoveCrossScreenChild(surfaceNode); + auto dragMoveMountedNode = GetWindowDragMoveMountedNode(displayId, this->GetZOrder()); + if (dragMoveMountedNode == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT, "dragMoveMountedNode is null"); + return; + } + dragMoveMountedNode->RemoveCrossScreenChild(surfaceNode); surfaceNode->SetIsCrossNode(false); cloneNodeCountDuringCross_.fetch_sub(1); TLOGI(WmsLogTag::WMS_LAYOUT, "Remove sub window from display:%{public}" PRIu64 " persistentId:%{public}d, " @@ -451,10 +457,15 @@ void SubSession::HandleCrossMoveToSurfaceNode(WSRect& globalRect) TLOGD(WmsLogTag::WMS_LAYOUT, "virtual screen, no need to add cross parent child"); continue; } + auto dragMoveMountedNode = GetWindowDragMoveMountedNode(displayId, this->GetZOrder()); + if (dragMoveMountedNode == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT, "dragMoveMountedNode is null"); + continue; + } movedSurfaceNode->SetPositionZ(GetZOrder()); { - AutoRSTransaction trans(screenSession->GetRSUIContext()); - screenSession->GetDisplayNode()->AddCrossScreenChild(movedSurfaceNode, SUFFIX_INDEX, true); + AutoRSTransaction trans(dragMoveMountedNode->GetRSUIContext()); + dragMoveMountedNode->AddCrossScreenChild(movedSurfaceNode, SUFFIX_INDEX, true); } cloneNodeCount_++; movedSurfaceNode->SetIsCrossNode(true); @@ -519,10 +530,15 @@ void SubSession::AddSurfaceNodeToScreen(DisplayId draggingOrMovingParentDisplayI TLOGD(WmsLogTag::WMS_LAYOUT, "virtual screen, no need to add cross parent child"); continue; } + auto dragMoveMountedNode = GetWindowDragMoveMountedNode(displayId, this->GetZOrder()); + if (dragMoveMountedNode == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT, "dragMoveMountedNode is null"); + continue; + } currSurfacedNode->SetPositionZ(GetZOrder()); { - AutoRSTransaction trans(screenSession->GetRSUIContext()); - screenSession->GetDisplayNode()->AddCrossScreenChild(currSurfacedNode, SUFFIX_INDEX, true); + AutoRSTransaction trans(dragMoveMountedNode->GetRSUIContext()); + dragMoveMountedNode->AddCrossScreenChild(currSurfacedNode, SUFFIX_INDEX, true); } cloneNodeCount_++; currSurfacedNode->SetIsCrossNode(true); diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index e9ba28d36e9419f77a6d73291193d00a6c457dbc..e7c548e665f43d8fd97c7676e2880c339bd1b39a 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -167,6 +167,8 @@ using KioskModeChangeFunc = std::function& property)>; using NotifyRecoverStateChangeFunc = std::function; +using FindScenePanelRsNodeByZOrderFunc = std::function(DisplayId screenId, + uint32_t targetZOrder)>; class AppAnrListener : public IRemoteStub { public: @@ -235,6 +237,7 @@ public: void SetSCBFocusChangeListener(const NotifyDiffSCBAfterUpdateFocusFunc&& func); void SetCallingSessionIdSessionListenser(const ProcessCallingSessionIdChangeFunc& func); void SetDumpUITreeFunc(const DumpUITreeFunc& func); + void SetFindScenePanelRsNodeByZOrderFunc(FindScenePanelRsNodeByZOrderFunc&& func); const AppWindowSceneConfig& GetWindowSceneConfig() const; /* @@ -1207,9 +1210,9 @@ private: ProcessCloseTargetFloatWindowFunc closeTargetFloatWindowFunc_; SetForegroundWindowNumFunc setForegroundWindowNumFunc_; MinimizeByWindowIdFunc minimizeByWindowIdFunc_; - + FindScenePanelRsNodeByZOrderFunc FindScenePanelRsNodeByZOrderFunc_; AppWindowSceneConfig appWindowSceneConfig_; - + /* * Window Recover */ diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index c48cdaca156217c5a71665a2f612af80e2a60e32..c589c601677c78f9a12be19787329ea72d28a25b 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -2426,6 +2426,9 @@ sptr SceneSessionManager::CreateSceneSession(const SessionInfo& se sceneSession->RegisterGetFbPanelWindowIdFunc([this](uint32_t& windowId) { return this->GetFbPanelWindowId(windowId); }); + sceneSession->SetFindScenePanelRsNodeByZOrderFunc([this](uint64_t screenId, uint32_t targetZOrder) { + return this->FindScenePanelRsNodeByZOrderFunc_(screenId, targetZOrder); + }); DragResizeType dragResizeType = DragResizeType::RESIZE_TYPE_UNDEFINED; GetAppDragResizeType(sessionInfo.bundleName_, dragResizeType); sceneSession->SetAppDragResizeType(dragResizeType); @@ -6945,6 +6948,11 @@ void SceneSessionManager::SetStatusBarDefaultVisibilityPerDisplay(DisplayId disp }, __func__); } +void SceneSessionManager::SetFindScenePanelRsNodeByZOrderFunc(FindScenePanelRsNodeByZOrderFunc&& func) +{ + FindScenePanelRsNodeByZOrderFunc_ = std::move(func); +} + bool SceneSessionManager::GetStatusBarDefaultVisibilityByDisplayId(DisplayId displayId) { return statusBarDefaultVisibilityPerDisplay_.count(displayId) != 0 ? diff --git a/window_scene/test/unittest/layout/main_session_layout_test.cpp b/window_scene/test/unittest/layout/main_session_layout_test.cpp index 721d8fc5cb0815a73fe0703a1c4bc85d914af27f..fe606c4d2caa200657de7e454c14a46b66e31b24 100644 --- a/window_scene/test/unittest/layout/main_session_layout_test.cpp +++ b/window_scene/test/unittest/layout/main_session_layout_test.cpp @@ -144,13 +144,6 @@ HWTEST_F(MainSessionLayoutTest, HandleSubSessionSurfaceNodeByWindowAnchor, TestS sptr subSession = sptr::MakeSptr(info, nullptr); mainSession->subSession_.emplace_back(nullptr); mainSession->subSession_.emplace_back(subSession); - ScreenSessionConfig config = { - .screenId = 100, - .rsId = 101, - .name = "OpenHarmony", - }; - sptr screenSession = - sptr::MakeSptr(config, ScreenSessionReason::CREATE_SESSION_FOR_VIRTUAL); auto surfaceNode = CreateRSSurfaceNode(); ASSERT_NE(nullptr, surfaceNode); subSession->SetSurfaceNode(surfaceNode); @@ -158,15 +151,15 @@ HWTEST_F(MainSessionLayoutTest, HandleSubSessionSurfaceNodeByWindowAnchor, TestS subSession->state_ = SessionState::STATE_FOREGROUND; subSession->windowAnchorInfo_.isAnchorEnabled_ = false; subSession->cloneNodeCountDuringCross_.store(0); - mainSession->HandleSubSessionSurfaceNodeByWindowAnchor(SizeChangeReason::DRAG, screenSession); + mainSession->HandleSubSessionSurfaceNodeByWindowAnchor(SizeChangeReason::DRAG, 0); EXPECT_EQ(subSession->cloneNodeCountDuringCross_, 0); subSession->windowAnchorInfo_.isAnchorEnabled_ = true; - mainSession->HandleSubSessionSurfaceNodeByWindowAnchor(SizeChangeReason::DRAG, screenSession); + mainSession->HandleSubSessionSurfaceNodeByWindowAnchor(SizeChangeReason::DRAG, 0); EXPECT_EQ(subSession->cloneNodeCountDuringCross_, 1); subSession->state_ = SessionState::STATE_BACKGROUND; - mainSession->HandleSubSessionSurfaceNodeByWindowAnchor(SizeChangeReason::DRAG_END, screenSession); + mainSession->HandleSubSessionSurfaceNodeByWindowAnchor(SizeChangeReason::DRAG_END, 0); EXPECT_EQ(subSession->cloneNodeCountDuringCross_, 1); } } // namespace diff --git a/window_scene/test/unittest/layout/scene_session_layout_test.cpp b/window_scene/test/unittest/layout/scene_session_layout_test.cpp index eac8ed51c9d2dfd7d24f31aa512956de557372d4..b38378e65c5cf2be2e70caf7e4b1ce077a8d3815 100644 --- a/window_scene/test/unittest/layout/scene_session_layout_test.cpp +++ b/window_scene/test/unittest/layout/scene_session_layout_test.cpp @@ -1135,6 +1135,24 @@ HWTEST_F(SceneSessionLayoutTest, RegisterAppHookWindowInfoFunc, TestSize.Level1) sceneSession->RegisterAppHookWindowInfoFunc(nullptr); ASSERT_NE(sceneSession->getHookWindowInfoFunc_, nullptr); } + +/** + * @tc.name: GetWindowDragMoveMountedNode01 + * @tc.desc: GetWindowDragMoveMountedNode + * @tc.type: FUNC + */ +HWTEST_F(SceneSessionLayoutTest, GetWindowDragMoveMountedNode01, TestSize.Level1) +{ + SessionInfo info; + info.abilityName_ = "GetWindowDragMoveMountedNode"; + info.bundleName_ = "GetWindowDragMoveMountedNode"; + sptr sceneSession = sptr::MakeSptr(info, nullptr); + auto rsNode = session->GetWindowDragMoveMountedNode(0, 0); + EXPECT_NE(rsNode, nullptr); + rsNode = session->GetWindowDragMoveMountedNode(std::numeric_limits::max(), 0); + EXPECT_EQ(rsNode, nullptr); +} + } // namespace } // namespace Rosen } // namespace OHOS \ No newline at end of file diff --git a/window_scene/test/unittest/layout/sub_session_layout_test.cpp b/window_scene/test/unittest/layout/sub_session_layout_test.cpp index 5d4a0b0c9780afa0a246e5e5d9e304cc1778708d..9a04ede9d8ec2f0fecd3e97109bcd515e3a8dce0 100644 --- a/window_scene/test/unittest/layout/sub_session_layout_test.cpp +++ b/window_scene/test/unittest/layout/sub_session_layout_test.cpp @@ -70,15 +70,9 @@ HWTEST_F(SubSessionLayoutTest, HandleCrossSurfaceNodeByWindowAnchor, TestSize.Le info.bundleName_ = "HandleCrossSurfaceNodeByWindowAnchor"; sptr sceneSession = sptr::MakeSptr(info, nullptr); sceneSession->GetSessionProperty()->SetWindowType(WindowType::WINDOW_TYPE_APP_SUB_WINDOW); - sceneSession->HandleCrossSurfaceNodeByWindowAnchor(SizeChangeReason::UNDEFINED, nullptr); - ScreenSessionConfig config = { - .screenId = 100, - .rsId = 101, - .name = "OpenHarmony", - }; - sptr screenSession = - sptr::MakeSptr(config, ScreenSessionReason::CREATE_SESSION_FOR_VIRTUAL); - sceneSession->HandleCrossSurfaceNodeByWindowAnchor(SizeChangeReason::UNDEFINED, screenSession); + sceneSession->HandleCrossSurfaceNodeByWindowAnchor(SizeChangeReason::UNDEFINED, + std::numeric_limits::max()); + sceneSession->HandleCrossSurfaceNodeByWindowAnchor(SizeChangeReason::UNDEFINED, 0); struct RSSurfaceNodeConfig rsSurfaceNodeConfig; rsSurfaceNodeConfig.SurfaceNodeName = info.abilityName_; RSSurfaceNodeType rsSurfaceNodeType = RSSurfaceNodeType::DEFAULT; @@ -87,13 +81,13 @@ HWTEST_F(SubSessionLayoutTest, HandleCrossSurfaceNodeByWindowAnchor, TestSize.Le sceneSession->SetSurfaceNode(surfaceNode); sceneSession->cloneNodeCountDuringCross_.store(0); - sceneSession->HandleCrossSurfaceNodeByWindowAnchor(SizeChangeReason::DRAG, screenSession); + sceneSession->HandleCrossSurfaceNodeByWindowAnchor(SizeChangeReason::DRAG, 0); EXPECT_EQ(1, sceneSession->cloneNodeCountDuringCross_.load()); - sceneSession->HandleCrossSurfaceNodeByWindowAnchor(SizeChangeReason::DRAG_MOVE, screenSession); + sceneSession->HandleCrossSurfaceNodeByWindowAnchor(SizeChangeReason::DRAG_MOVE, 0); EXPECT_EQ(2, sceneSession->cloneNodeCountDuringCross_.load()); - sceneSession->HandleCrossSurfaceNodeByWindowAnchor(SizeChangeReason::DRAG_END, screenSession); + sceneSession->HandleCrossSurfaceNodeByWindowAnchor(SizeChangeReason::DRAG_END, 0); EXPECT_EQ(1, sceneSession->cloneNodeCountDuringCross_.load()); - sceneSession->HandleCrossSurfaceNodeByWindowAnchor(SizeChangeReason::UNDEFINED, screenSession); + sceneSession->HandleCrossSurfaceNodeByWindowAnchor(SizeChangeReason::UNDEFINED, 0); EXPECT_EQ(1, sceneSession->cloneNodeCountDuringCross_.load()); } } // namespace