diff --git a/services/native/include/actions/idevice_state_action.h b/services/native/include/actions/idevice_state_action.h index bdeb6e927470d6b5e6b011c6e68898de47be2246..17e306a3c3561ae5c59e54604bcf96d28325c2d3 100644 --- a/services/native/include/actions/idevice_state_action.h +++ b/services/native/include/actions/idevice_state_action.h @@ -46,6 +46,7 @@ public: virtual uint32_t SetDisplayState( DisplayState state, StateChangeReason reason = StateChangeReason::STATE_CHANGE_REASON_UNKNOWN) = 0; virtual void SetInternalScreenDisplayPower(DisplayState state, StateChangeReason reason) = 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 3b2c11a852972c8d4caeec445f11d0245017e961..656781464f11ed797eafc78b1dc5285d8d6d0e1a 100644 --- a/services/native/include/power_state_machine.h +++ b/services/native/include/power_state_machine.h @@ -227,6 +227,8 @@ public: bool IsSettingState(PowerState state); void SetEnableDoze(bool enable); bool SetDozeMode(DisplayState 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 f5d51ced7f64181eb809ea489b40ffb6d103043c..d703833106dc0e94e7b66ee8fa4911547743fcad 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 @@ -61,6 +61,11 @@ void DefaultDeviceStateAction::SetInternalScreenDisplayPower(DisplayState state, (void)reason; } +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 899a54b0463193607612d372466b1a7c38bb4ad8..34a210239a44fba74cc9ccc890e9b664cd77ca84 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 @@ -37,6 +37,7 @@ public: uint32_t SetDisplayState(DisplayState state, StateChangeReason reason = StateChangeReason::STATE_CHANGE_REASON_UNKNOWN) override; void SetInternalScreenDisplayPower(DisplayState state, StateChangeReason reason) 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 744631bbedc74a90d65a809aeb740c4249dd8893..22156b0fb8a40c9b71969feb1254aabdae9c213d 100644 --- a/services/native/src/actions/default/display/device_state_action.cpp +++ b/services/native/src/actions/default/display/device_state_action.cpp @@ -275,6 +275,12 @@ void DeviceStateAction::SetInternalScreenDisplayPower(DisplayState state, StateC "SetInternalScreenDisplayPower, state=%{public}u, reason=%{public}u, ret = %{public}d", state, reason, ret); } +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 7df2ee16787ad10a468128838c16bce0b6f3c9d0..4e4fef455de63b7a4b4e10b4b7e9e598b89d3893 100644 --- a/services/native/src/actions/default/display/device_state_action.h +++ b/services/native/src/actions/default/display/device_state_action.h @@ -38,6 +38,7 @@ public: uint32_t SetDisplayState(DisplayState state, StateChangeReason reason = StateChangeReason::STATE_CHANGE_REASON_UNKNOWN) override; void SetInternalScreenDisplayPower(DisplayState state, StateChangeReason reason) 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 eed0bf0de168f1b1f890ccf5ecc60fef4fa349b2..870f503cfec7f3897844cd86645cf4f082a480e9 100644 --- a/services/native/src/power_state_machine.cpp +++ b/services/native/src/power_state_machine.cpp @@ -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 b/services/native/src/wakeup/wakeup_controller.cpp index be5f59dc82bc7927bf4c11d245304180872e5607..bb2e2a1f76e0f8482a8db036cb753ae2ba2badd2 100644 --- a/services/native/src/wakeup/wakeup_controller.cpp +++ b/services/native/src/wakeup/wakeup_controller.cpp @@ -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 051a1283405ede6a03bd4b8e31a5a1282a74f622..bdbf0b980b101c50ef5bebc111d317227937852f 100644 --- a/test/fuzztest/power_utils/power_fuzzer.cpp +++ b/test/fuzztest/power_utils/power_fuzzer.cpp @@ -74,6 +74,10 @@ public: { return; } + 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 42d0462540cbb58a666b6093727932d30b8f3014..a2d087933a632be61958d574248edf47a7c95979 100644 --- a/test/mock/action/mock_state_action.h +++ b/test/mock/action/mock_state_action.h @@ -36,6 +36,7 @@ public: MOCK_METHOD0(GetDisplayState, DisplayState()); MOCK_METHOD2(SetDisplayState, uint32_t(DisplayState state, StateChangeReason reason)); MOCK_METHOD2(SetInternalScreenDisplayPower, void(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 cf07fca37669fdc0affd16c4ed6519470c4d2635..850e79a016d0fad83e0aed9b2615842d7a1e548a 100644 --- a/test/systemtest/mock/mock_state_action.h +++ b/test/systemtest/mock/mock_state_action.h @@ -36,6 +36,7 @@ public: MOCK_METHOD0(GetDisplayState, DisplayState()); MOCK_METHOD2(SetDisplayState, uint32_t(DisplayState state, StateChangeReason reason)); MOCK_METHOD2(SetInternalScreenDisplayPower, void(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));