已合并
add aod set power #17656
zhaoliang创建于 1月20日
add aod set power #17656
已合并
共 19 个文件变更+265-0
| @@ -199,6 +199,7 @@ enum class DisplayManagerMessage : unsigned int { | |||
| 199 | TRANS_ID_SYNC_SCREEN_POWER_STATE, | 199 | TRANS_ID_SYNC_SCREEN_POWER_STATE, |
| 200 | TRANS_ID_REGISTER_DISPLAY_ATTRIBUTE_AGENT, | 200 | TRANS_ID_REGISTER_DISPLAY_ATTRIBUTE_AGENT, |
| 201 | TRANS_ID_UNREGISTER_DISPLAY_ATTRIBUTE, | 201 | TRANS_ID_UNREGISTER_DISPLAY_ATTRIBUTE, |
| 202 | + TRANS_ID_SET_POWER_STATE_AOD, | ||
| 202 | }; | 203 | }; |
| 203 | } | 204 | } |
| 204 | 205 | ||
| @@ -119,6 +119,9 @@ enum class PowerStateChangeReason : uint32_t { | |||
| 119 | STATE_CHANGE_REASON_END_DREAM = 50, | 119 | STATE_CHANGE_REASON_END_DREAM = 50, |
| 120 | STATE_CHANGE_REASON_SYNCHRONIZE_POWER_STATE = 51, | 120 | STATE_CHANGE_REASON_SYNCHRONIZE_POWER_STATE = 51, |
| 121 | STATE_CHANGE_REASON_APPCAST = 52, | 121 | STATE_CHANGE_REASON_APPCAST = 52, |
| 122 | + STATE_CHANGE_REASON_AOD_SET_DOZE = 53, | ||
| 123 | + STATE_CHANGE_REASON_AOD_SET_DOZE_SUSPEND = 54, | ||
| 124 | + STATE_CHANGE_REASON_AOD_SET_OFF = 55, | ||
| 122 | STATE_CHANGE_REASON_REMOTE = 100, | 125 | STATE_CHANGE_REASON_REMOTE = 100, |
| 123 | STATE_CHANGE_REASON_UNKNOWN = 1000, | 126 | STATE_CHANGE_REASON_UNKNOWN = 1000, |
| 124 | }; | 127 | }; |
| @@ -137,6 +140,15 @@ enum class ScreenPowerState : uint32_t { | |||
| 137 | POWER_DOZE_SUSPEND, | 140 | POWER_DOZE_SUSPEND, |
| 138 | }; | 141 | }; |
| 139 | 142 | ||
| 143 | +/** | ||
| 144 | + * @brief Enumerates the state of the screen power by SceneBoard. | ||
| 145 | + */ | ||
| 146 | +enum class ScbScreenPowerState : uint32_t { | ||
| 147 | + POWER_OFF, | ||
| 148 | + POWER_DOZE, | ||
| 149 | + POWER_DOZE_SUSPEND, | ||
| 150 | +}; | ||
| 151 | + | ||
| 140 | enum class ScreenPropertyChangeType : uint32_t { | 152 | enum class ScreenPropertyChangeType : uint32_t { |
| 141 | UNSPECIFIED = 0, | 153 | UNSPECIFIED = 0, |
| 142 | /* Screen connection. */ | 154 | /* Screen connection. */ |
| @@ -42,6 +42,11 @@ constexpr int32_t INVALID_ID = -1; | |||
| 42 | namespace { | 42 | namespace { |
| 43 | const std::string ON_SCREEN_CONNECTION_CHANGE_CALLBACK = "screenConnectChange"; | 43 | const std::string ON_SCREEN_CONNECTION_CHANGE_CALLBACK = "screenConnectChange"; |
| 44 | const std::string ON_TENT_MODE_CHANGE_CALLBACK = "tentModeChange"; | 44 | const std::string ON_TENT_MODE_CHANGE_CALLBACK = "tentModeChange"; |
| 45 | +const std::map<ScbScreenPowerState, ScreenPowerState> POWER_STATE_MAP { | ||
| 46 | + { ScbScreenPowerState::POWER_OFF, ScreenPowerState::POWER_OFF }, | ||
| 47 | + { ScbScreenPowerState::POWER_DOZE, ScreenPowerState::POWER_DOZE }, | ||
| 48 | + { ScbScreenPowerState::POWER_DOZE_SUSPEND, ScreenPowerState::POWER_DOZE_SUSPEND }, | ||
| 49 | +}; | ||
| 45 | } // namespace | 50 | } // namespace |
| 46 | 51 | ||
| 47 | JsScreenSessionManager::JsScreenSessionManager(napi_env env) : env_(env) | 52 | JsScreenSessionManager::JsScreenSessionManager(napi_env env) : env_(env) |
| @@ -72,6 +77,8 @@ napi_value JsScreenSessionManager::Init(napi_env env, napi_value exportObj) | |||
| 72 | JsScreenUtils::CreateJsFoldStatus(env)); | 77 | JsScreenUtils::CreateJsFoldStatus(env)); |
| 73 | napi_set_named_property(env, exportObj, "ScreenPropertyChangeType", | 78 | napi_set_named_property(env, exportObj, "ScreenPropertyChangeType", |
| 74 | JsScreenUtils::CreateJsScreenPropertyChangeType(env)); | 79 | JsScreenUtils::CreateJsScreenPropertyChangeType(env)); |
| 80 | + napi_set_named_property(env, exportObj, "ScreenPowerState", | ||
| 81 | + JsScreenUtils::CreateJsScreenPowerState(env)); | ||
| 75 | napi_set_named_property(env, exportObj, "SuperFoldStatus", | 82 | napi_set_named_property(env, exportObj, "SuperFoldStatus", |
| 76 | JsScreenUtils::CreateJsSuperFoldStatus(env)); | 83 | JsScreenUtils::CreateJsSuperFoldStatus(env)); |
| 77 | napi_set_named_property(env, exportObj, "FoldDisplayMode", | 84 | napi_set_named_property(env, exportObj, "FoldDisplayMode", |
| @@ -113,6 +120,8 @@ napi_value JsScreenSessionManager::Init(napi_env env, napi_value exportObj) | |||
| 113 | JsScreenSessionManager::NotifyScreenConnectCompletion); | 120 | JsScreenSessionManager::NotifyScreenConnectCompletion); |
| 114 | BindNativeFunction(env, exportObj, "notifyAodOpCompletion", moduleName, | 121 | BindNativeFunction(env, exportObj, "notifyAodOpCompletion", moduleName, |
| 115 | JsScreenSessionManager::NotifyAodOpCompletion); | 122 | JsScreenSessionManager::NotifyAodOpCompletion); |
| 123 | + BindNativeFunction(env, exportObj, "setPowerStateForAod", moduleName, | ||
| 124 | + JsScreenSessionManager::SetPowerStateForAod); | ||
| 116 | BindNativeFunction(env, exportObj, "recordEventFromScb", moduleName, | 125 | BindNativeFunction(env, exportObj, "recordEventFromScb", moduleName, |
| 117 | JsScreenSessionManager::RecordEventFromScb); | 126 | JsScreenSessionManager::RecordEventFromScb); |
| 118 | BindNativeFunction(env, exportObj, "getFoldStatus", moduleName, JsScreenSessionManager::GetFoldStatus); | 127 | BindNativeFunction(env, exportObj, "getFoldStatus", moduleName, JsScreenSessionManager::GetFoldStatus); |
| @@ -292,6 +301,13 @@ napi_value JsScreenSessionManager::NotifyAodOpCompletion(napi_env env, napi_call | |||
| 292 | return (me != nullptr) ? me->OnNotifyAodOpCompletion(env, info) : nullptr; | 301 | return (me != nullptr) ? me->OnNotifyAodOpCompletion(env, info) : nullptr; |
| 293 | } | 302 | } |
| 294 | 303 | ||
| 304 | +napi_value JsScreenSessionManager::SetPowerStateForAod(napi_env env, napi_callback_info info) | ||
| 305 | +{ | ||
| 306 | + TLOGD(WmsLogTag::DMS, "[NAPI]SetPowerStateForAod"); | ||
| 307 | + JsScreenSessionManager* me = CheckParamsAndGetThis<JsScreenSessionManager>(env, info); | ||
| 308 | + return (me != nullptr) ? me->OnSetPowerStateForAod(env, info) : nullptr; | ||
| 309 | +} | ||
| 310 | + | ||
| 295 | napi_value JsScreenSessionManager::RecordEventFromScb(napi_env env, napi_callback_info info) | 311 | napi_value JsScreenSessionManager::RecordEventFromScb(napi_env env, napi_callback_info info) |
| 296 | { | 312 | { |
| 297 | TLOGD(WmsLogTag::DMS, "[NAPI]RecordEventFromScb"); | 313 | TLOGD(WmsLogTag::DMS, "[NAPI]RecordEventFromScb"); |
| @@ -1141,6 +1157,41 @@ napi_value JsScreenSessionManager::OnNotifyAodOpCompletion(napi_env env, const n | |||
| 1141 | return NapiGetUndefined(env); | 1157 | return NapiGetUndefined(env); |
| 1142 | } | 1158 | } |
| 1143 | 1159 | ||
| 1160 | +napi_value JsScreenSessionManager::OnSetPowerStateForAod(napi_env env, const napi_callback_info info) | ||
| 1161 | +{ | ||
| 1162 | + TLOGD(WmsLogTag::DMS, "[NAPI]Enter"); | ||
| 1163 | + size_t argc = ARGC_ONE; | ||
| 1164 | + napi_value argv[ARGC_ONE] = {nullptr}; | ||
| 1165 | + napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr); | ||
| 1166 | + if (argc < ARGC_ONE) { | ||
| 1167 | + TLOGE(WmsLogTag::DMS, "[NAPI]Argc is invalid: %{public}zu", argc); | ||
| 1168 | + napi_throw(env, CreateJsError(env, static_cast<int32_t>(WSErrorCode::WS_ERROR_INVALID_PARAM), | ||
| 1169 | + "Input parameter is missing or invalid")); | ||
| 1170 | + return NapiGetUndefined(env); | ||
| 1171 | + } | ||
| 1172 | + ScbScreenPowerState state; | ||
| 1173 | + ScreenPowerState screenState; | ||
| 1174 | + if (!ConvertFromJsValue(env, argv[0], state) || !CheckAndTransState(state, screenState)) { | ||
| 1175 | + TLOGE(WmsLogTag::DMS, "[NAPI]Failed to convert parameter to aod operation"); | ||
| 1176 | + napi_throw(env, CreateJsError(env, static_cast<int32_t>(WSErrorCode::WS_ERROR_INVALID_PARAM), | ||
| 1177 | + "Input parameter is missing or invalid")); | ||
| 1178 | + return NapiGetUndefined(env); | ||
| 1179 | + } | ||
| 1180 | + ScreenSessionManagerClient::GetInstance().SetPowerStateForAod(screenState); | ||
| 1181 | + return NapiGetUndefined(env); | ||
| 1182 | +} | ||
| 1183 | + | ||
| 1184 | +bool JsScreenSessionManager::CheckAndTransState(ScbScreenPowerState state, ScreenPowerState& screenState) | ||
| 1185 | +{ | ||
| 1186 | + auto it = POWER_STATE_MAP.find(state); | ||
| 1187 | + if (it != POWER_STATE_MAP.end()) { | ||
| 1188 | + screenState = it->second; | ||
| 1189 | + return true; | ||
| 1190 | + } | ||
| 1191 | + TLOGE(WmsLogTag::DMS, "can not trans state: %{public}u", state); | ||
| 1192 | + return false; | ||
| 1193 | +} | ||
| 1194 | + | ||
| 1144 | napi_value JsScreenSessionManager::OnRecordEventFromScb(napi_env env, const napi_callback_info info) | 1195 | napi_value JsScreenSessionManager::OnRecordEventFromScb(napi_env env, const napi_callback_info info) |
| 1145 | { | 1196 | { |
| 1146 | TLOGD(WmsLogTag::DMS, "[NAPI]OnRecordEventFromScb"); | 1197 | TLOGD(WmsLogTag::DMS, "[NAPI]OnRecordEventFromScb"); |
| @@ -60,6 +60,7 @@ private: | |||
| 60 | static napi_value NotifyFoldToExpandCompletion(napi_env env, napi_callback_info info); | 60 | static napi_value NotifyFoldToExpandCompletion(napi_env env, napi_callback_info info); |
| 61 | static napi_value NotifyScreenConnectCompletion(napi_env env, napi_callback_info info); | 61 | static napi_value NotifyScreenConnectCompletion(napi_env env, napi_callback_info info); |
| 62 | static napi_value NotifyAodOpCompletion(napi_env env, napi_callback_info info); | 62 | static napi_value NotifyAodOpCompletion(napi_env env, napi_callback_info info); |
| 63 | + static napi_value SetPowerStateForAod(napi_env env, napi_callback_info info); | ||
| 63 | static napi_value RecordEventFromScb(napi_env env, napi_callback_info info); | 64 | static napi_value RecordEventFromScb(napi_env env, napi_callback_info info); |
| 64 | static napi_value SetCameraStatus(napi_env env, napi_callback_info info); | 65 | static napi_value SetCameraStatus(napi_env env, napi_callback_info info); |
| 65 | static napi_value GetFoldStatus(napi_env env, napi_callback_info info); | 66 | static napi_value GetFoldStatus(napi_env env, napi_callback_info info); |
| @@ -102,6 +103,7 @@ private: | |||
| 102 | napi_value OnNotifyFoldToExpandCompletion(napi_env env, const napi_callback_info info); | 103 | napi_value OnNotifyFoldToExpandCompletion(napi_env env, const napi_callback_info info); |
| 103 | napi_value OnNotifyScreenConnectCompletion(napi_env env, const napi_callback_info info); | 104 | napi_value OnNotifyScreenConnectCompletion(napi_env env, const napi_callback_info info); |
| 104 | napi_value OnNotifyAodOpCompletion(napi_env env, const napi_callback_info info); | 105 | napi_value OnNotifyAodOpCompletion(napi_env env, const napi_callback_info info); |
| 106 | + napi_value OnSetPowerStateForAod(napi_env env, const napi_callback_info info); | ||
| 105 | napi_value OnRecordEventFromScb(napi_env env, const napi_callback_info info); | 107 | napi_value OnRecordEventFromScb(napi_env env, const napi_callback_info info); |
| 106 | napi_value OnGetFoldStatus(napi_env env, const napi_callback_info info); | 108 | napi_value OnGetFoldStatus(napi_env env, const napi_callback_info info); |
| 107 | napi_value OnGetSuperFoldStatus(napi_env env, const napi_callback_info info); | 109 | napi_value OnGetSuperFoldStatus(napi_env env, const napi_callback_info info); |
| @@ -124,6 +126,7 @@ private: | |||
| 124 | napi_value OnRegisterSwitchUserAnimationNotification(napi_env env, napi_callback_info info); | 126 | napi_value OnRegisterSwitchUserAnimationNotification(napi_env env, napi_callback_info info); |
| 125 | bool ObtainCallBackInfo(napi_env env, const napi_callback_info info, | 127 | bool ObtainCallBackInfo(napi_env env, const napi_callback_info info, |
| 126 | std::string& callbackType, napi_ref& callbackRef); | 128 | std::string& callbackType, napi_ref& callbackRef); |
| 129 | + bool CheckAndTransState(ScbScreenPowerState state, ScreenPowerState& screenState); | ||
| 127 | 130 | ||
| 128 | std::shared_ptr<NativeReference> screenConnectionCallback_; | 131 | std::shared_ptr<NativeReference> screenConnectionCallback_; |
| 129 | std::vector<std::shared_ptr<NativeReference>> tentModeChangeCallback_; | 132 | std::vector<std::shared_ptr<NativeReference>> tentModeChangeCallback_; |
| @@ -184,6 +184,24 @@ napi_value JsScreenUtils::CreateJsScreenPropertyChangeType(napi_env env) | |||
| 184 | return objValue; | 184 | return objValue; |
| 185 | } | 185 | } |
| 186 | 186 | ||
| 187 | +napi_value JsScreenUtils::CreateJsScreenPowerState(napi_env env) | ||
| 188 | +{ | ||
| 189 | + napi_value objValue = nullptr; | ||
| 190 | + napi_create_object(env, &objValue); | ||
| 191 | + if (objValue == nullptr) { | ||
| 192 | + TLOGE(WmsLogTag::DMS, "Failed to create object!"); | ||
| 193 | + return NapiGetUndefined(env); | ||
| 194 | + } | ||
| 195 | + | ||
| 196 | + napi_set_named_property(env, objValue, "POWER_OFF", CreateJsValue(env, | ||
| 197 | + static_cast<int32_t>(ScbScreenPowerState::POWER_OFF))); | ||
| 198 | + napi_set_named_property(env, objValue, "POWER_DOZE", CreateJsValue(env, | ||
| 199 | + static_cast<int32_t>(ScbScreenPowerState::POWER_DOZE))); | ||
| 200 | + napi_set_named_property(env, objValue, "POWER_DOZE_SUSPEND", CreateJsValue(env, | ||
| 201 | + static_cast<int32_t>(ScbScreenPowerState::POWER_DOZE_SUSPEND))); | ||
| 202 | + return objValue; | ||
| 203 | +} | ||
| 204 | + | ||
| 187 | napi_value JsScreenUtils::CreateJsSuperFoldStatus(napi_env env) | 205 | napi_value JsScreenUtils::CreateJsSuperFoldStatus(napi_env env) |
| 188 | { | 206 | { |
| 189 | napi_value objValue = nullptr; | 207 | napi_value objValue = nullptr; |
| @@ -36,6 +36,7 @@ public: | |||
| 36 | static napi_value CreateJsScreenPropertyChangeReason(napi_env env); | 36 | static napi_value CreateJsScreenPropertyChangeReason(napi_env env); |
| 37 | static napi_value CreateJsFoldStatus(napi_env env); | 37 | static napi_value CreateJsFoldStatus(napi_env env); |
| 38 | static napi_value CreateJsScreenPropertyChangeType(napi_env env); | 38 | static napi_value CreateJsScreenPropertyChangeType(napi_env env); |
| 39 | + static napi_value CreateJsScreenPowerState(napi_env env); | ||
| 39 | static napi_value CreateJsSuperFoldStatus(napi_env env); | 40 | static napi_value CreateJsSuperFoldStatus(napi_env env); |
| 40 | static napi_value CreateJsExtendScreenConnectStatus(napi_env env); | 41 | static napi_value CreateJsExtendScreenConnectStatus(napi_env env); |
| 41 | static napi_value CreateJsScreenModeChangeEvent(napi_env env); | 42 | static napi_value CreateJsScreenModeChangeEvent(napi_env env); |
| @@ -68,6 +68,8 @@ enum class ScreenPowerEvent { | |||
| 68 | WAKEUP_BEGIN, | 68 | WAKEUP_BEGIN, |
| 69 | SUSPEND_BEGIN, | 69 | SUSPEND_BEGIN, |
| 70 | WAKEUP_BEGIN_ADVANCED, | 70 | WAKEUP_BEGIN_ADVANCED, |
| 71 | + SET_SCREEN_POWER_FOR_ALL_DOZE, | ||
| 72 | + SET_SCREEN_POWER_FOR_ALL_DOZE_SUSPEND, | ||
| 71 | SCREEN_POWER_EVENT_MAX, | 73 | SCREEN_POWER_EVENT_MAX, |
| 72 | SYNC_POWER_ON, //Special scenario, PMS force synchronization ON state | 74 | SYNC_POWER_ON, //Special scenario, PMS force synchronization ON state |
| 73 | }; | 75 | }; |
| @@ -573,6 +573,7 @@ public: | |||
| 573 | bool IsFreezed(const int32_t& agentPid, const DisplayManagerAgentType& agentType); | 573 | bool IsFreezed(const int32_t& agentPid, const DisplayManagerAgentType& agentType); |
| 574 | bool isScreenShot_ = false; | 574 | bool isScreenShot_ = false; |
| 575 | void NotifyAodOpCompletion(AodOP operation, int32_t result) override; | 575 | void NotifyAodOpCompletion(AodOP operation, int32_t result) override; |
| 576 | + void SetPowerStateForAod(ScreenPowerState state) override; | ||
| 576 | void DoAodExitAndSetPower(ScreenId screenId, ScreenPowerStatus status); | 577 | void DoAodExitAndSetPower(ScreenId screenId, ScreenPowerStatus status); |
| 577 | void DoAodExitAndSetPowerAllOff(); | 578 | void DoAodExitAndSetPowerAllOff(); |
| 578 | DMError GetRoundedCorner(DisplayId displayId, int& radius) override; | 579 | DMError GetRoundedCorner(DisplayId displayId, int& radius) override; |
| @@ -330,6 +330,7 @@ public: | |||
| 330 | virtual void NotifyFoldToExpandCompletion(bool foldToExpand) {} | 330 | virtual void NotifyFoldToExpandCompletion(bool foldToExpand) {} |
| 331 | virtual void NotifyScreenConnectCompletion(ScreenId screenId) {} | 331 | virtual void NotifyScreenConnectCompletion(ScreenId screenId) {} |
| 332 | virtual void NotifyAodOpCompletion(AodOP op, int32_t result) {} | 332 | virtual void NotifyAodOpCompletion(AodOP op, int32_t result) {} |
| 333 | + virtual void SetPowerStateForAod(ScreenPowerState state) {} | ||
| 333 | virtual void RecordEventFromScb(std::string description, bool needRecordEvent) {} | 334 | virtual void RecordEventFromScb(std::string description, bool needRecordEvent) {} |
| 334 | virtual DeviceScreenConfig GetDeviceScreenConfig() { return {}; } | 335 | virtual DeviceScreenConfig GetDeviceScreenConfig() { return {}; } |
| 335 | virtual DMError SetVirtualScreenMaxRefreshRate(ScreenId id, uint32_t refreshRate, | 336 | virtual DMError SetVirtualScreenMaxRefreshRate(ScreenId id, uint32_t refreshRate, |
| @@ -221,6 +221,7 @@ public: | |||
| 221 | void NotifyFoldToExpandCompletion(bool foldToExpand) override; | 221 | void NotifyFoldToExpandCompletion(bool foldToExpand) override; |
| 222 | void NotifyScreenConnectCompletion(ScreenId screenId) override; | 222 | void NotifyScreenConnectCompletion(ScreenId screenId) override; |
| 223 | void NotifyAodOpCompletion(AodOP op, int32_t result) override; | 223 | void NotifyAodOpCompletion(AodOP op, int32_t result) override; |
| 224 | + void SetPowerStateForAod(ScreenPowerState state) override; | ||
| 224 | void RecordEventFromScb(std::string description, bool needRecordEvent) override; | 225 | void RecordEventFromScb(std::string description, bool needRecordEvent) override; |
| 225 | void SwitchUser() override; | 226 | void SwitchUser() override; |
| 226 | 227 | ||
| @@ -228,6 +228,10 @@ void ScreenStateMachine::InitStateMachineTbl() | |||
| 228 | 228 | ||
| 229 | stateMachine_[{ScreenTransitionState::SCREEN_OFF, ScreenPowerEvent::WAKEUP_BEGIN}] = { | 229 | stateMachine_[{ScreenTransitionState::SCREEN_OFF, ScreenPowerEvent::WAKEUP_BEGIN}] = { |
| 230 | ScreenTransitionState::WAIT_SCREEN_ON_READY, &ScreenStateMachine::DoWakeUpBegin}; | 230 | ScreenTransitionState::WAIT_SCREEN_ON_READY, &ScreenStateMachine::DoWakeUpBegin}; |
| 231 | + stateMachine_[{ScreenTransitionState::SCREEN_OFF, ScreenPowerEvent::SET_SCREEN_POWER_FOR_ALL_DOZE}] = { | ||
| 232 | + ScreenTransitionState::SCREEN_DOZE, &ScreenStateMachine::DoSetScreenPowerForAll}; | ||
| 233 | + stateMachine_[{ScreenTransitionState::SCREEN_OFF, ScreenPowerEvent::SET_SCREEN_POWER_FOR_ALL_DOZE_SUSPEND}] = { | ||
| 234 | + ScreenTransitionState::SCREEN_DOZE_SUSPEND, &ScreenStateMachine::DoSetScreenPowerForAll}; | ||
| 231 | stateMachine_[{ScreenTransitionState::SCREEN_OFF, ScreenPowerEvent::POWER_ON_DIRECTLY}] = { | 235 | stateMachine_[{ScreenTransitionState::SCREEN_OFF, ScreenPowerEvent::POWER_ON_DIRECTLY}] = { |
| 232 | ScreenTransitionState::SCREEN_ON, &ScreenStateMachine::DoSetScreenPower}; | 236 | ScreenTransitionState::SCREEN_ON, &ScreenStateMachine::DoSetScreenPower}; |
| 233 | stateMachine_[{ScreenTransitionState::SCREEN_OFF, ScreenPowerEvent::POWER_OFF_DIRECTLY}] = { | 237 | stateMachine_[{ScreenTransitionState::SCREEN_OFF, ScreenPowerEvent::POWER_OFF_DIRECTLY}] = { |
| @@ -315,6 +319,10 @@ void ScreenStateMachine::InitStateMachineTbl() | |||
| 315 | stateMachine_[{ScreenTransitionState::SCREEN_DOZE, ScreenPowerEvent::WAKEUP_BEGIN}] = { | 319 | stateMachine_[{ScreenTransitionState::SCREEN_DOZE, ScreenPowerEvent::WAKEUP_BEGIN}] = { |
| 316 | ScreenTransitionState::WAIT_SCREEN_ON_READY, &ScreenStateMachine::DoWakeUpBegin, | 320 | ScreenTransitionState::WAIT_SCREEN_ON_READY, &ScreenStateMachine::DoWakeUpBegin, |
| 317 | SCREEN_STATE_NORMAL_TIMEOUT_MS, &ScreenStateMachine::DoScreenPowerOn}; | 321 | SCREEN_STATE_NORMAL_TIMEOUT_MS, &ScreenStateMachine::DoScreenPowerOn}; |
| 322 | + stateMachine_[{ScreenTransitionState::SCREEN_DOZE, ScreenPowerEvent::SET_SCREEN_POWER_FOR_ALL_POWER_OFF}] = { | ||
| 323 | + ScreenTransitionState::SCREEN_OFF, &ScreenStateMachine::DoSetScreenPowerForAll}; | ||
| 324 | + stateMachine_[{ScreenTransitionState::SCREEN_DOZE, ScreenPowerEvent::SET_SCREEN_POWER_FOR_ALL_DOZE_SUSPEND}] = { | ||
| 325 | + ScreenTransitionState::SCREEN_DOZE_SUSPEND, &ScreenStateMachine::DoSetScreenPowerForAll}; | ||
| 318 | stateMachine_[{ScreenTransitionState::SCREEN_DOZE, ScreenPowerEvent::POWER_OFF}] = { | 326 | stateMachine_[{ScreenTransitionState::SCREEN_DOZE, ScreenPowerEvent::POWER_OFF}] = { |
| 319 | ScreenTransitionState::SCREEN_OFF, &ScreenStateMachine::DoSetScreenPower}; | 327 | ScreenTransitionState::SCREEN_OFF, &ScreenStateMachine::DoSetScreenPower}; |
| 320 | stateMachine_[{ScreenTransitionState::SCREEN_DOZE, ScreenPowerEvent::E_DOZE_SUSPEND}] = { | 328 | stateMachine_[{ScreenTransitionState::SCREEN_DOZE, ScreenPowerEvent::E_DOZE_SUSPEND}] = { |
| @@ -326,6 +334,11 @@ void ScreenStateMachine::InitStateMachineTbl() | |||
| 326 | 334 | ||
| 327 | stateMachine_[{ScreenTransitionState::SCREEN_DOZE_SUSPEND, ScreenPowerEvent::E_DOZE}] = { | 335 | stateMachine_[{ScreenTransitionState::SCREEN_DOZE_SUSPEND, ScreenPowerEvent::E_DOZE}] = { |
| 328 | ScreenTransitionState::SCREEN_DOZE, &ScreenStateMachine::DoSetScreenPower}; | 336 | ScreenTransitionState::SCREEN_DOZE, &ScreenStateMachine::DoSetScreenPower}; |
| 337 | + stateMachine_[{ScreenTransitionState::SCREEN_DOZE_SUSPEND, | ||
| 338 | + ScreenPowerEvent::SET_SCREEN_POWER_FOR_ALL_POWER_OFF}] = { | ||
| 339 | + ScreenTransitionState::SCREEN_OFF, &ScreenStateMachine::DoSetScreenPowerForAll}; | ||
| 340 | + stateMachine_[{ScreenTransitionState::SCREEN_DOZE_SUSPEND, ScreenPowerEvent::SET_SCREEN_POWER_FOR_ALL_DOZE}] = { | ||
| 341 | + ScreenTransitionState::SCREEN_DOZE, &ScreenStateMachine::DoSetScreenPowerForAll}; | ||
| 329 | stateMachine_[{ScreenTransitionState::SCREEN_DOZE_SUSPEND, ScreenPowerEvent::WAKEUP_BEGIN}] = { | 342 | stateMachine_[{ScreenTransitionState::SCREEN_DOZE_SUSPEND, ScreenPowerEvent::WAKEUP_BEGIN}] = { |
| 330 | ScreenTransitionState::WAIT_SCREEN_ON_READY, &ScreenStateMachine::DoWakeUpBegin, | 343 | ScreenTransitionState::WAIT_SCREEN_ON_READY, &ScreenStateMachine::DoWakeUpBegin, |
| 331 | SCREEN_STATE_NORMAL_TIMEOUT_MS, &ScreenStateMachine::DoScreenPowerOn}; | 344 | SCREEN_STATE_NORMAL_TIMEOUT_MS, &ScreenStateMachine::DoScreenPowerOn}; |
| @@ -14227,6 +14227,36 @@ void ScreenSessionManager::NotifyAodOpCompletion(AodOP operation, int32_t result | |||
| 14227 | } | 14227 | } |
| 14228 | } | 14228 | } |
| 14229 | 14229 | ||
| 14230 | +void ScreenSessionManager::SetPowerStateForAod(ScreenPowerState state) | ||
| 14231 | +{ | ||
| 14232 | + if (!SessionPermission::IsSystemCalling()) { | ||
| 14233 | + TLOGNFE(WmsLogTag::DMS, "permission denied!"); | ||
| 14234 | + return; | ||
| 14235 | + } | ||
| 14236 | + TLOGNFI(WmsLogTag::DMS, "[UL_POWER]state: %{public}u", state); | ||
| 14237 | + ScreenPowerInfoType curType; | ||
| 14238 | + ScreenPowerEvent event; | ||
| 14239 | + if (state == ScreenPowerState::POWER_DOZE) { | ||
| 14240 | + event = ScreenPowerEvent::SET_SCREEN_POWER_FOR_ALL_DOZE; | ||
| 14241 | + curType = std::make_pair(state, PowerStateChangeReason::STATE_CHANGE_REASON_AOD_SET_DOZE); | ||
| 14242 | + } else if (state == ScreenPowerState::POWER_DOZE_SUSPEND) { | ||
| 14243 | + event = ScreenPowerEvent::SET_SCREEN_POWER_FOR_ALL_DOZE_SUSPEND; | ||
| 14244 | + curType = std::make_pair(state, PowerStateChangeReason::STATE_CHANGE_REASON_AOD_SET_DOZE_SUSPEND); | ||
| 14245 | + } else if (state == ScreenPowerState::POWER_OFF) { | ||
| 14246 | + event = ScreenPowerEvent::SET_SCREEN_POWER_FOR_ALL_POWER_OFF; | ||
| 14247 | + curType = std::make_pair(state, PowerStateChangeReason::STATE_CHANGE_REASON_AOD_SET_OFF); | ||
| 14248 | + } else { | ||
| 14249 | + TLOGNFE(WmsLogTag::DMS, "[UL_POWER]invalid state: %{public}u", state); | ||
| 14250 | + return; | ||
| 14251 | + } | ||
| 14252 | + bool isSuccess = ScreenStateMachine::GetInstance().HandlePowerStateChange(event, curType); | ||
| 14253 | + if (!isSuccess) { | ||
| 14254 | + TLOGNFE(WmsLogTag::DMS, "[UL_POWER]set false, state: %{public}u", state); | ||
| 14255 | + return; | ||
| 14256 | + } | ||
| 14257 | + TLOGD(WmsLogTag::DMS, "[UL_POWER]set state success: %{public}u", state); | ||
| 14258 | +} | ||
| 14259 | + | ||
| 14230 | 14260 | ||
| 14231 | bool ScreenSessionManager::WaitAodOpNotify() | 14261 | bool ScreenSessionManager::WaitAodOpNotify() |
| 14232 | { | 14262 | { |
| @@ -4156,6 +4156,32 @@ void ScreenSessionManagerProxy::NotifyAodOpCompletion(AodOP operation, int32_t r | |||
| 4156 | } | 4156 | } |
| 4157 | } | 4157 | } |
| 4158 | 4158 | ||
| 4159 | +void ScreenSessionManagerProxy::SetPowerStateForAod(ScreenPowerState state) | ||
| 4160 | +{ | ||
| 4161 | + sptr<IRemoteObject> remote = Remote(); | ||
| 4162 | + if (remote == nullptr) { | ||
| 4163 | + TLOGE(WmsLogTag::DMS, "remote is null"); | ||
| 4164 | + return; | ||
| 4165 | + } | ||
| 4166 | + | ||
| 4167 | + MessageOption option(MessageOption::TF_ASYNC); | ||
| 4168 | + MessageParcel reply; | ||
| 4169 | + MessageParcel data; | ||
| 4170 | + if (!data.WriteInterfaceToken(GetDescriptor())) { | ||
| 4171 | + TLOGE(WmsLogTag::DMS, "WriteInterfaceToken failed"); | ||
| 4172 | + return ; | ||
| 4173 | + } | ||
| 4174 | + if (!data.WriteUint32(static_cast<uint32_t>(state))) { | ||
| 4175 | + TLOGE(WmsLogTag::DMS, "Write state failed"); | ||
| 4176 | + return; | ||
| 4177 | + } | ||
| 4178 | + if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SET_POWER_STATE_AOD), | ||
| 4179 | + data, reply, option) != ERR_NONE) { | ||
| 4180 | + TLOGE(WmsLogTag::DMS, "SendRequest failed"); | ||
| 4181 | + return; | ||
| 4182 | + } | ||
| 4183 | +} | ||
| 4184 | + | ||
| 4159 | void ScreenSessionManagerProxy::RecordEventFromScb(std::string description, bool needRecordEvent) | 4185 | void ScreenSessionManagerProxy::RecordEventFromScb(std::string description, bool needRecordEvent) |
| 4160 | { | 4186 | { |
| 4161 | sptr<IRemoteObject> remote = Remote(); | 4187 | sptr<IRemoteObject> remote = Remote(); |
| @@ -1297,6 +1297,15 @@ int32_t ScreenSessionManagerStub::OnRemoteRequestInner(uint32_t code, MessagePar | |||
| 1297 | NotifyAodOpCompletion(static_cast<AodOP>(op), result); | 1297 | NotifyAodOpCompletion(static_cast<AodOP>(op), result); |
| 1298 | break; | 1298 | break; |
| 1299 | } | 1299 | } |
| 1300 | + case DisplayManagerMessage::TRANS_ID_SET_POWER_STATE_AOD: { | ||
| 1301 | + uint32_t state; | ||
| 1302 | + if (!data.ReadUint32(state)) { | ||
| 1303 | + TLOGE(WmsLogTag::DMS, "Read state failed"); | ||
| 1304 | + return ERR_INVALID_DATA; | ||
| 1305 | + } | ||
| 1306 | + SetPowerStateForAod(static_cast<ScreenPowerState>(state)); | ||
| 1307 | + break; | ||
| 1308 | + } | ||
| 1300 | case DisplayManagerMessage::TRANS_ID_GET_VIRTUAL_SCREEN_FLAG: { | 1309 | case DisplayManagerMessage::TRANS_ID_GET_VIRTUAL_SCREEN_FLAG: { |
| 1301 | ProcGetVirtualScreenFlag(data, reply); | 1310 | ProcGetVirtualScreenFlag(data, reply); |
| 1302 | break; | 1311 | break; |
| @@ -93,6 +93,7 @@ public: | |||
| 93 | void NotifyFoldToExpandCompletion(bool foldToExpand); | 93 | void NotifyFoldToExpandCompletion(bool foldToExpand); |
| 94 | void NotifyScreenConnectCompletion(ScreenId screenId); | 94 | void NotifyScreenConnectCompletion(ScreenId screenId); |
| 95 | void NotifyAodOpCompletion(AodOP operation, int32_t result); | 95 | void NotifyAodOpCompletion(AodOP operation, int32_t result); |
| 96 | + void SetPowerStateForAod(ScreenPowerState state); | ||
| 96 | void RecordEventFromScb(std::string description, bool needRecordEvent); | 97 | void RecordEventFromScb(std::string description, bool needRecordEvent); |
| 97 | FoldStatus GetFoldStatus(); | 98 | FoldStatus GetFoldStatus(); |
| 98 | SuperFoldStatus GetSuperFoldStatus(); | 99 | SuperFoldStatus GetSuperFoldStatus(); |
| @@ -676,6 +676,15 @@ void ScreenSessionManagerClient::NotifyAodOpCompletion(AodOP operation, int32_t | |||
| 676 | screenSessionManager_->NotifyAodOpCompletion(operation, result); | 676 | screenSessionManager_->NotifyAodOpCompletion(operation, result); |
| 677 | } | 677 | } |
| 678 | 678 | ||
| 679 | +void ScreenSessionManagerClient::SetPowerStateForAod(ScreenPowerState state) | ||
| 680 | +{ | ||
| 681 | + if (!screenSessionManager_) { | ||
| 682 | + TLOGE(WmsLogTag::DMS, "screenSessionManager is null"); | ||
| 683 | + return; | ||
| 684 | + } | ||
| 685 | + screenSessionManager_->SetPowerStateForAod(state); | ||
| 686 | +} | ||
| 687 | + | ||
| 679 | void ScreenSessionManagerClient::RecordEventFromScb(std::string description, bool needRecordEvent) | 688 | void ScreenSessionManagerClient::RecordEventFromScb(std::string description, bool needRecordEvent) |
| 680 | { | 689 | { |
| 681 | if (!screenSessionManager_) { | 690 | if (!screenSessionManager_) { |
| @@ -2493,5 +2493,21 @@ HWTEST_F(ScreenSessionManagerClientTest, ProcPropertyChangedForSuperFold, TestSi | |||
| 2493 | logMsg.clear(); | 2493 | logMsg.clear(); |
| 2494 | LOG_SetCallback(nullptr); | 2494 | LOG_SetCallback(nullptr); |
| 2495 | } | 2495 | } |
| 2496 | + | ||
| 2497 | +/** | ||
| 2498 | + * @tc.name: SetPowerStateForAod01 | ||
| 2499 | + * @tc.desc: SetPowerStateForAod test, normal test | ||
| 2500 | + * @tc.type: FUNC | ||
| 2501 | + */ | ||
| 2502 | +HWTEST_F(ScreenSessionManagerClientTest, SetPowerStateForAod01, TestSize.Level1) | ||
| 2503 | +{ | ||
| 2504 | + logMsg.clear(); | ||
| 2505 | + LOG_SetCallback(MyLogCallback); | ||
| 2506 | + ASSERT_TRUE(screenSessionManagerClient_ != nullptr); | ||
| 2507 | + screenSessionManagerClient_->SetPowerStateForAod(ScreenPowerState::POWER_DOZE); | ||
| 2508 | + EXPECT_TRUE(logMsg.find("screenSessionManager is null") == std::string::npos); | ||
| 2509 | + logMsg.clear(); | ||
| 2510 | + LOG_SetCallback(nullptr); | ||
| 2511 | +} | ||
| 2496 | } // namespace Rosen | 2512 | } // namespace Rosen |
| 2497 | } // namespace OHOS | 2513 | } // namespace OHOS |
| @@ -3745,6 +3745,43 @@ HWTEST_F(ScreenSessionManagerStubTest, IsOnboardDisplay, TestSize.Level1) | |||
| 3745 | EXPECT_TRUE(g_logMsg.find("write res failed") == std::string::npos); | 3745 | EXPECT_TRUE(g_logMsg.find("write res failed") == std::string::npos); |
| 3746 | LOG_SetCallback(nullptr); | 3746 | LOG_SetCallback(nullptr); |
| 3747 | } | 3747 | } |
| 3748 | + | ||
| 3749 | +/** | ||
| 3750 | + * @tc.name: SetPowerStateForAodAbnormalTest | ||
| 3751 | + * @tc.desc: SetPowerStateForAodAbnormalTest test abnormal input | ||
| 3752 | + * @tc.type: FUNC | ||
| 3753 | + */ | ||
| 3754 | +HWTEST_F(ScreenSessionManagerStubTest, SetPowerStateForAodAbnormalTest, TestSize.Level1) | ||
| 3755 | +{ | ||
| 3756 | + MessageParcel data; | ||
| 3757 | + MessageParcel reply; | ||
| 3758 | + MessageOption option; | ||
| 3759 | + | ||
| 3760 | + data.WriteInterfaceToken(ScreenSessionManagerStub::GetDescriptor()); | ||
| 3761 | + uint32_t code = static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SET_POWER_STATE_AOD); | ||
| 3762 | + int res = stub_->OnRemoteRequest(code, data, reply, option); | ||
| 3763 | + EXPECT_EQ(res, -1); | ||
| 3764 | +} | ||
| 3765 | + | ||
| 3766 | +/** | ||
| 3767 | + * @tc.name: SetPowerStateForAodNnormalTest | ||
| 3768 | + * @tc.desc: SetPowerStateForAodNnormalTest test normal input | ||
| 3769 | + * @tc.type: FUNC | ||
| 3770 | + */ | ||
| 3771 | +HWTEST_F(ScreenSessionManagerStubTest, SetPowerStateForAodNnormalTest, TestSize.Level1) | ||
| 3772 | +{ | ||
| 3773 | + MessageParcel data; | ||
| 3774 | + MessageParcel reply; | ||
| 3775 | + MessageOption option; | ||
| 3776 | + | ||
| 3777 | + data.WriteInterfaceToken(ScreenSessionManagerStub::GetDescriptor()); | ||
| 3778 | + | ||
| 3779 | + ScreenPowerState state = ScreenPowerState::POWER_DOZE; | ||
| 3780 | + data.WriteUint32(static_cast<uint32_t>(state)); | ||
| 3781 | + uint32_t code = static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SET_POWER_STATE_AOD); | ||
| 3782 | + int res = stub_->OnRemoteRequest(code, data, reply, option); | ||
| 3783 | + EXPECT_EQ(res, 0); | ||
| 3784 | +} | ||
| 3748 | } | 3785 | } |
| 3749 | } | 3786 | } |
| 3750 | } | 3787 | } |
| @@ -1145,6 +1145,39 @@ HWTEST_F(ScreenSessionManagerTest, GetIsCurrentInUseById01, Function | SmallTest | |||
| 1145 | auto res = ssm->GetIsCurrentInUseById(screenId); | 1145 | auto res = ssm->GetIsCurrentInUseById(screenId); |
| 1146 | ASSERT_EQ(false, res); | 1146 | ASSERT_EQ(false, res); |
| 1147 | } | 1147 | } |
| 1148 | + | ||
| 1149 | +/** | ||
| 1150 | + * @tc.name: SetPowerStateForAodPermission | ||
| 1151 | + * @tc.desc: SetPowerStateForAodPermission test no permission | ||
| 1152 | + * @tc.type: FUNC | ||
| 1153 | + */ | ||
| 1154 | +HWTEST_F(ScreenSessionManagerTest, SetPowerStateForAodPermission, TestSize.Level1) | ||
| 1155 | +{ | ||
| 1156 | + g_logMsg.clear(); | ||
| 1157 | + LOG_SetCallback(MyLogCallback); | ||
| 1158 | + MockAccesstokenKit::MockIsSystemApp(false); | ||
| 1159 | + MockAccesstokenKit::MockIsSACalling(false); | ||
| 1160 | + ssm_->SetPowerStateForAod(ScreenPowerState::POWER_DOZE); | ||
| 1161 | + EXPECT_TRUE(g_logMsg.find("permission denied!") != std::string::npos); | ||
| 1162 | + LOG_SetCallback(nullptr); | ||
| 1163 | +} | ||
| 1164 | + | ||
| 1165 | +/** | ||
| 1166 | + * @tc.name: SetPowerStateForAodInvalidState | ||
| 1167 | + * @tc.desc: SetPowerStateForAodInvalidState test invalid state | ||
| 1168 | + * @tc.type: FUNC | ||
| 1169 | + */ | ||
| 1170 | +HWTEST_F(ScreenSessionManagerTest, SetPowerStateForAodInvalidState, TestSize.Level1) | ||
| 1171 | +{ | ||
| 1172 | + g_logMsg.clear(); | ||
| 1173 | + LOG_SetCallback(MyLogCallback); | ||
| 1174 | + MockAccesstokenKit::MockIsSystemApp(true); | ||
| 1175 | + MockAccesstokenKit::MockIsSACalling(true); | ||
| 1176 | + ssm_->SetPowerStateForAod(ScreenPowerState::POWER_DOZE); | ||
| 1177 | + ssm_->SetPowerStateForAod(ScreenPowerState::INVALID_STATE); | ||
| 1178 | + EXPECT_TRUE(g_logMsg.find("[UL_POWER]invalid state:") != std::string::npos); | ||
| 1179 | + LOG_SetCallback(nullptr); | ||
| 1180 | +} | ||
| 1148 | } | 1181 | } |
| 1149 | } // namespace Rosen | 1182 | } // namespace Rosen |
| 1150 | } // namespace OHOS | 1183 | } // namespace OHOS |