diff --git a/services/native/include/actions/idevice_state_action.h b/services/native/include/actions/idevice_state_action.h index dfae20f31c72b7dab1d90e414da9d5445f0e84da..ca69d3b19b3d514bbf114cbf6f8b380cca9900a2 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 82ae1fd3aea64b82226939d6b26bb265e04e253d..10c45c4013ebcbccbad9fef3df9c2971f02b98b3 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 159c848e1cc443638bcec5489663c8e3b66af0f5..72165558c01d6fc64cfc12e4b9857b6b1812241c 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 bf262ec0736583e9afd2bfff80988e345381050a..3f30fa3e3ca87042264db81a7806f4f839d16d06 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 2974d34de2cfdc8d065ca6c13bf4bfec4eff5e03..5f0c9d6a376d6cb4141a6e4f2d50bf6eada0c559 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 a99c8349036f0ea72ac3f24fb26a771a10a78d66..e58965a0458b7ddd7cef08a6ce1fb1b29d6f4b89 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 64959ca6519cb678ac59bcb1f9b9d29d14011cde..1a01ecfc4dc5b4c09a68ab1c3f50cbc1e77f1446 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 0000000000000000000000000000000000000000..e5100f3e4b641ab6babb271fbf2264d0cd1b99af --- /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 0000000000000000000000000000000000000000..9cb6cc7b547da2319403738b5f47f19e9df7e385 --- /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 256a7d55254d56e4d6a9ec3aa18bf9358eca311b..caa9b390e1f9e5ccad7cecc41343a7d43dd219d3 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 08a33fdafa86fe660ac2f47e8724a6b842597803..8f8a68aa43e95a2fca65447df18d164ba261173c 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 4c0ab8a595dc9ea12c1de36295547636f8108030..67188b02a28db8894d57776db8840f27e5bc7a02 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));