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()25 ErrCode 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()35 void 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)46 ErrCode WorkingState::Init(const std::shared_ptr<BaseState>& thisPtr)
47 {
48     return ERR_OK;
49 }
50 
UnInit()51 ErrCode WorkingState::UnInit()
52 {
53     return ERR_OK;
54 }
55 
EndState()56 ErrCode 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)66 bool 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)75 void 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