• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-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 "power_mgr_client.h"
17 
18 #include <cinttypes>
19 #include <mutex>
20 #include <memory>
21 #include <unistd.h>
22 #include <vector>
23 #include <datetime_ex.h>
24 #include <thread>
25 #include <chrono>
26 #include <if_system_ability_manager.h>
27 #include <iservice_registry.h>
28 #include <system_ability_definition.h>
29 #include "new"
30 #include "refbase.h"
31 #include "ipower_mgr.h"
32 #include "ipower_mode_callback.h"
33 #include "ipower_state_callback.h"
34 #include "ipower_runninglock_callback.h"
35 #include "iremote_broker.h"
36 #include "iremote_object.h"
37 #include "iscreen_off_pre_callback.h"
38 #include "power_log.h"
39 #include "power_common.h"
40 #include "running_lock_info.h"
41 
42 namespace OHOS {
43 namespace PowerMgr {
44 std::vector<std::weak_ptr<RunningLock>> PowerMgrClient::runningLocks_;
45 std::mutex PowerMgrClient::runningLocksMutex_;
46 std::mutex g_instanceMutex;
47 
PowerMgrClient()48 PowerMgrClient::PowerMgrClient()
49 {
50     token_ = sptr<IPCObjectStub>::MakeSptr(u"ohos.powermgr.ClientAlivenessToken");
51 }
52 
~PowerMgrClient()53 PowerMgrClient::~PowerMgrClient()
54 {
55     if (proxy_ != nullptr) {
56         auto remoteObject = proxy_->AsObject();
57         if (remoteObject != nullptr) {
58             remoteObject->RemoveDeathRecipient(deathRecipient_);
59         }
60     }
61 }
62 
GetInstance()63 PowerMgrClient& PowerMgrClient::GetInstance()
64 {
65     static PowerMgrClient* instance = nullptr;
66     if (instance == nullptr) {
67         std::lock_guard<std::mutex> lock(g_instanceMutex);
68         if (instance == nullptr) {
69             instance = new PowerMgrClient();
70         }
71     }
72     return *instance;
73 }
74 
Connect()75 ErrCode PowerMgrClient::Connect()
76 {
77     return ERR_OK;
78 }
79 
GetPowerMgrProxy()80 sptr<IPowerMgr> PowerMgrClient::GetPowerMgrProxy()
81 {
82     std::lock_guard<std::mutex> lock(mutex_);
83     if (proxy_ != nullptr) {
84         return proxy_;
85     }
86 
87     sptr<ISystemAbilityManager> sam = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
88     if (sam == nullptr) {
89         POWER_HILOGE(COMP_FWK, "Failed to obtain SystemAbilityMgr");
90         return proxy_;
91     }
92     sptr<IRemoteObject> remoteObject_ = sam->CheckSystemAbility(POWER_MANAGER_SERVICE_ID);
93     if (remoteObject_ == nullptr) {
94         POWER_HILOGE(COMP_FWK, "Check SystemAbility failed");
95         return proxy_;
96     }
97 
98     sptr<IRemoteObject::DeathRecipient> drt = new(std::nothrow) PowerMgrDeathRecipient(*this);
99     if (drt == nullptr) {
100         POWER_HILOGE(COMP_FWK, "Failed to create PowerMgrDeathRecipient");
101         return proxy_;
102     }
103     if ((remoteObject_->IsProxyObject()) && (!remoteObject_->AddDeathRecipient(drt))) {
104         POWER_HILOGE(COMP_FWK, "Add death recipient to PowerMgr service failed");
105         return proxy_;
106     }
107 
108     proxy_ = iface_cast<IPowerMgr>(remoteObject_);
109     deathRecipient_ = drt;
110     POWER_HILOGI(COMP_FWK, "Connecting PowerMgrService success, pid=%{public}d", getpid());
111     return proxy_;
112 }
113 
OnRemoteDied(const wptr<IRemoteObject> & remote)114 void PowerMgrClient::PowerMgrDeathRecipient::OnRemoteDied(const wptr<IRemoteObject>& remote)
115 {
116     POWER_HILOGW(COMP_FWK, "Recv death notice, PowerMgr Death");
117     client_.ResetProxy(remote);
118 
119     // wait for powermgr service restart
120     ErrCode ret = E_GET_POWER_SERVICE_FAILED;
121     uint32_t retryCount = 0;
122     while (++retryCount <= CONNECT_RETRY_COUNT) {
123         usleep(CONNECT_RETRY_MS);
124         sptr<IPowerMgr> proxy = client_.GetPowerMgrProxy();
125         if (proxy != nullptr) {
126             POWER_HILOGI(COMP_FWK, "retry connect success, count %{public}d", retryCount);
127             ret = ERR_OK;
128             break;
129         }
130         POWER_HILOGI(COMP_FWK, "retry connect failed, count %{public}d", retryCount);
131     }
132     if (ret != ERR_OK) {
133         return;
134     }
135 
136     // recover running lock info
137     client_.RecoverRunningLocks();
138 }
139 
RecoverRunningLocks()140 void PowerMgrClient::RecoverRunningLocks()
141 {
142     POWER_HILOGI(COMP_FWK, "start to recover running locks");
143     std::lock_guard<std::mutex> lock(runningLocksMutex_);
144     for (auto runningLock : runningLocks_) {
145         if (runningLock.expired()) {
146             continue;
147         }
148         std::shared_ptr<RunningLock> lock = runningLock.lock();
149         if (lock != nullptr) {
150             sptr<IPowerMgr> proxy = GetPowerMgrProxy();
151             RETURN_IF(proxy == nullptr);
152             lock->Recover(proxy);
153         }
154     }
155 }
156 
ResetProxy(const wptr<IRemoteObject> & remote)157 void PowerMgrClient::ResetProxy(const wptr<IRemoteObject>& remote)
158 {
159     if (remote == nullptr) {
160         POWER_HILOGE(COMP_FWK, "OnRemoteDied failed, remote is nullptr");
161         return;
162     }
163 
164     std::lock_guard<std::mutex> lock(mutex_);
165     RETURN_IF(proxy_ == nullptr);
166 
167     auto serviceRemote = proxy_->AsObject();
168     if ((serviceRemote != nullptr) && (serviceRemote == remote.promote())) {
169         serviceRemote->RemoveDeathRecipient(deathRecipient_);
170         proxy_ = nullptr;
171     }
172 }
173 
RebootDevice(const std::string & reason)174 PowerErrors PowerMgrClient::RebootDevice(const std::string& reason)
175 {
176     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
177     RETURN_IF_WITH_RET(proxy == nullptr, PowerErrors::ERR_CONNECTION_FAIL);
178     return proxy->RebootDevice(reason);
179 }
180 
RebootDeviceForDeprecated(const std::string & reason)181 PowerErrors PowerMgrClient::RebootDeviceForDeprecated(const std::string& reason)
182 {
183     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
184     RETURN_IF_WITH_RET(proxy == nullptr, PowerErrors::ERR_CONNECTION_FAIL);
185     return proxy->RebootDeviceForDeprecated(reason);
186 }
187 
ShutDownDevice(const std::string & reason)188 PowerErrors PowerMgrClient::ShutDownDevice(const std::string& reason)
189 {
190     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
191     RETURN_IF_WITH_RET(proxy == nullptr, PowerErrors::ERR_CONNECTION_FAIL);
192     return proxy->ShutDownDevice(reason);
193 }
194 
SetSuspendTag(const std::string & tag)195 PowerErrors PowerMgrClient::SetSuspendTag(const std::string &tag)
196 {
197     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
198     RETURN_IF_WITH_RET(proxy == nullptr, PowerErrors::ERR_CONNECTION_FAIL);
199     POWER_HILOGI(FEATURE_SUSPEND, "Set suspend tag: %{public}s", tag.c_str());
200     return proxy->SetSuspendTag(tag);
201 }
202 
SuspendDevice(SuspendDeviceType reason,bool suspendImmed,const std::string & apiVersion)203 PowerErrors PowerMgrClient::SuspendDevice(
204     SuspendDeviceType reason, bool suspendImmed, const std::string& apiVersion)
205 {
206     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
207     RETURN_IF_WITH_RET(proxy == nullptr, PowerErrors::ERR_CONNECTION_FAIL);
208     POWER_HILOGD(FEATURE_SUSPEND, " Calling SuspendDevice success");
209     return proxy->SuspendDevice(GetTickCount(), reason, suspendImmed, apiVersion);
210 }
211 
WakeupDevice(WakeupDeviceType reason,const std::string & detail,const std::string & apiVersion)212 PowerErrors PowerMgrClient::WakeupDevice(
213     WakeupDeviceType reason, const std::string& detail, const std::string& apiVersion)
214 {
215     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
216     RETURN_IF_WITH_RET(proxy == nullptr, PowerErrors::ERR_CONNECTION_FAIL);
217     POWER_HILOGD(FEATURE_WAKEUP, " Calling WakeupDevice success");
218     return proxy->WakeupDevice(GetTickCount(), reason, detail, apiVersion);
219 }
220 
WakeupDeviceAsync(WakeupDeviceType reason,const std::string & detail)221 void PowerMgrClient::WakeupDeviceAsync(WakeupDeviceType reason, const std::string& detail)
222 {
223     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
224     RETURN_IF(proxy == nullptr);
225     POWER_HILOGD(FEATURE_WAKEUP, " Calling WakeupDeviceAsync success");
226     return proxy->WakeupDeviceAsync(GetTickCount(), reason, detail);
227 }
228 
RefreshActivity(UserActivityType type)229 bool PowerMgrClient::RefreshActivity(UserActivityType type)
230 {
231     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
232     RETURN_IF_WITH_RET(proxy == nullptr, false);
233     bool ret = proxy->RefreshActivity(GetTickCount(), type, true);
234     POWER_HILOGD(FEATURE_ACTIVITY, "Calling RefreshActivity Success");
235     return ret;
236 }
237 
OverrideScreenOffTime(int64_t timeout,const std::string & apiVersion)238 PowerErrors PowerMgrClient::OverrideScreenOffTime(int64_t timeout, const std::string& apiVersion)
239 {
240     if (timeout <= 0) {
241         POWER_HILOGW(COMP_FWK, "Invalid timeout, timeout=%{public}" PRId64 "", timeout);
242         return PowerErrors::ERR_PARAM_INVALID;
243     }
244     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
245     RETURN_IF_WITH_RET(proxy == nullptr, PowerErrors::ERR_CONNECTION_FAIL);
246     PowerErrors ret = proxy->OverrideScreenOffTime(timeout, apiVersion);
247     POWER_HILOGD(COMP_FWK, "Calling OverrideScreenOffTime Success");
248     return ret;
249 }
250 
RestoreScreenOffTime(const std::string & apiVersion)251 PowerErrors PowerMgrClient::RestoreScreenOffTime(const std::string& apiVersion)
252 {
253     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
254     RETURN_IF_WITH_RET(proxy == nullptr, PowerErrors::ERR_CONNECTION_FAIL);
255     PowerErrors ret = proxy->RestoreScreenOffTime(apiVersion);
256     POWER_HILOGD(COMP_FWK, "Calling RestoreScreenOffTime Success");
257     return ret;
258 }
259 
IsRunningLockTypeSupported(RunningLockType type)260 bool PowerMgrClient::IsRunningLockTypeSupported(RunningLockType type)
261 {
262     POWER_HILOGD(FEATURE_RUNNING_LOCK, "RunningLockType=%{public}u", type);
263     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
264     RETURN_IF_WITH_RET(proxy == nullptr, false);
265     return proxy->IsRunningLockTypeSupported(type);
266 }
267 
ForceSuspendDevice(const std::string & apiVersion)268 PowerErrors PowerMgrClient::ForceSuspendDevice(const std::string& apiVersion)
269 {
270     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
271     RETURN_IF_WITH_RET(proxy == nullptr, PowerErrors::ERR_CONNECTION_FAIL);
272     PowerErrors ret = proxy->ForceSuspendDevice(GetTickCount(), apiVersion);
273     POWER_HILOGD(FEATURE_SUSPEND, "Calling ForceSuspendDevice Success");
274     return ret;
275 }
276 
IsScreenOn(bool needPrintLog)277 bool PowerMgrClient::IsScreenOn(bool needPrintLog)
278 {
279     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
280     RETURN_IF_WITH_RET(proxy == nullptr, false);
281     bool ret = false;
282     ret = proxy->IsScreenOn(needPrintLog);
283     if (needPrintLog) {
284         POWER_HILOGI(COMP_FWK, "IsScreenOn=%{public}d, caller pid=%{public}d", ret, getpid());
285     } else {
286         POWER_HILOGD(COMP_FWK, "IsScreenOn=%{public}d, caller pid=%{public}d", ret, getpid());
287     }
288     return ret;
289 }
290 
IsFoldScreenOn()291 bool PowerMgrClient::IsFoldScreenOn()
292 {
293     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
294     RETURN_IF_WITH_RET(proxy == nullptr, false);
295     bool ret = false;
296     ret = proxy->IsFoldScreenOn();
297     POWER_HILOGI(COMP_FWK, "IsFoldScreenOn=%{public}d, caller pid=%{public}d", ret, getpid());
298     return ret;
299 }
300 
IsCollaborationScreenOn()301 bool PowerMgrClient::IsCollaborationScreenOn()
302 {
303     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
304     RETURN_IF_WITH_RET(proxy == nullptr, false);
305     bool ret = false;
306     ret = proxy->IsCollaborationScreenOn();
307     POWER_HILOGI(COMP_FWK, "IsCollaborationScreenOn=%{public}d, caller pid=%{public}d", ret, getpid());
308     return ret;
309 }
310 
GetState()311 PowerState PowerMgrClient::GetState()
312 {
313     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
314     RETURN_IF_WITH_RET(proxy == nullptr, PowerState::UNKNOWN);
315     return proxy->GetState();
316 }
317 
CreateRunningLock(const std::string & name,RunningLockType type)318 std::shared_ptr<RunningLock> PowerMgrClient::CreateRunningLock(const std::string& name, RunningLockType type)
319 {
320     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
321     RETURN_IF_WITH_RET(proxy == nullptr, nullptr);
322 
323     uint32_t nameLen = (name.size() > RunningLock::MAX_NAME_LEN) ? RunningLock::MAX_NAME_LEN : name.size();
324     std::string nameExt = name.substr(0, nameLen) + "_" + std::to_string(GetTickCount());
325     std::shared_ptr<RunningLock> runningLock = std::make_shared<RunningLock>(proxy, nameExt, type);
326     if (runningLock == nullptr) {
327         POWER_HILOGE(FEATURE_RUNNING_LOCK, "Failed to create RunningLock record");
328         return nullptr;
329     }
330     // Client CreateRunningLock
331     POWER_HILOGI(COMP_LOCK, "CrtN:%{public}s,T=%{public}d", name.c_str(), type);
332     auto error = runningLock->Init();
333     if (error != PowerErrors::ERR_OK) {
334         POWER_HILOGE(FEATURE_RUNNING_LOCK, "RunningLock init failed");
335         error_ = error;
336         return nullptr;
337     }
338 
339     std::lock_guard<std::mutex> lock(runningLocksMutex_);
340     runningLocks_.push_back(std::weak_ptr<RunningLock>(runningLock));
341     return runningLock;
342 }
343 
ProxyRunningLock(bool isProxied,pid_t pid,pid_t uid)344 bool PowerMgrClient::ProxyRunningLock(bool isProxied, pid_t pid, pid_t uid)
345 {
346     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
347     RETURN_IF_WITH_RET(proxy == nullptr, false);
348     return proxy->ProxyRunningLock(isProxied, pid, uid);
349 }
350 
ProxyRunningLocks(bool isProxied,const std::vector<std::pair<pid_t,pid_t>> & processInfos)351 bool PowerMgrClient::ProxyRunningLocks(bool isProxied, const std::vector<std::pair<pid_t, pid_t>>& processInfos)
352 {
353     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
354     RETURN_IF_WITH_RET(proxy == nullptr, false);
355     return proxy->ProxyRunningLocks(isProxied, processInfos);
356 }
357 
ResetRunningLocks()358 bool PowerMgrClient::ResetRunningLocks()
359 {
360     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
361     RETURN_IF_WITH_RET(proxy == nullptr, false);
362     return proxy->ResetRunningLocks();
363 }
364 
RegisterPowerStateCallback(const sptr<IPowerStateCallback> & callback,bool isSync)365 bool PowerMgrClient::RegisterPowerStateCallback(const sptr<IPowerStateCallback>& callback, bool isSync)
366 {
367     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
368     RETURN_IF_WITH_RET((callback == nullptr) || (proxy == nullptr), false);
369     bool ret = proxy->RegisterPowerStateCallback(callback, isSync);
370     return ret;
371 }
372 
UnRegisterPowerStateCallback(const sptr<IPowerStateCallback> & callback)373 bool PowerMgrClient::UnRegisterPowerStateCallback(const sptr<IPowerStateCallback>& callback)
374 {
375     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
376     RETURN_IF_WITH_RET((callback == nullptr) || (proxy == nullptr), false);
377     bool ret = proxy->UnRegisterPowerStateCallback(callback);
378     return ret;
379 }
380 
RegisterSyncSleepCallback(const sptr<ISyncSleepCallback> & callback,SleepPriority priority)381 bool PowerMgrClient::RegisterSyncSleepCallback(const sptr<ISyncSleepCallback>& callback, SleepPriority priority)
382 {
383     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
384     RETURN_IF_WITH_RET((callback == nullptr) || (proxy == nullptr), false);
385     bool ret = proxy->RegisterSyncSleepCallback(callback, priority);
386     return ret;
387 }
388 
UnRegisterSyncSleepCallback(const sptr<ISyncSleepCallback> & callback)389 bool PowerMgrClient::UnRegisterSyncSleepCallback(const sptr<ISyncSleepCallback>& callback)
390 {
391     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
392     RETURN_IF_WITH_RET((callback == nullptr) || (proxy == nullptr), false);
393     bool ret = proxy->UnRegisterSyncSleepCallback(callback);
394     return ret;
395 }
396 
RegisterSyncHibernateCallback(const sptr<ISyncHibernateCallback> & callback)397 bool PowerMgrClient::RegisterSyncHibernateCallback(const sptr<ISyncHibernateCallback>& callback)
398 {
399     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
400     RETURN_IF_WITH_RET((callback == nullptr) || (proxy == nullptr), false);
401     bool ret = proxy->RegisterSyncHibernateCallback(callback);
402     return ret;
403 }
404 
UnRegisterSyncHibernateCallback(const sptr<ISyncHibernateCallback> & callback)405 bool PowerMgrClient::UnRegisterSyncHibernateCallback(const sptr<ISyncHibernateCallback>& callback)
406 {
407     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
408     RETURN_IF_WITH_RET((callback == nullptr) || (proxy == nullptr), false);
409     bool ret = proxy->UnRegisterSyncHibernateCallback(callback);
410     return ret;
411 }
412 
RegisterPowerModeCallback(const sptr<IPowerModeCallback> & callback)413 bool PowerMgrClient::RegisterPowerModeCallback(const sptr<IPowerModeCallback>& callback)
414 {
415     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
416     RETURN_IF_WITH_RET((callback == nullptr) || (proxy == nullptr), false);
417     bool ret = proxy->RegisterPowerModeCallback(callback);
418     return ret;
419 }
420 
UnRegisterPowerModeCallback(const sptr<IPowerModeCallback> & callback)421 bool PowerMgrClient::UnRegisterPowerModeCallback(const sptr<IPowerModeCallback>& callback)
422 {
423     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
424     RETURN_IF_WITH_RET((callback == nullptr) || (proxy == nullptr), false);
425     bool ret = proxy->UnRegisterPowerModeCallback(callback);
426     return ret;
427 }
428 
RegisterScreenStateCallback(int32_t remainTime,const sptr<IScreenOffPreCallback> & callback)429 bool PowerMgrClient::RegisterScreenStateCallback(int32_t remainTime, const sptr<IScreenOffPreCallback>& callback)
430 {
431     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
432     RETURN_IF_WITH_RET((remainTime <= 0) || (callback == nullptr) || (proxy == nullptr), false);
433     POWER_HILOGI(FEATURE_SCREEN_OFF_PRE, "Register screen off pre Callback by client");
434     bool ret = proxy->RegisterScreenStateCallback(remainTime, callback);
435     return ret;
436 }
437 
UnRegisterScreenStateCallback(const sptr<IScreenOffPreCallback> & callback)438 bool PowerMgrClient::UnRegisterScreenStateCallback(const sptr<IScreenOffPreCallback>& callback)
439 {
440     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
441     RETURN_IF_WITH_RET((callback == nullptr) || (proxy == nullptr), false);
442     POWER_HILOGI(FEATURE_SCREEN_OFF_PRE, "Unregister screen off pre Callback by client");
443     bool ret = proxy->UnRegisterScreenStateCallback(callback);
444     return ret;
445 }
446 
RegisterRunningLockCallback(const sptr<IPowerRunninglockCallback> & callback)447 bool PowerMgrClient::RegisterRunningLockCallback(const sptr<IPowerRunninglockCallback>& callback)
448 {
449     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
450     RETURN_IF_WITH_RET((callback == nullptr) || (proxy == nullptr), false);
451     POWER_HILOGI(FEATURE_RUNNING_LOCK, "Register running lock Callback by client");
452     bool ret = proxy->RegisterRunningLockCallback(callback);
453     return ret;
454 }
455 
UnRegisterRunningLockCallback(const sptr<IPowerRunninglockCallback> & callback)456 bool PowerMgrClient::UnRegisterRunningLockCallback(const sptr<IPowerRunninglockCallback>& callback)
457 {
458     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
459     RETURN_IF_WITH_RET((callback == nullptr) || (proxy == nullptr), false);
460     POWER_HILOGI(FEATURE_RUNNING_LOCK, "Unregister running lock Callback by client");
461     bool ret = proxy->UnRegisterRunningLockCallback(callback);
462     return ret;
463 }
464 
SetDisplaySuspend(bool enable)465 bool PowerMgrClient::SetDisplaySuspend(bool enable)
466 {
467     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
468     RETURN_IF_WITH_RET(proxy == nullptr, false);
469     bool ret = proxy->SetDisplaySuspend(enable);
470     return ret;
471 }
472 
Hibernate(bool clearMemory,const std::string & apiVersion)473 PowerErrors PowerMgrClient::Hibernate(bool clearMemory, const std::string& apiVersion)
474 {
475     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
476     RETURN_IF_WITH_RET(proxy == nullptr, PowerErrors::ERR_CONNECTION_FAIL);
477     return proxy->Hibernate(clearMemory, apiVersion);
478 }
479 
SetDeviceMode(const PowerMode mode)480 PowerErrors PowerMgrClient::SetDeviceMode(const PowerMode mode)
481 {
482     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
483     RETURN_IF_WITH_RET(proxy == nullptr, PowerErrors::ERR_CONNECTION_FAIL);
484     return proxy->SetDeviceMode(mode);
485 }
486 
GetDeviceMode()487 PowerMode PowerMgrClient::GetDeviceMode()
488 {
489     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
490     RETURN_IF_WITH_RET(proxy == nullptr, static_cast<PowerMode>(0));
491     return static_cast<PowerMode>(proxy->GetDeviceMode());
492 }
493 
Dump(const std::vector<std::string> & args)494 std::string PowerMgrClient::Dump(const std::vector<std::string>& args)
495 {
496     std::string error = "can't connect service";
497     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
498     RETURN_IF_WITH_RET(proxy == nullptr, error);
499     return proxy->ShellDump(args, args.size());
500 }
501 
GetError()502 PowerErrors PowerMgrClient::GetError()
503 {
504     auto temp = error_;
505     error_ = PowerErrors::ERR_OK;
506     return temp;
507 }
508 
IsStandby(bool & isStandby)509 PowerErrors PowerMgrClient::IsStandby(bool& isStandby)
510 {
511     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
512     RETURN_IF_WITH_RET(proxy == nullptr, PowerErrors::ERR_CONNECTION_FAIL);
513     PowerErrors ret = proxy->IsStandby(isStandby);
514     return ret;
515 }
516 
QueryRunningLockLists(std::map<std::string,RunningLockInfo> & runningLockLists)517 bool PowerMgrClient::QueryRunningLockLists(std::map<std::string, RunningLockInfo>& runningLockLists)
518 {
519     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
520     RETURN_IF_WITH_RET(proxy == nullptr, false);
521     POWER_HILOGD(FEATURE_RUNNING_LOCK, "Query running lock lists by client");
522     return proxy->QueryRunningLockLists(runningLockLists);
523 }
524 
SetForceTimingOut(bool enabled)525 PowerErrors PowerMgrClient::SetForceTimingOut(bool enabled)
526 {
527     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
528     RETURN_IF_WITH_RET(proxy == nullptr, PowerErrors::ERR_CONNECTION_FAIL);
529     PowerErrors ret = proxy->SetForceTimingOut(enabled, token_);
530     return ret;
531 }
532 
LockScreenAfterTimingOut(bool enabledLockScreen,bool checkLock,bool sendScreenOffEvent)533 PowerErrors PowerMgrClient::LockScreenAfterTimingOut(bool enabledLockScreen, bool checkLock, bool sendScreenOffEvent)
534 {
535     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
536     RETURN_IF_WITH_RET(proxy == nullptr, PowerErrors::ERR_CONNECTION_FAIL);
537     PowerErrors ret = proxy->LockScreenAfterTimingOut(enabledLockScreen, checkLock, sendScreenOffEvent, token_);
538     return ret;
539 }
540 
IsRunningLockEnabled(const RunningLockType type,bool & result)541 PowerErrors PowerMgrClient::IsRunningLockEnabled(const RunningLockType type, bool& result)
542 {
543     sptr<IPowerMgr> proxy = GetPowerMgrProxy();
544     RETURN_IF_WITH_RET(proxy == nullptr, PowerErrors::ERR_CONNECTION_FAIL);
545     return proxy->IsRunningLockEnabled(type, result);
546 }
547 
548 } // namespace PowerMgr
549 } // namespace OHOS
550