From 7afb64f10499ce994d70a4fc963b230d35cc8a63 Mon Sep 17 00:00:00 2001 From: yanghang Date: Tue, 29 Apr 2025 11:14:47 +0800 Subject: [PATCH] fix: add setScreenOnBrightness Signed-off-by: yanghang --- .../include/actions/idevice_state_action.h | 1 + services/native/include/power_state_machine.h | 2 ++ .../display/default_device_state_action.cpp | 5 ++++ .../display/default_device_state_action.h | 1 + .../default/display/device_state_action.cpp | 6 ++++ .../default/display/device_state_action.h | 1 + services/native/src/power_state_machine.cpp | 10 +++++++ .../native/src/power_state_machine.cpp.rej | 30 +++++++++++++++++++ .../src/wakeup/wakeup_controller.cpp.rej | 9 ++++++ test/fuzztest/power_utils/power_fuzzer.cpp | 4 +++ test/mock/action/mock_state_action.h | 1 + test/systemtest/mock/mock_state_action.h | 1 + 12 files changed, 71 insertions(+) create mode 100644 services/native/src/power_state_machine.cpp.rej create mode 100644 services/native/src/wakeup/wakeup_controller.cpp.rej diff --git a/services/native/include/actions/idevice_state_action.h b/services/native/include/actions/idevice_state_action.h index dfae20f3..ca69d3b1 100644 --- a/services/native/include/actions/idevice_state_action.h +++ b/services/native/include/actions/idevice_state_action.h @@ -45,6 +45,7 @@ public: virtual DisplayState GetDisplayState() = 0; virtual uint32_t SetDisplayState(DisplayState state, StateChangeReason reason = StateChangeReason::STATE_CHANGE_REASON_UNKNOWN) = 0; + virtual void SetInternalScreenBrightness() = 0; virtual bool TryToCancelScreenOff() = 0; virtual void BeginPowerkeyScreenOff() = 0; virtual void EndPowerkeyScreenOff() = 0; diff --git a/services/native/include/power_state_machine.h b/services/native/include/power_state_machine.h index 82ae1fd3..10c45c40 100644 --- a/services/native/include/power_state_machine.h +++ b/services/native/include/power_state_machine.h @@ -195,6 +195,8 @@ public: void SetForceTimingOut(bool enabled); void LockScreenAfterTimingOut(bool enabled, bool checkScreenOnLock, bool sendScreenOffEvent); bool IsSettingState(PowerState state); + void SetInternalScreenDisplayPower(DisplayState state, StateChangeReason reason); + void SetInternalScreenBrightness(); private: enum PreBrightState : uint32_t { diff --git a/services/native/src/actions/default/display/default_device_state_action.cpp b/services/native/src/actions/default/display/default_device_state_action.cpp index 159c848e..72165558 100644 --- a/services/native/src/actions/default/display/default_device_state_action.cpp +++ b/services/native/src/actions/default/display/default_device_state_action.cpp @@ -55,6 +55,11 @@ uint32_t DefaultDeviceStateAction::SetDisplayState(const DisplayState state, Sta return ActionResult::SUCCESS; } +void DefaultDeviceStateAction::SetInternalScreenBrightness() +{ + return; +} + void DefaultDeviceStateAction::SetCoordinated(bool coordinated) { (void)coordinated; diff --git a/services/native/src/actions/default/display/default_device_state_action.h b/services/native/src/actions/default/display/default_device_state_action.h index bf262ec0..3f30fa3e 100644 --- a/services/native/src/actions/default/display/default_device_state_action.h +++ b/services/native/src/actions/default/display/default_device_state_action.h @@ -36,6 +36,7 @@ public: void EndPowerkeyScreenOff() override {}; uint32_t SetDisplayState(DisplayState state, StateChangeReason reason = StateChangeReason::STATE_CHANGE_REASON_UNKNOWN) override; + void SetInternalScreenBrightness() override; void SetCoordinated(bool coordinated) override; uint32_t GoToSleep(std::function onSuspend, std::function onWakeup, bool force) override; void RegisterCallback(std::function& callback) override; diff --git a/services/native/src/actions/default/display/device_state_action.cpp b/services/native/src/actions/default/display/device_state_action.cpp index 2974d34d..5f0c9d6a 100644 --- a/services/native/src/actions/default/display/device_state_action.cpp +++ b/services/native/src/actions/default/display/device_state_action.cpp @@ -248,6 +248,12 @@ uint32_t DeviceStateAction::SetDisplayState(DisplayState state, StateChangeReaso return ret ? ActionResult::SUCCESS : ActionResult::FAILED; } +void DeviceStateAction::SetInternalScreenBrightness() +{ + POWER_HILOGI(FEATURE_POWER_STATE, "SetInternalScreenBrightness"); + DisplayPowerMgrClient::GetInstance().SetScreenOnBrightness(); +} + void DeviceStateAction::SetCoordinated(bool coordinated) { coordinated_ = coordinated; diff --git a/services/native/src/actions/default/display/device_state_action.h b/services/native/src/actions/default/display/device_state_action.h index a99c8349..e58965a0 100644 --- a/services/native/src/actions/default/display/device_state_action.h +++ b/services/native/src/actions/default/display/device_state_action.h @@ -37,6 +37,7 @@ public: DisplayState GetDisplayState() override; uint32_t SetDisplayState(DisplayState state, StateChangeReason reason = StateChangeReason::STATE_CHANGE_REASON_UNKNOWN) override; + void SetInternalScreenBrightness() override; bool TryToCancelScreenOff() override; void BeginPowerkeyScreenOff() override; void EndPowerkeyScreenOff() override; diff --git a/services/native/src/power_state_machine.cpp b/services/native/src/power_state_machine.cpp index 64959ca6..1a01ecfc 100644 --- a/services/native/src/power_state_machine.cpp +++ b/services/native/src/power_state_machine.cpp @@ -1292,6 +1292,16 @@ void PowerStateMachine::LockScreenAfterTimingOut(bool enabled, bool checkScreenO enabledScreenOffEvent_.store(sendScreenOffEvent, std::memory_order_relaxed); } +void PowerStateMachine::SetInternalScreenDisplayPower(DisplayState state, StateChangeReason reason) +{ + this->stateAction_->SetInternalScreenDisplayPower(state, reason); +} + +void PowerStateMachine::SetInternalScreenBrightness() +{ + this->stateAction_->SetInternalScreenBrightness(); +} + bool PowerStateMachine::CheckRunningLock(PowerState state) { POWER_HILOGD(FEATURE_RUNNING_LOCK, "Enter, state = %{public}u", state); diff --git a/services/native/src/power_state_machine.cpp.rej b/services/native/src/power_state_machine.cpp.rej new file mode 100644 index 00000000..e5100f3e --- /dev/null +++ b/services/native/src/power_state_machine.cpp.rej @@ -0,0 +1,30 @@ +diff a/services/native/src/power_state_machine.cpp b/services/native/src/power_state_machine.cpp (rejected hunks) +@@ -307,8 +307,9 @@ void PowerStateMachine::EmplaceAwake() + } + } + #ifdef POWER_MANAGER_ENABLE_EXTERNAL_SCREEN_MANAGEMENT +- if (reason == StateChangeReason::STATE_CHANGE_REASON_SWITCH && IsSwitchOpen()) { +- this->stateAction_->SetInternalScreenDisplayPower(DisplayState::DISPLAY_ON, reason); ++ if (reason == StateChangeReason::STATE_CHANGE_REASON_SWITCH && IsSwitchOpen() && IsScreenOn()) { ++ SetInternalScreenDisplayPower(DisplayState::DISPLAY_ON, reason); ++ SetInternalScreenBrightness(); + } + #endif + uint32_t ret = this->stateAction_->SetDisplayState(targetState, reason); +@@ -1516,6 +1517,16 @@ bool PowerStateMachine::SetDozeMode(DisplayState state) + return ret == ActionResult::SUCCESS; + } + ++void PowerStateMachine::SetInternalScreenDisplayPower(DisplayState state, StateChangeReason reason) ++{ ++ this->stateAction_->SetInternalScreenDisplayPower(state, reason); ++} ++ ++void PowerStateMachine::SetInternalScreenBrightness() ++{ ++ this->stateAction_->SetInternalScreenBrightness(); ++} ++ + bool PowerStateMachine::CheckRunningLock(PowerState state) + { + POWER_HILOGD(FEATURE_RUNNING_LOCK, "Enter, state = %{public}u", state); diff --git a/services/native/src/wakeup/wakeup_controller.cpp.rej b/services/native/src/wakeup/wakeup_controller.cpp.rej new file mode 100644 index 00000000..9cb6cc7b --- /dev/null +++ b/services/native/src/wakeup/wakeup_controller.cpp.rej @@ -0,0 +1,9 @@ +diff a/services/native/src/wakeup/wakeup_controller.cpp b/services/native/src/wakeup/wakeup_controller.cpp (rejected hunks) +@@ -717,6 +717,7 @@ void WakeupController::PowerOnInternalScreen(WakeupDeviceType type) + uint64_t screenId = Rosen::DisplayManagerLite::GetInstance().GetInternalScreenId(); + bool ret = Rosen::DisplayManagerLite::GetInstance().SetScreenPowerById( + screenId, Rosen::ScreenPowerState::POWER_ON, dmsReason); ++ stateMachine_->SetInternalScreenBrightness(); + POWER_HILOGI(FEATURE_WAKEUP, + "[UL_POWER] Power on internal screen, reason = %{public}u, screenId = %{public}u, ret = %{public}d", dmsReason, + static_cast(screenId), ret); diff --git a/test/fuzztest/power_utils/power_fuzzer.cpp b/test/fuzztest/power_utils/power_fuzzer.cpp index 256a7d55..caa9b390 100644 --- a/test/fuzztest/power_utils/power_fuzzer.cpp +++ b/test/fuzztest/power_utils/power_fuzzer.cpp @@ -69,6 +69,10 @@ public: { return 0; } + virtual void SetInternalScreenBrightness() + { + return; + } virtual bool TryToCancelScreenOff() { return false; diff --git a/test/mock/action/mock_state_action.h b/test/mock/action/mock_state_action.h index 08a33fda..8f8a68aa 100644 --- a/test/mock/action/mock_state_action.h +++ b/test/mock/action/mock_state_action.h @@ -35,6 +35,7 @@ public: MOCK_METHOD3(RefreshActivity, void(int64_t callTimeMs, UserActivityType type, uint32_t flags)); MOCK_METHOD0(GetDisplayState, DisplayState()); MOCK_METHOD2(SetDisplayState, uint32_t(DisplayState state, StateChangeReason reason)); + MOCK_METHOD0(SetInternalScreenBrightness, void()); MOCK_METHOD1(SetCoordinated, void(bool coordinated)); MOCK_METHOD3(GoToSleep, uint32_t(std::function onSuspend, std::function onWakeup, bool force)); MOCK_METHOD1(RegisterCallback, void(std::function& callback)); diff --git a/test/systemtest/mock/mock_state_action.h b/test/systemtest/mock/mock_state_action.h index 4c0ab8a5..67188b02 100644 --- a/test/systemtest/mock/mock_state_action.h +++ b/test/systemtest/mock/mock_state_action.h @@ -35,6 +35,7 @@ public: MOCK_METHOD3(RefreshActivity, void(int64_t callTimeMs, UserActivityType type, uint32_t flags)); MOCK_METHOD0(GetDisplayState, DisplayState()); MOCK_METHOD2(SetDisplayState, uint32_t(DisplayState state, StateChangeReason reason)); + MOCK_METHOD0(SetInternalScreenBrightness, void()); MOCK_METHOD1(SetCoordinated, void(bool coordinated)); MOCK_METHOD3(GoToSleep, uint32_t(std::function onSuspend, std::function onWakeup, bool force)); MOCK_METHOD1(RegisterCallback, void(std::function& callback)); -- Gitee