diff --git a/window_scene/screen_session_manager/include/screen_session_manager.h b/window_scene/screen_session_manager/include/screen_session_manager.h index 2f7cfeba583e7cd5d39f5996761a50d045f3a12e..ccafe9887a60c07f8a1544815724c42991a4dc57 100644 --- a/window_scene/screen_session_manager/include/screen_session_manager.h +++ b/window_scene/screen_session_manager/include/screen_session_manager.h @@ -480,6 +480,7 @@ public: bool SetScreenOffset(ScreenId screenId, float offsetX, float offsetY); bool SynchronizePowerStatus(ScreenPowerState state) override; std::shared_ptr GetPowerTaskScheduler() const; + bool GetCancelSuspendStatus(void) const; protected: ScreenSessionManager(); 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 44127ca4553f14726ce432268e0ea23d956d993c..cfc4316502924ceb607f68750f43e94f41a44b19 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 @@ -386,7 +386,8 @@ void SingleDisplayFoldPolicy::ChangeScreenDisplayModeToMain(sptr #ifdef TP_FEATURE_ENABLE RSInterfaces::GetInstance().SetTpFeatureConfig(TP_TYPE, MAIN_TP.c_str()); #endif - if (PowerMgr::PowerMgrClient::GetInstance().IsFoldScreenOn()) { + if (PowerMgr::PowerMgrClient::GetInstance().IsFoldScreenOn() || + ScreenSessionManager::GetInstance().GetCancelSuspendStatus()) { ChangeScreenDisplayModeToMainWhenFoldScreenOn(screenSession); } else { // When the screen is off and folded, it is not powered on ScreenSessionManager::GetInstance().ForceSkipScreenOffAnimation(); 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 d2d648d99744d26ee34a363773fa6a764d6af5fb..b543418e24b9d62c53022399b1159b80eff6eb6e 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 @@ -432,7 +432,8 @@ void SingleDisplayPocketFoldPolicy::ChangeScreenDisplayModeToMain(sptr ScreenSessionManager::GetPowerTaskScheduler() con { return screenPowerTaskScheduler_; } + +bool ScreenSessionManager::GetCancelSuspendStatus() const +{ + if (!sessionDisplayPowerController_) { + TLOGE(WmsLogTag::DMS, "sessionDisplayPowerController_ is null"); + return false; + } + std::lock_guard notifyLock(sessionDisplayPowerController_->notifyMutex_); + return sessionDisplayPowerController_->needCancelNotify_ || + sessionDisplayPowerController_->canceledSuspend_; +} } // namespace OHOS::Rosen diff --git a/window_scene/test/dms_unittest/screen_session_manager_test2.cpp b/window_scene/test/dms_unittest/screen_session_manager_test2.cpp index 4e80bb4451a7f8470070c1fcaa526b714267c81f..7adeff651e4598a4d7d5919cabce476b46df97fe 100644 --- a/window_scene/test/dms_unittest/screen_session_manager_test2.cpp +++ b/window_scene/test/dms_unittest/screen_session_manager_test2.cpp @@ -1197,6 +1197,58 @@ HWTEST_F(ScreenSessionManagerTest, UpdateAvailableArea02, TestSize.Level1) g_errLog.clear(); ssm_->SetPcStatus(temp); } + +/** + * @tc.name: GetCancelSuspendStatus01 + * @tc.desc: GetCancelSuspendStatus01_BothFalse + * @tc.type: FUNC + */ +HWTEST_F(ScreenSessionManagerTest, GetCancelSuspendStatus01, TestSize.Level1) +{ + ASSERT_NE(ssm_, nullptr); + ssm_->sessionDisplayPowerController_->needCancelNotify_ = false; + ssm_->sessionDisplayPowerController_->canceledSuspend_ = false; + EXPECT_FALSE(ssm_->GetCancelSuspendStatus()); +} + +/** + * @tc.name: GetCancelSuspendStatus02 + * @tc.desc: GetCancelSuspendStatus02_NeedCancelNotifyTrue + * @tc.type: FUNC + */ +HWTEST_F(ScreenSessionManagerTest, GetCancelSuspendStatus02, TestSize.Level1) +{ + ASSERT_NE(ssm_, nullptr); + ssm_->sessionDisplayPowerController_->needCancelNotify_ = true; + ssm_->sessionDisplayPowerController_->canceledSuspend_ = false; + EXPECT_TRUE(ssm_->GetCancelSuspendStatus()); +} + +/** + * @tc.name: GetCancelSuspendStatus03 + * @tc.desc: GetCancelSuspendStatus03_CanceledSuspendTrue + * @tc.type: FUNC + */ +HWTEST_F(ScreenSessionManagerTest, GetCancelSuspendStatus03, TestSize.Level1) +{ + ASSERT_NE(ssm_, nullptr); + ssm_->sessionDisplayPowerController_->needCancelNotify_ = false; + ssm_->sessionDisplayPowerController_->canceledSuspend_ = true; + EXPECT_TRUE(ssm_->GetCancelSuspendStatus()); +} + +/** + * @tc.name: GetCancelSuspendStatus04 + * @tc.desc: GetCancelSuspendStatus04_BothTrue + * @tc.type: FUNC + */ +HWTEST_F(ScreenSessionManagerTest, GetCancelSuspendStatus04, TestSize.Level1) +{ + ASSERT_NE(ssm_, nullptr); + ssm_->sessionDisplayPowerController_->needCancelNotify_ = true; + ssm_->sessionDisplayPowerController_->canceledSuspend_ = true; + EXPECT_TRUE(ssm_->GetCancelSuspendStatus()); +} } } } \ No newline at end of file