From ab3226064549ad6f5eedea25a0b8102ddcbf49af Mon Sep 17 00:00:00 2001 From: volcano6322 Date: Tue, 10 Oct 2023 20:38:28 +0800 Subject: [PATCH] fix: Resolve the issue of inability to sleep when closing the lid Signed-off-by: volcano6322 --- services/native/src/power_state_machine.cpp | 14 ++++++++------ services/native/src/suspend/suspend_controller.h | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/services/native/src/power_state_machine.cpp b/services/native/src/power_state_machine.cpp index 820ff2a3..c963d2b9 100644 --- a/services/native/src/power_state_machine.cpp +++ b/services/native/src/power_state_machine.cpp @@ -235,7 +235,9 @@ void PowerStateMachine::SuspendDeviceInner( POWER_HILOGD(FEATURE_SUSPEND, "Do not suspend device, screen state is ignored"); } - SetState(PowerState::INACTIVE, GetReasionBySuspendType(type), true); + if (SetState(PowerState::INACTIVE, GetReasionBySuspendType(type), true)) { + ResetSleepTimer(); + } FinishTrace(HITRACE_TAG_POWER); POWER_HILOGD(FEATURE_SUSPEND, "Suspend device finish"); } @@ -642,11 +644,11 @@ void PowerStateMachine::ResetInactiveTimer() void PowerStateMachine::ResetSleepTimer() { - CancelDelayTimer(PowerStateMachine::CHECK_USER_ACTIVITY_TIMEOUT_MSG); - CancelDelayTimer(PowerStateMachine::CHECK_USER_ACTIVITY_OFF_TIMEOUT_MSG); - if (this->GetSleepTime() < 0) { - POWER_HILOGD(FEATURE_ACTIVITY, "Auto sleep is disabled"); - return; + auto pms = DelayedSpSingleton::GetInstance(); + auto suspendController = pms->GetSuspendController(); + if (suspendController != nullptr) { + suspendController->StartSleepTimer( + SuspendDeviceType::SUSPEND_DEVICE_REASON_APPLICATION, static_cast(SuspendAction::ACTION_AUTO_SUSPEND), 0); } } diff --git a/services/native/src/suspend/suspend_controller.h b/services/native/src/suspend/suspend_controller.h index e3efcc08..4a9e379b 100644 --- a/services/native/src/suspend/suspend_controller.h +++ b/services/native/src/suspend/suspend_controller.h @@ -64,10 +64,10 @@ public: { return sleepAction_; } + void StartSleepTimer(SuspendDeviceType reason, uint32_t action, uint32_t delay); private: void ControlListener(SuspendDeviceType reason, uint32_t action, uint32_t delay); - void StartSleepTimer(SuspendDeviceType reason, uint32_t action, uint32_t delay); void HandleAutoSleep(SuspendDeviceType reason); void HandleForceSleep(SuspendDeviceType reason); void HandleHibernate(SuspendDeviceType reason); -- Gitee