1 /* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include "working_state.h" 17 18 #include "standby_service_log.h" 19 #include "standby_config_manager.h" 20 #include "iconstraint_manager_adapter.h" 21 #include "istate_manager_adapter.h" 22 23 namespace OHOS { 24 namespace DevStandbyMgr { BeginState()25ErrCode WorkingState::BeginState() 26 { 27 curPhase_ = 0; 28 handler_->PostTask([working = shared_from_this()]() { 29 working->checkScreenStatus(); 30 }, TRANSIT_NEXT_STATE_CONDITION_TASK); 31 return ERR_OK; 32 } 33 34 // check screen status, if screen off, traisit to dark status checkScreenStatus()35void WorkingState::checkScreenStatus() 36 { 37 auto stateManagerPtr = stateManager_.lock(); 38 if (!stateManagerPtr) { 39 return; 40 } 41 if (!stateManagerPtr->IsScreenOn()) { 42 stateManagerPtr->TransitToState(StandbyState::DARK); 43 } 44 } 45 Init(const std::shared_ptr<BaseState> & thisPtr)46ErrCode WorkingState::Init(const std::shared_ptr<BaseState>& thisPtr) 47 { 48 return ERR_OK; 49 } 50 UnInit()51ErrCode WorkingState::UnInit() 52 { 53 return ERR_OK; 54 } 55 EndState()56ErrCode WorkingState::EndState() 57 { 58 if (!stateManager_.lock()) { 59 STANDBYSERVICE_LOGE("state manager adapter is nullptr"); 60 return ERR_STATE_MANAGER_IS_NULLPTR; 61 } 62 handler_->RemoveTask(TRANSIT_NEXT_STATE_CONDITION_TASK); 63 return ERR_OK; 64 } 65 CheckTransitionValid(uint32_t nextState)66bool WorkingState::CheckTransitionValid(uint32_t nextState) 67 { 68 if (nextState == StandbyState::MAINTENANCE) { 69 STANDBYSERVICE_LOGE("can not transit from working to maintenance"); 70 return false; 71 } 72 return true; 73 } 74 EndEvalCurrentState(bool evalResult)75void WorkingState::EndEvalCurrentState(bool evalResult) 76 { 77 auto stateManagerPtr = stateManager_.lock(); 78 if (!stateManagerPtr) { 79 STANDBYSERVICE_LOGW("state manager is nullptr, cannot end eval working state"); 80 return; 81 } 82 if (evalResult) { 83 stateManagerPtr->TransitToStateInner(StandbyState::DARK); 84 } else { 85 stateManagerPtr->BlockCurrentState(); 86 } 87 } 88 } // namespace DevStandbyMgr 89 } // namespace OHOS