From 3bde99802c289e556b8d2cc7f551da05c2a7eb4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Fri, 27 Dec 2024 23:31:42 +0800 Subject: [PATCH 01/64] change1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- interfaces/innerkits/wm/window_manager.h | 9 ++++ .../window_manager_napi/js_window_manager.cpp | 47 +++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/interfaces/innerkits/wm/window_manager.h b/interfaces/innerkits/wm/window_manager.h index 0be4d6ee5a..95c0e0c3bc 100644 --- a/interfaces/innerkits/wm/window_manager.h +++ b/interfaces/innerkits/wm/window_manager.h @@ -26,6 +26,7 @@ #include "dm_common.h" #include "focus_change_info.h" #include "window_visibility_info.h" +#include "window_layout_info.h" #include "window_drawing_content_info.h" #include "window.h" #include "window_pid_visibility_info.h" @@ -730,6 +731,14 @@ public: WMError GetUnreliableWindowInfo(int32_t windowId, std::vector>& infos) const; + /** + * @brief Get window layout info. + * + * @param infos Visible window infos + * @return WM_OK means get success, others means get failed. + */ + WMError GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) const; + /** * @brief Get visibility window info. * diff --git a/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp b/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp index 898074065a..088bf46b5b 100644 --- a/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp +++ b/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp @@ -153,6 +153,12 @@ napi_value JsWindowManager::ShiftAppWindowFocus(napi_env env, napi_callback_info return (me != nullptr) ? me->OnShiftAppWindowFocus(env, info) : nullptr; } +napi_value JsWindowManager::GetAllWindowLayoutInfo(napi_env env, napi_callback_info info) +{ + JsWindowManager* me = CheckParamsAndGetThis(env, info); + return (me != nullptr) ? me->OnGetAllWindowLayoutInfo(env, info) : nullptr; +} + napi_value JsWindowManager::GetVisibleWindowInfo(napi_env env, napi_callback_info info) { JsWindowManager* me = CheckParamsAndGetThis(env, info); @@ -1183,6 +1189,46 @@ napi_value JsWindowManager::OnShiftAppWindowFocus(napi_env env, napi_callback_in return result; } +napi_value JsWindowManager::OnGetAllWindowLayoutInfo(napi_env env, napi_callback_info info) +{ + size_t argc = ARGC_FOUR; + napi_value argv[ARGC_FOUR] = {nullptr}; + napi_get_cb_info (env, info, &argc, argv, nullptr, nullptr); + if (argc != ARGC_ONE) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Argc is invalid: %{public}zu", argc); + return NapiThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + } + int64_t displayId = static_cast(DISPLAY_ID_INVALID); + if (!ConvertFromJsValue(env, argv[INDEX_ZERO], displayId)) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "invalid displayId"); + return NapiThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + } + if(displayId < 0 || + SingletonContainer::Get().GetDisplayById(static_cast(displayId)) == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "invalid displayId"); + return NapiThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + } + napi_value result = nullptr; + std::shared_ptr napiAsyncTask = CreateEmptyAsyncTask(env, nullptr, &result); + auto asyncTask = [displayId, env, task = napiAsyncTask]{ + std::vector> infos; + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at( + SingletonContainer::Get().GetAllWindowLayoutInfo(static_cast(displayId), infos)); + if (ret == WmErrorCode::WM_OK) { + task->Resolve(env, CreateJsWindowLayoutInfoArrayObject(env, infos)); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "success"); + } else { + task->Reject(env, JsErrUtils::CreateJsError(env, ret, "failed")); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "failed"); + } + }; + if (napi_status::napi_ok != napi_send_event(env, asyncTask, napi_eprio_high)) { + napiAsyncTask->Reject(env, + CreateJsError(env, static_cast(WmErrorCode::WM_ERROR_STATE_ABNORMALLY), "send event failed")); + } + return result; +} + napi_value JsWindowManager::OnGetVisibleWindowInfo(napi_env env, napi_callback_info info) { size_t argc = 4; @@ -1306,6 +1352,7 @@ napi_value JsWindowManagerInit(napi_env env, napi_value exportObj) JsWindowManager::SetGestureNavigationEnabled); BindNativeFunction(env, exportObj, "setWaterMarkImage", moduleName, JsWindowManager::SetWaterMarkImage); BindNativeFunction(env, exportObj, "shiftAppWindowFocus", moduleName, JsWindowManager::ShiftAppWindowFocus); + BindNativeFunction(env, exportObj, "getAllWindowLayoutInfo", moduleName, JsWindowManager::GetAllWindowLayoutInfo); BindNativeFunction(env, exportObj, "getVisibleWindowInfo", moduleName, JsWindowManager::GetVisibleWindowInfo); BindNativeFunction(env, exportObj, "getWindowsByCoordinate", moduleName, JsWindowManager::GetWindowsByCoordinate); return NapiGetUndefined(env); -- Gitee From bdd965031f26f0da6dca0521251ee3812b66cfc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Fri, 27 Dec 2024 23:54:15 +0800 Subject: [PATCH 02/64] change2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../window_manager_napi/js_window_manager.h | 2 + .../window_napi/js_window_utils.cpp | 24 +++++++++ .../window_napi/js_window_utils.h | 2 + utils/src/window_layout_info.cpp | 50 +++++++++++++++++++ 4 files changed, 78 insertions(+) create mode 100644 utils/src/window_layout_info.cpp diff --git a/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.h b/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.h index 4c364372da..8f9187ff8e 100644 --- a/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.h +++ b/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.h @@ -46,6 +46,7 @@ public: static napi_value SetGestureNavigationEnabled(napi_env env, napi_callback_info info); static napi_value SetWaterMarkImage(napi_env env, napi_callback_info info); static napi_value ShiftAppWindowFocus(napi_env env, napi_callback_info info); + static napi_value GetAllWindowLayoutInfo(napi_env env, napi_callback_info info); static napi_value GetVisibleWindowInfo(napi_env env, napi_callback_info info); static napi_value GetWindowsByCoordinate(napi_env env, napi_callback_info info); @@ -65,6 +66,7 @@ private: static napi_value OnSetGestureNavigationEnabled(napi_env env, napi_callback_info info); static napi_value OnSetWaterMarkImage(napi_env env, napi_callback_info info); static napi_value OnShiftAppWindowFocus(napi_env env, napi_callback_info info); + static napi_value OnGetAllWindowLayoutInfo(napi_env env, napi_callback_info info); static napi_value OnGetVisibleWindowInfo(napi_env env, napi_callback_info info); static napi_value OnGetWindowsByCoordinate(napi_env env, napi_callback_info info); static bool ParseRequiredConfigOption( diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp index 75b87a90e1..261b2439f1 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp @@ -544,6 +544,22 @@ static napi_value CreateJsSystemBarRegionTintObject(napi_env env, const SystemBa return objValue; } +napi_value CreateJsWindowLayoutInfoArrayObject(napi_env env, const std::vector>& infos) +{ + napi_value arrayValue = nullptr; + napi_create_array_with_length(env, infos.size(), &arrayValue); + if (arrayValue == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "arrayValue is null"); + return nullptr; + } + uint32_t index = 0; + for (size_t i = 0; i < infos.size(); i++) { + auto info = infos[i]; + napi_set_element(env, arrayValue, index++, CreateJsWindowInfoObject(env, info)); + } + return arrayValue; +} + napi_value CreateJsWindowInfoArrayObject(napi_env env, const std::vector>& infos) { napi_value arrayValue = nullptr; @@ -603,6 +619,14 @@ bool ConvertDecorButtonStyleFromJs(napi_env env, napi_value jsObject, DecorButto return !emptyParam; } +napi_value CreateWindowLayoutInfoObject(napi_env env, const sptr& info) +{ + napi_value objValue = nullptr; + CHECK_NAPI_CREATE_OBJECT_RETURN_IF_NULL(env, objValue); + napi_set_named_property(env, objValue, "rect", GetRectAndConvertToJsValue(env, info->rect_)); + return objValue; +} + napi_value CreateJsWindowInfoObject(napi_env env, const sptr& info) { napi_value objValue = nullptr; diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.h b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.h index 45b889d729..577203e0d7 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.h +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.h @@ -286,7 +286,9 @@ inline const std::map JS_TO_NATIVE_MODALITY_TYPE_ { ApiModalityType::APPLICATION_MODALITY, ModalityType::APPLICATION_MODALITY }, }; + napi_value CreateJsWindowLayoutInfoArrayObject(napi_env env, const std::vector>& infos); napi_value CreateJsWindowInfoArrayObject(napi_env env, const std::vector>& infos); + napi_value CreateWindowLayoutInfoObject(napi_env env, const sptr& info); napi_value CreateJsWindowInfoObject(napi_env env, const sptr& window); napi_value GetRectAndConvertToJsValue(napi_env env, const Rect& rect); napi_value CreateJsWindowPropertiesObject(napi_env env, sptr& window, const Rect& drawableRect); diff --git a/utils/src/window_layout_info.cpp b/utils/src/window_layout_info.cpp new file mode 100644 index 0000000000..6fee984098 --- /dev/null +++ b/utils/src/window_layout_info.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OHOS_ROSEN_WINDOW_LAYOUT_INFO_H +#define OHOS_ROSEN_WINDOW_LAYOUT_INFO_H + +#include "wm_common.h" + +namespace OHOS::Rosen { + /* + * @class WindowLayoutInfo + * + * @brief Info for all windos on the screen. + */ +class WindowLayoutInfo : public Parcelable { +public: + /* + * @brief Default construct of WindowLayoutInfo. + */ + WindowLayoutInfo() = default; + + /* + * @brief Construct of WindowLayoutInfo. + * + * @param rect rect of the window, { posX, posY, width, height } + */ + WindowLayoutInfo(Rect rect) : rect_(rect) {}; + + ~WindowLayoutInfo() = default; + + virtual bool Marshalling(Parcel& parcel) const override; + + static WindowLayoutInfo* Unmarshalling(Parcel& parcel); + + Rect rect_ = { 0, 0, 0, 0 }; +}; +} // namespace OHOS::Rosen +#endif // OHOS_ROSEN_WINDOW_LAYOUT_INFO_H \ No newline at end of file -- Gitee From 54f46fc56284d3afd810a09ef986c8d4e80dc331 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sat, 28 Dec 2024 00:00:33 +0800 Subject: [PATCH 03/64] change3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- utils/include/window_layout_info.h | 50 ++++++++++++++++++++++++++++++ utils/src/window_layout_info.cpp | 46 ++++++++++----------------- 2 files changed, 67 insertions(+), 29 deletions(-) create mode 100644 utils/include/window_layout_info.h diff --git a/utils/include/window_layout_info.h b/utils/include/window_layout_info.h new file mode 100644 index 0000000000..6fee984098 --- /dev/null +++ b/utils/include/window_layout_info.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OHOS_ROSEN_WINDOW_LAYOUT_INFO_H +#define OHOS_ROSEN_WINDOW_LAYOUT_INFO_H + +#include "wm_common.h" + +namespace OHOS::Rosen { + /* + * @class WindowLayoutInfo + * + * @brief Info for all windos on the screen. + */ +class WindowLayoutInfo : public Parcelable { +public: + /* + * @brief Default construct of WindowLayoutInfo. + */ + WindowLayoutInfo() = default; + + /* + * @brief Construct of WindowLayoutInfo. + * + * @param rect rect of the window, { posX, posY, width, height } + */ + WindowLayoutInfo(Rect rect) : rect_(rect) {}; + + ~WindowLayoutInfo() = default; + + virtual bool Marshalling(Parcel& parcel) const override; + + static WindowLayoutInfo* Unmarshalling(Parcel& parcel); + + Rect rect_ = { 0, 0, 0, 0 }; +}; +} // namespace OHOS::Rosen +#endif // OHOS_ROSEN_WINDOW_LAYOUT_INFO_H \ No newline at end of file diff --git a/utils/src/window_layout_info.cpp b/utils/src/window_layout_info.cpp index 6fee984098..9f65b82ba3 100644 --- a/utils/src/window_layout_info.cpp +++ b/utils/src/window_layout_info.cpp @@ -13,38 +13,26 @@ * limitations under the License. */ -#ifndef OHOS_ROSEN_WINDOW_LAYOUT_INFO_H -#define OHOS_ROSEN_WINDOW_LAYOUT_INFO_H - -#include "wm_common.h" +#include "window_layout_info.h" +#include "window_manager_hilog.h" namespace OHOS::Rosen { - /* - * @class WindowLayoutInfo - * - * @brief Info for all windos on the screen. - */ -class WindowLayoutInfo : public Parcelable { -public: - /* - * @brief Default construct of WindowLayoutInfo. - */ - WindowLayoutInfo() = default; - - /* - * @brief Construct of WindowLayoutInfo. - * - * @param rect rect of the window, { posX, posY, width, height } - */ - WindowLayoutInfo(Rect rect) : rect_(rect) {}; - ~WindowLayoutInfo() = default; +bool WindowLayoutInfo::Marshalling(Parcel& parcel) const +{ + return parcel.WriteInt32(rect_.posX_) && parcel.WriteInt32(rect_.posY_) && + parcel.WriteUint32(rect_.width_) && parcel.WriteUint32(rect_.height_); - virtual bool Marshalling(Parcel& parcel) const override; +WindowLayoutInfo* WindowLayoutInfo::Unmarshalling(Parcel& parcel) +{ + auto WindowLayoutInfo = new (std::nothrow) (class WindowLayoutInfo)(); + if (WindowLayoutInfo == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Display window info is nullptr."); + return nullptr; + } - static WindowLayoutInfo* Unmarshalling(Parcel& parcel); + windowPidVisibilityInfo->rect_ = { parcel.ReadInt32(), parcel.ReadInt32(), parcel.ReadUint32(), parcel.ReadUint32() }; - Rect rect_ = { 0, 0, 0, 0 }; -}; -} // namespace OHOS::Rosen -#endif // OHOS_ROSEN_WINDOW_LAYOUT_INFO_H \ No newline at end of file + return windowPidVisibilityInfo; +} +} // namespace OHOS::Rosen \ No newline at end of file -- Gitee From 5583a6a79492cf178b2c96ff2890cbad3901c392 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sat, 28 Dec 2024 11:30:31 +0800 Subject: [PATCH 04/64] change3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- utils/BUILD.gn | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/utils/BUILD.gn b/utils/BUILD.gn index 0319f929d4..f34aded351 100644 --- a/utils/BUILD.gn +++ b/utils/BUILD.gn @@ -64,6 +64,7 @@ ohos_static_library("libwmutil_static") { "src/vsync_station.cpp", "src/window_drawing_content_info.cpp", "src/window_frame_trace_impl.cpp", + "src/window_layout_info.cpp", "src/window_property.cpp", "src/window_transition_info.cpp", "src/window_visibility_info.cpp", @@ -135,8 +136,9 @@ ohos_shared_library("libwmutil_base") { "src/unreliable_window_info.cpp", "src/window_drawing_content_info.cpp", "src/window_manager_hilog.cpp", + "src/window_layout_info.cpp", "src/window_pid_visibility_info.cpp", - "src/window_visibility_info.cpp", + "src/window_visibility_info.cpp", "src/wm_common.cpp", "src/wm_math.cpp", "src/wm_occlusion_region.cpp", -- Gitee From 75a126b4d5f42739c4a8fe944e57f94577c13782 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sat, 28 Dec 2024 18:00:23 +0800 Subject: [PATCH 05/64] change4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../include/scene_session_manager.h | 6 ++++ .../zidl/scene_session_manager_interface.h | 2 ++ .../zidl/scene_session_manager_proxy.h | 1 + .../include/zidl/scene_session_manager_stub.h | 1 + .../src/zidl/scene_session_manager_proxy.cpp | 25 ++++++++++++++++ .../src/zidl/scene_session_manager_stub.cpp | 19 ++++++++++++ wm/include/window_adapter.h | 1 + wm/src/window_adapter.cpp | 9 ++++++ wm/src/window_manager.cpp | 9 ++++++ wmserver/include/window_manager_service.h | 1 + .../include/zidl/window_manager_interface.h | 2 ++ wmserver/include/zidl/window_manager_proxy.h | 1 + wmserver/src/window_manager_service.cpp | 8 +++++ wmserver/src/zidl/window_manager_proxy.cpp | 29 +++++++++++++++++++ wmserver/src/zidl/window_manager_stub.cpp | 15 ++++++++++ 15 files changed, 129 insertions(+) diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index 48357b4b77..933d8b8f52 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -448,6 +448,10 @@ public: */ WMError ReleaseForegroundSessionScreenLock() override; void DealwithDrawingContentChange(const std::vector>& drawingContentChangeInfo); + WMError GetAllWindowLayoutInfo(Display displayId, std::vector>& infos) override; + bool IsWindowLayoutInfoNeeded(sptr session); + bool IsOnVirtualDisplay(sptr session); + bool IsVirtualDisplayShow(sptr session); /* * Multi Window @@ -1144,6 +1148,8 @@ private: int32_t uid_ = 0; }; std::unordered_map lastDrawingSessionInfoMap_; + const DisplayId VIRTUAL_DISPLAY_ID = 999; + std::unordered_set neddedWindows = {"SCBSmartDock"}; /* * Move Drag diff --git a/window_scene/session_manager/include/zidl/scene_session_manager_interface.h b/window_scene/session_manager/include/zidl/scene_session_manager_interface.h index b72d04337a..b516f523f6 100644 --- a/window_scene/session_manager/include/zidl/scene_session_manager_interface.h +++ b/window_scene/session_manager/include/zidl/scene_session_manager_interface.h @@ -96,6 +96,7 @@ public: TRANS_ID_GET_UI_CONTENT_REMOTE_OBJ, TRANS_ID_UPDATE_WINDOW_VISIBILITY_LISTENER, TRANS_ID_SHIFT_APP_WINDOW_FOCUS, + TRANS_ID_GET_WINDOW_LAYOUT_INFO, TRANS_ID_GET_VISIBILITY_WINDOW_INFO_ID, TRANS_ID_ADD_EXTENSION_WINDOW_STAGE_TO_SCB, TRANS_ID_REMOVE_EXTENSION_WINDOW_STAGE_FROM_SCB, @@ -222,6 +223,7 @@ public: { return WMError::WM_OK; } + WMError GetAllWindowLayoutInfo(Display displayId, std::vector>& infos) override { return WMError::WM_OK; } WMError GetVisibilityWindowInfo(std::vector>& infos) override { return WMError::WM_OK; } WMError SetWindowAnimationController(const sptr& controller) override { diff --git a/window_scene/session_manager/include/zidl/scene_session_manager_proxy.h b/window_scene/session_manager/include/zidl/scene_session_manager_proxy.h index ade8291249..a59e96db9f 100644 --- a/window_scene/session_manager/include/zidl/scene_session_manager_proxy.h +++ b/window_scene/session_manager/include/zidl/scene_session_manager_proxy.h @@ -99,6 +99,7 @@ public: WSError NotifyWindowExtensionVisibilityChange(int32_t pid, int32_t uid, bool visible) override; WMError GetTopWindowId(uint32_t mainWinId, uint32_t& topWinId) override; WMError GetParentMainWindowId(int32_t windowId, int32_t& mainWindowId) override; + WMError GetAllWindowLayoutInfo(Display displayId, std::vector>& infos) override; WMError GetVisibilityWindowInfo(std::vector>& infos) override; WSError ShiftAppWindowFocus(int32_t sourcePersistentId, int32_t targetPersistentId) override; void AddExtensionWindowStageToSCB(const sptr& sessionStage, diff --git a/window_scene/session_manager/include/zidl/scene_session_manager_stub.h b/window_scene/session_manager/include/zidl/scene_session_manager_stub.h index b69f278173..44dd9ea65c 100644 --- a/window_scene/session_manager/include/zidl/scene_session_manager_stub.h +++ b/window_scene/session_manager/include/zidl/scene_session_manager_stub.h @@ -85,6 +85,7 @@ private: int HandleGetParentMainWindowId(MessageParcel& data, MessageParcel& reply); int HandleUpdateSessionWindowVisibilityListener(MessageParcel& data, MessageParcel& reply); int HandleShiftAppWindowFocus(MessageParcel& data, MessageParcel& reply); + int HandleGetAllWindowLayoutInfo(MessageParcel& data, MessageParcel& reply); int HandleGetVisibilityWindowInfo(MessageParcel& data, MessageParcel& reply); int HandleAddExtensionWindowStageToSCB(MessageParcel& data, MessageParcel& reply); int HandleRemoveExtensionWindowStageFromSCB(MessageParcel& data, MessageParcel& reply); diff --git a/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp b/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp index 9053a08918..ab4fbd74ec 100644 --- a/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp +++ b/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp @@ -1772,6 +1772,31 @@ WMError SceneSessionManagerProxy::GetParentMainWindowId(int32_t windowId, int32_ return static_cast(ret); } +WMError SceneSessionManagerProxy::GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option; + if (!data.WriteInterfaceToken(GetDescriptor())) { + WLOGFE("GetWindowLayoutInfo Write interfaceToken failed"); + return WMError::WM_ERROR_IPC_FAILED; + } + sptr remote = Remote(); + if (remote == nullptr) { + WLOGFE("remote is null"); + return WMError::WM_ERROR_IPC_FAILED; + } + if (remote->SendRequest(static_cast( + SceneSessionManagerMessage::TRANS_ID_GET_WINDOW_LAYOUT_INFO_ID), data, reply, option) != ERR_NONE) { + return WMError::WM_ERROR_IPC_FAILED; + } + if (!MarshallingHelper::UnmarshallingVectorParcelableObj(reply, infos)) { + WLOGFE("read window layout info failed"); + return WMError::WM_ERROR_IPC_FAILED; + } + return static_cast(reply.ReadInt32()); +} + WMError SceneSessionManagerProxy::GetVisibilityWindowInfo(std::vector>& infos) { MessageParcel data; diff --git a/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp b/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp index 7780ae82eb..b1ae928ed3 100644 --- a/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp +++ b/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp @@ -142,6 +142,8 @@ int SceneSessionManagerStub::ProcessRemoteRequest(uint32_t code, MessageParcel& return HandleUpdateSessionWindowVisibilityListener(data, reply); case static_cast(SceneSessionManagerMessage::TRANS_ID_SHIFT_APP_WINDOW_FOCUS): return HandleShiftAppWindowFocus(data, reply); + case static_cast(SceneSessionManagerMessage::TRANS_ID_GET_WINDOW_LAYOUT_INFO): + return HandleGetAllWindowLayoutInfo(data, reply); case static_cast(SceneSessionManagerMessage::TRANS_ID_GET_VISIBILITY_WINDOW_INFO_ID): return HandleGetVisibilityWindowInfo(data, reply); case static_cast(SceneSessionManagerMessage::TRANS_ID_ADD_EXTENSION_WINDOW_STAGE_TO_SCB): @@ -1096,6 +1098,23 @@ int SceneSessionManagerStub::HandleShiftAppWindowFocus(MessageParcel& data, Mess return ERR_NONE; } +int SceneSessionManagerStub::HandleGetAllWindowLayoutInfo(MessageParcel& data, MessageParcel& reply) +{ + uint64_t displayId = 0; + if (!data.ReadUint64(displayId)) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Failed to readInt32 displayId"); + return ERR_INVALID_DATA; + } + std::vector> infos; + WMError errCode = GetAllWindowLayoutInfo(displayId, infos); + if (!MarshallingHelper::MarshallingVectorParcelableObj(reply, infos)) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "write window layout info failed"); + return ERR_INVALID_DATA; + } + reply.WriteInt32(static_cast(errCode)); + return ERR_NONE; +} + int SceneSessionManagerStub::HandleGetVisibilityWindowInfo(MessageParcel& data, MessageParcel& reply) { std::vector> infos; diff --git a/wm/include/window_adapter.h b/wm/include/window_adapter.h index a3f7ae9f55..cc563a50ed 100644 --- a/wm/include/window_adapter.h +++ b/wm/include/window_adapter.h @@ -75,6 +75,7 @@ public: virtual WMError GetAccessibilityWindowInfo(std::vector>& infos); virtual WMError GetUnreliableWindowInfo(int32_t windowId, std::vector>& infos); + virtual WMError GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos); virtual WMError GetVisibilityWindowInfo(std::vector>& infos); virtual void MinimizeWindowsByLauncher(std::vector windowIds, bool isAnimated, sptr& finishCallback); diff --git a/wm/src/window_adapter.cpp b/wm/src/window_adapter.cpp index b15a19a78e..f2c527d42f 100644 --- a/wm/src/window_adapter.cpp +++ b/wm/src/window_adapter.cpp @@ -185,6 +185,15 @@ WMError WindowAdapter::GetUnreliableWindowInfo(int32_t windowId, return wmsProxy->GetUnreliableWindowInfo(windowId, infos); } +WMError WindowAdapter::GetAllWindowLayoutInfo(std::vector>& infos) +{ + INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR); + + auto wmsProxy = GetWindowManagerServiceProxy(); + CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR); + return wmsProxy->GetAllWindowLayoutInfo(infos); +} + WMError WindowAdapter::GetVisibilityWindowInfo(std::vector>& infos) { INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR); diff --git a/wm/src/window_manager.cpp b/wm/src/window_manager.cpp index bdf7d89b29..7e5bea0f90 100644 --- a/wm/src/window_manager.cpp +++ b/wm/src/window_manager.cpp @@ -1119,6 +1119,15 @@ WMError WindowManager::GetUnreliableWindowInfo(int32_t windowId, return ret; } +WMError WindowManager::GetAllWindowLayoutInfo(std::vector>& infos) const +{ + WMError ret = SingletonContainer::Get().GetAllWindowLayoutInfo(infos); + if (ret != WMError::WM_OK) { + WLOGFE("get window visibility info failed"); + } + return ret; +} + WMError WindowManager::GetVisibilityWindowInfo(std::vector>& infos) const { WMError ret = SingletonContainer::Get().GetVisibilityWindowInfo(infos); diff --git a/wmserver/include/window_manager_service.h b/wmserver/include/window_manager_service.h index 16ba18feda..f09bd55459 100644 --- a/wmserver/include/window_manager_service.h +++ b/wmserver/include/window_manager_service.h @@ -113,6 +113,7 @@ public: WMError SetWindowGravity(uint32_t windowId, WindowGravity gravity, uint32_t percent) override; WMError GetAccessibilityWindowInfo(std::vector>& infos) override; WMError GetUnreliableWindowInfo(int32_t windowId, std::vector>& infos) override; + WMError GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) override; WMError GetVisibilityWindowInfo(std::vector>& infos) override; WMError RaiseToAppTop(uint32_t windowId) override; std::shared_ptr GetSnapshot(int32_t windowId) override; diff --git a/wmserver/include/zidl/window_manager_interface.h b/wmserver/include/zidl/window_manager_interface.h index 5df5b0db18..a71ba109af 100644 --- a/wmserver/include/zidl/window_manager_interface.h +++ b/wmserver/include/zidl/window_manager_interface.h @@ -61,6 +61,7 @@ public: TRANS_ID_UPDATE_LAYOUT_MODE, TRANS_ID_UPDATE_PROPERTY, TRANS_ID_GET_ACCESSIBILITY_WINDOW_INFO_ID, + TRANS_ID_GET_WINDOW_LAYOUT_INFO, TRANS_ID_GET_VISIBILITY_WINDOW_INFO_ID, TRANS_ID_ANIMATION_SET_CONTROLLER, TRANS_ID_GET_SYSTEM_CONFIG, @@ -117,6 +118,7 @@ public: const sptr& windowManagerAgent) = 0; virtual WMError GetAccessibilityWindowInfo(std::vector>& infos) = 0; virtual WMError GetUnreliableWindowInfo(int32_t windowId, std::vector>& infos) = 0; + virtual WMError GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) = 0; virtual WMError GetVisibilityWindowInfo(std::vector>& infos) = 0; virtual WMError SetWindowAnimationController(const sptr& controller) = 0; virtual WMError GetSystemConfig(SystemConfig& systemConfig) = 0; diff --git a/wmserver/include/zidl/window_manager_proxy.h b/wmserver/include/zidl/window_manager_proxy.h index f79afb590e..fe6018d80b 100644 --- a/wmserver/include/zidl/window_manager_proxy.h +++ b/wmserver/include/zidl/window_manager_proxy.h @@ -58,6 +58,7 @@ public: WMError GetAccessibilityWindowInfo(std::vector>& infos) override; WMError GetUnreliableWindowInfo(int32_t windowId, std::vector>& infos) override; + WMError GetAllWindowLayoutInfo(std::vector>& infos) override; WMError GetVisibilityWindowInfo(std::vector>& infos) override; WMError GetSystemConfig(SystemConfig& systemConfig) override; WMError GetModeChangeHotZones(DisplayId displayId, ModeChangeHotZones& hotZones) override; diff --git a/wmserver/src/window_manager_service.cpp b/wmserver/src/window_manager_service.cpp index 3398b9ac50..b5a4925a21 100644 --- a/wmserver/src/window_manager_service.cpp +++ b/wmserver/src/window_manager_service.cpp @@ -1433,6 +1433,14 @@ WMError WindowManagerService::GetVisibilityWindowInfo(std::vector>& infos) +{ + auto task = [this, &infos]() { + return windowController_->GetVisibilityWindowInfo(infos); + }; + return PostSyncTask(task, "GetVisibilityWindowInfo"); +} + /** @note @window.hierarchy */ WMError WindowManagerService::RaiseToAppTop(uint32_t windowId) { diff --git a/wmserver/src/zidl/window_manager_proxy.cpp b/wmserver/src/zidl/window_manager_proxy.cpp index 360ebcf9f0..4e5b4e96c1 100644 --- a/wmserver/src/zidl/window_manager_proxy.cpp +++ b/wmserver/src/zidl/window_manager_proxy.cpp @@ -679,6 +679,35 @@ WMError WindowManagerProxy::GetUnreliableWindowInfo(int32_t windowId, return static_cast(reply.ReadInt32()); } +WMError WindowManagerProxy::GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option; + if (!data.WriteInterfaceToken(GetDescriptor())) { + WLOGFE("WriteInterfaceToken failed"); + return WMError::WM_ERROR_IPC_FAILED; + } + if (!data.WriteUint64(displayId)) { + WLOGFE("Write displayId failed"); + return WMError::WM_ERROR_IPC_FAILED; + } + sptr remote = Remote(); + if (remote == nullptr) { + WLOGFE("remote is null"); + return WMError::WM_ERROR_IPC_FAILED; + } + if (remote->SendRequest(static_cast(WindowManagerMessage::TRANS_ID_GET_WINDOW_LAYOUT_INFO), + data, reply, option) != ERR_NONE) { + return WMError::WM_ERROR_IPC_FAILED; + } + if (!MarshallingHelper::UnmarshallingVectorParcelableObj(reply, infos)) { + WLOGFE("read window layout infos failed"); + return WMError::WM_ERROR_IPC_FAILED; + } + return static_cast(reply.ReadInt32()); +} + WMError WindowManagerProxy::GetVisibilityWindowInfo(std::vector>& infos) { MessageParcel data; diff --git a/wmserver/src/zidl/window_manager_stub.cpp b/wmserver/src/zidl/window_manager_stub.cpp index 6201306c5d..8084172f57 100644 --- a/wmserver/src/zidl/window_manager_stub.cpp +++ b/wmserver/src/zidl/window_manager_stub.cpp @@ -263,6 +263,21 @@ int32_t WindowManagerStub::OnRemoteRequest(uint32_t code, MessageParcel& data, M reply.WriteInt32(static_cast(errCode)); break; } + case WindowManagerMessage::TRANS_ID_GET_WINDOW_LAYOUT_INFO: { + uint64_t displayId = 0; + if(!data.ReadUint64(displayId)) { + WLOGFE("Failed to readInt32 displayId"); + return ERR_INVALID_DATA; + } + std::vector> infos; + WMError errCode = GetAllWindowLayoutInfo(displayId, infos); + if (!MarshallingHelper::MarshallingVectorParcelableObj(reply, infos)) { + WLOGFE("Write window layout infos failed"); + return ERR_INVALID_DATA; + } + reply.WriteInt32(static_cast(errCode)); + break; + } case WindowManagerMessage::TRANS_ID_GET_VISIBILITY_WINDOW_INFO_ID: { std::vector> infos; WMError errCode = GetVisibilityWindowInfo(infos); -- Gitee From 99b56e2198ebfb62c7d9666d83f944c02d840a2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sat, 28 Dec 2024 20:18:29 +0800 Subject: [PATCH 06/64] change6 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- interfaces/innerkits/wm/window_manager.h | 9 +- .../window_manager_napi/js_window_manager.cpp | 8 +- utils/BUILD.gn | 2 +- utils/src/window_layout_info.cpp | 4 +- .../include/scene_session_manager.h | 8 +- .../src/scene_session_manager.cpp | 92 +++++++++++++++++++ .../src/zidl/scene_session_manager_proxy.cpp | 12 ++- .../src/zidl/scene_session_manager_stub.cpp | 2 +- wm/src/window_adapter.cpp | 4 +- wm/src/window_manager.cpp | 4 +- wmserver/include/zidl/window_manager_proxy.h | 2 +- wmserver/src/window_manager_service.cpp | 6 +- 12 files changed, 125 insertions(+), 28 deletions(-) diff --git a/interfaces/innerkits/wm/window_manager.h b/interfaces/innerkits/wm/window_manager.h index 95c0e0c3bc..d401aa90ea 100644 --- a/interfaces/innerkits/wm/window_manager.h +++ b/interfaces/innerkits/wm/window_manager.h @@ -25,11 +25,12 @@ #include "wm_common.h" #include "dm_common.h" #include "focus_change_info.h" -#include "window_visibility_info.h" -#include "window_layout_info.h" -#include "window_drawing_content_info.h" #include "window.h" +#include "window_drawing_content_info.h" +#include "window_layout_info.h" #include "window_pid_visibility_info.h" +#include "window_visibility_info.h" + namespace OHOS { namespace Rosen { @@ -734,7 +735,7 @@ public: /** * @brief Get window layout info. * - * @param infos Visible window infos + * @param infos window layout infos * @return WM_OK means get success, others means get failed. */ WMError GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) const; diff --git a/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp b/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp index 088bf46b5b..7668e2fab5 100644 --- a/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp +++ b/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp @@ -1192,7 +1192,7 @@ napi_value JsWindowManager::OnShiftAppWindowFocus(napi_env env, napi_callback_in napi_value JsWindowManager::OnGetAllWindowLayoutInfo(napi_env env, napi_callback_info info) { size_t argc = ARGC_FOUR; - napi_value argv[ARGC_FOUR] = {nullptr}; + napi_value argv[ARGC_FOUR] = { nullptr }; napi_get_cb_info (env, info, &argc, argv, nullptr, nullptr); if (argc != ARGC_ONE) { TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Argc is invalid: %{public}zu", argc); @@ -1200,17 +1200,17 @@ napi_value JsWindowManager::OnGetAllWindowLayoutInfo(napi_env env, napi_callback } int64_t displayId = static_cast(DISPLAY_ID_INVALID); if (!ConvertFromJsValue(env, argv[INDEX_ZERO], displayId)) { - TLOGE(WmsLogTag::WMS_ATTRIBUTE, "invalid displayId"); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Failed to convert parameter to displayId"); return NapiThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); } - if(displayId < 0 || + if (displayId < 0 || SingletonContainer::Get().GetDisplayById(static_cast(displayId)) == nullptr) { TLOGE(WmsLogTag::WMS_ATTRIBUTE, "invalid displayId"); return NapiThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); } napi_value result = nullptr; std::shared_ptr napiAsyncTask = CreateEmptyAsyncTask(env, nullptr, &result); - auto asyncTask = [displayId, env, task = napiAsyncTask]{ + auto asyncTask = [displayId, env, task = napiAsyncTask] { std::vector> infos; WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at( SingletonContainer::Get().GetAllWindowLayoutInfo(static_cast(displayId), infos)); diff --git a/utils/BUILD.gn b/utils/BUILD.gn index f34aded351..f59e804550 100644 --- a/utils/BUILD.gn +++ b/utils/BUILD.gn @@ -138,7 +138,7 @@ ohos_shared_library("libwmutil_base") { "src/window_manager_hilog.cpp", "src/window_layout_info.cpp", "src/window_pid_visibility_info.cpp", - "src/window_visibility_info.cpp", + "src/window_visibility_info.cpp", "src/wm_common.cpp", "src/wm_math.cpp", "src/wm_occlusion_region.cpp", diff --git a/utils/src/window_layout_info.cpp b/utils/src/window_layout_info.cpp index 9f65b82ba3..48a6ef496a 100644 --- a/utils/src/window_layout_info.cpp +++ b/utils/src/window_layout_info.cpp @@ -31,8 +31,8 @@ WindowLayoutInfo* WindowLayoutInfo::Unmarshalling(Parcel& parcel) return nullptr; } - windowPidVisibilityInfo->rect_ = { parcel.ReadInt32(), parcel.ReadInt32(), parcel.ReadUint32(), parcel.ReadUint32() }; + WindowLayoutInfo->rect_ = { parcel.ReadInt32(), parcel.ReadInt32(), parcel.ReadUint32(), parcel.ReadUint32() }; - return windowPidVisibilityInfo; + return WindowLayoutInfo; } } // namespace OHOS::Rosen \ No newline at end of file diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index 933d8b8f52..7b68ff8f24 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -449,9 +449,6 @@ public: WMError ReleaseForegroundSessionScreenLock() override; void DealwithDrawingContentChange(const std::vector>& drawingContentChangeInfo); WMError GetAllWindowLayoutInfo(Display displayId, std::vector>& infos) override; - bool IsWindowLayoutInfoNeeded(sptr session); - bool IsOnVirtualDisplay(sptr session); - bool IsVirtualDisplayShow(sptr session); /* * Multi Window @@ -751,6 +748,9 @@ private: void UpdateWindowDrawingData(uint64_t surfaceId, int32_t pid, int32_t uid); bool GetSpecifiedDrawingData(uint64_t surfaceId, int32_t& pid, int32_t& uid); void RemoveSpecifiedDrawingData(uint64_t surfaceId); + bool IsWindowLayoutInfoNeeded(sptr session); + bool IsOnVirtualDisplay(sptr session); + bool IsVirtualDisplayShow(sptr session); /* * Window Rotate Animation @@ -1149,7 +1149,7 @@ private: }; std::unordered_map lastDrawingSessionInfoMap_; const DisplayId VIRTUAL_DISPLAY_ID = 999; - std::unordered_set neddedWindows = {"SCBSmartDock"}; + std::unordered_set layoutInfoWhitelist = { "SCBSmartDock" }; /* * Move Drag diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index c20eeff24d..7842512d16 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10497,6 +10497,98 @@ void SceneSessionManager::NotifyUpdateRectAfterLayout() taskScheduler_->PostAsyncTask(task, __func__); } +WMError SceneSessionManager::GetAllWindowLayoutInfo(std::vector>& infos) +{ + auto task = [inputDisplayId, this, &infos]() { + bool isVirtualDisplay = false; + DisplayId displayId = inputDisplayId; + if (displayId == VIRTUAL_DISPLAYID) { + displayId = 0; + isVirtualDisplay = ture; + } + std::vector>> processingSessions; + for (auto& iter : sceneSessionMap_) { + auto session = iter.second; + if (session == nullptr || !IsWindowLayoutInfoNeeded(session) || + session->GetSessionProperty()->GetDisplayId() != displayId || + (!isVirtualDisplay && displayId == 0 && !IsOnVirtualDisplay(session)) || + (isVirtualDisplay && displayId == 0 && !IsVirtualDisplayShow(session)) || + session->GetVisibilityState() == WINDOW_VISIBILITY_STATE_TOTALLY_OCCUSION) { + continue; + } + processomhSessions.emplace_back(iter); + } + CmpFunc cmp = [](std::pair>& lhs, std::pair>& rhs) { + uint32_t lhsZOrder = lhs.second != nullptr ? lhs.second->GetZOrder() : 0; + uint32_t lhsZOrder = rhs.second != nullptr ? rhs.second->GetZOrder() : 0; + return lhsZOrder > rhsZOrder; + }; + std::sort(processingSessions.begin(), processingSessions.end(), cmp); + for (auto& iter : processingSessions) { + auto session = iter.second; + WSRect hostRect; + if (!systemConfig_.IsPcWindow()) { + Rect GlobalRect; + session->GetGlobalScaledRect(globalRect); + hostRect = { globalRect.posX_, globalRect.posY_, globalRect.width_, globalRect.height_ }; + } else { + hostRect = session->GetSessionRect(); + if(displayId == VIRTUAL_DISPLAY_ID && IsVirtualDIsplayShow(session)) { + session->TransformGlobalRectToRelativeRect(hostRect); + } + } + Rect rect = { hostRect.posX_, hostRect.posY_, + static_cast(hostRect.width_), static_cast(hostRect.height_) }; + infos.emplace_back(sptr::MakeSptr(rect)); + TLOGND(WmsLogTag::WMS_ATTRIBUTE, "filted widnow name: %{pubilc}s", session->GetWindowName().c_str()); + } + return WMError::WM_OK; + }; + return taskScheduler_->PostSyncTask(task, "GetAllWindowLayoutInfo"); +} + +bool SceneSessionManager::IsWindowLayoutInfoNeeded(sptr session) +{ + std::string name = sesion->GetWindowName(); + int32_t checker = name.length() - 1; + while(checker != -1 isdigit(name[checker])) { + neme.erase(name.end() - 1); + checker--; + } + if (session->GetSessionInfo().isSystem_ || layoutInfoWhitelist.find(name) != neededWindows.end()) { + return true; + } + return false; +} + +bool SceneSessionManager::IsOnVirtualDisplay(sptr session) +{ + const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = + PcFoldScreenManager::GetInstance().GetDisplayRects(); + const int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; + int32_t lowerScreenPosY = + defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_; + if (PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED && + session->GetSessionRect().posY_ < lowerScreenPosY) { + return true; + } + return false; +} + +bool SceneSessionManager::IsVirtualDisplayShow(sptr session) +{ + const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = + PcFoldScreenManager::GetInstance().GetDisplayRects(); + const int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; + int32_t lowerScreenPosY = + defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_; + if (PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED && + session->GetSessionRect().posY_ + session->GetSessionRect().height_ >= lowerScreenPosY) { + return true; + } + return false; +} + WMError SceneSessionManager::GetVisibilityWindowInfo(std::vector>& infos) { if (!SessionPermission::IsSystemCalling()) { diff --git a/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp b/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp index ab4fbd74ec..697654805d 100644 --- a/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp +++ b/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp @@ -1778,20 +1778,24 @@ WMError SceneSessionManagerProxy::GetAllWindowLayoutInfo(DisplayId displayId, st MessageParcel reply; MessageOption option; if (!data.WriteInterfaceToken(GetDescriptor())) { - WLOGFE("GetWindowLayoutInfo Write interfaceToken failed"); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "GetWindowLayoutInfo Write interfaceToken failed"); + return WMError::WM_ERROR_IPC_FAILED; + } + if (!data.WriteUint64(displayId)) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "write displayId failed"); return WMError::WM_ERROR_IPC_FAILED; } sptr remote = Remote(); if (remote == nullptr) { - WLOGFE("remote is null"); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "remote is null"); return WMError::WM_ERROR_IPC_FAILED; } if (remote->SendRequest(static_cast( - SceneSessionManagerMessage::TRANS_ID_GET_WINDOW_LAYOUT_INFO_ID), data, reply, option) != ERR_NONE) { + SceneSessionManagerMessage::TRANS_ID_GET_WINDOW_LAYOUT_INFO), data, reply, option) != ERR_NONE) { return WMError::WM_ERROR_IPC_FAILED; } if (!MarshallingHelper::UnmarshallingVectorParcelableObj(reply, infos)) { - WLOGFE("read window layout info failed"); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "read window layout info failed"); return WMError::WM_ERROR_IPC_FAILED; } return static_cast(reply.ReadInt32()); diff --git a/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp b/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp index b1ae928ed3..3605e05022 100644 --- a/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp +++ b/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp @@ -1105,7 +1105,7 @@ int SceneSessionManagerStub::HandleGetAllWindowLayoutInfo(MessageParcel& data, M TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Failed to readInt32 displayId"); return ERR_INVALID_DATA; } - std::vector> infos; + std::vector> infos; WMError errCode = GetAllWindowLayoutInfo(displayId, infos); if (!MarshallingHelper::MarshallingVectorParcelableObj(reply, infos)) { TLOGE(WmsLogTag::WMS_ATTRIBUTE, "write window layout info failed"); diff --git a/wm/src/window_adapter.cpp b/wm/src/window_adapter.cpp index f2c527d42f..2837ea177b 100644 --- a/wm/src/window_adapter.cpp +++ b/wm/src/window_adapter.cpp @@ -185,13 +185,13 @@ WMError WindowAdapter::GetUnreliableWindowInfo(int32_t windowId, return wmsProxy->GetUnreliableWindowInfo(windowId, infos); } -WMError WindowAdapter::GetAllWindowLayoutInfo(std::vector>& infos) +WMError WindowAdapter::GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) { INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR); auto wmsProxy = GetWindowManagerServiceProxy(); CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR); - return wmsProxy->GetAllWindowLayoutInfo(infos); + return wmsProxy->GetAllWindowLayoutInfo(displayId, infos); } WMError WindowAdapter::GetVisibilityWindowInfo(std::vector>& infos) diff --git a/wm/src/window_manager.cpp b/wm/src/window_manager.cpp index 7e5bea0f90..153e0f5ec2 100644 --- a/wm/src/window_manager.cpp +++ b/wm/src/window_manager.cpp @@ -1119,9 +1119,9 @@ WMError WindowManager::GetUnreliableWindowInfo(int32_t windowId, return ret; } -WMError WindowManager::GetAllWindowLayoutInfo(std::vector>& infos) const +WMError WindowManager::GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) const { - WMError ret = SingletonContainer::Get().GetAllWindowLayoutInfo(infos); + WMError ret = SingletonContainer::Get().GetAllWindowLayoutInfo(displayId, infos); if (ret != WMError::WM_OK) { WLOGFE("get window visibility info failed"); } diff --git a/wmserver/include/zidl/window_manager_proxy.h b/wmserver/include/zidl/window_manager_proxy.h index fe6018d80b..ebebea58fc 100644 --- a/wmserver/include/zidl/window_manager_proxy.h +++ b/wmserver/include/zidl/window_manager_proxy.h @@ -58,7 +58,7 @@ public: WMError GetAccessibilityWindowInfo(std::vector>& infos) override; WMError GetUnreliableWindowInfo(int32_t windowId, std::vector>& infos) override; - WMError GetAllWindowLayoutInfo(std::vector>& infos) override; + WMError GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) override; WMError GetVisibilityWindowInfo(std::vector>& infos) override; WMError GetSystemConfig(SystemConfig& systemConfig) override; WMError GetModeChangeHotZones(DisplayId displayId, ModeChangeHotZones& hotZones) override; diff --git a/wmserver/src/window_manager_service.cpp b/wmserver/src/window_manager_service.cpp index b5a4925a21..314659a293 100644 --- a/wmserver/src/window_manager_service.cpp +++ b/wmserver/src/window_manager_service.cpp @@ -1425,12 +1425,12 @@ WMError WindowManagerService::GetUnreliableWindowInfo(int32_t windowId, return PostSyncTask(task, "GetUnreliableWindowInfo"); } -WMError WindowManagerService::GetVisibilityWindowInfo(std::vector>& infos) +WMError WindowManagerService::GetAllWindowLayoutInfo(std::vector>& infos) { auto task = [this, &infos]() { - return windowController_->GetVisibilityWindowInfo(infos); + return windowController_->GetAllWindowLayoutInfo(infos); }; - return PostSyncTask(task, "GetVisibilityWindowInfo"); + return PostSyncTask(task, "GetAllWindowLayoutInfo"); } WMError WindowManagerService::GetVisibilityWindowInfo(std::vector>& infos) -- Gitee From d07342b491d958a21b1cbd75ac73b41f497784c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sat, 28 Dec 2024 21:16:59 +0800 Subject: [PATCH 07/64] change7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- interfaces/innerkits/wm/wm_common.h | 1 + .../src/scene_session_manager.cpp | 23 +++++++++---------- .../src/zidl/scene_session_manager_stub.cpp | 4 ++-- wm/src/window_adapter.cpp | 1 - wm/src/window_manager.cpp | 2 +- wmserver/src/window_manager_service.cpp | 8 ------- 6 files changed, 15 insertions(+), 24 deletions(-) diff --git a/interfaces/innerkits/wm/wm_common.h b/interfaces/innerkits/wm/wm_common.h index 447d6e6a8f..5fa4b73980 100644 --- a/interfaces/innerkits/wm/wm_common.h +++ b/interfaces/innerkits/wm/wm_common.h @@ -1192,6 +1192,7 @@ struct TitleButtonRect { /** * Config of keyboard animation */ + class KeyboardAnimationCurve : public Parcelable { public: KeyboardAnimationCurve() = default; diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 7842512d16..be02acf929 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10499,7 +10499,7 @@ void SceneSessionManager::NotifyUpdateRectAfterLayout() WMError SceneSessionManager::GetAllWindowLayoutInfo(std::vector>& infos) { - auto task = [inputDisplayId, this, &infos]() { + auto task = [inputDisplayId, this, &infos] { bool isVirtualDisplay = false; DisplayId displayId = inputDisplayId; if (displayId == VIRTUAL_DISPLAYID) { @@ -10510,17 +10510,17 @@ WMError SceneSessionManager::GetAllWindowLayoutInfo(std::vectorGetSessionProperty()->GetDisplayId() != displayId || - (!isVirtualDisplay && displayId == 0 && !IsOnVirtualDisplay(session)) || - (isVirtualDisplay && displayId == 0 && !IsVirtualDisplayShow(session)) || - session->GetVisibilityState() == WINDOW_VISIBILITY_STATE_TOTALLY_OCCUSION) { + session->GetSessionProperty()->GetDisplayId() != displayId || + (!isVirtualDisplay && displayId == 0 && !IsOnVirtualDisplay(session)) || + (isVirtualDisplay && displayId == 0 && !IsVirtualDisplayShow(session)) || + session->GetVisibilityState() == WINDOW_VISIBILITY_STATE_TOTALLY_OCCUSION) { continue; } processomhSessions.emplace_back(iter); } CmpFunc cmp = [](std::pair>& lhs, std::pair>& rhs) { uint32_t lhsZOrder = lhs.second != nullptr ? lhs.second->GetZOrder() : 0; - uint32_t lhsZOrder = rhs.second != nullptr ? rhs.second->GetZOrder() : 0; + uint32_t rhsZOrder = rhs.second != nullptr ? rhs.second->GetZOrder() : 0; return lhsZOrder > rhsZOrder; }; std::sort(processingSessions.begin(), processingSessions.end(), cmp); @@ -10528,7 +10528,7 @@ WMError SceneSessionManager::GetAllWindowLayoutInfo(std::vectorGetGlobalScaledRect(globalRect); hostRect = { globalRect.posX_, globalRect.posY_, globalRect.width_, globalRect.height_ }; } else { @@ -10540,11 +10540,10 @@ WMError SceneSessionManager::GetAllWindowLayoutInfo(std::vector(hostRect.width_), static_cast(hostRect.height_) }; infos.emplace_back(sptr::MakeSptr(rect)); - TLOGND(WmsLogTag::WMS_ATTRIBUTE, "filted widnow name: %{pubilc}s", session->GetWindowName().c_str()); } return WMError::WM_OK; }; - return taskScheduler_->PostSyncTask(task, "GetAllWindowLayoutInfo"); + return taskScheduler_->PostSyncTask(task, __func__); } bool SceneSessionManager::IsWindowLayoutInfoNeeded(sptr session) @@ -10565,11 +10564,11 @@ bool SceneSessionManager::IsOnVirtualDisplay(sptr session) { const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = PcFoldScreenManager::GetInstance().GetDisplayRects(); - const int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; + constexpr int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; int32_t lowerScreenPosY = defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_; if (PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED && - session->GetSessionRect().posY_ < lowerScreenPosY) { + session->GetSessionRect().posY_ < lowerScreenPosY) { return true; } return false; @@ -10579,7 +10578,7 @@ bool SceneSessionManager::IsVirtualDisplayShow(sptr session) { const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = PcFoldScreenManager::GetInstance().GetDisplayRects(); - const int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; + constexpr int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; int32_t lowerScreenPosY = defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_; if (PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED && diff --git a/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp b/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp index 3605e05022..7946a2788b 100644 --- a/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp +++ b/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp @@ -1102,13 +1102,13 @@ int SceneSessionManagerStub::HandleGetAllWindowLayoutInfo(MessageParcel& data, M { uint64_t displayId = 0; if (!data.ReadUint64(displayId)) { - TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Failed to readInt32 displayId"); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Failed to read displayId"); return ERR_INVALID_DATA; } std::vector> infos; WMError errCode = GetAllWindowLayoutInfo(displayId, infos); if (!MarshallingHelper::MarshallingVectorParcelableObj(reply, infos)) { - TLOGE(WmsLogTag::WMS_ATTRIBUTE, "write window layout info failed"); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Failed to Write window layout info"); return ERR_INVALID_DATA; } reply.WriteInt32(static_cast(errCode)); diff --git a/wm/src/window_adapter.cpp b/wm/src/window_adapter.cpp index 2837ea177b..f297edfde1 100644 --- a/wm/src/window_adapter.cpp +++ b/wm/src/window_adapter.cpp @@ -188,7 +188,6 @@ WMError WindowAdapter::GetUnreliableWindowInfo(int32_t windowId, WMError WindowAdapter::GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) { INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR); - auto wmsProxy = GetWindowManagerServiceProxy(); CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR); return wmsProxy->GetAllWindowLayoutInfo(displayId, infos); diff --git a/wm/src/window_manager.cpp b/wm/src/window_manager.cpp index 153e0f5ec2..581d026855 100644 --- a/wm/src/window_manager.cpp +++ b/wm/src/window_manager.cpp @@ -1123,7 +1123,7 @@ WMError WindowManager::GetAllWindowLayoutInfo(DisplayId displayId, std::vector().GetAllWindowLayoutInfo(displayId, infos); if (ret != WMError::WM_OK) { - WLOGFE("get window visibility info failed"); + WLOGFE("get window layout info failed"); } return ret; } diff --git a/wmserver/src/window_manager_service.cpp b/wmserver/src/window_manager_service.cpp index 314659a293..3398b9ac50 100644 --- a/wmserver/src/window_manager_service.cpp +++ b/wmserver/src/window_manager_service.cpp @@ -1425,14 +1425,6 @@ WMError WindowManagerService::GetUnreliableWindowInfo(int32_t windowId, return PostSyncTask(task, "GetUnreliableWindowInfo"); } -WMError WindowManagerService::GetAllWindowLayoutInfo(std::vector>& infos) -{ - auto task = [this, &infos]() { - return windowController_->GetAllWindowLayoutInfo(infos); - }; - return PostSyncTask(task, "GetAllWindowLayoutInfo"); -} - WMError WindowManagerService::GetVisibilityWindowInfo(std::vector>& infos) { auto task = [this, &infos]() { -- Gitee From 95546d95ce82f5b40b5aecd8d58413ed4d7a0f01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sat, 28 Dec 2024 21:24:18 +0800 Subject: [PATCH 08/64] change8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- interfaces/innerkits/wm/window_manager.h | 6 ++-- interfaces/innerkits/wm/wm_common.h | 36 +++++++++++++++++++++++- utils/BUILD.gn | 2 -- 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/interfaces/innerkits/wm/window_manager.h b/interfaces/innerkits/wm/window_manager.h index d401aa90ea..c0a0ac8d51 100644 --- a/interfaces/innerkits/wm/window_manager.h +++ b/interfaces/innerkits/wm/window_manager.h @@ -25,12 +25,10 @@ #include "wm_common.h" #include "dm_common.h" #include "focus_change_info.h" -#include "window.h" +#include "window_visibility_info.h" #include "window_drawing_content_info.h" -#include "window_layout_info.h" +#include "window.h" #include "window_pid_visibility_info.h" -#include "window_visibility_info.h" - namespace OHOS { namespace Rosen { diff --git a/interfaces/innerkits/wm/wm_common.h b/interfaces/innerkits/wm/wm_common.h index 5fa4b73980..62389745fe 100644 --- a/interfaces/innerkits/wm/wm_common.h +++ b/interfaces/innerkits/wm/wm_common.h @@ -1189,10 +1189,44 @@ struct TitleButtonRect { } }; +/* + * @class WindowLayoutInfo + * + * @brief Info for all windos on the screen. + */ +class WindowLayoutInfo : public Parcelable { +public: + WindowLayoutInfo() = default; + WindowLayoutInfo(Rect rect) : rect_(rect) {}; + + ~WindowLayoutInfo() = default; + + virtual bool Marshalling(Parcel& parcel) const override + { + return parcel.WriteInt32(rect_.posX_) && parcel.WriteInt32(rect_.posY_) && + parcel.WriteUint32(rect_.width_) && parcel.WriteUint32(rect_.height_); + + } + + static WindowLayoutInfo* Unmarshalling(Parcel& parcel) + { + auto WindowLayoutInfo = new (std::nothrow) (class WindowLayoutInfo)(); + if (WindowLayoutInfo == nullptr) { + return nullptr; + } + + WindowLayoutInfo->rect_ = { parcel.ReadInt32(), parcel.ReadInt32(), parcel.ReadUint32(), parcel.ReadUint32() }; + + return WindowLayoutInfo; + } + + Rect rect_ = { 0, 0, 0, 0 }; +}; + /** * Config of keyboard animation */ - + class KeyboardAnimationCurve : public Parcelable { public: KeyboardAnimationCurve() = default; diff --git a/utils/BUILD.gn b/utils/BUILD.gn index f59e804550..0319f929d4 100644 --- a/utils/BUILD.gn +++ b/utils/BUILD.gn @@ -64,7 +64,6 @@ ohos_static_library("libwmutil_static") { "src/vsync_station.cpp", "src/window_drawing_content_info.cpp", "src/window_frame_trace_impl.cpp", - "src/window_layout_info.cpp", "src/window_property.cpp", "src/window_transition_info.cpp", "src/window_visibility_info.cpp", @@ -136,7 +135,6 @@ ohos_shared_library("libwmutil_base") { "src/unreliable_window_info.cpp", "src/window_drawing_content_info.cpp", "src/window_manager_hilog.cpp", - "src/window_layout_info.cpp", "src/window_pid_visibility_info.cpp", "src/window_visibility_info.cpp", "src/wm_common.cpp", -- Gitee From 7f253e151fd4d9a0f38aae6562cb370bb694c7cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sat, 28 Dec 2024 21:24:52 +0800 Subject: [PATCH 09/64] change9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- utils/src/window_layout_info.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/utils/src/window_layout_info.cpp b/utils/src/window_layout_info.cpp index 48a6ef496a..bd60289877 100644 --- a/utils/src/window_layout_info.cpp +++ b/utils/src/window_layout_info.cpp @@ -32,7 +32,6 @@ WindowLayoutInfo* WindowLayoutInfo::Unmarshalling(Parcel& parcel) } WindowLayoutInfo->rect_ = { parcel.ReadInt32(), parcel.ReadInt32(), parcel.ReadUint32(), parcel.ReadUint32() }; - return WindowLayoutInfo; } } // namespace OHOS::Rosen \ No newline at end of file -- Gitee From b4ac4a21f2391d8068f0a3d34877b7529b02b6f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sat, 28 Dec 2024 21:43:23 +0800 Subject: [PATCH 10/64] change10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- interfaces/innerkits/wm/window_manager.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/innerkits/wm/window_manager.h b/interfaces/innerkits/wm/window_manager.h index c0a0ac8d51..a143ba4b01 100644 --- a/interfaces/innerkits/wm/window_manager.h +++ b/interfaces/innerkits/wm/window_manager.h @@ -736,7 +736,7 @@ public: * @param infos window layout infos * @return WM_OK means get success, others means get failed. */ - WMError GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) const; + WMError GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) const; /** * @brief Get visibility window info. -- Gitee From 6966e1739beb27cf8922bd13d567dce6d1873bf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sat, 28 Dec 2024 22:13:18 +0800 Subject: [PATCH 11/64] change11 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../kits/napi/window_runtime/window_napi/js_window_utils.cpp | 2 +- .../kits/napi/window_runtime/window_napi/js_window_utils.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp index 261b2439f1..b6718a68ff 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp @@ -619,7 +619,7 @@ bool ConvertDecorButtonStyleFromJs(napi_env env, napi_value jsObject, DecorButto return !emptyParam; } -napi_value CreateWindowLayoutInfoObject(napi_env env, const sptr& info) +napi_value CreateWindowLayoutInfoObject(napi_env env, const sptr& info) { napi_value objValue = nullptr; CHECK_NAPI_CREATE_OBJECT_RETURN_IF_NULL(env, objValue); diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.h b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.h index 577203e0d7..f381dbcbb6 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.h +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.h @@ -288,7 +288,7 @@ inline const std::map JS_TO_NATIVE_MODALITY_TYPE_ napi_value CreateJsWindowLayoutInfoArrayObject(napi_env env, const std::vector>& infos); napi_value CreateJsWindowInfoArrayObject(napi_env env, const std::vector>& infos); - napi_value CreateWindowLayoutInfoObject(napi_env env, const sptr& info); + napi_value CreateWindowLayoutInfoObject(napi_env env, const sptr& info); napi_value CreateJsWindowInfoObject(napi_env env, const sptr& window); napi_value GetRectAndConvertToJsValue(napi_env env, const Rect& rect); napi_value CreateJsWindowPropertiesObject(napi_env env, sptr& window, const Rect& drawableRect); -- Gitee From bd897f814db934a60e4b666bc6de070350415e08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sat, 28 Dec 2024 22:19:20 +0800 Subject: [PATCH 12/64] change12 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- utils/include/window_layout_info.h | 50 ------------------- utils/src/window_layout_info.cpp | 37 -------------- .../src/scene_session_manager.cpp | 3 +- 3 files changed, 2 insertions(+), 88 deletions(-) delete mode 100644 utils/include/window_layout_info.h delete mode 100644 utils/src/window_layout_info.cpp diff --git a/utils/include/window_layout_info.h b/utils/include/window_layout_info.h deleted file mode 100644 index 6fee984098..0000000000 --- a/utils/include/window_layout_info.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2024 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef OHOS_ROSEN_WINDOW_LAYOUT_INFO_H -#define OHOS_ROSEN_WINDOW_LAYOUT_INFO_H - -#include "wm_common.h" - -namespace OHOS::Rosen { - /* - * @class WindowLayoutInfo - * - * @brief Info for all windos on the screen. - */ -class WindowLayoutInfo : public Parcelable { -public: - /* - * @brief Default construct of WindowLayoutInfo. - */ - WindowLayoutInfo() = default; - - /* - * @brief Construct of WindowLayoutInfo. - * - * @param rect rect of the window, { posX, posY, width, height } - */ - WindowLayoutInfo(Rect rect) : rect_(rect) {}; - - ~WindowLayoutInfo() = default; - - virtual bool Marshalling(Parcel& parcel) const override; - - static WindowLayoutInfo* Unmarshalling(Parcel& parcel); - - Rect rect_ = { 0, 0, 0, 0 }; -}; -} // namespace OHOS::Rosen -#endif // OHOS_ROSEN_WINDOW_LAYOUT_INFO_H \ No newline at end of file diff --git a/utils/src/window_layout_info.cpp b/utils/src/window_layout_info.cpp deleted file mode 100644 index bd60289877..0000000000 --- a/utils/src/window_layout_info.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2024 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "window_layout_info.h" -#include "window_manager_hilog.h" - -namespace OHOS::Rosen { - -bool WindowLayoutInfo::Marshalling(Parcel& parcel) const -{ - return parcel.WriteInt32(rect_.posX_) && parcel.WriteInt32(rect_.posY_) && - parcel.WriteUint32(rect_.width_) && parcel.WriteUint32(rect_.height_); - -WindowLayoutInfo* WindowLayoutInfo::Unmarshalling(Parcel& parcel) -{ - auto WindowLayoutInfo = new (std::nothrow) (class WindowLayoutInfo)(); - if (WindowLayoutInfo == nullptr) { - TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Display window info is nullptr."); - return nullptr; - } - - WindowLayoutInfo->rect_ = { parcel.ReadInt32(), parcel.ReadInt32(), parcel.ReadUint32(), parcel.ReadUint32() }; - return WindowLayoutInfo; -} -} // namespace OHOS::Rosen \ No newline at end of file diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index be02acf929..ab53bf0e51 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10497,7 +10497,8 @@ void SceneSessionManager::NotifyUpdateRectAfterLayout() taskScheduler_->PostAsyncTask(task, __func__); } -WMError SceneSessionManager::GetAllWindowLayoutInfo(std::vector>& infos) +WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId inputDisplayId, + std::vector>& infos) { auto task = [inputDisplayId, this, &infos] { bool isVirtualDisplay = false; -- Gitee From 12757ca03d019205ed442a9f28f217747d58a36e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sat, 28 Dec 2024 22:20:08 +0800 Subject: [PATCH 13/64] change13 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- interfaces/innerkits/wm/wm_common.h | 1 - 1 file changed, 1 deletion(-) diff --git a/interfaces/innerkits/wm/wm_common.h b/interfaces/innerkits/wm/wm_common.h index 62389745fe..1bb6b0ad6e 100644 --- a/interfaces/innerkits/wm/wm_common.h +++ b/interfaces/innerkits/wm/wm_common.h @@ -1205,7 +1205,6 @@ public: { return parcel.WriteInt32(rect_.posX_) && parcel.WriteInt32(rect_.posY_) && parcel.WriteUint32(rect_.width_) && parcel.WriteUint32(rect_.height_); - } static WindowLayoutInfo* Unmarshalling(Parcel& parcel) -- Gitee From 2714ff7bcbb89140beb59cdf567fd68677b42b1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sat, 28 Dec 2024 22:22:02 +0800 Subject: [PATCH 14/64] change14 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../include/zidl/scene_session_manager_interface.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/window_scene/session_manager/include/zidl/scene_session_manager_interface.h b/window_scene/session_manager/include/zidl/scene_session_manager_interface.h index b516f523f6..2622e36c04 100644 --- a/window_scene/session_manager/include/zidl/scene_session_manager_interface.h +++ b/window_scene/session_manager/include/zidl/scene_session_manager_interface.h @@ -223,7 +223,10 @@ public: { return WMError::WM_OK; } - WMError GetAllWindowLayoutInfo(Display displayId, std::vector>& infos) override { return WMError::WM_OK; } + WMError GetAllWindowLayoutInfo(Display displayId, std::vector>& infos) override + { + return WMError::WM_OK; + } WMError GetVisibilityWindowInfo(std::vector>& infos) override { return WMError::WM_OK; } WMError SetWindowAnimationController(const sptr& controller) override { -- Gitee From 21672c2b2f1bb3fc278a8ccfc65ea4096ca080a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sat, 28 Dec 2024 22:22:33 +0800 Subject: [PATCH 15/64] change15 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- wmserver/src/zidl/window_manager_stub.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wmserver/src/zidl/window_manager_stub.cpp b/wmserver/src/zidl/window_manager_stub.cpp index 8084172f57..6941e93505 100644 --- a/wmserver/src/zidl/window_manager_stub.cpp +++ b/wmserver/src/zidl/window_manager_stub.cpp @@ -265,7 +265,7 @@ int32_t WindowManagerStub::OnRemoteRequest(uint32_t code, MessageParcel& data, M } case WindowManagerMessage::TRANS_ID_GET_WINDOW_LAYOUT_INFO: { uint64_t displayId = 0; - if(!data.ReadUint64(displayId)) { + if (!data.ReadUint64(displayId)) { WLOGFE("Failed to readInt32 displayId"); return ERR_INVALID_DATA; } -- Gitee From 17b452681ddc9c89ebf7261fb4eeb793e7c93ab3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sat, 28 Dec 2024 22:43:39 +0800 Subject: [PATCH 16/64] change16 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../session_manager/src/zidl/scene_session_manager_proxy.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp b/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp index 697654805d..d56e90013f 100644 --- a/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp +++ b/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp @@ -1772,7 +1772,8 @@ WMError SceneSessionManagerProxy::GetParentMainWindowId(int32_t windowId, int32_ return static_cast(ret); } -WMError SceneSessionManagerProxy::GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) +WMError SceneSessionManagerProxy::GetAllWindowLayoutInfo(DisplayId displayId, + std::vector>& infos) { MessageParcel data; MessageParcel reply; -- Gitee From 4bbd14d7f78dd45a58050f90bf56232139c21cd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sat, 28 Dec 2024 22:48:25 +0800 Subject: [PATCH 17/64] change17 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../include/zidl/scene_session_manager_interface.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/window_scene/session_manager/include/zidl/scene_session_manager_interface.h b/window_scene/session_manager/include/zidl/scene_session_manager_interface.h index 2622e36c04..c6180d117c 100644 --- a/window_scene/session_manager/include/zidl/scene_session_manager_interface.h +++ b/window_scene/session_manager/include/zidl/scene_session_manager_interface.h @@ -223,7 +223,7 @@ public: { return WMError::WM_OK; } - WMError GetAllWindowLayoutInfo(Display displayId, std::vector>& infos) override + WMError GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) override { return WMError::WM_OK; } -- Gitee From d85bd96e89b6a1c7d54e0ff2469b4d28a927a627 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sat, 28 Dec 2024 23:00:59 +0800 Subject: [PATCH 18/64] change18 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../include/scene_session_manager.h | 2 + .../src/scene_session_manager.cpp | 41 +++++++++++-------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index 7b68ff8f24..59eb7a0d74 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -748,6 +748,8 @@ private: void UpdateWindowDrawingData(uint64_t surfaceId, int32_t pid, int32_t uid); bool GetSpecifiedDrawingData(uint64_t surfaceId, int32_t& pid, int32_t& uid); void RemoveSpecifiedDrawingData(uint64_t surfaceId); + WMError GetAllWindowLayoutInfo(DisplayId displayId, bool isVirtualDisplay, + std::vector>> processingSessions); bool IsWindowLayoutInfoNeeded(sptr session); bool IsOnVirtualDisplay(sptr session); bool IsVirtualDisplayShow(sptr session); diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index ab53bf0e51..787993b068 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10508,23 +10508,7 @@ WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId inputDisplayId, isVirtualDisplay = ture; } std::vector>> processingSessions; - for (auto& iter : sceneSessionMap_) { - auto session = iter.second; - if (session == nullptr || !IsWindowLayoutInfoNeeded(session) || - session->GetSessionProperty()->GetDisplayId() != displayId || - (!isVirtualDisplay && displayId == 0 && !IsOnVirtualDisplay(session)) || - (isVirtualDisplay && displayId == 0 && !IsVirtualDisplayShow(session)) || - session->GetVisibilityState() == WINDOW_VISIBILITY_STATE_TOTALLY_OCCUSION) { - continue; - } - processomhSessions.emplace_back(iter); - } - CmpFunc cmp = [](std::pair>& lhs, std::pair>& rhs) { - uint32_t lhsZOrder = lhs.second != nullptr ? lhs.second->GetZOrder() : 0; - uint32_t rhsZOrder = rhs.second != nullptr ? rhs.second->GetZOrder() : 0; - return lhsZOrder > rhsZOrder; - }; - std::sort(processingSessions.begin(), processingSessions.end(), cmp); + GetAllWindowLayoutInfo(displayId, isVirtualDisplay, processingSessions); for (auto& iter : processingSessions) { auto session = iter.second; WSRect hostRect; @@ -10547,6 +10531,29 @@ WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId inputDisplayId, return taskScheduler_->PostSyncTask(task, __func__); } +WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId displayId, bool isVirtualDisplay, + std::vector>> processingSessions) +{ + for (auto& iter : sceneSessionMap_) { + auto session = iter.second; + if (session == nullptr || !IsWindowLayoutInfoNeeded(session) || + session->GetSessionProperty()->GetDisplayId() != displayId || + (!isVirtualDisplay && displayId == 0 && !IsOnVirtualDisplay(session)) || + (isVirtualDisplay && displayId == 0 && !IsVirtualDisplayShow(session)) || + session->GetVisibilityState() == WINDOW_VISIBILITY_STATE_TOTALLY_OCCUSION) { + continue; + } + processomhSessions.emplace_back(iter); + } + CmpFunc cmp = [](std::pair>& lhs, std::pair>& rhs) { + uint32_t lhsZOrder = lhs.second != nullptr ? lhs.second->GetZOrder() : 0; + uint32_t rhsZOrder = rhs.second != nullptr ? rhs.second->GetZOrder() : 0; + return lhsZOrder > rhsZOrder; + }; + std::sort(processingSessions.begin(), processingSessions.end(), cmp); + return WMError::WM_OK; +} + bool SceneSessionManager::IsWindowLayoutInfoNeeded(sptr session) { std::string name = sesion->GetWindowName(); -- Gitee From 234fe1fa2c84bd906445fe3cad648f6fe15512ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sat, 28 Dec 2024 23:16:30 +0800 Subject: [PATCH 19/64] change18 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../session_manager/include/scene_session_manager.h | 2 +- .../session_manager/src/scene_session_manager.cpp | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index 59eb7a0d74..cfa71afad8 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -748,7 +748,7 @@ private: void UpdateWindowDrawingData(uint64_t surfaceId, int32_t pid, int32_t uid); bool GetSpecifiedDrawingData(uint64_t surfaceId, int32_t& pid, int32_t& uid); void RemoveSpecifiedDrawingData(uint64_t surfaceId); - WMError GetAllWindowLayoutInfo(DisplayId displayId, bool isVirtualDisplay, + WMError FilterForGetAllWindowLayoutInfo(DisplayId displayId, bool isVirtualDisplay, std::vector>> processingSessions); bool IsWindowLayoutInfoNeeded(sptr session); bool IsOnVirtualDisplay(sptr session); diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 787993b068..c2fd8f6066 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10507,9 +10507,9 @@ WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId inputDisplayId, displayId = 0; isVirtualDisplay = ture; } - std::vector>> processingSessions; - GetAllWindowLayoutInfo(displayId, isVirtualDisplay, processingSessions); - for (auto& iter : processingSessions) { + std::vector>> FiltedSessions; + FilterForGetAllWindowLayoutInfo(displayId, isVirtualDisplay, FiltedSessions); + for (auto& iter : FiltedSessions) { auto session = iter.second; WSRect hostRect; if (!systemConfig_.IsPcWindow()) { @@ -10531,8 +10531,8 @@ WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId inputDisplayId, return taskScheduler_->PostSyncTask(task, __func__); } -WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId displayId, bool isVirtualDisplay, - std::vector>> processingSessions) +WMError SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId, bool isVirtualDisplay, + std::vector>> FiltedSessions) { for (auto& iter : sceneSessionMap_) { auto session = iter.second; @@ -10550,7 +10550,7 @@ WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId displayId, bool is uint32_t rhsZOrder = rhs.second != nullptr ? rhs.second->GetZOrder() : 0; return lhsZOrder > rhsZOrder; }; - std::sort(processingSessions.begin(), processingSessions.end(), cmp); + std::sort(FiltedSessions.begin(), FiltedSessions.end(), cmp); return WMError::WM_OK; } -- Gitee From 21f09815abd4fa087d2bb950dd04a19b21e0d65a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sat, 28 Dec 2024 23:36:47 +0800 Subject: [PATCH 20/64] change19 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- window_scene/session_manager/include/scene_session_manager.h | 2 +- .../session_manager/include/zidl/scene_session_manager_proxy.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index cfa71afad8..8f496e40f9 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -448,7 +448,7 @@ public: */ WMError ReleaseForegroundSessionScreenLock() override; void DealwithDrawingContentChange(const std::vector>& drawingContentChangeInfo); - WMError GetAllWindowLayoutInfo(Display displayId, std::vector>& infos) override; + WMError GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) override; /* * Multi Window diff --git a/window_scene/session_manager/include/zidl/scene_session_manager_proxy.h b/window_scene/session_manager/include/zidl/scene_session_manager_proxy.h index a59e96db9f..206aaaa987 100644 --- a/window_scene/session_manager/include/zidl/scene_session_manager_proxy.h +++ b/window_scene/session_manager/include/zidl/scene_session_manager_proxy.h @@ -99,7 +99,7 @@ public: WSError NotifyWindowExtensionVisibilityChange(int32_t pid, int32_t uid, bool visible) override; WMError GetTopWindowId(uint32_t mainWinId, uint32_t& topWinId) override; WMError GetParentMainWindowId(int32_t windowId, int32_t& mainWindowId) override; - WMError GetAllWindowLayoutInfo(Display displayId, std::vector>& infos) override; + WMError GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) override; WMError GetVisibilityWindowInfo(std::vector>& infos) override; WSError ShiftAppWindowFocus(int32_t sourcePersistentId, int32_t targetPersistentId) override; void AddExtensionWindowStageToSCB(const sptr& sessionStage, -- Gitee From b7bb0f3631fb7b002f61506269c11e16b7135d26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sun, 29 Dec 2024 00:00:00 +0800 Subject: [PATCH 21/64] change20 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../napi/window_runtime/window_napi/js_window_utils.cpp | 2 +- .../session_manager/src/scene_session_manager.cpp | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp index b6718a68ff..b1c27b331b 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp @@ -555,7 +555,7 @@ napi_value CreateJsWindowLayoutInfoArrayObject(napi_env env, const std::vectorGetSessionProperty()->GetDisplayId() != displayId || - (!isVirtualDisplay && displayId == 0 && !IsOnVirtualDisplay(session)) || - (isVirtualDisplay && displayId == 0 && !IsVirtualDisplayShow(session)) || + (!isVirtualDisplay && displayId == 0 && !IsOnVirtualDisplay(session) && + session->GetSessionProperty()->GetDisplayId() == 0 ) || + (isVirtualDisplay && !IsVirtualDisplayShow(session) && + session->GetSessionProperty()->GetDisplayId() == 0) || session->GetVisibilityState() == WINDOW_VISIBILITY_STATE_TOTALLY_OCCUSION) { continue; } @@ -10576,7 +10578,7 @@ bool SceneSessionManager::IsOnVirtualDisplay(sptr session) int32_t lowerScreenPosY = defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_; if (PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED && - session->GetSessionRect().posY_ < lowerScreenPosY) { + session->GetSessionRect().posY_ >= lowerScreenPosY) { return true; } return false; -- Gitee From 5bc216db1827bb8b133fed59cbb8b66872e54690 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sun, 29 Dec 2024 00:22:22 +0800 Subject: [PATCH 22/64] change20 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../kits/napi/window_runtime/window_napi/js_window_utils.cpp | 2 +- .../kits/napi/window_runtime/window_napi/js_window_utils.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp index b1c27b331b..8fcd9e0dbf 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp @@ -619,7 +619,7 @@ bool ConvertDecorButtonStyleFromJs(napi_env env, napi_value jsObject, DecorButto return !emptyParam; } -napi_value CreateWindowLayoutInfoObject(napi_env env, const sptr& info) +napi_value CreateJSWindowLayoutInfoObject(napi_env env, const sptr& info) { napi_value objValue = nullptr; CHECK_NAPI_CREATE_OBJECT_RETURN_IF_NULL(env, objValue); diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.h b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.h index f381dbcbb6..4596f91711 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.h +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.h @@ -288,7 +288,7 @@ inline const std::map JS_TO_NATIVE_MODALITY_TYPE_ napi_value CreateJsWindowLayoutInfoArrayObject(napi_env env, const std::vector>& infos); napi_value CreateJsWindowInfoArrayObject(napi_env env, const std::vector>& infos); - napi_value CreateWindowLayoutInfoObject(napi_env env, const sptr& info); + napi_value CreateJSWindowLayoutInfoObject(napi_env env, const sptr& info); napi_value CreateJsWindowInfoObject(napi_env env, const sptr& window); napi_value GetRectAndConvertToJsValue(napi_env env, const Rect& rect); napi_value CreateJsWindowPropertiesObject(napi_env env, sptr& window, const Rect& drawableRect); -- Gitee From 102c2183f7874f977163ad3944637d7371da779d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sun, 29 Dec 2024 00:44:27 +0800 Subject: [PATCH 23/64] change20 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../include/scene_session_manager.h | 1 + .../src/scene_session_manager.cpp | 23 ++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index 8f496e40f9..e43e47cbf5 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -753,6 +753,7 @@ private: bool IsWindowLayoutInfoNeeded(sptr session); bool IsOnVirtualDisplay(sptr session); bool IsVirtualDisplayShow(sptr session); + WMError TransGlobalRectToVirtualDisplayRect(WSRect hostRect); /* * Window Rotate Animation diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index ebd4f77376..6ac9b7fab3 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10518,8 +10518,8 @@ WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId inputDisplayId, hostRect = { globalRect.posX_, globalRect.posY_, globalRect.width_, globalRect.height_ }; } else { hostRect = session->GetSessionRect(); - if(displayId == VIRTUAL_DISPLAY_ID && IsVirtualDIsplayShow(session)) { - session->TransformGlobalRectToRelativeRect(hostRect); + if(isVirtualDisplay) { + TransGlobalRectToVirtualDisplayRect(hostRect); } } Rect rect = { hostRect.posX_, hostRect.posY_, @@ -10536,12 +10536,13 @@ WMError SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId { for (auto& iter : sceneSessionMap_) { auto session = iter.second; + bool isNotVirtualDisplayNeed = isVirtualDisplay && !IsVirtualDisplayShow(session) && + session->GetSessionProperty()->GetDisplayId() == 0 + bool isNotDefaultDisplayNeed = !isVirtualDisplay && displayId == 0 && IsOnVirtualDisplay(session) && + session->GetSessionProperty()->GetDisplayId() == 0; if (session == nullptr || !IsWindowLayoutInfoNeeded(session) || session->GetSessionProperty()->GetDisplayId() != displayId || - (!isVirtualDisplay && displayId == 0 && !IsOnVirtualDisplay(session) && - session->GetSessionProperty()->GetDisplayId() == 0 ) || - (isVirtualDisplay && !IsVirtualDisplayShow(session) && - session->GetSessionProperty()->GetDisplayId() == 0) || + isNotVirtualDisplayNeed ||isNotDefaultDisplayNeed || session->GetVisibilityState() == WINDOW_VISIBILITY_STATE_TOTALLY_OCCUSION) { continue; } @@ -10598,6 +10599,16 @@ bool SceneSessionManager::IsVirtualDisplayShow(sptr session) return false; } +WMError SceneSessionManager::TransGlobalRectToVirtualDisplayRect(WSRect hostRect) +{ + constexpr int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; + const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = + PcFoldScreenManager::GetInstance().GetDisplayRects(); + int32_t lowerScreenPosY = + defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_; + hostRect.posY_ -= lowerScreenPosY +} + WMError SceneSessionManager::GetVisibilityWindowInfo(std::vector>& infos) { if (!SessionPermission::IsSystemCalling()) { -- Gitee From 1041226435fcfdb12703d5c589f307946e4f71fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sun, 29 Dec 2024 01:01:54 +0800 Subject: [PATCH 24/64] change21 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../window_napi/js_window_utils.cpp | 2 +- .../include/scene_session_manager.h | 3 ++- .../src/scene_session_manager.cpp | 26 +++++++++---------- .../src/zidl/scene_session_manager_proxy.cpp | 2 +- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp index 8fcd9e0dbf..2fb7552d42 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp @@ -555,7 +555,7 @@ napi_value CreateJsWindowLayoutInfoArrayObject(napi_env env, const std::vector lastDrawingSessionInfoMap_; - const DisplayId VIRTUAL_DISPLAY_ID = 999; + constexpr DisplayId DEFAULT_DISPLAY_ID = 0; + constexpr DisplayId VIRTUAL_DISPLAY_ID = 999; std::unordered_set layoutInfoWhitelist = { "SCBSmartDock" }; /* diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 6ac9b7fab3..e8e7ff4438 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10503,9 +10503,9 @@ WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId inputDisplayId, auto task = [inputDisplayId, this, &infos] { bool isVirtualDisplay = false; DisplayId displayId = inputDisplayId; - if (displayId == VIRTUAL_DISPLAYID) { - displayId = 0; - isVirtualDisplay = ture; + if (displayId == VIRTUAL_DISPLAY_ID) { + displayId = DEFAULT_DISPLAY_ID; + isVirtualDisplay = true; } std::vector>> FiltedSessions; FilterForGetAllWindowLayoutInfo(displayId, isVirtualDisplay, FiltedSessions); @@ -10537,16 +10537,16 @@ WMError SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId for (auto& iter : sceneSessionMap_) { auto session = iter.second; bool isNotVirtualDisplayNeed = isVirtualDisplay && !IsVirtualDisplayShow(session) && - session->GetSessionProperty()->GetDisplayId() == 0 - bool isNotDefaultDisplayNeed = !isVirtualDisplay && displayId == 0 && IsOnVirtualDisplay(session) && - session->GetSessionProperty()->GetDisplayId() == 0; + session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID + bool isNotDefaultDisplayNeed = !isVirtualDisplay && displayId == DEFAULT_DISPLAY_ID && + IsOnVirtualDisplay(session) && session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; if (session == nullptr || !IsWindowLayoutInfoNeeded(session) || session->GetSessionProperty()->GetDisplayId() != displayId || isNotVirtualDisplayNeed ||isNotDefaultDisplayNeed || session->GetVisibilityState() == WINDOW_VISIBILITY_STATE_TOTALLY_OCCUSION) { continue; } - processomhSessions.emplace_back(iter); + FiltedSessions.emplace_back(iter); } CmpFunc cmp = [](std::pair>& lhs, std::pair>& rhs) { uint32_t lhsZOrder = lhs.second != nullptr ? lhs.second->GetZOrder() : 0; @@ -10557,21 +10557,21 @@ WMError SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId return WMError::WM_OK; } -bool SceneSessionManager::IsWindowLayoutInfoNeeded(sptr session) +bool SceneSessionManager::IsWindowLayoutInfoNeeded(sptr session) { - std::string name = sesion->GetWindowName(); + std::string name = session->GetWindowName(); int32_t checker = name.length() - 1; while(checker != -1 isdigit(name[checker])) { - neme.erase(name.end() - 1); + name.erase(name.end() - 1); checker--; } - if (session->GetSessionInfo().isSystem_ || layoutInfoWhitelist.find(name) != neededWindows.end()) { + if (session->GetSessionInfo().isSystem_ || layoutInfoWhitelist.find(name) != layoutInfoWhitelist.end()) { return true; } return false; } -bool SceneSessionManager::IsOnVirtualDisplay(sptr session) +bool SceneSessionManager::IsOnVirtualDisplay(sptr session) { const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = PcFoldScreenManager::GetInstance().GetDisplayRects(); @@ -10585,7 +10585,7 @@ bool SceneSessionManager::IsOnVirtualDisplay(sptr session) return false; } -bool SceneSessionManager::IsVirtualDisplayShow(sptr session) +bool SceneSessionManager::IsVirtualDisplayShow(sptr session) { const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = PcFoldScreenManager::GetInstance().GetDisplayRects(); diff --git a/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp b/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp index d56e90013f..7b786cb442 100644 --- a/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp +++ b/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp @@ -1773,7 +1773,7 @@ WMError SceneSessionManagerProxy::GetParentMainWindowId(int32_t windowId, int32_ } WMError SceneSessionManagerProxy::GetAllWindowLayoutInfo(DisplayId displayId, - std::vector>& infos) + std::vector>& infos) { MessageParcel data; MessageParcel reply; -- Gitee From 29eb0510f81aa07a6c7f0f5746ec8191a63144b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sun, 29 Dec 2024 01:04:19 +0800 Subject: [PATCH 25/64] change22 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- window_scene/session_manager/src/scene_session_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index e8e7ff4438..0a21b35fa7 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10561,7 +10561,7 @@ bool SceneSessionManager::IsWindowLayoutInfoNeeded(sptr session) { std::string name = session->GetWindowName(); int32_t checker = name.length() - 1; - while(checker != -1 isdigit(name[checker])) { + while(checker != -1 && isdigit(name[checker])) { name.erase(name.end() - 1); checker--; } -- Gitee From 6c5b310a9fffc012573ff26e6e3bb7290f403778 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sun, 29 Dec 2024 12:21:44 +0800 Subject: [PATCH 26/64] change23 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- window_scene/session_manager/include/scene_session_manager.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index 1c7be537e0..f60320b359 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -1151,8 +1151,8 @@ private: int32_t uid_ = 0; }; std::unordered_map lastDrawingSessionInfoMap_; - constexpr DisplayId DEFAULT_DISPLAY_ID = 0; - constexpr DisplayId VIRTUAL_DISPLAY_ID = 999; + static constexpr uint64_t DEFAULT_DISPLAY_ID = 0; + static constexpr uint64_t VIRTUAL_DISPLAY_ID = 999; std::unordered_set layoutInfoWhitelist = { "SCBSmartDock" }; /* -- Gitee From 38004bbe38cdf8f26518ef43ae8c720493b25285 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sun, 29 Dec 2024 12:42:53 +0800 Subject: [PATCH 27/64] change24 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- window_scene/session_manager/src/scene_session_manager.cpp | 4 ++-- .../session_manager/src/zidl/scene_session_manager_proxy.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 0a21b35fa7..8b924d8183 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10537,7 +10537,7 @@ WMError SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId for (auto& iter : sceneSessionMap_) { auto session = iter.second; bool isNotVirtualDisplayNeed = isVirtualDisplay && !IsVirtualDisplayShow(session) && - session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID + session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; bool isNotDefaultDisplayNeed = !isVirtualDisplay && displayId == DEFAULT_DISPLAY_ID && IsOnVirtualDisplay(session) && session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; if (session == nullptr || !IsWindowLayoutInfoNeeded(session) || @@ -10606,7 +10606,7 @@ WMError SceneSessionManager::TransGlobalRectToVirtualDisplayRect(WSRect hostRect PcFoldScreenManager::GetInstance().GetDisplayRects(); int32_t lowerScreenPosY = defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_; - hostRect.posY_ -= lowerScreenPosY + hostRect.posY_ -= lowerScreenPosY; } WMError SceneSessionManager::GetVisibilityWindowInfo(std::vector>& infos) diff --git a/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp b/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp index 7b786cb442..ce0829ccee 100644 --- a/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp +++ b/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp @@ -1795,7 +1795,7 @@ WMError SceneSessionManagerProxy::GetAllWindowLayoutInfo(DisplayId displayId, SceneSessionManagerMessage::TRANS_ID_GET_WINDOW_LAYOUT_INFO), data, reply, option) != ERR_NONE) { return WMError::WM_ERROR_IPC_FAILED; } - if (!MarshallingHelper::UnmarshallingVectorParcelableObj(reply, infos)) { + if (!MarshallingHelper::UnmarshallingVectorParcelableObj(reply, infos)) { TLOGE(WmsLogTag::WMS_ATTRIBUTE, "read window layout info failed"); return WMError::WM_ERROR_IPC_FAILED; } -- Gitee From 08a99d534f627eddbd8113ad6beff4f002fcb183 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sun, 29 Dec 2024 13:00:26 +0800 Subject: [PATCH 28/64] change25 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- window_scene/session_manager/src/scene_session_manager.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 8b924d8183..dee1cf206d 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10607,6 +10607,7 @@ WMError SceneSessionManager::TransGlobalRectToVirtualDisplayRect(WSRect hostRect int32_t lowerScreenPosY = defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_; hostRect.posY_ -= lowerScreenPosY; + return WMError::WM_OK; } WMError SceneSessionManager::GetVisibilityWindowInfo(std::vector>& infos) -- Gitee From 412d4b0d48f441938edba4355854a2d345a6311c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sun, 29 Dec 2024 13:33:23 +0800 Subject: [PATCH 29/64] change26 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../session_manager/src/scene_session_manager.cpp | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index dee1cf206d..6f699ffab0 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10511,16 +10511,12 @@ WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId inputDisplayId, FilterForGetAllWindowLayoutInfo(displayId, isVirtualDisplay, FiltedSessions); for (auto& iter : FiltedSessions) { auto session = iter.second; - WSRect hostRect; - if (!systemConfig_.IsPcWindow()) { - Rect globalRect; - session->GetGlobalScaledRect(globalRect); - hostRect = { globalRect.posX_, globalRect.posY_, globalRect.width_, globalRect.height_ }; - } else { + Rect globalRect; + session->GetGlobalScaledRect(globalRect); + WSRect hostRect = { globalRect.posX_, globalRect.posY_, globalRect.width_, globalRect.height_ }; hostRect = session->GetSessionRect(); - if(isVirtualDisplay) { - TransGlobalRectToVirtualDisplayRect(hostRect); - } + if(isVirtualDisplay) { + TransGlobalRectToVirtualDisplayRect(hostRect); } Rect rect = { hostRect.posX_, hostRect.posY_, static_cast(hostRect.width_), static_cast(hostRect.height_) }; -- Gitee From 88f4ea03116a738ee0fe133ad360cf5c544fd988 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sun, 29 Dec 2024 13:37:46 +0800 Subject: [PATCH 30/64] change27 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- interfaces/innerkits/wm/wm_common.h | 1 - 1 file changed, 1 deletion(-) diff --git a/interfaces/innerkits/wm/wm_common.h b/interfaces/innerkits/wm/wm_common.h index 1bb6b0ad6e..2b6aeb2291 100644 --- a/interfaces/innerkits/wm/wm_common.h +++ b/interfaces/innerkits/wm/wm_common.h @@ -1225,7 +1225,6 @@ public: /** * Config of keyboard animation */ - class KeyboardAnimationCurve : public Parcelable { public: KeyboardAnimationCurve() = default; -- Gitee From e23156b5752debe0f445eb1e16a9619e500080e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sun, 29 Dec 2024 14:08:11 +0800 Subject: [PATCH 31/64] change28 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- wmserver/include/window_manager_service.h | 1 - 1 file changed, 1 deletion(-) diff --git a/wmserver/include/window_manager_service.h b/wmserver/include/window_manager_service.h index f09bd55459..16ba18feda 100644 --- a/wmserver/include/window_manager_service.h +++ b/wmserver/include/window_manager_service.h @@ -113,7 +113,6 @@ public: WMError SetWindowGravity(uint32_t windowId, WindowGravity gravity, uint32_t percent) override; WMError GetAccessibilityWindowInfo(std::vector>& infos) override; WMError GetUnreliableWindowInfo(int32_t windowId, std::vector>& infos) override; - WMError GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) override; WMError GetVisibilityWindowInfo(std::vector>& infos) override; WMError RaiseToAppTop(uint32_t windowId) override; std::shared_ptr GetSnapshot(int32_t windowId) override; -- Gitee From 76e91f835235c0fdbe20c1f2eefb0297a79a2c92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sun, 29 Dec 2024 15:34:59 +0800 Subject: [PATCH 32/64] change30 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- interfaces/innerkits/wm/wm_common.h | 2 +- .../include/zidl/window_manager_interface.h | 5 +++- wmserver/include/zidl/window_manager_proxy.h | 1 - wmserver/src/zidl/window_manager_proxy.cpp | 29 ------------------- wmserver/src/zidl/window_manager_stub.cpp | 15 ---------- 5 files changed, 5 insertions(+), 47 deletions(-) diff --git a/interfaces/innerkits/wm/wm_common.h b/interfaces/innerkits/wm/wm_common.h index 2b6aeb2291..b2601c0395 100644 --- a/interfaces/innerkits/wm/wm_common.h +++ b/interfaces/innerkits/wm/wm_common.h @@ -1192,7 +1192,7 @@ struct TitleButtonRect { /* * @class WindowLayoutInfo * - * @brief Info for all windos on the screen. + * @brief Info for all windows on the screen. */ class WindowLayoutInfo : public Parcelable { public: diff --git a/wmserver/include/zidl/window_manager_interface.h b/wmserver/include/zidl/window_manager_interface.h index a71ba109af..d431fa3434 100644 --- a/wmserver/include/zidl/window_manager_interface.h +++ b/wmserver/include/zidl/window_manager_interface.h @@ -118,7 +118,10 @@ public: const sptr& windowManagerAgent) = 0; virtual WMError GetAccessibilityWindowInfo(std::vector>& infos) = 0; virtual WMError GetUnreliableWindowInfo(int32_t windowId, std::vector>& infos) = 0; - virtual WMError GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) = 0; + virtual WMError GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) + { + return WMError::WM_ERROR_DEVICE_NOT_SUPPORT; + } virtual WMError GetVisibilityWindowInfo(std::vector>& infos) = 0; virtual WMError SetWindowAnimationController(const sptr& controller) = 0; virtual WMError GetSystemConfig(SystemConfig& systemConfig) = 0; diff --git a/wmserver/include/zidl/window_manager_proxy.h b/wmserver/include/zidl/window_manager_proxy.h index ebebea58fc..f79afb590e 100644 --- a/wmserver/include/zidl/window_manager_proxy.h +++ b/wmserver/include/zidl/window_manager_proxy.h @@ -58,7 +58,6 @@ public: WMError GetAccessibilityWindowInfo(std::vector>& infos) override; WMError GetUnreliableWindowInfo(int32_t windowId, std::vector>& infos) override; - WMError GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) override; WMError GetVisibilityWindowInfo(std::vector>& infos) override; WMError GetSystemConfig(SystemConfig& systemConfig) override; WMError GetModeChangeHotZones(DisplayId displayId, ModeChangeHotZones& hotZones) override; diff --git a/wmserver/src/zidl/window_manager_proxy.cpp b/wmserver/src/zidl/window_manager_proxy.cpp index 4e5b4e96c1..360ebcf9f0 100644 --- a/wmserver/src/zidl/window_manager_proxy.cpp +++ b/wmserver/src/zidl/window_manager_proxy.cpp @@ -679,35 +679,6 @@ WMError WindowManagerProxy::GetUnreliableWindowInfo(int32_t windowId, return static_cast(reply.ReadInt32()); } -WMError WindowManagerProxy::GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) -{ - MessageParcel data; - MessageParcel reply; - MessageOption option; - if (!data.WriteInterfaceToken(GetDescriptor())) { - WLOGFE("WriteInterfaceToken failed"); - return WMError::WM_ERROR_IPC_FAILED; - } - if (!data.WriteUint64(displayId)) { - WLOGFE("Write displayId failed"); - return WMError::WM_ERROR_IPC_FAILED; - } - sptr remote = Remote(); - if (remote == nullptr) { - WLOGFE("remote is null"); - return WMError::WM_ERROR_IPC_FAILED; - } - if (remote->SendRequest(static_cast(WindowManagerMessage::TRANS_ID_GET_WINDOW_LAYOUT_INFO), - data, reply, option) != ERR_NONE) { - return WMError::WM_ERROR_IPC_FAILED; - } - if (!MarshallingHelper::UnmarshallingVectorParcelableObj(reply, infos)) { - WLOGFE("read window layout infos failed"); - return WMError::WM_ERROR_IPC_FAILED; - } - return static_cast(reply.ReadInt32()); -} - WMError WindowManagerProxy::GetVisibilityWindowInfo(std::vector>& infos) { MessageParcel data; diff --git a/wmserver/src/zidl/window_manager_stub.cpp b/wmserver/src/zidl/window_manager_stub.cpp index 6941e93505..6201306c5d 100644 --- a/wmserver/src/zidl/window_manager_stub.cpp +++ b/wmserver/src/zidl/window_manager_stub.cpp @@ -263,21 +263,6 @@ int32_t WindowManagerStub::OnRemoteRequest(uint32_t code, MessageParcel& data, M reply.WriteInt32(static_cast(errCode)); break; } - case WindowManagerMessage::TRANS_ID_GET_WINDOW_LAYOUT_INFO: { - uint64_t displayId = 0; - if (!data.ReadUint64(displayId)) { - WLOGFE("Failed to readInt32 displayId"); - return ERR_INVALID_DATA; - } - std::vector> infos; - WMError errCode = GetAllWindowLayoutInfo(displayId, infos); - if (!MarshallingHelper::MarshallingVectorParcelableObj(reply, infos)) { - WLOGFE("Write window layout infos failed"); - return ERR_INVALID_DATA; - } - reply.WriteInt32(static_cast(errCode)); - break; - } case WindowManagerMessage::TRANS_ID_GET_VISIBILITY_WINDOW_INFO_ID: { std::vector> infos; WMError errCode = GetVisibilityWindowInfo(infos); -- Gitee From a40fe4bd50a0db1bfcb6c6a7e67b9cee18a41374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sun, 29 Dec 2024 16:06:14 +0800 Subject: [PATCH 33/64] change31 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- previewer/mock/window_manager_napi/js_window_manager.cpp | 7 +++++++ previewer/mock/window_manager_napi/js_window_manager.h | 1 + 2 files changed, 8 insertions(+) diff --git a/previewer/mock/window_manager_napi/js_window_manager.cpp b/previewer/mock/window_manager_napi/js_window_manager.cpp index 31bce3007d..43386a9c0a 100644 --- a/previewer/mock/window_manager_napi/js_window_manager.cpp +++ b/previewer/mock/window_manager_napi/js_window_manager.cpp @@ -104,6 +104,12 @@ napi_value JsWindowManager::ToggleShownStateForAllAppWindows(napi_env env, napi_ return nullptr; } +napi_value JsWindowManager::GetAllWindowLayoutInfo(napi_env env, napi_callback_info info) +{ + WLOGI("mock: GetAllWindowLayoutInfo"); + return nullptr; +} + napi_value JsWindowManager::SetWindowLayoutMode(napi_env env, napi_callback_info info) { WLOGI("mock: SetWindowLayoutMode"); @@ -242,6 +248,7 @@ napi_value JsWindowManagerInit(napi_env env, napi_value exportObj) BindNativeFunction(env, exportObj, "minimizeAll", moduleName, JsWindowManager::MinimizeAll); BindNativeFunction(env, exportObj, "toggleShownStateForAllAppWindows", moduleName, JsWindowManager::ToggleShownStateForAllAppWindows); + BindNativeFunction(env, exportObj, "getAllWindowLayoutInfo", moduleName, JsWindowManager::GetAllWindowLayoutInfo); BindNativeFunction(env, exportObj, "setWindowLayoutMode", moduleName, JsWindowManager::SetWindowLayoutMode); BindNativeFunction(env, exportObj, "setGestureNavigationEnabled", moduleName, JsWindowManager::SetGestureNavigationEnabled); diff --git a/previewer/mock/window_manager_napi/js_window_manager.h b/previewer/mock/window_manager_napi/js_window_manager.h index 94af38c538..e8af0f22d2 100644 --- a/previewer/mock/window_manager_napi/js_window_manager.h +++ b/previewer/mock/window_manager_napi/js_window_manager.h @@ -41,6 +41,7 @@ public: static napi_value UnregisterWindowMangerCallback(napi_env env, napi_callback_info info); static napi_value GetTopWindow(napi_env env, napi_callback_info info); static napi_value GetLastWindow(napi_env env, napi_callback_info info); + static napi_value GetAllWindowLayoutInfo(napi_env env, napi_callback_info info); static napi_value SetWindowLayoutMode(napi_env env, napi_callback_info info); static napi_value SetGestureNavigationEnabled(napi_env env, napi_callback_info info); static napi_value SetWaterMarkImage(napi_env env, napi_callback_info info); -- Gitee From 53e0746f33ebd7471e4952f8d788eae4d83f33f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sun, 29 Dec 2024 16:27:59 +0800 Subject: [PATCH 34/64] change32 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- previewer/include/wm_common.h | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/previewer/include/wm_common.h b/previewer/include/wm_common.h index 91b3d392e4..eb949c1df7 100644 --- a/previewer/include/wm_common.h +++ b/previewer/include/wm_common.h @@ -797,6 +797,39 @@ struct TitleButtonRect { } }; +/* + * @class WindowLayoutInfo + * + * @brief Info for all windows on the screen. + */ +class WindowLayoutInfo : public Parcelable { +public: + WindowLayoutInfo() = default; + WindowLayoutInfo(Rect rect) : rect_(rect) {}; + + ~WindowLayoutInfo() = default; + + virtual bool Marshalling(Parcel& parcel) const override + { + return parcel.WriteInt32(rect_.posX_) && parcel.WriteInt32(rect_.posY_) && + parcel.WriteUint32(rect_.width_) && parcel.WriteUint32(rect_.height_); + } + + static WindowLayoutInfo* Unmarshalling(Parcel& parcel) + { + auto WindowLayoutInfo = new (std::nothrow) (class WindowLayoutInfo)(); + if (WindowLayoutInfo == nullptr) { + return nullptr; + } + + WindowLayoutInfo->rect_ = { parcel.ReadInt32(), parcel.ReadInt32(), parcel.ReadUint32(), parcel.ReadUint32() }; + + return WindowLayoutInfo; + } + + Rect rect_ = { 0, 0, 0, 0 }; +}; + /** * Config of keyboard animation */ -- Gitee From 3120021c4a6b01c9f2e839423c9e0403dd19daf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sun, 29 Dec 2024 21:35:14 +0800 Subject: [PATCH 35/64] change33 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- interfaces/innerkits/wm/wm_common.h | 34 ++++++++----------- .../window_napi/js_window_utils.cpp | 2 +- previewer/include/wm_common.h | 34 ++++++++----------- .../src/scene_session_manager.cpp | 5 +-- 4 files changed, 32 insertions(+), 43 deletions(-) diff --git a/interfaces/innerkits/wm/wm_common.h b/interfaces/innerkits/wm/wm_common.h index b2601c0395..a8f3ac4559 100644 --- a/interfaces/innerkits/wm/wm_common.h +++ b/interfaces/innerkits/wm/wm_common.h @@ -1190,36 +1190,30 @@ struct TitleButtonRect { }; /* - * @class WindowLayoutInfo + * @struct WindowLayoutInfo * - * @brief Info for all windows on the screen. + * @brief Layout info for all windows on the screen. */ -class WindowLayoutInfo : public Parcelable { -public: - WindowLayoutInfo() = default; - WindowLayoutInfo(Rect rect) : rect_(rect) {}; - - ~WindowLayoutInfo() = default; - +struct WindowLayoutInfo : public Parcelable { + Rect rect = { 0, 0, 0, 0 }; virtual bool Marshalling(Parcel& parcel) const override { - return parcel.WriteInt32(rect_.posX_) && parcel.WriteInt32(rect_.posY_) && - parcel.WriteUint32(rect_.width_) && parcel.WriteUint32(rect_.height_); + return parcel.WriteInt32(rect.posX_) && parcel.WriteInt32(rect.posY_) && + parcel.WriteUint32(rect.width_) && parcel.WriteUint32(rect.height_); } - + static WindowLayoutInfo* Unmarshalling(Parcel& parcel) { - auto WindowLayoutInfo = new (std::nothrow) (class WindowLayoutInfo)(); - if (WindowLayoutInfo == nullptr) { + WindowLayoutInfo* windowLayoutInfo = new WindowLayoutInfo; + if (!parcel.ReadInt32(windowLayoutInfo->rect.posX_) || + !parcel.ReadInt32(windowLayoutInfo->rect.posY_) || + !parcel.ReadUint32(windowLayoutInfo->rect.width_) || + !parcel.ReadUint32(windowLayoutInfo->rect.height_)) { + delete windowLayoutInfo; return nullptr; } - - WindowLayoutInfo->rect_ = { parcel.ReadInt32(), parcel.ReadInt32(), parcel.ReadUint32(), parcel.ReadUint32() }; - - return WindowLayoutInfo; + return windowLayoutInfo; } - - Rect rect_ = { 0, 0, 0, 0 }; }; /** diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp index 2fb7552d42..e637421a31 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp @@ -623,7 +623,7 @@ napi_value CreateJSWindowLayoutInfoObject(napi_env env, const sptrrect_)); + napi_set_named_property(env, objValue, "rect", GetRectAndConvertToJsValue(env, info->rect)); return objValue; } diff --git a/previewer/include/wm_common.h b/previewer/include/wm_common.h index eb949c1df7..74263c94f1 100644 --- a/previewer/include/wm_common.h +++ b/previewer/include/wm_common.h @@ -798,36 +798,30 @@ struct TitleButtonRect { }; /* - * @class WindowLayoutInfo + * @struct WindowLayoutInfo * - * @brief Info for all windows on the screen. + * @brief Layout info for all windows on the screen. */ -class WindowLayoutInfo : public Parcelable { -public: - WindowLayoutInfo() = default; - WindowLayoutInfo(Rect rect) : rect_(rect) {}; - - ~WindowLayoutInfo() = default; - +struct WindowLayoutInfo : public Parcelable { + Rect rect = { 0, 0, 0, 0 }; virtual bool Marshalling(Parcel& parcel) const override { - return parcel.WriteInt32(rect_.posX_) && parcel.WriteInt32(rect_.posY_) && - parcel.WriteUint32(rect_.width_) && parcel.WriteUint32(rect_.height_); + return parcel.WriteInt32(rect.posX_) && parcel.WriteInt32(rect.posY_) && + parcel.WriteUint32(rect.width_) && parcel.WriteUint32(rect.height_); } - + static WindowLayoutInfo* Unmarshalling(Parcel& parcel) { - auto WindowLayoutInfo = new (std::nothrow) (class WindowLayoutInfo)(); - if (WindowLayoutInfo == nullptr) { + WindowLayoutInfo* windowLayoutInfo = new WindowLayoutInfo; + if (!parcel.ReadInt32(windowLayoutInfo->rect.posX_) || + !parcel.ReadInt32(windowLayoutInfo->rect.posY_) || + !parcel.ReadUint32(windowLayoutInfo->rect.width_) || + !parcel.ReadUint32(windowLayoutInfo->rect.height_)) { + delete windowLayoutInfo; return nullptr; } - - WindowLayoutInfo->rect_ = { parcel.ReadInt32(), parcel.ReadInt32(), parcel.ReadUint32(), parcel.ReadUint32() }; - - return WindowLayoutInfo; + return windowLayoutInfo; } - - Rect rect_ = { 0, 0, 0, 0 }; }; /** diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 6f699ffab0..acb6484e67 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10512,15 +10512,16 @@ WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId inputDisplayId, for (auto& iter : FiltedSessions) { auto session = iter.second; Rect globalRect; + sptr windowLayoutInfo; session->GetGlobalScaledRect(globalRect); WSRect hostRect = { globalRect.posX_, globalRect.posY_, globalRect.width_, globalRect.height_ }; hostRect = session->GetSessionRect(); if(isVirtualDisplay) { TransGlobalRectToVirtualDisplayRect(hostRect); } - Rect rect = { hostRect.posX_, hostRect.posY_, + windowLayoutInfo->rect = { hostRect.posX_, hostRect.posY_, static_cast(hostRect.width_), static_cast(hostRect.height_) }; - infos.emplace_back(sptr::MakeSptr(rect)); + infos.emplace_back(windowLayoutInfo); } return WMError::WM_OK; }; -- Gitee From 2f4f1e913867d249580b56b79fadcb4b8c3b4271 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sun, 29 Dec 2024 23:09:00 +0800 Subject: [PATCH 36/64] change34 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../window_manager_napi/js_window_manager.cpp | 6 +- .../window_napi/js_window_utils.cpp | 6 +- .../window_napi/js_window_utils.h | 2 +- previewer/include/wm_common.h | 3 +- .../window_manager_napi/js_window_manager.cpp | 2 +- .../include/scene_session_manager.h | 11 ++- .../zidl/scene_session_manager_interface.h | 4 +- .../src/scene_session_manager.cpp | 71 ++++++++++--------- .../src/zidl/scene_session_manager_proxy.cpp | 2 +- wm/src/window_manager.cpp | 2 +- .../include/zidl/window_manager_interface.h | 4 +- 11 files changed, 54 insertions(+), 59 deletions(-) diff --git a/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp b/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp index 7668e2fab5..551d72b49f 100644 --- a/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp +++ b/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp @@ -1193,7 +1193,7 @@ napi_value JsWindowManager::OnGetAllWindowLayoutInfo(napi_env env, napi_callback { size_t argc = ARGC_FOUR; napi_value argv[ARGC_FOUR] = { nullptr }; - napi_get_cb_info (env, info, &argc, argv, nullptr, nullptr); + napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr); if (argc != ARGC_ONE) { TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Argc is invalid: %{public}zu", argc); return NapiThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); @@ -1216,10 +1216,10 @@ napi_value JsWindowManager::OnGetAllWindowLayoutInfo(napi_env env, napi_callback SingletonContainer::Get().GetAllWindowLayoutInfo(static_cast(displayId), infos)); if (ret == WmErrorCode::WM_OK) { task->Resolve(env, CreateJsWindowLayoutInfoArrayObject(env, infos)); - TLOGE(WmsLogTag::WMS_ATTRIBUTE, "success"); + TLOGNE(WmsLogTag::WMS_ATTRIBUTE, "success"); } else { task->Reject(env, JsErrUtils::CreateJsError(env, ret, "failed")); - TLOGE(WmsLogTag::WMS_ATTRIBUTE, "failed"); + TLOGNE(WmsLogTag::WMS_ATTRIBUTE, "failed"); } }; if (napi_status::napi_ok != napi_send_event(env, asyncTask, napi_eprio_high)) { diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp index e637421a31..cf07c6d7d9 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp @@ -552,10 +552,8 @@ napi_value CreateJsWindowLayoutInfoArrayObject(napi_env env, const std::vector& info) +napi_value CreateJsWindowLayoutInfoObject(napi_env env, const sptr& info) { napi_value objValue = nullptr; CHECK_NAPI_CREATE_OBJECT_RETURN_IF_NULL(env, objValue); diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.h b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.h index 4596f91711..acea4aca79 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.h +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.h @@ -287,8 +287,8 @@ inline const std::map JS_TO_NATIVE_MODALITY_TYPE_ }; napi_value CreateJsWindowLayoutInfoArrayObject(napi_env env, const std::vector>& infos); + napi_value CreateJsWindowLayoutInfoObject(napi_env env, const sptr& info); napi_value CreateJsWindowInfoArrayObject(napi_env env, const std::vector>& infos); - napi_value CreateJSWindowLayoutInfoObject(napi_env env, const sptr& info); napi_value CreateJsWindowInfoObject(napi_env env, const sptr& window); napi_value GetRectAndConvertToJsValue(napi_env env, const Rect& rect); napi_value CreateJsWindowPropertiesObject(napi_env env, sptr& window, const Rect& drawableRect); diff --git a/previewer/include/wm_common.h b/previewer/include/wm_common.h index 74263c94f1..4f9f19f97e 100644 --- a/previewer/include/wm_common.h +++ b/previewer/include/wm_common.h @@ -803,7 +803,8 @@ struct TitleButtonRect { * @brief Layout info for all windows on the screen. */ struct WindowLayoutInfo : public Parcelable { - Rect rect = { 0, 0, 0, 0 }; + static inline constexpr Rect EMPTY_RECT = { 0, 0, 0, 0 }; + Rect rect = EMPTY_RECT; virtual bool Marshalling(Parcel& parcel) const override { return parcel.WriteInt32(rect.posX_) && parcel.WriteInt32(rect.posY_) && diff --git a/previewer/mock/window_manager_napi/js_window_manager.cpp b/previewer/mock/window_manager_napi/js_window_manager.cpp index 43386a9c0a..d2d4c1ec0a 100644 --- a/previewer/mock/window_manager_napi/js_window_manager.cpp +++ b/previewer/mock/window_manager_napi/js_window_manager.cpp @@ -106,7 +106,7 @@ napi_value JsWindowManager::ToggleShownStateForAllAppWindows(napi_env env, napi_ napi_value JsWindowManager::GetAllWindowLayoutInfo(napi_env env, napi_callback_info info) { - WLOGI("mock: GetAllWindowLayoutInfo"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "mock: GetAllWindowLayoutInfo"); return nullptr; } diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index f60320b359..2b8f830aba 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -749,11 +749,11 @@ private: bool GetSpecifiedDrawingData(uint64_t surfaceId, int32_t& pid, int32_t& uid); void RemoveSpecifiedDrawingData(uint64_t surfaceId); WMError FilterForGetAllWindowLayoutInfo(DisplayId displayId, bool isVirtualDisplay, - std::vector>> processingSessions); - bool IsWindowLayoutInfoNeeded(sptr session); - bool IsOnVirtualDisplay(sptr session); - bool IsVirtualDisplayShow(sptr session); - WMError TransGlobalRectToVirtualDisplayRect(WSRect hostRect); + std::vector>>& processingSessions); + bool IsWindowLayoutInfoNeeded(const sptr& session); + bool IsOnVirtualDisplay(const sptr& session); + bool IsVirtualDisplayShow(const sptr& session); + WMError TransGlobalRectToVirtualDisplayRect(WSRect& hostRect); /* * Window Rotate Animation @@ -1153,7 +1153,6 @@ private: std::unordered_map lastDrawingSessionInfoMap_; static constexpr uint64_t DEFAULT_DISPLAY_ID = 0; static constexpr uint64_t VIRTUAL_DISPLAY_ID = 999; - std::unordered_set layoutInfoWhitelist = { "SCBSmartDock" }; /* * Move Drag diff --git a/window_scene/session_manager/include/zidl/scene_session_manager_interface.h b/window_scene/session_manager/include/zidl/scene_session_manager_interface.h index c6180d117c..648235e777 100644 --- a/window_scene/session_manager/include/zidl/scene_session_manager_interface.h +++ b/window_scene/session_manager/include/zidl/scene_session_manager_interface.h @@ -224,9 +224,7 @@ public: return WMError::WM_OK; } WMError GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) override - { - return WMError::WM_OK; - } + { return WMError::WM_OK; } WMError GetVisibilityWindowInfo(std::vector>& infos) override { return WMError::WM_OK; } WMError SetWindowAnimationController(const sptr& controller) override { diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index acb6484e67..1e45c17205 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -142,6 +142,11 @@ const std::map STRING_TO_DISP {"follow_desktop", OHOS::AppExecFwk::DisplayOrientation::FOLLOW_DESKTOP}, }; +const std::unordered_set layoutInfoWhitelist = { + "SCBSmartDock", + "SCBExtScreenDock" +}; + const std::chrono::milliseconds WAIT_TIME(10 * 1000); // 10 * 1000 wait for 10s std::string GetCurrentTime() @@ -10507,16 +10512,16 @@ WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId inputDisplayId, displayId = DEFAULT_DISPLAY_ID; isVirtualDisplay = true; } - std::vector>> FiltedSessions; - FilterForGetAllWindowLayoutInfo(displayId, isVirtualDisplay, FiltedSessions); - for (auto& iter : FiltedSessions) { + std::vector>> filtedSessions; + FilterForGetAllWindowLayoutInfo(displayId, isVirtualDisplay, filtedSessions); + for (auto& session : filtedSessions) { auto session = iter.second; Rect globalRect; sptr windowLayoutInfo; session->GetGlobalScaledRect(globalRect); WSRect hostRect = { globalRect.posX_, globalRect.posY_, globalRect.width_, globalRect.height_ }; hostRect = session->GetSessionRect(); - if(isVirtualDisplay) { + if (isVirtualDisplay) { TransGlobalRectToVirtualDisplayRect(hostRect); } windowLayoutInfo->rect = { hostRect.posX_, hostRect.posY_, @@ -10529,32 +10534,37 @@ WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId inputDisplayId, } WMError SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId, bool isVirtualDisplay, - std::vector>> FiltedSessions) + std::vector>>& filtedSessions) { - for (auto& iter : sceneSessionMap_) { - auto session = iter.second; - bool isNotVirtualDisplayNeed = isVirtualDisplay && !IsVirtualDisplayShow(session) && + { + std::shared_lock lock(sceneSessionMapMutex_); + for (auto& iter : sceneSessionMap_) { + auto session = iter.second; + if (session == nullptr) { + continue; + } + bool isNotVirtualDisplayNeed = isVirtualDisplay && !IsVirtualDisplayShow(session) && session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; - bool isNotDefaultDisplayNeed = !isVirtualDisplay && displayId == DEFAULT_DISPLAY_ID && - IsOnVirtualDisplay(session) && session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; - if (session == nullptr || !IsWindowLayoutInfoNeeded(session) || - session->GetSessionProperty()->GetDisplayId() != displayId || - isNotVirtualDisplayNeed ||isNotDefaultDisplayNeed || - session->GetVisibilityState() == WINDOW_VISIBILITY_STATE_TOTALLY_OCCUSION) { - continue; + bool isNotDefaultDisplayNeed = !isVirtualDisplay && displayId == DEFAULT_DISPLAY_ID && + IsOnVirtualDisplay(session) && session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; + if (isNotVirtualDisplayNeed || isNotDefaultDisplayNeed || !IsWindowLayoutInfoNeeded(session) || + session->GetVisibilityState() == WINDOW_VISIBILITY_STATE_TOTALLY_OCCUSION || + session->GetSessionProperty()->GetDisplayId() != displayId) { + continue; + } + filtedSessions.emplace_back(iter); } - FiltedSessions.emplace_back(iter); } CmpFunc cmp = [](std::pair>& lhs, std::pair>& rhs) { uint32_t lhsZOrder = lhs.second != nullptr ? lhs.second->GetZOrder() : 0; uint32_t rhsZOrder = rhs.second != nullptr ? rhs.second->GetZOrder() : 0; return lhsZOrder > rhsZOrder; }; - std::sort(FiltedSessions.begin(), FiltedSessions.end(), cmp); + std::sort(filtedSessions.begin(), filtedSessions.end(), cmp); return WMError::WM_OK; } -bool SceneSessionManager::IsWindowLayoutInfoNeeded(sptr session) +bool SceneSessionManager::IsWindowLayoutInfoNeeded(const sptr& session) { std::string name = session->GetWindowName(); int32_t checker = name.length() - 1; @@ -10562,41 +10572,32 @@ bool SceneSessionManager::IsWindowLayoutInfoNeeded(sptr session) name.erase(name.end() - 1); checker--; } - if (session->GetSessionInfo().isSystem_ || layoutInfoWhitelist.find(name) != layoutInfoWhitelist.end()) { - return true; - } - return false; + return session->GetSessionInfo().isSystem_ || layoutInfoWhitelist.find(name) != layoutInfoWhitelist.end(); } -bool SceneSessionManager::IsOnVirtualDisplay(sptr session) +bool SceneSessionManager::IsOnVirtualDisplay(const sptr& session) { const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = PcFoldScreenManager::GetInstance().GetDisplayRects(); constexpr int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; int32_t lowerScreenPosY = defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_; - if (PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED && - session->GetSessionRect().posY_ >= lowerScreenPosY) { - return true; - } - return false; + return PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED && + session->GetSessionRect().posY_ >= lowerScreenPosY; } -bool SceneSessionManager::IsVirtualDisplayShow(sptr session) +bool SceneSessionManager::IsVirtualDisplayShow(const sptr& session) { const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = PcFoldScreenManager::GetInstance().GetDisplayRects(); constexpr int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; int32_t lowerScreenPosY = defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_; - if (PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED && - session->GetSessionRect().posY_ + session->GetSessionRect().height_ >= lowerScreenPosY) { - return true; - } - return false; + return PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED && + session->GetSessionRect().posY_ + session->GetSessionRect().height_ >= lowerScreenPosY; } -WMError SceneSessionManager::TransGlobalRectToVirtualDisplayRect(WSRect hostRect) +WMError SceneSessionManager::TransGlobalRectToVirtualDisplayRect(WSRect& hostRect) { constexpr int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = diff --git a/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp b/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp index ce0829ccee..4abeae43eb 100644 --- a/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp +++ b/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp @@ -1779,7 +1779,7 @@ WMError SceneSessionManagerProxy::GetAllWindowLayoutInfo(DisplayId displayId, MessageParcel reply; MessageOption option; if (!data.WriteInterfaceToken(GetDescriptor())) { - TLOGE(WmsLogTag::WMS_ATTRIBUTE, "GetWindowLayoutInfo Write interfaceToken failed"); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Write interfaceToken failed"); return WMError::WM_ERROR_IPC_FAILED; } if (!data.WriteUint64(displayId)) { diff --git a/wm/src/window_manager.cpp b/wm/src/window_manager.cpp index 581d026855..c7008b6cc9 100644 --- a/wm/src/window_manager.cpp +++ b/wm/src/window_manager.cpp @@ -1123,7 +1123,7 @@ WMError WindowManager::GetAllWindowLayoutInfo(DisplayId displayId, std::vector().GetAllWindowLayoutInfo(displayId, infos); if (ret != WMError::WM_OK) { - WLOGFE("get window layout info failed"); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "get window layout info failed"); } return ret; } diff --git a/wmserver/include/zidl/window_manager_interface.h b/wmserver/include/zidl/window_manager_interface.h index d431fa3434..75d7e28b70 100644 --- a/wmserver/include/zidl/window_manager_interface.h +++ b/wmserver/include/zidl/window_manager_interface.h @@ -119,9 +119,7 @@ public: virtual WMError GetAccessibilityWindowInfo(std::vector>& infos) = 0; virtual WMError GetUnreliableWindowInfo(int32_t windowId, std::vector>& infos) = 0; virtual WMError GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) - { - return WMError::WM_ERROR_DEVICE_NOT_SUPPORT; - } + { return WMError::WM_ERROR_DEVICE_NOT_SUPPORT; } virtual WMError GetVisibilityWindowInfo(std::vector>& infos) = 0; virtual WMError SetWindowAnimationController(const sptr& controller) = 0; virtual WMError GetSystemConfig(SystemConfig& systemConfig) = 0; -- Gitee From be4a3df56197db210723eed49bcf03fbf82d9288 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sun, 29 Dec 2024 23:16:34 +0800 Subject: [PATCH 37/64] change35 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../session_manager/src/scene_session_manager.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 1e45c17205..a69d62aba8 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10580,8 +10580,8 @@ bool SceneSessionManager::IsOnVirtualDisplay(const sptr& session) const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = PcFoldScreenManager::GetInstance().GetDisplayRects(); constexpr int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; - int32_t lowerScreenPosY = - defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_; + int32_t lowerScreenPosY = foldCreaseRect.height_ != 0 ? + defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_ : 0; return PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED && session->GetSessionRect().posY_ >= lowerScreenPosY; } @@ -10591,19 +10591,19 @@ bool SceneSessionManager::IsVirtualDisplayShow(const sptr& session const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = PcFoldScreenManager::GetInstance().GetDisplayRects(); constexpr int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; - int32_t lowerScreenPosY = - defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_; + int32_t lowerScreenPosY = foldCreaseRect.height_ != 0 ? + defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_ : 0; return PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED && session->GetSessionRect().posY_ + session->GetSessionRect().height_ >= lowerScreenPosY; } WMError SceneSessionManager::TransGlobalRectToVirtualDisplayRect(WSRect& hostRect) { - constexpr int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = PcFoldScreenManager::GetInstance().GetDisplayRects(); - int32_t lowerScreenPosY = - defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_; + constexpr int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; + int32_t lowerScreenPosY = foldCreaseRect.height_ != 0 ? + defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_ : 0; hostRect.posY_ -= lowerScreenPosY; return WMError::WM_OK; } -- Gitee From 6c87a3c8c71f4584b3f61833ec8697c0ea64912d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Sun, 29 Dec 2024 23:25:49 +0800 Subject: [PATCH 38/64] change36 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../include/scene_session_manager.h | 3 ++- .../src/scene_session_manager.cpp | 22 +++++++++---------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index 2b8f830aba..e418a3eb71 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -114,6 +114,7 @@ using WindowChangedFunc = std::function& session)>; using CmpFunc = std::function>& lhs, std::pair>& rhs)>; +using WindowLayoutInfoCmpFunc = std::function& lhs, sptr& rhs)>; using ProcessStartUIAbilityErrorFunc = std::function; using NotifySCBAfterUpdateFocusFunc = std::function; using ProcessCallingSessionIdChangeFunc = std::function; @@ -749,7 +750,7 @@ private: bool GetSpecifiedDrawingData(uint64_t surfaceId, int32_t& pid, int32_t& uid); void RemoveSpecifiedDrawingData(uint64_t surfaceId); WMError FilterForGetAllWindowLayoutInfo(DisplayId displayId, bool isVirtualDisplay, - std::vector>>& processingSessions); + std::vector>& filtedSessions); bool IsWindowLayoutInfoNeeded(const sptr& session); bool IsOnVirtualDisplay(const sptr& session); bool IsVirtualDisplayShow(const sptr& session); diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index a69d62aba8..b4bbd254df 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10512,10 +10512,9 @@ WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId inputDisplayId, displayId = DEFAULT_DISPLAY_ID; isVirtualDisplay = true; } - std::vector>> filtedSessions; + std::vector> filtedSessions; FilterForGetAllWindowLayoutInfo(displayId, isVirtualDisplay, filtedSessions); for (auto& session : filtedSessions) { - auto session = iter.second; Rect globalRect; sptr windowLayoutInfo; session->GetGlobalScaledRect(globalRect); @@ -10534,7 +10533,7 @@ WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId inputDisplayId, } WMError SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId, bool isVirtualDisplay, - std::vector>>& filtedSessions) + std::vector>& filtedSessions) { { std::shared_lock lock(sceneSessionMapMutex_); @@ -10552,13 +10551,11 @@ WMError SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId session->GetSessionProperty()->GetDisplayId() != displayId) { continue; } - filtedSessions.emplace_back(iter); + filtedSessions.emplace_back(session); } } - CmpFunc cmp = [](std::pair>& lhs, std::pair>& rhs) { - uint32_t lhsZOrder = lhs.second != nullptr ? lhs.second->GetZOrder() : 0; - uint32_t rhsZOrder = rhs.second != nullptr ? rhs.second->GetZOrder() : 0; - return lhsZOrder > rhsZOrder; + WindowLayoutInfoCmpFunc cmp = [](sptr& lhs, sptr& rhs) { + return lhs->GetZOrder() > rhs->GetZOrder(); }; std::sort(filtedSessions.begin(), filtedSessions.end(), cmp); return WMError::WM_OK; @@ -10581,7 +10578,8 @@ bool SceneSessionManager::IsOnVirtualDisplay(const sptr& session) PcFoldScreenManager::GetInstance().GetDisplayRects(); constexpr int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; int32_t lowerScreenPosY = foldCreaseRect.height_ != 0 ? - defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_ : 0; + defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_ : + defaultDisplayRect.height_; return PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED && session->GetSessionRect().posY_ >= lowerScreenPosY; } @@ -10592,7 +10590,8 @@ bool SceneSessionManager::IsVirtualDisplayShow(const sptr& session PcFoldScreenManager::GetInstance().GetDisplayRects(); constexpr int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; int32_t lowerScreenPosY = foldCreaseRect.height_ != 0 ? - defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_ : 0; + defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_ : + defaultDisplayRect.height_; return PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED && session->GetSessionRect().posY_ + session->GetSessionRect().height_ >= lowerScreenPosY; } @@ -10603,7 +10602,8 @@ WMError SceneSessionManager::TransGlobalRectToVirtualDisplayRect(WSRect& hostRec PcFoldScreenManager::GetInstance().GetDisplayRects(); constexpr int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; int32_t lowerScreenPosY = foldCreaseRect.height_ != 0 ? - defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_ : 0; + defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_ : + defaultDisplayRect.height_; hostRect.posY_ -= lowerScreenPosY; return WMError::WM_OK; } -- Gitee From f0f9505a79fa986717dbcd5b7a0546600e8f38c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Mon, 30 Dec 2024 02:25:38 +0800 Subject: [PATCH 39/64] change37 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../session_manager/src/scene_session_manager.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index b4bbd254df..9169c9467f 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10563,12 +10563,11 @@ WMError SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId bool SceneSessionManager::IsWindowLayoutInfoNeeded(const sptr& session) { + constexpr int32_t GROUP_ONE = 1; std::string name = session->GetWindowName(); - int32_t checker = name.length() - 1; - while(checker != -1 && isdigit(name[checker])) { - name.erase(name.end() - 1); - checker--; - } + std::regex pattern("^(.*?)(\\d+)$"); + std::smatch matches; + name = std::regex_search(name, matches, pattern) ? matches[GROUP_ONE] : name; return session->GetSessionInfo().isSystem_ || layoutInfoWhitelist.find(name) != layoutInfoWhitelist.end(); } -- Gitee From 7072b1144e7a2ff8bc95e5884adc80d470c029b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Mon, 30 Dec 2024 11:13:18 +0800 Subject: [PATCH 40/64] change41 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- interfaces/innerkits/wm/wm_common.h | 3 ++- previewer/include/wm_common.h | 3 ++- window_scene/session_manager/src/scene_session_manager.cpp | 5 ++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/interfaces/innerkits/wm/wm_common.h b/interfaces/innerkits/wm/wm_common.h index a8f3ac4559..7d28807b4d 100644 --- a/interfaces/innerkits/wm/wm_common.h +++ b/interfaces/innerkits/wm/wm_common.h @@ -1196,7 +1196,8 @@ struct TitleButtonRect { */ struct WindowLayoutInfo : public Parcelable { Rect rect = { 0, 0, 0, 0 }; - virtual bool Marshalling(Parcel& parcel) const override + + bool Marshalling(Parcel& parcel) const override { return parcel.WriteInt32(rect.posX_) && parcel.WriteInt32(rect.posY_) && parcel.WriteUint32(rect.width_) && parcel.WriteUint32(rect.height_); diff --git a/previewer/include/wm_common.h b/previewer/include/wm_common.h index 4f9f19f97e..8a743ad4a9 100644 --- a/previewer/include/wm_common.h +++ b/previewer/include/wm_common.h @@ -805,7 +805,8 @@ struct TitleButtonRect { struct WindowLayoutInfo : public Parcelable { static inline constexpr Rect EMPTY_RECT = { 0, 0, 0, 0 }; Rect rect = EMPTY_RECT; - virtual bool Marshalling(Parcel& parcel) const override + + bool Marshalling(Parcel& parcel) const override { return parcel.WriteInt32(rect.posX_) && parcel.WriteInt32(rect.posY_) && parcel.WriteUint32(rect.width_) && parcel.WriteUint32(rect.height_); diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 9169c9467f..d252d2e1a1 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10516,13 +10516,12 @@ WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId inputDisplayId, FilterForGetAllWindowLayoutInfo(displayId, isVirtualDisplay, filtedSessions); for (auto& session : filtedSessions) { Rect globalRect; - sptr windowLayoutInfo; session->GetGlobalScaledRect(globalRect); WSRect hostRect = { globalRect.posX_, globalRect.posY_, globalRect.width_, globalRect.height_ }; - hostRect = session->GetSessionRect(); if (isVirtualDisplay) { TransGlobalRectToVirtualDisplayRect(hostRect); } + auto windowLayoutInfo = sptr::MakeSptr(); windowLayoutInfo->rect = { hostRect.posX_, hostRect.posY_, static_cast(hostRect.width_), static_cast(hostRect.height_) }; infos.emplace_back(windowLayoutInfo); @@ -10554,7 +10553,7 @@ WMError SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId filtedSessions.emplace_back(session); } } - WindowLayoutInfoCmpFunc cmp = [](sptr& lhs, sptr& rhs) { + WindowLayoutInfoCmpFunc cmp = [](const sptr& lhs, const sptr& rhs) { return lhs->GetZOrder() > rhs->GetZOrder(); }; std::sort(filtedSessions.begin(), filtedSessions.end(), cmp); -- Gitee From aeae229abe78faebe41448d6a19ae5e5f4c27d09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Mon, 30 Dec 2024 12:32:23 +0800 Subject: [PATCH 41/64] change42 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- window_scene/session_manager/src/scene_session_manager.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index d252d2e1a1..77cc45e12b 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10541,9 +10541,9 @@ WMError SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId if (session == nullptr) { continue; } - bool isNotVirtualDisplayNeed = isVirtualDisplay && !IsVirtualDisplayShow(session) && + constexpr bool isNotVirtualDisplayNeed = isVirtualDisplay && !IsVirtualDisplayShow(session) && session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; - bool isNotDefaultDisplayNeed = !isVirtualDisplay && displayId == DEFAULT_DISPLAY_ID && + constexpr bool isNotDefaultDisplayNeed = !isVirtualDisplay && displayId == DEFAULT_DISPLAY_ID && IsOnVirtualDisplay(session) && session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; if (isNotVirtualDisplayNeed || isNotDefaultDisplayNeed || !IsWindowLayoutInfoNeeded(session) || session->GetVisibilityState() == WINDOW_VISIBILITY_STATE_TOTALLY_OCCUSION || @@ -10567,7 +10567,7 @@ bool SceneSessionManager::IsWindowLayoutInfoNeeded(const sptr& ses std::regex pattern("^(.*?)(\\d+)$"); std::smatch matches; name = std::regex_search(name, matches, pattern) ? matches[GROUP_ONE] : name; - return session->GetSessionInfo().isSystem_ || layoutInfoWhitelist.find(name) != layoutInfoWhitelist.end(); + return !session->GetSessionInfo().isSystem_ || layoutInfoWhitelist.find(name) != layoutInfoWhitelist.end(); } bool SceneSessionManager::IsOnVirtualDisplay(const sptr& session) -- Gitee From fc895af0299fd3c0a4deb99e08750f61718c04b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Mon, 30 Dec 2024 13:03:08 +0800 Subject: [PATCH 42/64] change42 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- window_scene/session_manager/src/scene_session_manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 77cc45e12b..8a23c8fb40 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10541,9 +10541,9 @@ WMError SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId if (session == nullptr) { continue; } - constexpr bool isNotVirtualDisplayNeed = isVirtualDisplay && !IsVirtualDisplayShow(session) && + const bool isNotVirtualDisplayNeed = isVirtualDisplay && !IsVirtualDisplayShow(session) && session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; - constexpr bool isNotDefaultDisplayNeed = !isVirtualDisplay && displayId == DEFAULT_DISPLAY_ID && + const bool isNotDefaultDisplayNeed = !isVirtualDisplay && displayId == DEFAULT_DISPLAY_ID && IsOnVirtualDisplay(session) && session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; if (isNotVirtualDisplayNeed || isNotDefaultDisplayNeed || !IsWindowLayoutInfoNeeded(session) || session->GetVisibilityState() == WINDOW_VISIBILITY_STATE_TOTALLY_OCCUSION || -- Gitee From 795356da137b698f45a83c0b0da59211e7bbdd65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Mon, 30 Dec 2024 13:04:02 +0800 Subject: [PATCH 43/64] change43 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- window_scene/session_manager/src/scene_session_manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 8a23c8fb40..087d44813b 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10541,9 +10541,9 @@ WMError SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId if (session == nullptr) { continue; } - const bool isNotVirtualDisplayNeed = isVirtualDisplay && !IsVirtualDisplayShow(session) && + bool isNotVirtualDisplayNeed = isVirtualDisplay && !IsVirtualDisplayShow(session) && session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; - const bool isNotDefaultDisplayNeed = !isVirtualDisplay && displayId == DEFAULT_DISPLAY_ID && + bool isNotDefaultDisplayNeed = !isVirtualDisplay && displayId == DEFAULT_DISPLAY_ID && IsOnVirtualDisplay(session) && session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; if (isNotVirtualDisplayNeed || isNotDefaultDisplayNeed || !IsWindowLayoutInfoNeeded(session) || session->GetVisibilityState() == WINDOW_VISIBILITY_STATE_TOTALLY_OCCUSION || -- Gitee From 50760516b6790b09de0b6e2ef0dfbe0c85b3d983 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Mon, 30 Dec 2024 15:44:50 +0800 Subject: [PATCH 44/64] change43 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../include/scene_session_manager.h | 5 ++--- .../src/scene_session_manager.cpp | 20 +++++++++---------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index e418a3eb71..d43c1a8cb1 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -114,7 +114,6 @@ using WindowChangedFunc = std::function& session)>; using CmpFunc = std::function>& lhs, std::pair>& rhs)>; -using WindowLayoutInfoCmpFunc = std::function& lhs, sptr& rhs)>; using ProcessStartUIAbilityErrorFunc = std::function; using NotifySCBAfterUpdateFocusFunc = std::function; using ProcessCallingSessionIdChangeFunc = std::function; @@ -749,12 +748,12 @@ private: void UpdateWindowDrawingData(uint64_t surfaceId, int32_t pid, int32_t uid); bool GetSpecifiedDrawingData(uint64_t surfaceId, int32_t& pid, int32_t& uid); void RemoveSpecifiedDrawingData(uint64_t surfaceId); - WMError FilterForGetAllWindowLayoutInfo(DisplayId displayId, bool isVirtualDisplay, + void FilterForGetAllWindowLayoutInfo(DisplayId displayId, bool isVirtualDisplay, std::vector>& filtedSessions); bool IsWindowLayoutInfoNeeded(const sptr& session); bool IsOnVirtualDisplay(const sptr& session); bool IsVirtualDisplayShow(const sptr& session); - WMError TransGlobalRectToVirtualDisplayRect(WSRect& hostRect); + void TransGlobalRectToVirtualDisplayRect(WSRect& hostRect); /* * Window Rotate Animation diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 77cc45e12b..3908d75c85 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10515,9 +10515,8 @@ WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId inputDisplayId, std::vector> filtedSessions; FilterForGetAllWindowLayoutInfo(displayId, isVirtualDisplay, filtedSessions); for (auto& session : filtedSessions) { - Rect globalRect; - session->GetGlobalScaledRect(globalRect); - WSRect hostRect = { globalRect.posX_, globalRect.posY_, globalRect.width_, globalRect.height_ }; + Rect hostRect; + session->GetGlobalScaledRect(hostRect); if (isVirtualDisplay) { TransGlobalRectToVirtualDisplayRect(hostRect); } @@ -10531,13 +10530,12 @@ WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId inputDisplayId, return taskScheduler_->PostSyncTask(task, __func__); } -WMError SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId, bool isVirtualDisplay, +void SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId, bool isVirtualDisplay, std::vector>& filtedSessions) { { std::shared_lock lock(sceneSessionMapMutex_); - for (auto& iter : sceneSessionMap_) { - auto session = iter.second; + for (auto&[_, session] : sceneSessionMap_) { if (session == nullptr) { continue; } @@ -10556,15 +10554,16 @@ WMError SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId WindowLayoutInfoCmpFunc cmp = [](const sptr& lhs, const sptr& rhs) { return lhs->GetZOrder() > rhs->GetZOrder(); }; - std::sort(filtedSessions.begin(), filtedSessions.end(), cmp); - return WMError::WM_OK; + std::sort(filtedSessions.begin(), filtedSessions.end(), + [](const sptr& lhs, const sptr& rhs) + { return lhs->GetZOrder() > rhs->GetZOrder(); }); } bool SceneSessionManager::IsWindowLayoutInfoNeeded(const sptr& session) { constexpr int32_t GROUP_ONE = 1; std::string name = session->GetWindowName(); - std::regex pattern("^(.*?)(\\d+)$"); + std::regex pattern("^(.*?)(\\d*)$"); //Remove last digit std::smatch matches; name = std::regex_search(name, matches, pattern) ? matches[GROUP_ONE] : name; return !session->GetSessionInfo().isSystem_ || layoutInfoWhitelist.find(name) != layoutInfoWhitelist.end(); @@ -10594,7 +10593,7 @@ bool SceneSessionManager::IsVirtualDisplayShow(const sptr& session session->GetSessionRect().posY_ + session->GetSessionRect().height_ >= lowerScreenPosY; } -WMError SceneSessionManager::TransGlobalRectToVirtualDisplayRect(WSRect& hostRect) +void SceneSessionManager::TransGlobalRectToVirtualDisplayRect(Rect& hostRect) { const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = PcFoldScreenManager::GetInstance().GetDisplayRects(); @@ -10603,7 +10602,6 @@ WMError SceneSessionManager::TransGlobalRectToVirtualDisplayRect(WSRect& hostRec defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_ : defaultDisplayRect.height_; hostRect.posY_ -= lowerScreenPosY; - return WMError::WM_OK; } WMError SceneSessionManager::GetVisibilityWindowInfo(std::vector>& infos) -- Gitee From 465c6e41995f2ac09f0128a68d1fc79239f4b89b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Mon, 30 Dec 2024 15:52:08 +0800 Subject: [PATCH 45/64] change45 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- window_scene/session_manager/src/scene_session_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 713f0e7669..5e66d84569 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10535,7 +10535,7 @@ void SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId, b { { std::shared_lock lock(sceneSessionMapMutex_); - for (auto&[_, session] : sceneSessionMap_) { + for (auto& [_, session] : sceneSessionMap_) { if (session == nullptr) { continue; } -- Gitee From 809f0a05af0ea5140b64b88361bb1f7519a9aedc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Mon, 30 Dec 2024 16:50:21 +0800 Subject: [PATCH 46/64] change46 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- window_scene/session_manager/src/scene_session_manager.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 5e66d84569..b3f9f17734 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10561,12 +10561,15 @@ void SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId, b bool SceneSessionManager::IsWindowLayoutInfoNeeded(const sptr& session) { + bool isHideWindow = session->GetSessionRect().width_ == 0 && + session->GetSessionRect().height_ == 0; constexpr int32_t GROUP_ONE = 1; std::string name = session->GetWindowName(); std::regex pattern("^(.*?)(\\d*)$"); //Remove last digit std::smatch matches; name = std::regex_search(name, matches, pattern) ? matches[GROUP_ONE] : name; - return !session->GetSessionInfo().isSystem_ || layoutInfoWhitelist.find(name) != layoutInfoWhitelist.end(); + return !session->GetSessionInfo().isSystem_ || !isHideWindow || + layoutInfoWhitelist.find(name) != layoutInfoWhitelist.end(); } bool SceneSessionManager::IsOnVirtualDisplay(const sptr& session) -- Gitee From 0eb9aa9e5761fe3fadadd3b6f3e76ff7e6ace1d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Mon, 30 Dec 2024 17:00:10 +0800 Subject: [PATCH 47/64] change47 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- window_scene/session_manager/src/scene_session_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index b3f9f17734..ef36dc49a1 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10568,7 +10568,7 @@ bool SceneSessionManager::IsWindowLayoutInfoNeeded(const sptr& ses std::regex pattern("^(.*?)(\\d*)$"); //Remove last digit std::smatch matches; name = std::regex_search(name, matches, pattern) ? matches[GROUP_ONE] : name; - return !session->GetSessionInfo().isSystem_ || !isHideWindow || + return !session->GetSessionInfo().isSystem_ && !isHideWindow || layoutInfoWhitelist.find(name) != layoutInfoWhitelist.end(); } -- Gitee From 62b3f7c47665547ab02eca3c37505097b3b288f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Mon, 30 Dec 2024 17:17:58 +0800 Subject: [PATCH 48/64] change48 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- window_scene/session_manager/src/scene_session_manager.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index ef36dc49a1..5e66d84569 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10561,15 +10561,12 @@ void SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId, b bool SceneSessionManager::IsWindowLayoutInfoNeeded(const sptr& session) { - bool isHideWindow = session->GetSessionRect().width_ == 0 && - session->GetSessionRect().height_ == 0; constexpr int32_t GROUP_ONE = 1; std::string name = session->GetWindowName(); std::regex pattern("^(.*?)(\\d*)$"); //Remove last digit std::smatch matches; name = std::regex_search(name, matches, pattern) ? matches[GROUP_ONE] : name; - return !session->GetSessionInfo().isSystem_ && !isHideWindow || - layoutInfoWhitelist.find(name) != layoutInfoWhitelist.end(); + return !session->GetSessionInfo().isSystem_ || layoutInfoWhitelist.find(name) != layoutInfoWhitelist.end(); } bool SceneSessionManager::IsOnVirtualDisplay(const sptr& session) -- Gitee From 4553627140849b8cb684da47989d0bd2ed902de8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Mon, 30 Dec 2024 17:41:19 +0800 Subject: [PATCH 49/64] change45 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- window_scene/session_manager/include/scene_session_manager.h | 2 +- window_scene/session_manager/src/scene_session_manager.cpp | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index d43c1a8cb1..c030b6759e 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -753,7 +753,7 @@ private: bool IsWindowLayoutInfoNeeded(const sptr& session); bool IsOnVirtualDisplay(const sptr& session); bool IsVirtualDisplayShow(const sptr& session); - void TransGlobalRectToVirtualDisplayRect(WSRect& hostRect); + void TransGlobalRectToVirtualDisplayRect(Rect& hostRect); /* * Window Rotate Animation diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 5e66d84569..d95a4bebd1 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10551,9 +10551,6 @@ void SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId, b filtedSessions.emplace_back(session); } } - WindowLayoutInfoCmpFunc cmp = [](const sptr& lhs, const sptr& rhs) { - return lhs->GetZOrder() > rhs->GetZOrder(); - }; std::sort(filtedSessions.begin(), filtedSessions.end(), [](const sptr& lhs, const sptr& rhs) { return lhs->GetZOrder() > rhs->GetZOrder(); }); -- Gitee From 232e8f5e12b54150d4f9eb83e430b25288fa89d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Mon, 30 Dec 2024 19:27:35 +0800 Subject: [PATCH 50/64] change46 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../include/scene_session_manager.h | 4 +- .../zidl/scene_session_manager_interface.h | 4 +- .../src/scene_session_manager.cpp | 57 +++++++------------ .../include/zidl/window_manager_interface.h | 4 +- 4 files changed, 24 insertions(+), 45 deletions(-) diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index c030b6759e..8c0b722153 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -751,9 +751,7 @@ private: void FilterForGetAllWindowLayoutInfo(DisplayId displayId, bool isVirtualDisplay, std::vector>& filtedSessions); bool IsWindowLayoutInfoNeeded(const sptr& session); - bool IsOnVirtualDisplay(const sptr& session); - bool IsVirtualDisplayShow(const sptr& session); - void TransGlobalRectToVirtualDisplayRect(Rect& hostRect); + int32_t GetLowerScreenPosY(); /* * Window Rotate Animation diff --git a/window_scene/session_manager/include/zidl/scene_session_manager_interface.h b/window_scene/session_manager/include/zidl/scene_session_manager_interface.h index 648235e777..94cf2ab3ce 100644 --- a/window_scene/session_manager/include/zidl/scene_session_manager_interface.h +++ b/window_scene/session_manager/include/zidl/scene_session_manager_interface.h @@ -223,8 +223,8 @@ public: { return WMError::WM_OK; } - WMError GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) override - { return WMError::WM_OK; } + WMError GetAllWindowLayoutInfo(DisplayId displayId, + std::vector>& infos) override { return WMError::WM_OK; } WMError GetVisibilityWindowInfo(std::vector>& infos) override { return WMError::WM_OK; } WMError SetWindowAnimationController(const sptr& controller) override { diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index d95a4bebd1..7f610f72b4 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -142,7 +142,7 @@ const std::map STRING_TO_DISP {"follow_desktop", OHOS::AppExecFwk::DisplayOrientation::FOLLOW_DESKTOP}, }; -const std::unordered_set layoutInfoWhitelist = { +const std::unordered_set LAYOUT_INFO_WHITELIST = { "SCBSmartDock", "SCBExtScreenDock" }; @@ -10518,7 +10518,7 @@ WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId inputDisplayId, Rect hostRect; session->GetGlobalScaledRect(hostRect); if (isVirtualDisplay) { - TransGlobalRectToVirtualDisplayRect(hostRect); + hostRect.posY_ -= GetLowerScreenPosY(); } auto windowLayoutInfo = sptr::MakeSptr(); windowLayoutInfo->rect = { hostRect.posX_, hostRect.posY_, @@ -10539,11 +10539,15 @@ void SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId, b if (session == nullptr) { continue; } - bool isNotVirtualDisplayNeed = isVirtualDisplay && !IsVirtualDisplayShow(session) && + bool IsOnVirtualDisplay = session->GetSessionRect().posY_ >= GetLowerScreenPosY() && + PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED; + bool IsVirtualDisplayShow = session->GetSessionRect().posY_ >= lowerScreenPosY && + PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED; + bool isNotVirtualDisplayNeed = isVirtualDisplay && !IsVirtualDisplayShow && session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; bool isNotDefaultDisplayNeed = !isVirtualDisplay && displayId == DEFAULT_DISPLAY_ID && - IsOnVirtualDisplay(session) && session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; - if (isNotVirtualDisplayNeed || isNotDefaultDisplayNeed || !IsWindowLayoutInfoNeeded(session) || + IsOnVirtualDisplay && session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; + if (isNotVirtualDisplayNeed || isNotDefaultDisplayNeed || !IsWindowLayoutInfoNeeded || session->GetVisibilityState() == WINDOW_VISIBILITY_STATE_TOTALLY_OCCUSION || session->GetSessionProperty()->GetDisplayId() != displayId) { continue; @@ -10551,9 +10555,11 @@ void SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId, b filtedSessions.emplace_back(session); } } - std::sort(filtedSessions.begin(), filtedSessions.end(), - [](const sptr& lhs, const sptr& rhs) - { return lhs->GetZOrder() > rhs->GetZOrder(); }); + std::sort( + filtedSessions.begin(), filtedSessions.end(), + [](const sptr& lhs, const sptr& rhs) { + return lhs->GetZOrder() > rhs->GetZOrder(); + }); } bool SceneSessionManager::IsWindowLayoutInfoNeeded(const sptr& session) @@ -10563,42 +10569,17 @@ bool SceneSessionManager::IsWindowLayoutInfoNeeded(const sptr& ses std::regex pattern("^(.*?)(\\d*)$"); //Remove last digit std::smatch matches; name = std::regex_search(name, matches, pattern) ? matches[GROUP_ONE] : name; - return !session->GetSessionInfo().isSystem_ || layoutInfoWhitelist.find(name) != layoutInfoWhitelist.end(); -} - -bool SceneSessionManager::IsOnVirtualDisplay(const sptr& session) -{ - const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = - PcFoldScreenManager::GetInstance().GetDisplayRects(); - constexpr int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; - int32_t lowerScreenPosY = foldCreaseRect.height_ != 0 ? - defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_ : - defaultDisplayRect.height_; - return PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED && - session->GetSessionRect().posY_ >= lowerScreenPosY; -} - -bool SceneSessionManager::IsVirtualDisplayShow(const sptr& session) -{ - const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = - PcFoldScreenManager::GetInstance().GetDisplayRects(); - constexpr int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; - int32_t lowerScreenPosY = foldCreaseRect.height_ != 0 ? - defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_ : - defaultDisplayRect.height_; - return PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED && - session->GetSessionRect().posY_ + session->GetSessionRect().height_ >= lowerScreenPosY; + return !session->GetSessionInfo().isSystem_ || LAYOUT_INFO_WHITELIST.find(name) != LAYOUT_INFO_WHITELIST.end(); } -void SceneSessionManager::TransGlobalRectToVirtualDisplayRect(Rect& hostRect) +int32_t SceneSessionManager::GetLowerScreenPosY() { const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = PcFoldScreenManager::GetInstance().GetDisplayRects(); constexpr int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; - int32_t lowerScreenPosY = foldCreaseRect.height_ != 0 ? - defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_ : - defaultDisplayRect.height_; - hostRect.posY_ -= lowerScreenPosY; + return foldCreaseRect.height_ != 0 ? + defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_ : + defaultDisplayRect.height_; } WMError SceneSessionManager::GetVisibilityWindowInfo(std::vector>& infos) diff --git a/wmserver/include/zidl/window_manager_interface.h b/wmserver/include/zidl/window_manager_interface.h index 75d7e28b70..7887820d37 100644 --- a/wmserver/include/zidl/window_manager_interface.h +++ b/wmserver/include/zidl/window_manager_interface.h @@ -118,8 +118,8 @@ public: const sptr& windowManagerAgent) = 0; virtual WMError GetAccessibilityWindowInfo(std::vector>& infos) = 0; virtual WMError GetUnreliableWindowInfo(int32_t windowId, std::vector>& infos) = 0; - virtual WMError GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) - { return WMError::WM_ERROR_DEVICE_NOT_SUPPORT; } + virtual WMError GetAllWindowLayoutInfo(DisplayId displayId, + std::vector>& infos) { return WMError::WM_ERROR_DEVICE_NOT_SUPPORT; } virtual WMError GetVisibilityWindowInfo(std::vector>& infos) = 0; virtual WMError SetWindowAnimationController(const sptr& controller) = 0; virtual WMError GetSystemConfig(SystemConfig& systemConfig) = 0; -- Gitee From 529808f8f3839eecb19f29cb9e9bb5fcaa70c61d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Mon, 30 Dec 2024 20:07:22 +0800 Subject: [PATCH 51/64] change47 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../include/scene_session_manager.h | 3 ++ .../src/scene_session_manager.cpp | 35 ++++++++++++------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index 8c0b722153..58788459aa 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -752,6 +752,9 @@ private: std::vector>& filtedSessions); bool IsWindowLayoutInfoNeeded(const sptr& session); int32_t GetLowerScreenPosY(); + bool IsOnVirtualDisplay(const sptr& session); + bool IsVirtualDisplayShow(const sptr& session); + void TransGlobalRectToVirtualDisplayRect(Rect& hostRect); /* * Window Rotate Animation diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 7f610f72b4..ca4cb3af52 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10539,15 +10539,15 @@ void SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId, b if (session == nullptr) { continue; } - bool IsOnVirtualDisplay = session->GetSessionRect().posY_ >= GetLowerScreenPosY() && - PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED; - bool IsVirtualDisplayShow = session->GetSessionRect().posY_ >= lowerScreenPosY && - PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED; + bool IsOnVirtualDisplay = PcFoldScreenManager::GetInstance().IsSuperFoldDisplayDevice() && + session->GetSessionRect().posY_ >= GetLowerScreenPosY(); + bool IsVirtualDisplayShow = PcFoldScreenManager::GetInstance().IsSuperFoldDisplayDevice() && + session->GetSessionRect().posY_ + session->GetSessionRect().height_ >= GetLowerScreenPosY(); bool isNotVirtualDisplayNeed = isVirtualDisplay && !IsVirtualDisplayShow && session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; bool isNotDefaultDisplayNeed = !isVirtualDisplay && displayId == DEFAULT_DISPLAY_ID && IsOnVirtualDisplay && session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; - if (isNotVirtualDisplayNeed || isNotDefaultDisplayNeed || !IsWindowLayoutInfoNeeded || + if (isNotVirtualDisplayNeed || isNotDefaultDisplayNeed || !IsWindowLayoutInfoNeeded(session) || session->GetVisibilityState() == WINDOW_VISIBILITY_STATE_TOTALLY_OCCUSION || session->GetSessionProperty()->GetDisplayId() != displayId) { continue; @@ -10562,6 +10562,15 @@ void SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId, b }); } +int32_t SceneSessionManager::GetLowerScreenPosY() +{ + const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = + PcFoldScreenManager::GetInstance().GetDisplayRects(); + constexpr int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; + return foldCreaseRect.height_ != 0 ? + defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_ : + defaultDisplayRect.height_; +} bool SceneSessionManager::IsWindowLayoutInfoNeeded(const sptr& session) { constexpr int32_t GROUP_ONE = 1; @@ -10572,14 +10581,16 @@ bool SceneSessionManager::IsWindowLayoutInfoNeeded(const sptr& ses return !session->GetSessionInfo().isSystem_ || LAYOUT_INFO_WHITELIST.find(name) != LAYOUT_INFO_WHITELIST.end(); } -int32_t SceneSessionManager::GetLowerScreenPosY() +bool SceneSessionManager::IsOnVirtualDisplay(const sptr& session) { - const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = - PcFoldScreenManager::GetInstance().GetDisplayRects(); - constexpr int32_t SUPER_FOLD_DIVIDE_FACTOR = 2; - return foldCreaseRect.height_ != 0 ? - defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_ : - defaultDisplayRect.height_; + return PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED && + session->GetSessionRect().posY_ >= GetLowerScreenPosY(); +} + +bool SceneSessionManager::IsVirtualDisplayShow(const sptr& session) +{ + return PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED && + session->GetSessionRect().posY_ + session->GetSessionRect().height_ >= GetLowerScreenPosY(); } WMError SceneSessionManager::GetVisibilityWindowInfo(std::vector>& infos) -- Gitee From 6c5b2263008f074ba3f0c52697ad21d8e0b2881c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Mon, 30 Dec 2024 20:10:02 +0800 Subject: [PATCH 52/64] change48 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../session_manager/src/scene_session_manager.cpp | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index ca4cb3af52..92585fc084 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10581,18 +10581,6 @@ bool SceneSessionManager::IsWindowLayoutInfoNeeded(const sptr& ses return !session->GetSessionInfo().isSystem_ || LAYOUT_INFO_WHITELIST.find(name) != LAYOUT_INFO_WHITELIST.end(); } -bool SceneSessionManager::IsOnVirtualDisplay(const sptr& session) -{ - return PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED && - session->GetSessionRect().posY_ >= GetLowerScreenPosY(); -} - -bool SceneSessionManager::IsVirtualDisplayShow(const sptr& session) -{ - return PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED && - session->GetSessionRect().posY_ + session->GetSessionRect().height_ >= GetLowerScreenPosY(); -} - WMError SceneSessionManager::GetVisibilityWindowInfo(std::vector>& infos) { if (!SessionPermission::IsSystemCalling()) { -- Gitee From c82d95131a8000891eb6fc2ba9fa297ffbed899b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Mon, 30 Dec 2024 20:14:41 +0800 Subject: [PATCH 53/64] change49 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- window_scene/session_manager/include/scene_session_manager.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index 58788459aa..8c0b722153 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -752,9 +752,6 @@ private: std::vector>& filtedSessions); bool IsWindowLayoutInfoNeeded(const sptr& session); int32_t GetLowerScreenPosY(); - bool IsOnVirtualDisplay(const sptr& session); - bool IsVirtualDisplayShow(const sptr& session); - void TransGlobalRectToVirtualDisplayRect(Rect& hostRect); /* * Window Rotate Animation -- Gitee From 099ed4241954c9f7ad78aa675c24f05c43657f3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Mon, 30 Dec 2024 20:37:49 +0800 Subject: [PATCH 54/64] change50 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- window_scene/session_manager/src/scene_session_manager.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 92585fc084..9a1b7155fe 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -64,6 +64,7 @@ #include "anomaly_detection.h" #include "session/host/include/ability_info_manager.h" #include "session/host/include/multi_instance_manager.h" +#include "commom/include/fold_screen_state_internel.h" #include "hidump_controller.h" @@ -10539,9 +10540,9 @@ void SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId, b if (session == nullptr) { continue; } - bool IsOnVirtualDisplay = PcFoldScreenManager::GetInstance().IsSuperFoldDisplayDevice() && + bool IsOnVirtualDisplay = FoldScreenStateInternel::IsSuperFoldDisplayDevice() && session->GetSessionRect().posY_ >= GetLowerScreenPosY(); - bool IsVirtualDisplayShow = PcFoldScreenManager::GetInstance().IsSuperFoldDisplayDevice() && + bool IsVirtualDisplayShow = FoldScreenStateInternel::IsSuperFoldDisplayDevice() && session->GetSessionRect().posY_ + session->GetSessionRect().height_ >= GetLowerScreenPosY(); bool isNotVirtualDisplayNeed = isVirtualDisplay && !IsVirtualDisplayShow && session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; -- Gitee From 938ab7a79a36378187f2dd89fbcecf4280fef915 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Mon, 30 Dec 2024 21:12:00 +0800 Subject: [PATCH 55/64] change51 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- window_scene/session_manager/src/scene_session_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 9a1b7155fe..e8ff840d10 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -64,7 +64,7 @@ #include "anomaly_detection.h" #include "session/host/include/ability_info_manager.h" #include "session/host/include/multi_instance_manager.h" -#include "commom/include/fold_screen_state_internel.h" +#include "common/include/fold_screen_state_internel.h" #include "hidump_controller.h" -- Gitee From e6dee0a2a1ba05851a39f12612c5eae9c8d5b6c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Mon, 30 Dec 2024 23:56:14 +0800 Subject: [PATCH 56/64] change55 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../src/zidl/scene_session_manager_proxy.cpp | 6 +++++- .../session_manager/src/zidl/scene_session_manager_stub.cpp | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp b/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp index 4abeae43eb..76ea624bc7 100644 --- a/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp +++ b/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp @@ -1799,7 +1799,11 @@ WMError SceneSessionManagerProxy::GetAllWindowLayoutInfo(DisplayId displayId, TLOGE(WmsLogTag::WMS_ATTRIBUTE, "read window layout info failed"); return WMError::WM_ERROR_IPC_FAILED; } - return static_cast(reply.ReadInt32()); + int32_t ret = 0; + if (!reply.ReadInt32(ret)) { + return WMError::WM_ERROR_IPC_FAILED; + } + return static_cast(ret); } WMError SceneSessionManagerProxy::GetVisibilityWindowInfo(std::vector>& infos) diff --git a/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp b/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp index 7946a2788b..456a8a14fd 100644 --- a/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp +++ b/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp @@ -1111,7 +1111,10 @@ int SceneSessionManagerStub::HandleGetAllWindowLayoutInfo(MessageParcel& data, M TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Failed to Write window layout info"); return ERR_INVALID_DATA; } - reply.WriteInt32(static_cast(errCode)); + if (!reply.WriteInt32(static_cast(errCode))) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Write errCode fail."); + return ERR_INVALID_DATA; + } return ERR_NONE; } -- Gitee From ee63bcb3a20b09ee7932efa43da77abe0654be8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Tue, 31 Dec 2024 00:02:59 +0800 Subject: [PATCH 57/64] change56 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../session_manager/include/scene_session_manager.h | 4 ++-- .../session_manager/src/scene_session_manager.cpp | 11 ++++------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index 8c0b722153..c5871c4e61 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -750,8 +750,8 @@ private: void RemoveSpecifiedDrawingData(uint64_t surfaceId); void FilterForGetAllWindowLayoutInfo(DisplayId displayId, bool isVirtualDisplay, std::vector>& filtedSessions); - bool IsWindowLayoutInfoNeeded(const sptr& session); - int32_t GetLowerScreenPosY(); + bool IsWindowLayoutInfoNeeded(const sptr& session) const; + int32_t GetLowerScreenPosY() const; /* * Window Rotate Animation diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index e8ff840d10..5237a66e55 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10556,14 +10556,11 @@ void SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId, b filtedSessions.emplace_back(session); } } - std::sort( - filtedSessions.begin(), filtedSessions.end(), - [](const sptr& lhs, const sptr& rhs) { - return lhs->GetZOrder() > rhs->GetZOrder(); - }); + std::sort(filtedSessions.begin(), filtedSessions.end(), [](const sptr& lhs, + const sptr& rhs) { return lhs->GetZOrder() > rhs->GetZOrder(); }); } -int32_t SceneSessionManager::GetLowerScreenPosY() +int32_t SceneSessionManager::GetLowerScreenPosY() const { const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = PcFoldScreenManager::GetInstance().GetDisplayRects(); @@ -10572,7 +10569,7 @@ int32_t SceneSessionManager::GetLowerScreenPosY() defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_ : defaultDisplayRect.height_; } -bool SceneSessionManager::IsWindowLayoutInfoNeeded(const sptr& session) +bool SceneSessionManager::IsWindowLayoutInfoNeeded(const sptr& session) const { constexpr int32_t GROUP_ONE = 1; std::string name = session->GetWindowName(); -- Gitee From 54b28683c5182407dacf7767354747e2dcbf0036 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Tue, 31 Dec 2024 01:13:22 +0800 Subject: [PATCH 58/64] change57 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- window_scene/session_manager/src/scene_session_manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 5237a66e55..fe90c851ee 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10556,8 +10556,8 @@ void SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId, b filtedSessions.emplace_back(session); } } - std::sort(filtedSessions.begin(), filtedSessions.end(), [](const sptr& lhs, - const sptr& rhs) { return lhs->GetZOrder() > rhs->GetZOrder(); }); + std::sort(filtedSessions.begin(), filtedSessions.end(), + [](const sptr& ls, const sptr& rs) { return ls->GetZOrder() > rs->GetZOrder(); }); } int32_t SceneSessionManager::GetLowerScreenPosY() const -- Gitee From 2081c91f3e000cef2de6ff5e83643282ff263578 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Tue, 31 Dec 2024 09:18:25 +0800 Subject: [PATCH 59/64] change59 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../src/zidl/scene_session_manager_proxy.cpp | 7 ++++--- .../src/zidl/scene_session_manager_stub.cpp | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp b/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp index 76ea624bc7..d72597fbe9 100644 --- a/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp +++ b/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp @@ -1799,11 +1799,12 @@ WMError SceneSessionManagerProxy::GetAllWindowLayoutInfo(DisplayId displayId, TLOGE(WmsLogTag::WMS_ATTRIBUTE, "read window layout info failed"); return WMError::WM_ERROR_IPC_FAILED; } - int32_t ret = 0; - if (!reply.ReadInt32(ret)) { + int32_t errCode = 0; + if (!reply.ReadInt32(errCode)) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "read errcode failed"); return WMError::WM_ERROR_IPC_FAILED; } - return static_cast(ret); + return static_cast(errCode); } WMError SceneSessionManagerProxy::GetVisibilityWindowInfo(std::vector>& infos) diff --git a/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp b/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp index 456a8a14fd..46fc3abd36 100644 --- a/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp +++ b/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp @@ -1112,7 +1112,7 @@ int SceneSessionManagerStub::HandleGetAllWindowLayoutInfo(MessageParcel& data, M return ERR_INVALID_DATA; } if (!reply.WriteInt32(static_cast(errCode))) { - TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Write errCode fail."); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Write errCode fail"); return ERR_INVALID_DATA; } return ERR_NONE; -- Gitee From c2317cf437db400b01e612cf6b5c3a30ec1d7040 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Tue, 31 Dec 2024 12:36:48 +0800 Subject: [PATCH 60/64] change57 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../window_manager_napi/js_window_manager.cpp | 5 +- previewer/include/wm_common.h | 3 +- .../window_manager_napi/js_window_manager.cpp | 2 +- .../include/scene_session_manager.h | 8 ++-- .../src/scene_session_manager.cpp | 47 ++++++++++--------- .../src/zidl/scene_session_manager_stub.cpp | 2 +- wm/src/window_manager.cpp | 2 +- 7 files changed, 35 insertions(+), 34 deletions(-) diff --git a/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp b/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp index 551d72b49f..aad91e2bbf 100644 --- a/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp +++ b/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp @@ -1191,6 +1191,7 @@ napi_value JsWindowManager::OnShiftAppWindowFocus(napi_env env, napi_callback_in napi_value JsWindowManager::OnGetAllWindowLayoutInfo(napi_env env, napi_callback_info info) { + const char* const where = __func__; size_t argc = ARGC_FOUR; napi_value argv[ARGC_FOUR] = { nullptr }; napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr); @@ -1216,10 +1217,10 @@ napi_value JsWindowManager::OnGetAllWindowLayoutInfo(napi_env env, napi_callback SingletonContainer::Get().GetAllWindowLayoutInfo(static_cast(displayId), infos)); if (ret == WmErrorCode::WM_OK) { task->Resolve(env, CreateJsWindowLayoutInfoArrayObject(env, infos)); - TLOGNE(WmsLogTag::WMS_ATTRIBUTE, "success"); + TLOGNE(WmsLogTag::WMS_ATTRIBUTE, "%{public}s success", where); } else { task->Reject(env, JsErrUtils::CreateJsError(env, ret, "failed")); - TLOGNE(WmsLogTag::WMS_ATTRIBUTE, "failed"); + TLOGNE(WmsLogTag::WMS_ATTRIBUTE, "%{public}s failed", where); } }; if (napi_status::napi_ok != napi_send_event(env, asyncTask, napi_eprio_high)) { diff --git a/previewer/include/wm_common.h b/previewer/include/wm_common.h index 8a743ad4a9..9bf543cd3c 100644 --- a/previewer/include/wm_common.h +++ b/previewer/include/wm_common.h @@ -803,8 +803,7 @@ struct TitleButtonRect { * @brief Layout info for all windows on the screen. */ struct WindowLayoutInfo : public Parcelable { - static inline constexpr Rect EMPTY_RECT = { 0, 0, 0, 0 }; - Rect rect = EMPTY_RECT; + Rect rect = { 0, 0, 0, 0 }; bool Marshalling(Parcel& parcel) const override { diff --git a/previewer/mock/window_manager_napi/js_window_manager.cpp b/previewer/mock/window_manager_napi/js_window_manager.cpp index d2d4c1ec0a..c41353a57c 100644 --- a/previewer/mock/window_manager_napi/js_window_manager.cpp +++ b/previewer/mock/window_manager_napi/js_window_manager.cpp @@ -106,7 +106,7 @@ napi_value JsWindowManager::ToggleShownStateForAllAppWindows(napi_env env, napi_ napi_value JsWindowManager::GetAllWindowLayoutInfo(napi_env env, napi_callback_info info) { - TLOGI(WmsLogTag::WMS_ATTRIBUTE, "mock: GetAllWindowLayoutInfo"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "mock"); return nullptr; } diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index c5871c4e61..cb181c7d04 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -749,9 +749,9 @@ private: bool GetSpecifiedDrawingData(uint64_t surfaceId, int32_t& pid, int32_t& uid); void RemoveSpecifiedDrawingData(uint64_t surfaceId); void FilterForGetAllWindowLayoutInfo(DisplayId displayId, bool isVirtualDisplay, - std::vector>& filtedSessions); - bool IsWindowLayoutInfoNeeded(const sptr& session) const; - int32_t GetLowerScreenPosY() const; + std::vector>& filteredSessions); + bool IsGetWindowLayoutInfoNeeded(const sptr& session) const; + int32_t GetFoldLowerScreenPosY() const; /* * Window Rotate Animation @@ -1149,8 +1149,6 @@ private: int32_t uid_ = 0; }; std::unordered_map lastDrawingSessionInfoMap_; - static constexpr uint64_t DEFAULT_DISPLAY_ID = 0; - static constexpr uint64_t VIRTUAL_DISPLAY_ID = 999; /* * Move Drag diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index fe90c851ee..7fba4c4ab9 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -124,6 +124,8 @@ const int32_t LOGICAL_DISPLACEMENT_32 = 32; constexpr int32_t GET_TOP_WINDOW_DELAY = 100; constexpr char SMALL_FOLD_PRODUCT_TYPE = '2'; constexpr uint32_t MAX_SUB_WINDOW_LEVEL = 10; +constexpr uint64_t DEFAULT_DISPLAY_ID = 0; +constexpr uint64_t VIRTUAL_DISPLAY_ID = 999; const std::map STRING_TO_DISPLAY_ORIENTATION_MAP = { {"unspecified", OHOS::AppExecFwk::DisplayOrientation::UNSPECIFIED}, @@ -10503,27 +10505,25 @@ void SceneSessionManager::NotifyUpdateRectAfterLayout() taskScheduler_->PostAsyncTask(task, __func__); } -WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId inputDisplayId, +WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId displayId, std::vector>& infos) { - auto task = [inputDisplayId, this, &infos] { + auto task = [this, displayId, &infos]() mutable { bool isVirtualDisplay = false; - DisplayId displayId = inputDisplayId; if (displayId == VIRTUAL_DISPLAY_ID) { displayId = DEFAULT_DISPLAY_ID; isVirtualDisplay = true; } - std::vector> filtedSessions; - FilterForGetAllWindowLayoutInfo(displayId, isVirtualDisplay, filtedSessions); - for (auto& session : filtedSessions) { - Rect hostRect; - session->GetGlobalScaledRect(hostRect); + std::vector> filteredSessions; + FilterForGetAllWindowLayoutInfo(displayId, isVirtualDisplay, filteredSessions); + for (const auto& session : filteredSessions) { + Rect globalScaledRect; + session->GetGlobalScaledRect(globalScaledRect); if (isVirtualDisplay) { - hostRect.posY_ -= GetLowerScreenPosY(); + globalScaledRect.posY_ -= GetFoldLowerScreenPosY(); } auto windowLayoutInfo = sptr::MakeSptr(); - windowLayoutInfo->rect = { hostRect.posX_, hostRect.posY_, - static_cast(hostRect.width_), static_cast(hostRect.height_) }; + windowLayoutInfo->rect = globalScaledRect; infos.emplace_back(windowLayoutInfo); } return WMError::WM_OK; @@ -10532,35 +10532,37 @@ WMError SceneSessionManager::GetAllWindowLayoutInfo(DisplayId inputDisplayId, } void SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId, bool isVirtualDisplay, - std::vector>& filtedSessions) + std::vector>& filteredSessions) { { std::shared_lock lock(sceneSessionMapMutex_); - for (auto& [_, session] : sceneSessionMap_) { + for (const auto& [_, session] : sceneSessionMap_) { if (session == nullptr) { continue; } bool IsOnVirtualDisplay = FoldScreenStateInternel::IsSuperFoldDisplayDevice() && - session->GetSessionRect().posY_ >= GetLowerScreenPosY(); + session->GetSessionRect().posY_ >= GetFoldLowerScreenPosY(); bool IsVirtualDisplayShow = FoldScreenStateInternel::IsSuperFoldDisplayDevice() && - session->GetSessionRect().posY_ + session->GetSessionRect().height_ >= GetLowerScreenPosY(); + session->GetSessionRect().posY_ + session->GetSessionRect().height_ >= GetFoldLowerScreenPosY(); bool isNotVirtualDisplayNeed = isVirtualDisplay && !IsVirtualDisplayShow && session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; bool isNotDefaultDisplayNeed = !isVirtualDisplay && displayId == DEFAULT_DISPLAY_ID && IsOnVirtualDisplay && session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; - if (isNotVirtualDisplayNeed || isNotDefaultDisplayNeed || !IsWindowLayoutInfoNeeded(session) || + if (isNotVirtualDisplayNeed || isNotDefaultDisplayNeed || !IsGetWindowLayoutInfoNeeded(session) || session->GetVisibilityState() == WINDOW_VISIBILITY_STATE_TOTALLY_OCCUSION || session->GetSessionProperty()->GetDisplayId() != displayId) { continue; } - filtedSessions.emplace_back(session); + filteredSessions.emplace_back(session); } } - std::sort(filtedSessions.begin(), filtedSessions.end(), - [](const sptr& ls, const sptr& rs) { return ls->GetZOrder() > rs->GetZOrder(); }); + std::sort(filteredSessions.begin(), filteredSessions.end(), + [](const sptr& lhs, const sptr& rhs) { + return lhs->GetZOrder() > rhs->GetZOrder(); + }); } -int32_t SceneSessionManager::GetLowerScreenPosY() const +int32_t SceneSessionManager::GetFoldLowerScreenPosY() const { const auto& [defaultDisplayRect, virtualDisplayRect, foldCreaseRect] = PcFoldScreenManager::GetInstance().GetDisplayRects(); @@ -10569,11 +10571,12 @@ int32_t SceneSessionManager::GetLowerScreenPosY() const defaultDisplayRect.height_ - foldCreaseRect.height_ / SUPER_FOLD_DIVIDE_FACTOR + foldCreaseRect.height_ : defaultDisplayRect.height_; } -bool SceneSessionManager::IsWindowLayoutInfoNeeded(const sptr& session) const + +bool SceneSessionManager::IsGetWindowLayoutInfoNeeded(const sptr& session) const { constexpr int32_t GROUP_ONE = 1; std::string name = session->GetWindowName(); - std::regex pattern("^(.*?)(\\d*)$"); //Remove last digit + std::regex pattern("^(.*?)(\\d*)$"); // Remove last digit std::smatch matches; name = std::regex_search(name, matches, pattern) ? matches[GROUP_ONE] : name; return !session->GetSessionInfo().isSystem_ || LAYOUT_INFO_WHITELIST.find(name) != LAYOUT_INFO_WHITELIST.end(); diff --git a/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp b/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp index 46fc3abd36..b63bd8a0f8 100644 --- a/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp +++ b/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp @@ -1108,7 +1108,7 @@ int SceneSessionManagerStub::HandleGetAllWindowLayoutInfo(MessageParcel& data, M std::vector> infos; WMError errCode = GetAllWindowLayoutInfo(displayId, infos); if (!MarshallingHelper::MarshallingVectorParcelableObj(reply, infos)) { - TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Failed to Write window layout info"); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Failed to write window layout info"); return ERR_INVALID_DATA; } if (!reply.WriteInt32(static_cast(errCode))) { diff --git a/wm/src/window_manager.cpp b/wm/src/window_manager.cpp index c7008b6cc9..20543c0a24 100644 --- a/wm/src/window_manager.cpp +++ b/wm/src/window_manager.cpp @@ -1123,7 +1123,7 @@ WMError WindowManager::GetAllWindowLayoutInfo(DisplayId displayId, std::vector().GetAllWindowLayoutInfo(displayId, infos); if (ret != WMError::WM_OK) { - TLOGE(WmsLogTag::WMS_ATTRIBUTE, "get window layout info failed"); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "failed"); } return ret; } -- Gitee From 03732dfc827cbba1a99ff369ed76fefd1a74041e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Tue, 31 Dec 2024 15:08:40 +0800 Subject: [PATCH 61/64] change58 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../window_runtime/window_manager_napi/js_window_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp b/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp index aad91e2bbf..83669c8435 100644 --- a/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp +++ b/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp @@ -1211,7 +1211,7 @@ napi_value JsWindowManager::OnGetAllWindowLayoutInfo(napi_env env, napi_callback } napi_value result = nullptr; std::shared_ptr napiAsyncTask = CreateEmptyAsyncTask(env, nullptr, &result); - auto asyncTask = [displayId, env, task = napiAsyncTask] { + auto asyncTask = [displayId, where, env, task = napiAsyncTask] { std::vector> infos; WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at( SingletonContainer::Get().GetAllWindowLayoutInfo(static_cast(displayId), infos)); -- Gitee From 545c409527ad4b471ecb10541e666ccdaa193874 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Tue, 31 Dec 2024 16:05:53 +0800 Subject: [PATCH 62/64] change59 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../src/scene_session_manager.cpp | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 7fba4c4ab9..10efaa1374 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10540,20 +10540,24 @@ void SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId, b if (session == nullptr) { continue; } - bool IsOnVirtualDisplay = FoldScreenStateInternel::IsSuperFoldDisplayDevice() && - session->GetSessionRect().posY_ >= GetFoldLowerScreenPosY(); - bool IsVirtualDisplayShow = FoldScreenStateInternel::IsSuperFoldDisplayDevice() && - session->GetSessionRect().posY_ + session->GetSessionRect().height_ >= GetFoldLowerScreenPosY(); - bool isNotVirtualDisplayNeed = isVirtualDisplay && !IsVirtualDisplayShow && - session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; - bool isNotDefaultDisplayNeed = !isVirtualDisplay && displayId == DEFAULT_DISPLAY_ID && - IsOnVirtualDisplay && session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID; - if (isNotVirtualDisplayNeed || isNotDefaultDisplayNeed || !IsGetWindowLayoutInfoNeeded(session) || - session->GetVisibilityState() == WINDOW_VISIBILITY_STATE_TOTALLY_OCCUSION || - session->GetSessionProperty()->GetDisplayId() != displayId) { + if (session->GetSessionRect().IsInvalid( )) { continue; } - filteredSessions.emplace_back(session); + if (PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED && + session->GetSessionProperty()->GetDisplayId() == DEFAULT_DISPLAY_ID && + displayId == DEFAULT_DISPLAY_ID) { + if (isVirtualDisplay && + session->GetSessionRect().posY_ + session->GetSessionRect().height_ < GetFoldLowerScreenPosY()) { + continue; + } + if (!isVirtualDisplay && session->GetSessionRect().posY_ >= GetFoldLowerScreenPosY()) { + continue; + } + } + if (IsGetWindowLayoutInfoNeeded(session) && session->GetSessionProperty()->GetDisplayId() == displayId && + session->GetVisibilityState() != WINDOW_VISIBILITY_STATE_TOTALLY_OCCUSION) { + filteredSessions.emplace_back(session); + } } } std::sort(filteredSessions.begin(), filteredSessions.end(), -- Gitee From 376d0c46665d61ab5c38855a99b99e369c82fef9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Tue, 31 Dec 2024 16:26:02 +0800 Subject: [PATCH 63/64] change60 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- .../window_runtime/window_manager_napi/js_window_manager.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp b/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp index 83669c8435..5793e4b804 100644 --- a/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp +++ b/interfaces/kits/napi/window_runtime/window_manager_napi/js_window_manager.cpp @@ -1191,7 +1191,6 @@ napi_value JsWindowManager::OnShiftAppWindowFocus(napi_env env, napi_callback_in napi_value JsWindowManager::OnGetAllWindowLayoutInfo(napi_env env, napi_callback_info info) { - const char* const where = __func__; size_t argc = ARGC_FOUR; napi_value argv[ARGC_FOUR] = { nullptr }; napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr); @@ -1211,7 +1210,7 @@ napi_value JsWindowManager::OnGetAllWindowLayoutInfo(napi_env env, napi_callback } napi_value result = nullptr; std::shared_ptr napiAsyncTask = CreateEmptyAsyncTask(env, nullptr, &result); - auto asyncTask = [displayId, where, env, task = napiAsyncTask] { + auto asyncTask = [env, task = napiAsyncTask, displayId, where = __func__] { std::vector> infos; WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at( SingletonContainer::Get().GetAllWindowLayoutInfo(static_cast(displayId), infos)); -- Gitee From dd4c434427cfe3c561084c7ff7038ff3af51c582 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=AE=87=E8=B1=AA?= Date: Tue, 31 Dec 2024 16:34:44 +0800 Subject: [PATCH 64/64] change61 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 卢宇豪 --- window_scene/session_manager/src/scene_session_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 10efaa1374..09b68e6e31 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -10540,7 +10540,7 @@ void SceneSessionManager::FilterForGetAllWindowLayoutInfo(DisplayId displayId, b if (session == nullptr) { continue; } - if (session->GetSessionRect().IsInvalid( )) { + if (session->GetSessionRect().IsInvalid()) { continue; } if (PcFoldScreenManager::GetInstance().GetScreenFoldStatus() == SuperFoldStatus::HALF_FOLDED && -- Gitee