From 4c2e476d799846257b295eb4a6ba02518180e1ed Mon Sep 17 00:00:00 2001 From: huatong Date: Mon, 18 Sep 2023 09:57:19 +0800 Subject: [PATCH] Isolate foldscreen code with normal Signed-off-by: huatong --- .../fold_screen_controller.h | 5 ++--- .../fold_screen_policy.h | 3 +++ .../fold_screen_controller.cpp | 9 +++++++++ .../fold_screen_policy.cpp | 1 + .../src/screen_session_manager.cpp | 19 +++++++++++++++---- 5 files changed, 30 insertions(+), 7 deletions(-) diff --git a/window_scene/session_manager/include/fold_screen_controller/fold_screen_controller.h b/window_scene/session_manager/include/fold_screen_controller/fold_screen_controller.h index 5c6d179677..b761c9597f 100644 --- a/window_scene/session_manager/include/fold_screen_controller/fold_screen_controller.h +++ b/window_scene/session_manager/include/fold_screen_controller/fold_screen_controller.h @@ -32,14 +32,13 @@ class FoldScreenController : public RefBase { public: FoldScreenController(); virtual ~FoldScreenController(); + void SetDisplayMode(const FoldDisplayMode displayMode); FoldDisplayMode GetDisplayMode(); - bool IsFoldable(); - FoldStatus GetFoldStatus(); - sptr GetCurrentFoldCreaseRegion(); + ScreenId GetCurrentScreenId(); private: sptr GetFoldScreenPolicy(DisplayDeviceType productType); sptr foldScreenPolicy_; diff --git a/window_scene/session_manager/include/fold_screen_controller/fold_screen_policy.h b/window_scene/session_manager/include/fold_screen_controller/fold_screen_policy.h index a397a82713..796c0e136e 100644 --- a/window_scene/session_manager/include/fold_screen_controller/fold_screen_policy.h +++ b/window_scene/session_manager/include/fold_screen_controller/fold_screen_policy.h @@ -25,10 +25,13 @@ class FoldScreenPolicy : public RefBase { public: FoldScreenPolicy(); virtual ~FoldScreenPolicy(); + virtual void ChangeScreenDisplayMode(FoldDisplayMode displayMode); virtual FoldDisplayMode GetScreenDisplayMode(); virtual FoldStatus GetFoldStatus(); virtual void SendSensorResult(FoldStatus foldStatus); + virtual ScreenId GetCurrentScreenId(); + ScreenId screenId_; ScreenProperty screenProperty_; mutable std::recursive_mutex displayModeMutex_; diff --git a/window_scene/session_manager/src/fold_screen_controller/fold_screen_controller.cpp b/window_scene/session_manager/src/fold_screen_controller/fold_screen_controller.cpp index 20397a3707..a91691b91d 100644 --- a/window_scene/session_manager/src/fold_screen_controller/fold_screen_controller.cpp +++ b/window_scene/session_manager/src/fold_screen_controller/fold_screen_controller.cpp @@ -92,4 +92,13 @@ sptr FoldScreenController::GetCurrentFoldCreaseRegion() { return nullptr; } + +ScreenId FoldScreenController::GetCurrentScreenId() +{ + if (foldScreenPolicy_ == nullptr) { + WLOGW("GetCurrentScreenId: foldScreenPolicy_ is null"); + return 0; + } + return foldScreenPolicy_->GetCurrentScreenId(); +} } // namespace OHOS::Rosen \ No newline at end of file diff --git a/window_scene/session_manager/src/fold_screen_controller/fold_screen_policy.cpp b/window_scene/session_manager/src/fold_screen_controller/fold_screen_policy.cpp index d0bf0d60a9..da87411169 100644 --- a/window_scene/session_manager/src/fold_screen_controller/fold_screen_policy.cpp +++ b/window_scene/session_manager/src/fold_screen_controller/fold_screen_policy.cpp @@ -23,4 +23,5 @@ void FoldScreenPolicy::ChangeScreenDisplayMode(FoldDisplayMode displayMode) {} FoldDisplayMode FoldScreenPolicy::GetScreenDisplayMode() { return FoldDisplayMode::UNKNOWN; } FoldStatus FoldScreenPolicy::GetFoldStatus() { return FoldStatus::UNKNOWN; } void FoldScreenPolicy::SendSensorResult(FoldStatus foldStatus) {} +ScreenId FoldScreenPolicy::GetCurrentScreenId() { return screenId_; } } // namespace OHOS::Rosen \ No newline at end of file diff --git a/window_scene/session_manager/src/screen_session_manager.cpp b/window_scene/session_manager/src/screen_session_manager.cpp index f5bcb00998..8740bff1ce 100644 --- a/window_scene/session_manager/src/screen_session_manager.cpp +++ b/window_scene/session_manager/src/screen_session_manager.cpp @@ -249,7 +249,14 @@ void ScreenSessionManager::OnScreenChange(ScreenId screenId, ScreenEvent screenE return; } if (screenEvent == ScreenEvent::CONNECTED) { - if (screenId == 0) { + if (foldScreenController_ != nullptr) { + if (screenId == 0) { + for (auto listener : screenConnectionListenerList_) { + listener->OnScreenConnect(screenSession); + } + screenSession->Connect(); + } + } else { for (auto listener : screenConnectionListenerList_) { listener->OnScreenConnect(screenSession); } @@ -566,7 +573,7 @@ sptr ScreenSessionManager::GetOrCreateScreenSession(ScreenId scre phyScreenPropMap_[screenId] = property; } - if (screenId != 0) { + if (foldScreenController_ != nullptr && screenId != 0) { return nullptr; } @@ -658,8 +665,12 @@ bool ScreenSessionManager::SetScreenPowerForAll(ScreenPowerState state, PowerSta } } - for (auto screenId : screenIds) { - rsInterface_.SetScreenPowerStatus(screenId, status); + if (foldScreenController_ != nullptr) { + rsInterface_.SetScreenPowerStatus(foldScreenController_->GetCurrentScreenId(), status); + } else { + for (auto screenId : screenIds) { + rsInterface_.SetScreenPowerStatus(screenId, status); + } } return NotifyDisplayPowerEvent(state == ScreenPowerState::POWER_ON ? DisplayPowerEvent::DISPLAY_ON : -- Gitee