From ef9855a0eed668bad305a746b647014378cbb3b9 Mon Sep 17 00:00:00 2001 From: zhangweihua Date: Thu, 7 Aug 2025 22:52:11 +0800 Subject: [PATCH 1/2] feature bugfix Signed-off-by: zhangweihua --- .../dual_display_fold_policy.h | 1 + .../fold_screen_controller.h | 2 + .../fold_screen_policy.h | 10 ++++ .../secondary_display_fold_policy.h | 1 + .../single_display_fold_policy.h | 1 + .../single_display_pocket_fold_policy.h | 1 + .../super_fold_state_manager.h | 15 ++++++ .../dual_display_fold_policy.cpp | 19 +++++++ .../fold_screen_controller.cpp | 29 ++++++++++ .../fold_screen_policy.cpp | 2 + .../secondary_display_fold_policy.cpp | 22 ++++++++ .../single_display_fold_policy.cpp | 13 +++++ .../single_display_pocket_fold_policy.cpp | 19 +++++++ .../super_fold_state_manager.cpp | 54 +++++++++++++++++++ .../src/screen_session_manager.cpp | 16 ++++++ 15 files changed, 205 insertions(+) diff --git a/window_scene/screen_session_manager/include/fold_screen_controller/dual_display_fold_policy.h b/window_scene/screen_session_manager/include/fold_screen_controller/dual_display_fold_policy.h index 733752e493..e136f1ad04 100644 --- a/window_scene/screen_session_manager/include/fold_screen_controller/dual_display_fold_policy.h +++ b/window_scene/screen_session_manager/include/fold_screen_controller/dual_display_fold_policy.h @@ -40,6 +40,7 @@ public: void ExitCoordination() override; void AddOrRemoveDisplayNodeToTree(ScreenId screenId, int32_t command) override; FoldDisplayMode GetModeMatchStatus() override; + void GetAllCreaseRegion(std::vector& foldCreaseRegionItems) override; private: bool CheckDisplayMode(FoldDisplayMode displayMode); diff --git a/window_scene/screen_session_manager/include/fold_screen_controller/fold_screen_controller.h b/window_scene/screen_session_manager/include/fold_screen_controller/fold_screen_controller.h index db75e85d00..30f2ca3be5 100644 --- a/window_scene/screen_session_manager/include/fold_screen_controller/fold_screen_controller.h +++ b/window_scene/screen_session_manager/include/fold_screen_controller/fold_screen_controller.h @@ -70,12 +70,14 @@ public: FoldDisplayMode GetLastCacheDisplayMode(); void AddOrRemoveDisplayNodeToTree(ScreenId screenId, int32_t command); void SetIsClearingBootAnimation(bool isClearingBootAnimation); + nlohmann::ordered_json GetFoldCreaseRegionJson(); private: sptr GetFoldScreenPolicy(DisplayDeviceType productType); sptr foldScreenPolicy_; sptr sensorFoldStateManager_; std::recursive_mutex& displayInfoMutex_; std::shared_ptr screenPowerTaskScheduler_; + std::vector foldCreaseRegionItems_; }; } // namespace OHOS::Rosen #endif //OHOS_ROSEN_WINDOW_SCENE_FOLD_SCREEN_CONTROLLER_H \ No newline at end of file diff --git a/window_scene/screen_session_manager/include/fold_screen_controller/fold_screen_policy.h b/window_scene/screen_session_manager/include/fold_screen_controller/fold_screen_policy.h index 9ae366b78e..d6242a2271 100644 --- a/window_scene/screen_session_manager/include/fold_screen_controller/fold_screen_policy.h +++ b/window_scene/screen_session_manager/include/fold_screen_controller/fold_screen_policy.h @@ -34,6 +34,15 @@ enum class DisplayModeChangeReason : uint32_t { INVALID, }; +struct FoldCreaseRegionItem { + DisplayOrientation orientation_; + FoldDisplayMode foldDisplayMode_; + FoldCreaseRegion region_; + FoldCreaseRegionItem(DisplayOrientation orientation, FoldDisplayMode foldDisplayMode, FoldCreaseRegion region) + : orientation_(orientation), foldDisplayMode_(foldDisplayMode), region_(region) { + } +}; + class FoldScreenPolicy : public RefBase { public: FoldScreenPolicy(); @@ -57,6 +66,7 @@ public: virtual Drawing::Rect GetScreenSnapshotRect(); virtual void SetMainScreenRegion(DMRect& mainScreenRegion); virtual void SetIsClearingBootAnimation(bool isClearingBootAnimation); + virtual void GetAllCreaseRegion(std::vector& foldCreaseRegionItems); void ClearState(); FoldDisplayMode GetScreenDisplayMode(); FoldStatus GetFoldStatus(); diff --git a/window_scene/screen_session_manager/include/fold_screen_controller/secondary_display_fold_policy.h b/window_scene/screen_session_manager/include/fold_screen_controller/secondary_display_fold_policy.h index 28b75c0031..e469f627f3 100644 --- a/window_scene/screen_session_manager/include/fold_screen_controller/secondary_display_fold_policy.h +++ b/window_scene/screen_session_manager/include/fold_screen_controller/secondary_display_fold_policy.h @@ -39,6 +39,7 @@ public: std::vector GetScreenParams() override; void ExitCoordination() override; void SetSecondaryDisplayModeChangeStatus(bool status) override; + void GetAllCreaseRegion(std::vector& foldCreaseRegionItems) override; void AddOrRemoveDisplayNodeToTree(ScreenId screenId, int32_t command) override; private: void ChangeSuperScreenDisplayMode(sptr screenSession, diff --git a/window_scene/screen_session_manager/include/fold_screen_controller/single_display_fold_policy.h b/window_scene/screen_session_manager/include/fold_screen_controller/single_display_fold_policy.h index ba2d12cb18..cf887d788e 100644 --- a/window_scene/screen_session_manager/include/fold_screen_controller/single_display_fold_policy.h +++ b/window_scene/screen_session_manager/include/fold_screen_controller/single_display_fold_policy.h @@ -41,6 +41,7 @@ public: void AddOrRemoveDisplayNodeToTree(ScreenId screenId, int32_t command) override {}; FoldDisplayMode GetModeMatchStatus() override; void SetIsClearingBootAnimation(bool isClearingBootAnimation) override; + void GetAllCreaseRegion(std::vector& foldCreaseRegionItems) override; private: void ChangeScreenDisplayModeToMain(sptr screenSession, DisplayModeChangeReason reason = DisplayModeChangeReason::DEFAULT); diff --git a/window_scene/screen_session_manager/include/fold_screen_controller/single_display_pocket_fold_policy.h b/window_scene/screen_session_manager/include/fold_screen_controller/single_display_pocket_fold_policy.h index 45c837eda8..6e9a3b009c 100644 --- a/window_scene/screen_session_manager/include/fold_screen_controller/single_display_pocket_fold_policy.h +++ b/window_scene/screen_session_manager/include/fold_screen_controller/single_display_pocket_fold_policy.h @@ -41,6 +41,7 @@ public: void AddOrRemoveDisplayNodeToTree(ScreenId screenId, int32_t command) override; FoldDisplayMode GetModeMatchStatus() override; void BootAnimationFinishPowerInit() override; + void GetAllCreaseRegion(std::vector& foldCreaseRegionItems) override; private: void ChangeScreenDisplayModeToMain(sptr screenSession, DisplayModeChangeReason reason = DisplayModeChangeReason::DEFAULT); diff --git a/window_scene/screen_session_manager/include/fold_screen_controller/super_fold_state_manager.h b/window_scene/screen_session_manager/include/fold_screen_controller/super_fold_state_manager.h index 96b9e59ec9..fe0445e721 100644 --- a/window_scene/screen_session_manager/include/fold_screen_controller/super_fold_state_manager.h +++ b/window_scene/screen_session_manager/include/fold_screen_controller/super_fold_state_manager.h @@ -22,6 +22,7 @@ #include #include #include +#include "nlohmann/json.hpp" #include "session/screen/include/screen_session.h" #include "dm_common.h" @@ -41,6 +42,15 @@ enum class ScreenDirectionType : uint32_t { class RSInterfaces; +struct SuperFoldCreaseRegionItem { + DisplayOrientation orientation_; + SuperFoldStatus superFoldStatus_; + FoldCreaseRegion region_; + SuperFoldCreaseRegionItem(DisplayOrientation orientation, SuperFoldStatus superFoldStatus, FoldCreaseRegion region) + : orientation_(orientation), superFoldStatus_(superFoldStatus), region_(region) { + } +}; + class SuperFoldStateManager final { WM_DECLARE_SINGLE_INSTANCE_BASE(SuperFoldStateManager) public: @@ -73,6 +83,10 @@ public: DMError RefreshExternalRegion(); + void GetAllCreaseRegion(); + + nlohmann::ordered_json GetFoldCreaseRegionJson(); + private: std::atomic curState_ = SuperFoldStatus::UNKNOWN; sptr currentSuperFoldCreaseRegion_ = nullptr; @@ -81,6 +95,7 @@ private: void GetFoldCreaseRect(bool isVertical, const std::vector& foldRect, std::vector& foldCreaseRect) const; std::mutex superStatusMutex_; + std::vector superFoldCreaseRegionItems_; struct Transition { SuperFoldStatus nextState; std::function action; diff --git a/window_scene/screen_session_manager/src/fold_screen_controller/dual_display_fold_policy.cpp b/window_scene/screen_session_manager/src/fold_screen_controller/dual_display_fold_policy.cpp index 6d0732271b..e7de84681e 100644 --- a/window_scene/screen_session_manager/src/fold_screen_controller/dual_display_fold_policy.cpp +++ b/window_scene/screen_session_manager/src/fold_screen_controller/dual_display_fold_policy.cpp @@ -270,6 +270,25 @@ FoldCreaseRegion DualDisplayFoldPolicy::GetLiveCreaseRegion() return liveCreaseRegion_; } +void DualDisplayFoldPolicy::GetAllCreaseRegion(std::vector& foldCreaseRegionItems) +{ + FoldCreaseRegionItem SCreaseItem{DisplayOrientation::LANDSCAPE, FoldDisplayMode::SUB, + FoldCreaseRegion(0, {})}; + FoldCreaseRegionItem MPorCreaseItem{DisplayOrientation::PORTRAIT, FoldDisplayMode::MAIN, + GetFoldCreaseRegion(false)}; + FoldCreaseRegionItem MLandCreaseItem{DisplayOrientation::LANDSCAPE, FoldDisplayMode::MAIN, + GetFoldCreaseRegion(true)}; + FoldCreaseRegionItem CPorCreaseItem{DisplayOrientation::PORTRAIT, FoldDisplayMode::COORDINATION, + GetFoldCreaseRegion(false)}; + FoldCreaseRegionItem CLandCreaseItem{DisplayOrientation::LANDSCAPE, FoldDisplayMode::COORDINATION, + GetFoldCreaseRegion(true)}; + foldCreaseRegionItems.push_back(SCreaseItem); + foldCreaseRegionItems.push_back(MPorCreaseItem); + foldCreaseRegionItems.push_back(MLandCreaseItem); + foldCreaseRegionItems.push_back(CPorCreaseItem); + foldCreaseRegionItems.push_back(CLandCreaseItem); +} + void DualDisplayFoldPolicy::LockDisplayStatus(bool locked) { TLOGI(WmsLogTag::DMS, "locked: %{public}d", locked); diff --git a/window_scene/screen_session_manager/src/fold_screen_controller/fold_screen_controller.cpp b/window_scene/screen_session_manager/src/fold_screen_controller/fold_screen_controller.cpp index 21257f6f23..db767d89b0 100644 --- a/window_scene/screen_session_manager/src/fold_screen_controller/fold_screen_controller.cpp +++ b/window_scene/screen_session_manager/src/fold_screen_controller/fold_screen_controller.cpp @@ -71,6 +71,35 @@ FoldScreenController::~FoldScreenController() TLOGI(WmsLogTag::DMS, "FoldScreenController is destructed"); } +nlohmann::ordered_json FoldScreenController::GetFoldCreaseRegionJson() +{ + if (foldCreaseRegionItems_.size() == 0) { + foldScreenPolicy_->GetAllCreaseRegion(foldCreaseRegionItems_); + } + nlohmann::ordered_json ret = nlohmann::ordered_json::array(); + for (auto foldCreaseRegionItem : foldCreaseRegionItems_) { + nlohmann::ordered_json capabilityInfo; + capabilityInfo["foldDisplayMode"] = + std::to_string(static_cast(foldCreaseRegionItem.foldDisplayMode_)); + capabilityInfo["displayOrientation"] = + std::to_string(static_cast(foldCreaseRegionItem.orientation_)); + capabilityInfo["creaseRects"]["displayId"] = + std::to_string(static_cast(foldCreaseRegionItem.region_.GetDisplayId())); + auto creaseRects = foldCreaseRegionItem.region_.GetCreaseRects(); + capabilityInfo["creaseRects"]["rects"] = nlohmann::ordered_json::array(); + for (auto creaseRect : creaseRects) { + capabilityInfo["creaseRects"]["rects"].push_back({ + {"posX", creaseRect.posX_}, + {"posY", creaseRect.posY_}, + {"width", creaseRect.width_}, + {"height", creaseRect.height_} + }); + } + ret.push_back(capabilityInfo); + } + return ret; +} + sptr FoldScreenController::GetFoldScreenPolicy(DisplayDeviceType productType) { sptr tempPolicy = nullptr; diff --git a/window_scene/screen_session_manager/src/fold_screen_controller/fold_screen_policy.cpp b/window_scene/screen_session_manager/src/fold_screen_controller/fold_screen_policy.cpp index 10295c72c3..99d5472079 100644 --- a/window_scene/screen_session_manager/src/fold_screen_controller/fold_screen_policy.cpp +++ b/window_scene/screen_session_manager/src/fold_screen_controller/fold_screen_policy.cpp @@ -144,4 +144,6 @@ Drawing::Rect FoldScreenPolicy::GetScreenSnapshotRect() void FoldScreenPolicy::SetMainScreenRegion(DMRect& mainScreenRegion) {} void FoldScreenPolicy::SetIsClearingBootAnimation(bool isClearingBootAnimation) {} + +void FoldScreenPolicy::GetAllCreaseRegion(std::vector& foldCreaseRegionItems) {} } // namespace OHOS::Rosen \ No newline at end of file diff --git a/window_scene/screen_session_manager/src/fold_screen_controller/secondary_display_fold_policy.cpp b/window_scene/screen_session_manager/src/fold_screen_controller/secondary_display_fold_policy.cpp index 669a427728..0af5f355d0 100644 --- a/window_scene/screen_session_manager/src/fold_screen_controller/secondary_display_fold_policy.cpp +++ b/window_scene/screen_session_manager/src/fold_screen_controller/secondary_display_fold_policy.cpp @@ -99,6 +99,28 @@ SecondaryDisplayFoldPolicy::SecondaryDisplayFoldPolicy(std::recursive_mutex& dis currentFoldCreaseRegion_ = new FoldCreaseRegion(screenIdFull, rect); } +void SecondaryDisplayFoldPolicy::GetAllCreaseRegion(std::vector& foldCreaseRegionItems) +{ + FoldCreaseRegionItem MLandCreaseItem{DisplayOrientation::LANDSCAPE, FoldDisplayMode::MAIN, + FoldCreaseRegion(0, {})}; + FoldCreaseRegionItem MPorCreaseItem{DisplayOrientation::PORTRAIT, FoldDisplayMode::MAIN, + FoldCreaseRegion(0, {})}; + FoldCreaseRegionItem FLandCreaseItem{DisplayOrientation::LANDSCAPE, FoldDisplayMode::FULL, + GetStatusFullFoldCreaseRegion(false)}; + FoldCreaseRegionItem FPorCreaseItem{DisplayOrientation::PORTRAIT, FoldDisplayMode::FULL, + GetStatusFullFoldCreaseRegion(true)}; + FoldCreaseRegionItem GLandCreaseItem{DisplayOrientation::LANDSCAPE, FoldDisplayMode::GLOBAL_FULL, + GetStatusGlobalFullFoldCreaseRegion(false)}; + FoldCreaseRegionItem GPorCreaseItem{DisplayOrientation::PORTRAIT, FoldDisplayMode::GLOBAL_FULL, + GetStatusGlobalFullFoldCreaseRegion(true)}; + foldCreaseRegionItems.push_back(MLandCreaseItem); + foldCreaseRegionItems.push_back(MPorCreaseItem); + foldCreaseRegionItems.push_back(FLandCreaseItem); + foldCreaseRegionItems.push_back(FPorCreaseItem); + foldCreaseRegionItems.push_back(GLandCreaseItem); + foldCreaseRegionItems.push_back(GPorCreaseItem); +} + FoldCreaseRegion SecondaryDisplayFoldPolicy::GetStatusFullFoldCreaseRegion(bool isVertical) const { std::vector foldRect = FoldScreenStateInternel::StringFoldRectSplitToInt(g_FoldScreenRect, diff --git a/window_scene/screen_session_manager/src/fold_screen_controller/single_display_fold_policy.cpp b/window_scene/screen_session_manager/src/fold_screen_controller/single_display_fold_policy.cpp index cfc4316502..67bd302718 100644 --- a/window_scene/screen_session_manager/src/fold_screen_controller/single_display_fold_policy.cpp +++ b/window_scene/screen_session_manager/src/fold_screen_controller/single_display_fold_policy.cpp @@ -243,6 +243,19 @@ FoldCreaseRegion SingleDisplayFoldPolicy::GetLiveCreaseRegion() return liveCreaseRegion_; } +void SingleDisplayFoldPolicy::GetAllCreaseRegion(std::vector& foldCreaseRegionItems) +{ + FoldCreaseRegionItem MCreaseItem{DisplayOrientation::LANDSCAPE, FoldDisplayMode::MAIN, + FoldCreaseRegion(0, {})}; + FoldCreaseRegionItem FPorCreaseItem{DisplayOrientation::PORTRAIT, FoldDisplayMode::FULL, + GetFoldCreaseRegion(true)}; + FoldCreaseRegionItem FLandCreaseItem{DisplayOrientation::LANDSCAPE, FoldDisplayMode::FULL, + GetFoldCreaseRegion(false)}; + foldCreaseRegionItems.push_back(MCreaseItem); + foldCreaseRegionItems.push_back(FPorCreaseItem); + foldCreaseRegionItems.push_back(FLandCreaseItem); +} + void SingleDisplayFoldPolicy::LockDisplayStatus(bool locked) { TLOGI(WmsLogTag::DMS, "LockDisplayStatus locked: %{public}d", locked); diff --git a/window_scene/screen_session_manager/src/fold_screen_controller/single_display_pocket_fold_policy.cpp b/window_scene/screen_session_manager/src/fold_screen_controller/single_display_pocket_fold_policy.cpp index b543418e24..91eecaf490 100644 --- a/window_scene/screen_session_manager/src/fold_screen_controller/single_display_pocket_fold_policy.cpp +++ b/window_scene/screen_session_manager/src/fold_screen_controller/single_display_pocket_fold_policy.cpp @@ -674,6 +674,25 @@ void SingleDisplayPocketFoldPolicy::CloseCoordinationScreen() ScreenSessionManager::GetInstance().SetCoordinationFlag(false); } +void SingleDisplayPocketFoldPolicy::GetAllCreaseRegion(std::vector& foldCreaseRegionItems) +{ + FoldCreaseRegionItem MCreaseItem{DisplayOrientation::LANDSCAPE, FoldDisplayMode::MAIN, + FoldCreaseRegion(0, {})}; + FoldCreaseRegionItem FPorCreaseItem{DisplayOrientation::PORTRAIT, FoldDisplayMode::FULL, + GetFoldCreaseRegion(false)}; + FoldCreaseRegionItem FLandCreaseItem{DisplayOrientation::LANDSCAPE, FoldDisplayMode::FULL, + GetFoldCreaseRegion(true)}; + FoldCreaseRegionItem CPorCreaseItem{DisplayOrientation::PORTRAIT, FoldDisplayMode::COORDINATION, + GetFoldCreaseRegion(false)}; + FoldCreaseRegionItem CLandCreaseItem{DisplayOrientation::LANDSCAPE, FoldDisplayMode::COORDINATION, + GetFoldCreaseRegion(true)}; + foldCreaseRegionItems.push_back(MCreaseItem); + foldCreaseRegionItems.push_back(FPorCreaseItem); + foldCreaseRegionItems.push_back(FLandCreaseItem); + foldCreaseRegionItems.push_back(CPorCreaseItem); + foldCreaseRegionItems.push_back(CLandCreaseItem); +} + void SingleDisplayPocketFoldPolicy::ExitCoordination() { std::lock_guard lock(coordinationMutex_); diff --git a/window_scene/screen_session_manager/src/fold_screen_controller/super_fold_state_manager.cpp b/window_scene/screen_session_manager/src/fold_screen_controller/super_fold_state_manager.cpp index 2ee4487eae..64998d7d46 100644 --- a/window_scene/screen_session_manager/src/fold_screen_controller/super_fold_state_manager.cpp +++ b/window_scene/screen_session_manager/src/fold_screen_controller/super_fold_state_manager.cpp @@ -386,6 +386,60 @@ FoldCreaseRegion SuperFoldStateManager::GetLiveCreaseRegion() return liveCreaseRegion_; } +nlohmann::ordered_json SuperFoldStateManager::GetFoldCreaseRegionJson() +{ + if (superFoldCreaseRegionItems_.size() == 0) { + GetAllCreaseRegion(); + } + nlohmann::ordered_json ret = nlohmann::ordered_json::array(); + for (auto foldCreaseRegionItem : superFoldCreaseRegionItems_) { + nlohmann::ordered_json capabilityInfo; + capabilityInfo["superFoldStatus"] = + std::to_string(static_cast(foldCreaseRegionItem.superFoldStatus_)); + capabilityInfo["displayOrientation"] = + std::to_string(static_cast(foldCreaseRegionItem.orientation_)); + capabilityInfo["creaseRects"]["displayId"] = + std::to_string(static_cast(foldCreaseRegionItem.region_.GetDisplayId())); + auto creaseRects = foldCreaseRegionItem.region_.GetCreaseRects(); + capabilityInfo["creaseRects"]["rects"] = nlohmann::ordered_json::array(); + for (auto creaseRect : creaseRects) { + capabilityInfo["creaseRects"]["rects"].push_back({ + {"posX", creaseRect.posX_}, + {"posY", creaseRect.posY_}, + {"width", creaseRect.width_}, + {"height", creaseRect.height_} + }); + } + ret.push_back(capabilityInfo); + } + return ret; +} + +void SuperFoldStateManager::GetAllCreaseRegion() +{ + SuperFoldCreaseRegionItem FCreaseItem{DisplayOrientation::LANDSCAPE, SuperFoldStatus::FOLDED, + FoldCreaseRegion(0, {})}; + SuperFoldCreaseRegionItem HPorCreaseItem{DisplayOrientation::PORTRAIT, SuperFoldStatus::HALF_FOLDED, + GetFoldCreaseRegion(false)}; + SuperFoldCreaseRegionItem HLandCreaseItem{DisplayOrientation::LANDSCAPE, SuperFoldStatus::HALF_FOLDED, + GetFoldCreaseRegion(true)}; + SuperFoldCreaseRegionItem EPorCreaseItem{DisplayOrientation::PORTRAIT, SuperFoldStatus::EXPANDED, + GetFoldCreaseRegion(false)}; + SuperFoldCreaseRegionItem ELandCreaseItem{DisplayOrientation::LANDSCAPE, SuperFoldStatus::EXPANDED, + GetFoldCreaseRegion(true)}; + SuperFoldCreaseRegionItem KPorCreaseItem{DisplayOrientation::PORTRAIT, SuperFoldStatus::KEYBOARD, + GetFoldCreaseRegion(false)}; + SuperFoldCreaseRegionItem KLandCreaseItem{DisplayOrientation::LANDSCAPE, SuperFoldStatus::KEYBOARD, + GetFoldCreaseRegion(true)}; + superFoldCreaseRegionItems_.push_back(FCreaseItem); + superFoldCreaseRegionItems_.push_back(HPorCreaseItem); + superFoldCreaseRegionItems_.push_back(HLandCreaseItem); + superFoldCreaseRegionItems_.push_back(EPorCreaseItem); + superFoldCreaseRegionItems_.push_back(ELandCreaseItem); + superFoldCreaseRegionItems_.push_back(KPorCreaseItem); + superFoldCreaseRegionItems_.push_back(KLandCreaseItem); +} + void SuperFoldStateManager::HandleDisplayNotify(SuperFoldStatusChangeEvents changeEvent) { TLOGI(WmsLogTag::DMS, "changeEvent: %{public}d", static_cast(changeEvent)); diff --git a/window_scene/screen_session_manager/src/screen_session_manager.cpp b/window_scene/screen_session_manager/src/screen_session_manager.cpp index 66e98b6eba..1d68aef0c9 100644 --- a/window_scene/screen_session_manager/src/screen_session_manager.cpp +++ b/window_scene/screen_session_manager/src/screen_session_manager.cpp @@ -9350,6 +9350,12 @@ DMError ScreenSessionManager::GetSecondaryDisplayCapability(std::string& capabil nlohmann::ordered_json gCapability = GetCapabilityJson(FoldStatus::FOLD_STATE_EXPAND_WITH_SECOND_EXPAND, FoldDisplayMode::FULL, ROTATION_DEFAULT, orientation); jsonDisplayCapabilityList["capability"].push_back(std::move(gCapability)); +#ifdef FOLD_ABILITY_ENABLE + if (foldScreenController_) { + nlohmann::ordered_json foldCreaseRegion = foldScreenController_->GetFoldCreaseRegionJson(); + jsonDisplayCapabilityList["allCreaseRegion"] = foldCreaseRegion; + } +#endif capabilitInfo = jsonDisplayCapabilityList.dump(); return DMError::DM_OK; @@ -9373,6 +9379,12 @@ DMError ScreenSessionManager::GetFoldableDeviceCapability(std::string& capabilit nlohmann::ordered_json foldCapabilityInfo = GetCapabilityJson(foldStatus, foldDisplayMode, ROTATION_DEFAULT, ORIENTATION_DEFAULT); jsonDisplayCapabilityList["capability"].push_back(std::move(foldCapabilityInfo)); +#ifdef FOLD_ABILITY_ENABLE + if (foldScreenController_) { + nlohmann::ordered_json foldCreaseRegion = foldScreenController_->GetFoldCreaseRegionJson(); + jsonDisplayCapabilityList["allCreaseRegion"] = foldCreaseRegion; + } +#endif capabilitInfo = jsonDisplayCapabilityList.dump(); return DMError::DM_OK; @@ -9392,6 +9404,10 @@ DMError ScreenSessionManager::GetSuperFoldCapability(std::string& capabilitInfo) nlohmann::ordered_json halfFoldCapabilityInfo = GetCapabilityJson(FoldStatus::HALF_FOLD, FoldDisplayMode::UNKNOWN, ROTATION_DEFAULT, ORIENTATION_DEFAULT); jsonDisplayCapabilityList["capability"].push_back(std::move(halfFoldCapabilityInfo)); +#ifdef FOLD_ABILITY_ENABLE + nlohmann::ordered_json foldCreaseRegion = SuperFoldStateManager::GetInstance().GetFoldCreaseRegionJson(); + jsonDisplayCapabilityList["allCreaseRegion"] = foldCreaseRegion; +#endif capabilitInfo = jsonDisplayCapabilityList.dump(); return DMError::DM_OK; -- Gitee From 010f32427feb8819069d3f58cd1abf1089d76544 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=B4=A7=E5=8D=8E?= Date: Fri, 8 Aug 2025 01:59:17 +0000 Subject: [PATCH 2/2] update window_scene/screen_session_manager/include/fold_screen_controller/fold_screen_policy.h. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 张洧华 --- .../fold_screen_controller/dual_display_fold_policy.h | 2 +- .../fold_screen_controller/fold_screen_policy.h | 5 ++--- .../secondary_display_fold_policy.h | 2 +- .../single_display_fold_policy.h | 2 +- .../single_display_pocket_fold_policy.h | 2 +- .../fold_screen_controller/super_fold_state_manager.h | 3 +-- .../dual_display_fold_policy.cpp | 2 +- .../fold_screen_controller/fold_screen_controller.cpp | 10 +++++++--- .../src/fold_screen_controller/fold_screen_policy.cpp | 2 +- .../secondary_display_fold_policy.cpp | 2 +- .../single_display_fold_policy.cpp | 2 +- .../single_display_pocket_fold_policy.cpp | 2 +- .../super_fold_state_manager.cpp | 4 ++-- 13 files changed, 21 insertions(+), 19 deletions(-) diff --git a/window_scene/screen_session_manager/include/fold_screen_controller/dual_display_fold_policy.h b/window_scene/screen_session_manager/include/fold_screen_controller/dual_display_fold_policy.h index e136f1ad04..fbd5809fdf 100644 --- a/window_scene/screen_session_manager/include/fold_screen_controller/dual_display_fold_policy.h +++ b/window_scene/screen_session_manager/include/fold_screen_controller/dual_display_fold_policy.h @@ -40,7 +40,7 @@ public: void ExitCoordination() override; void AddOrRemoveDisplayNodeToTree(ScreenId screenId, int32_t command) override; FoldDisplayMode GetModeMatchStatus() override; - void GetAllCreaseRegion(std::vector& foldCreaseRegionItems) override; + void GetAllCreaseRegion(std::vector& foldCreaseRegionItems) const override; private: bool CheckDisplayMode(FoldDisplayMode displayMode); diff --git a/window_scene/screen_session_manager/include/fold_screen_controller/fold_screen_policy.h b/window_scene/screen_session_manager/include/fold_screen_controller/fold_screen_policy.h index d6242a2271..c5b0c21950 100644 --- a/window_scene/screen_session_manager/include/fold_screen_controller/fold_screen_policy.h +++ b/window_scene/screen_session_manager/include/fold_screen_controller/fold_screen_policy.h @@ -39,8 +39,7 @@ struct FoldCreaseRegionItem { FoldDisplayMode foldDisplayMode_; FoldCreaseRegion region_; FoldCreaseRegionItem(DisplayOrientation orientation, FoldDisplayMode foldDisplayMode, FoldCreaseRegion region) - : orientation_(orientation), foldDisplayMode_(foldDisplayMode), region_(region) { - } + : orientation_(orientation), foldDisplayMode_(foldDisplayMode), region_(region) {} }; class FoldScreenPolicy : public RefBase { @@ -66,7 +65,7 @@ public: virtual Drawing::Rect GetScreenSnapshotRect(); virtual void SetMainScreenRegion(DMRect& mainScreenRegion); virtual void SetIsClearingBootAnimation(bool isClearingBootAnimation); - virtual void GetAllCreaseRegion(std::vector& foldCreaseRegionItems); + virtual void GetAllCreaseRegion(std::vector& foldCreaseRegionItems) const; void ClearState(); FoldDisplayMode GetScreenDisplayMode(); FoldStatus GetFoldStatus(); diff --git a/window_scene/screen_session_manager/include/fold_screen_controller/secondary_display_fold_policy.h b/window_scene/screen_session_manager/include/fold_screen_controller/secondary_display_fold_policy.h index e469f627f3..8996e3ba0d 100644 --- a/window_scene/screen_session_manager/include/fold_screen_controller/secondary_display_fold_policy.h +++ b/window_scene/screen_session_manager/include/fold_screen_controller/secondary_display_fold_policy.h @@ -39,7 +39,7 @@ public: std::vector GetScreenParams() override; void ExitCoordination() override; void SetSecondaryDisplayModeChangeStatus(bool status) override; - void GetAllCreaseRegion(std::vector& foldCreaseRegionItems) override; + void GetAllCreaseRegion(std::vector& foldCreaseRegionItems) const override; void AddOrRemoveDisplayNodeToTree(ScreenId screenId, int32_t command) override; private: void ChangeSuperScreenDisplayMode(sptr screenSession, diff --git a/window_scene/screen_session_manager/include/fold_screen_controller/single_display_fold_policy.h b/window_scene/screen_session_manager/include/fold_screen_controller/single_display_fold_policy.h index cf887d788e..0d036c2b3b 100644 --- a/window_scene/screen_session_manager/include/fold_screen_controller/single_display_fold_policy.h +++ b/window_scene/screen_session_manager/include/fold_screen_controller/single_display_fold_policy.h @@ -41,7 +41,7 @@ public: void AddOrRemoveDisplayNodeToTree(ScreenId screenId, int32_t command) override {}; FoldDisplayMode GetModeMatchStatus() override; void SetIsClearingBootAnimation(bool isClearingBootAnimation) override; - void GetAllCreaseRegion(std::vector& foldCreaseRegionItems) override; + void GetAllCreaseRegion(std::vector& foldCreaseRegionItems) const override; private: void ChangeScreenDisplayModeToMain(sptr screenSession, DisplayModeChangeReason reason = DisplayModeChangeReason::DEFAULT); diff --git a/window_scene/screen_session_manager/include/fold_screen_controller/single_display_pocket_fold_policy.h b/window_scene/screen_session_manager/include/fold_screen_controller/single_display_pocket_fold_policy.h index 6e9a3b009c..a9f0339140 100644 --- a/window_scene/screen_session_manager/include/fold_screen_controller/single_display_pocket_fold_policy.h +++ b/window_scene/screen_session_manager/include/fold_screen_controller/single_display_pocket_fold_policy.h @@ -41,7 +41,7 @@ public: void AddOrRemoveDisplayNodeToTree(ScreenId screenId, int32_t command) override; FoldDisplayMode GetModeMatchStatus() override; void BootAnimationFinishPowerInit() override; - void GetAllCreaseRegion(std::vector& foldCreaseRegionItems) override; + void GetAllCreaseRegion(std::vector& foldCreaseRegionItems) const override; private: void ChangeScreenDisplayModeToMain(sptr screenSession, DisplayModeChangeReason reason = DisplayModeChangeReason::DEFAULT); diff --git a/window_scene/screen_session_manager/include/fold_screen_controller/super_fold_state_manager.h b/window_scene/screen_session_manager/include/fold_screen_controller/super_fold_state_manager.h index fe0445e721..ebcd0bfd9a 100644 --- a/window_scene/screen_session_manager/include/fold_screen_controller/super_fold_state_manager.h +++ b/window_scene/screen_session_manager/include/fold_screen_controller/super_fold_state_manager.h @@ -47,8 +47,7 @@ struct SuperFoldCreaseRegionItem { SuperFoldStatus superFoldStatus_; FoldCreaseRegion region_; SuperFoldCreaseRegionItem(DisplayOrientation orientation, SuperFoldStatus superFoldStatus, FoldCreaseRegion region) - : orientation_(orientation), superFoldStatus_(superFoldStatus), region_(region) { - } + : orientation_(orientation), superFoldStatus_(superFoldStatus), region_(region) {} }; class SuperFoldStateManager final { diff --git a/window_scene/screen_session_manager/src/fold_screen_controller/dual_display_fold_policy.cpp b/window_scene/screen_session_manager/src/fold_screen_controller/dual_display_fold_policy.cpp index e7de84681e..cf64385d54 100644 --- a/window_scene/screen_session_manager/src/fold_screen_controller/dual_display_fold_policy.cpp +++ b/window_scene/screen_session_manager/src/fold_screen_controller/dual_display_fold_policy.cpp @@ -270,7 +270,7 @@ FoldCreaseRegion DualDisplayFoldPolicy::GetLiveCreaseRegion() return liveCreaseRegion_; } -void DualDisplayFoldPolicy::GetAllCreaseRegion(std::vector& foldCreaseRegionItems) +void DualDisplayFoldPolicy::GetAllCreaseRegion(std::vector& foldCreaseRegionItems) const { FoldCreaseRegionItem SCreaseItem{DisplayOrientation::LANDSCAPE, FoldDisplayMode::SUB, FoldCreaseRegion(0, {})}; diff --git a/window_scene/screen_session_manager/src/fold_screen_controller/fold_screen_controller.cpp b/window_scene/screen_session_manager/src/fold_screen_controller/fold_screen_controller.cpp index db767d89b0..53a3085147 100644 --- a/window_scene/screen_session_manager/src/fold_screen_controller/fold_screen_controller.cpp +++ b/window_scene/screen_session_manager/src/fold_screen_controller/fold_screen_controller.cpp @@ -73,11 +73,15 @@ FoldScreenController::~FoldScreenController() nlohmann::ordered_json FoldScreenController::GetFoldCreaseRegionJson() { + nlohmann::ordered_json ret = nlohmann::ordered_json::array(); + if (foldScreenPolicy_ == nullptr) { + return ret; + } if (foldCreaseRegionItems_.size() == 0) { foldScreenPolicy_->GetAllCreaseRegion(foldCreaseRegionItems_); } - nlohmann::ordered_json ret = nlohmann::ordered_json::array(); - for (auto foldCreaseRegionItem : foldCreaseRegionItems_) { + + for (const auto& foldCreaseRegionItem : foldCreaseRegionItems_) { nlohmann::ordered_json capabilityInfo; capabilityInfo["foldDisplayMode"] = std::to_string(static_cast(foldCreaseRegionItem.foldDisplayMode_)); @@ -87,7 +91,7 @@ nlohmann::ordered_json FoldScreenController::GetFoldCreaseRegionJson() std::to_string(static_cast(foldCreaseRegionItem.region_.GetDisplayId())); auto creaseRects = foldCreaseRegionItem.region_.GetCreaseRects(); capabilityInfo["creaseRects"]["rects"] = nlohmann::ordered_json::array(); - for (auto creaseRect : creaseRects) { + for (const auto& creaseRect : creaseRects) { capabilityInfo["creaseRects"]["rects"].push_back({ {"posX", creaseRect.posX_}, {"posY", creaseRect.posY_}, diff --git a/window_scene/screen_session_manager/src/fold_screen_controller/fold_screen_policy.cpp b/window_scene/screen_session_manager/src/fold_screen_controller/fold_screen_policy.cpp index 99d5472079..de751f9542 100644 --- a/window_scene/screen_session_manager/src/fold_screen_controller/fold_screen_policy.cpp +++ b/window_scene/screen_session_manager/src/fold_screen_controller/fold_screen_policy.cpp @@ -145,5 +145,5 @@ void FoldScreenPolicy::SetMainScreenRegion(DMRect& mainScreenRegion) {} void FoldScreenPolicy::SetIsClearingBootAnimation(bool isClearingBootAnimation) {} -void FoldScreenPolicy::GetAllCreaseRegion(std::vector& foldCreaseRegionItems) {} +void FoldScreenPolicy::GetAllCreaseRegion(std::vector& foldCreaseRegionItems) const {} } // namespace OHOS::Rosen \ No newline at end of file diff --git a/window_scene/screen_session_manager/src/fold_screen_controller/secondary_display_fold_policy.cpp b/window_scene/screen_session_manager/src/fold_screen_controller/secondary_display_fold_policy.cpp index 0af5f355d0..da87eec604 100644 --- a/window_scene/screen_session_manager/src/fold_screen_controller/secondary_display_fold_policy.cpp +++ b/window_scene/screen_session_manager/src/fold_screen_controller/secondary_display_fold_policy.cpp @@ -99,7 +99,7 @@ SecondaryDisplayFoldPolicy::SecondaryDisplayFoldPolicy(std::recursive_mutex& dis currentFoldCreaseRegion_ = new FoldCreaseRegion(screenIdFull, rect); } -void SecondaryDisplayFoldPolicy::GetAllCreaseRegion(std::vector& foldCreaseRegionItems) +void SecondaryDisplayFoldPolicy::GetAllCreaseRegion(std::vector& foldCreaseRegionItems) const { FoldCreaseRegionItem MLandCreaseItem{DisplayOrientation::LANDSCAPE, FoldDisplayMode::MAIN, FoldCreaseRegion(0, {})}; diff --git a/window_scene/screen_session_manager/src/fold_screen_controller/single_display_fold_policy.cpp b/window_scene/screen_session_manager/src/fold_screen_controller/single_display_fold_policy.cpp index 67bd302718..0b344b8840 100644 --- a/window_scene/screen_session_manager/src/fold_screen_controller/single_display_fold_policy.cpp +++ b/window_scene/screen_session_manager/src/fold_screen_controller/single_display_fold_policy.cpp @@ -243,7 +243,7 @@ FoldCreaseRegion SingleDisplayFoldPolicy::GetLiveCreaseRegion() return liveCreaseRegion_; } -void SingleDisplayFoldPolicy::GetAllCreaseRegion(std::vector& foldCreaseRegionItems) +void SingleDisplayFoldPolicy::GetAllCreaseRegion(std::vector& foldCreaseRegionItems) const { FoldCreaseRegionItem MCreaseItem{DisplayOrientation::LANDSCAPE, FoldDisplayMode::MAIN, FoldCreaseRegion(0, {})}; diff --git a/window_scene/screen_session_manager/src/fold_screen_controller/single_display_pocket_fold_policy.cpp b/window_scene/screen_session_manager/src/fold_screen_controller/single_display_pocket_fold_policy.cpp index 91eecaf490..4e4c6e62cf 100644 --- a/window_scene/screen_session_manager/src/fold_screen_controller/single_display_pocket_fold_policy.cpp +++ b/window_scene/screen_session_manager/src/fold_screen_controller/single_display_pocket_fold_policy.cpp @@ -674,7 +674,7 @@ void SingleDisplayPocketFoldPolicy::CloseCoordinationScreen() ScreenSessionManager::GetInstance().SetCoordinationFlag(false); } -void SingleDisplayPocketFoldPolicy::GetAllCreaseRegion(std::vector& foldCreaseRegionItems) +void SingleDisplayPocketFoldPolicy::GetAllCreaseRegion(std::vector& foldCreaseRegionItems) const { FoldCreaseRegionItem MCreaseItem{DisplayOrientation::LANDSCAPE, FoldDisplayMode::MAIN, FoldCreaseRegion(0, {})}; diff --git a/window_scene/screen_session_manager/src/fold_screen_controller/super_fold_state_manager.cpp b/window_scene/screen_session_manager/src/fold_screen_controller/super_fold_state_manager.cpp index 64998d7d46..6b3d245a09 100644 --- a/window_scene/screen_session_manager/src/fold_screen_controller/super_fold_state_manager.cpp +++ b/window_scene/screen_session_manager/src/fold_screen_controller/super_fold_state_manager.cpp @@ -392,7 +392,7 @@ nlohmann::ordered_json SuperFoldStateManager::GetFoldCreaseRegionJson() GetAllCreaseRegion(); } nlohmann::ordered_json ret = nlohmann::ordered_json::array(); - for (auto foldCreaseRegionItem : superFoldCreaseRegionItems_) { + for (const auto& foldCreaseRegionItem : superFoldCreaseRegionItems_) { nlohmann::ordered_json capabilityInfo; capabilityInfo["superFoldStatus"] = std::to_string(static_cast(foldCreaseRegionItem.superFoldStatus_)); @@ -402,7 +402,7 @@ nlohmann::ordered_json SuperFoldStateManager::GetFoldCreaseRegionJson() std::to_string(static_cast(foldCreaseRegionItem.region_.GetDisplayId())); auto creaseRects = foldCreaseRegionItem.region_.GetCreaseRects(); capabilityInfo["creaseRects"]["rects"] = nlohmann::ordered_json::array(); - for (auto creaseRect : creaseRects) { + for (const auto& creaseRect : creaseRects) { capabilityInfo["creaseRects"]["rects"].push_back({ {"posX", creaseRect.posX_}, {"posY", creaseRect.posY_}, -- Gitee