From bd2bb5753619c85728c24fdafb415d96e2359fec Mon Sep 17 00:00:00 2001 From: jincanran Date: Mon, 14 Mar 2022 20:22:29 +0800 Subject: [PATCH] screen lock immersive bugifx Change-Id: I348cac631693594e6ced97baa9bc5d7a304091b3 Signed-off-by: jincanran --- wmserver/include/window_node_container.h | 1 + wmserver/src/window_node_container.cpp | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/wmserver/include/window_node_container.h b/wmserver/include/window_node_container.h index 5a728b07..175482e6 100644 --- a/wmserver/include/window_node_container.h +++ b/wmserver/include/window_node_container.h @@ -91,6 +91,7 @@ private: void RaiseWindowToTop(uint32_t windowId, std::vector>& windowNodes); void MinimizeWindowFromAbility(const sptr& node, bool fromUser); void ResetLayoutPolicy(); + bool IsAboveSystemBarNode(sptr node) const; bool IsFullImmersiveNode(sptr node) const; bool IsSplitImmersiveNode(sptr node) const; bool TraverseFromTopToBottom(sptr node, const WindowNodeOperationFunc& func) const; diff --git a/wmserver/src/window_node_container.cpp b/wmserver/src/window_node_container.cpp index 760826f4..2f15f50d 100644 --- a/wmserver/src/window_node_container.cpp +++ b/wmserver/src/window_node_container.cpp @@ -402,6 +402,16 @@ uint32_t WindowNodeContainer::GetFocusWindow() const return focusedWindow_; } +bool WindowNodeContainer::IsAboveSystemBarNode(sptr node) const +{ + int32_t curPriority = zorderPolicy_->GetWindowPriority(node->GetWindowType()); + if ((curPriority > zorderPolicy_->GetWindowPriority(WindowType::WINDOW_TYPE_STATUS_BAR)) && + (curPriority > zorderPolicy_->GetWindowPriority(WindowType::WINDOW_TYPE_NAVIGATION_BAR))) { + return true; + } + return false; +} + bool WindowNodeContainer::IsFullImmersiveNode(sptr node) const { auto mode = node->GetWindowMode(); @@ -427,6 +437,9 @@ std::unordered_map WindowNodeContainer::GetExpect for (auto& node : rootNodes) { for (auto iter = node->children_.rbegin(); iter < node->children_.rend(); ++iter) { auto& sysBarPropMapNode = (*iter)->GetSystemBarProperty(); + if (IsAboveSystemBarNode(*iter)) { + continue; + } if (IsFullImmersiveNode(*iter)) { WLOGFI("Top immersive window id: %{public}d. Use full immersive prop", (*iter)->GetWindowId()); for (auto it : sysBarPropMap) {