• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 "ability_manager_client.h"
17 
18 #include "string_ex.h"
19 
20 #include "ability_manager_interface.h"
21 #include "hilog_wrapper.h"
22 #include "ipc_skeleton.h"
23 #include "iservice_registry.h"
24 #include "if_system_ability_manager.h"
25 #include "system_ability_definition.h"
26 
27 namespace OHOS {
28 namespace AAFwk {
29 std::shared_ptr<AbilityManagerClient> AbilityManagerClient::instance_ = nullptr;
30 std::mutex AbilityManagerClient::mutex_;
31 
32 #define CHECK_REMOTE_OBJECT(object)                        \
33     if (!object) {                                         \
34         if (ERR_OK != Connect()) {                         \
35             HILOG_ERROR("ability service can't connect."); \
36             return;                                        \
37         }                                                  \
38     }
39 
40 #define CHECK_REMOTE_OBJECT_AND_RETURN(object, value)      \
41     if (!object) {                                         \
42         if (ERR_OK != Connect()) {                         \
43             HILOG_ERROR("ability service can't connect."); \
44             return value;                                  \
45         }                                                  \
46     }
47 
GetInstance()48 std::shared_ptr<AbilityManagerClient> AbilityManagerClient::GetInstance()
49 {
50     if (instance_ == nullptr) {
51         std::lock_guard<std::mutex> lock_l(mutex_);
52         if (instance_ == nullptr) {
53             instance_ = std::make_shared<AbilityManagerClient>();
54         }
55     }
56     return instance_;
57 }
58 
AbilityManagerClient()59 AbilityManagerClient::AbilityManagerClient()
60 {}
61 
~AbilityManagerClient()62 AbilityManagerClient::~AbilityManagerClient()
63 {}
64 
AttachAbilityThread(const sptr<IAbilityScheduler> & scheduler,const sptr<IRemoteObject> & token)65 ErrCode AbilityManagerClient::AttachAbilityThread(
66     const sptr<IAbilityScheduler> &scheduler, const sptr<IRemoteObject> &token)
67 {
68     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
69     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
70     return abms->AttachAbilityThread(scheduler, token);
71 }
72 
AbilityTransitionDone(const sptr<IRemoteObject> & token,int state)73 ErrCode AbilityManagerClient::AbilityTransitionDone(const sptr<IRemoteObject> &token, int state)
74 {
75     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
76     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
77     return abms->AbilityTransitionDone(token, state);
78 }
79 
ScheduleConnectAbilityDone(const sptr<IRemoteObject> & token,const sptr<IRemoteObject> & remoteObject)80 ErrCode AbilityManagerClient::ScheduleConnectAbilityDone(
81     const sptr<IRemoteObject> &token, const sptr<IRemoteObject> &remoteObject)
82 {
83     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
84     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
85     return abms->ScheduleConnectAbilityDone(token, remoteObject);
86 }
87 
ScheduleDisconnectAbilityDone(const sptr<IRemoteObject> & token)88 ErrCode AbilityManagerClient::ScheduleDisconnectAbilityDone(const sptr<IRemoteObject> &token)
89 {
90     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
91     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
92     return abms->ScheduleDisconnectAbilityDone(token);
93 }
94 
ScheduleCommandAbilityDone(const sptr<IRemoteObject> & token)95 ErrCode AbilityManagerClient::ScheduleCommandAbilityDone(const sptr<IRemoteObject> &token)
96 {
97     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
98     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
99     return abms->ScheduleCommandAbilityDone(token);
100 }
101 
AddWindowInfo(const sptr<IRemoteObject> & token,int32_t windowToken)102 void AbilityManagerClient::AddWindowInfo(const sptr<IRemoteObject> &token, int32_t windowToken)
103 {
104     CHECK_REMOTE_OBJECT(remoteObject_);
105     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
106     abms->AddWindowInfo(token, windowToken);
107 }
108 
StartAbility(const Want & want,int requestCode)109 ErrCode AbilityManagerClient::StartAbility(const Want &want, int requestCode)
110 {
111     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
112     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
113     return abms->StartAbility(want, requestCode);
114 }
115 
StartAbility(const Want & want,const sptr<IRemoteObject> & callerToken,int requestCode)116 ErrCode AbilityManagerClient::StartAbility(const Want &want, const sptr<IRemoteObject> &callerToken, int requestCode)
117 {
118     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
119     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
120     return abms->StartAbility(want, callerToken, requestCode);
121 }
122 
StartAbility(const Want & want,const AbilityStartSetting & abilityStartSetting,const sptr<IRemoteObject> & callerToken,int requestCode)123 ErrCode AbilityManagerClient::StartAbility(const Want &want, const AbilityStartSetting &abilityStartSetting,
124     const sptr<IRemoteObject> &callerToken, int requestCode)
125 {
126     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
127     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
128     return abms->StartAbility(want, abilityStartSetting, callerToken, requestCode);
129 }
130 
TerminateAbility(const sptr<IRemoteObject> & token,int resultCode,const Want * resultWant)131 ErrCode AbilityManagerClient::TerminateAbility(const sptr<IRemoteObject> &token, int resultCode, const Want *resultWant)
132 {
133     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
134     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
135     return abms->TerminateAbility(token, resultCode, resultWant);
136 }
137 
TerminateAbility(const sptr<IRemoteObject> & callerToken,int requestCode)138 ErrCode AbilityManagerClient::TerminateAbility(const sptr<IRemoteObject> &callerToken, int requestCode)
139 {
140     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
141     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
142     return abms->TerminateAbilityByCaller(callerToken, requestCode);
143 }
144 
TerminateAbilityResult(const sptr<IRemoteObject> & token,int startId)145 ErrCode AbilityManagerClient::TerminateAbilityResult(const sptr<IRemoteObject> &token, int startId)
146 {
147     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
148     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
149     return abms->TerminateAbilityResult(token, startId);
150 }
151 
ConnectAbility(const Want & want,const sptr<IAbilityConnection> & connect,const sptr<IRemoteObject> & callerToken)152 ErrCode AbilityManagerClient::ConnectAbility(
153     const Want &want, const sptr<IAbilityConnection> &connect, const sptr<IRemoteObject> &callerToken)
154 {
155     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
156     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
157     return abms->ConnectAbility(want, connect, callerToken);
158 }
159 
DisconnectAbility(const sptr<IAbilityConnection> & connect)160 ErrCode AbilityManagerClient::DisconnectAbility(const sptr<IAbilityConnection> &connect)
161 {
162     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
163     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
164     return abms->DisconnectAbility(connect);
165 }
166 
AcquireDataAbility(const Uri & uri,bool tryBind,const sptr<IRemoteObject> & callerToken)167 sptr<IAbilityScheduler> AbilityManagerClient::AcquireDataAbility(
168     const Uri &uri, bool tryBind, const sptr<IRemoteObject> &callerToken)
169 {
170     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, nullptr);
171     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
172     return abms->AcquireDataAbility(uri, tryBind, callerToken);
173 }
174 
ReleaseDataAbility(sptr<IAbilityScheduler> dataAbilityScheduler,const sptr<IRemoteObject> & callerToken)175 ErrCode AbilityManagerClient::ReleaseDataAbility(
176     sptr<IAbilityScheduler> dataAbilityScheduler, const sptr<IRemoteObject> &callerToken)
177 {
178     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
179     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
180     return abms->ReleaseDataAbility(dataAbilityScheduler, callerToken);
181 }
182 
DumpState(const std::string & args,std::vector<std::string> & state)183 ErrCode AbilityManagerClient::DumpState(const std::string &args, std::vector<std::string> &state)
184 {
185     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
186     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
187     abms->DumpState(args, state);
188     return ERR_OK;
189 }
190 
Connect()191 ErrCode AbilityManagerClient::Connect()
192 {
193     std::lock_guard<std::mutex> lock(mutex_);
194     if (remoteObject_ != nullptr) {
195         return ERR_OK;
196     }
197     sptr<ISystemAbilityManager> systemManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
198     if (systemManager == nullptr) {
199         HILOG_ERROR("Fail to get registry.");
200         return GET_ABILITY_SERVICE_FAILED;
201     }
202     remoteObject_ = systemManager->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
203     if (remoteObject_ == nullptr) {
204         HILOG_ERROR("Fail to connect ability manager service.");
205         return GET_ABILITY_SERVICE_FAILED;
206     }
207     HILOG_DEBUG("Connect ability manager service success.");
208     return ERR_OK;
209 }
210 
GetAllStackInfo(StackInfo & stackInfo)211 ErrCode AbilityManagerClient::GetAllStackInfo(StackInfo &stackInfo)
212 {
213     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
214     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
215     return abms->GetAllStackInfo(stackInfo);
216 }
217 
StopServiceAbility(const Want & want)218 ErrCode AbilityManagerClient::StopServiceAbility(const Want &want)
219 {
220     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
221     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
222     return abms->StopServiceAbility(want);
223 }
224 
GetRecentMissions(const int32_t numMax,const int32_t flags,std::vector<AbilityMissionInfo> & recentList)225 ErrCode AbilityManagerClient::GetRecentMissions(
226     const int32_t numMax, const int32_t flags, std::vector<AbilityMissionInfo> &recentList)
227 {
228     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
229     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
230     return abms->GetRecentMissions(numMax, flags, recentList);
231 }
232 
GetMissionSnapshot(const int32_t missionId,MissionSnapshotInfo & snapshot)233 ErrCode AbilityManagerClient::GetMissionSnapshot(const int32_t missionId, MissionSnapshotInfo &snapshot)
234 {
235     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
236     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
237     return abms->GetMissionSnapshot(missionId, snapshot);
238 }
239 
MoveMissionToTop(int32_t missionId)240 ErrCode AbilityManagerClient::MoveMissionToTop(int32_t missionId)
241 {
242     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
243     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
244     return abms->MoveMissionToTop(missionId);
245 }
246 
MoveMissionToEnd(const sptr<IRemoteObject> & token,const bool nonFirst)247 ErrCode AbilityManagerClient::MoveMissionToEnd(const sptr<IRemoteObject> &token, const bool nonFirst)
248 {
249     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
250     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
251     return abms->MoveMissionToEnd(token, nonFirst);
252 }
253 
RemoveMissions(std::vector<int> missionId)254 ErrCode AbilityManagerClient::RemoveMissions(std::vector<int> missionId)
255 {
256     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
257     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
258     int error = ERR_OK;
259     for (auto it : missionId) {
260         error = abms->RemoveMission(it);
261         if (error != ERR_OK) {
262             HILOG_ERROR("Failed, error:%{private}d", error);
263             break;
264         }
265     }
266 
267     return error;
268 }
269 
RemoveStack(int id)270 ErrCode AbilityManagerClient::RemoveStack(int id)
271 {
272     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
273     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
274     return abms->RemoveStack(id);
275 }
276 
KillProcess(const std::string & bundleName)277 ErrCode AbilityManagerClient::KillProcess(const std::string &bundleName)
278 {
279     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
280     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
281     return abms->KillProcess(bundleName);
282 }
283 
IsFirstInMission(const sptr<IRemoteObject> & token)284 ErrCode AbilityManagerClient::IsFirstInMission(const sptr<IRemoteObject> &token)
285 {
286     if (token == nullptr) {
287         HILOG_ERROR("token is nullptr");
288         return ERR_NULL_OBJECT;
289     }
290     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
291     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
292     if (!(abms->IsFirstInMission(token))) {
293         return NO_FIRST_IN_MISSION;
294     }
295     return ERR_OK;
296 }
297 
CompelVerifyPermission(const std::string & permission,int pid,int uid,std::string & message)298 ErrCode AbilityManagerClient::CompelVerifyPermission(
299     const std::string &permission, int pid, int uid, std::string &message)
300 {
301     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
302     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
303     return abms->CompelVerifyPermission(permission, pid, uid, message);
304 }
305 
MoveMissionToFloatingStack(const MissionOption & missionOption)306 ErrCode AbilityManagerClient::MoveMissionToFloatingStack(const MissionOption &missionOption)
307 {
308     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
309     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
310     return abms->MoveMissionToFloatingStack(missionOption);
311 }
312 
MoveMissionToSplitScreenStack(const MissionOption & missionOption)313 ErrCode AbilityManagerClient::MoveMissionToSplitScreenStack(const MissionOption &missionOption)
314 {
315     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
316     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
317     return abms->MoveMissionToSplitScreenStack(missionOption);
318 }
319 
MinimizeMultiWindow(int missionId)320 ErrCode AbilityManagerClient::MinimizeMultiWindow(int missionId)
321 {
322     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
323     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
324     return abms->MinimizeMultiWindow(missionId);
325 }
326 
MaximizeMultiWindow(int missionId)327 ErrCode AbilityManagerClient::MaximizeMultiWindow(int missionId)
328 {
329     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
330     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
331     return abms->MaximizeMultiWindow(missionId);
332 }
333 
ChangeFocusAbility(const sptr<IRemoteObject> & lostFocusToken,const sptr<IRemoteObject> & getFocusToken)334 ErrCode AbilityManagerClient::ChangeFocusAbility(
335     const sptr<IRemoteObject> &lostFocusToken, const sptr<IRemoteObject> &getFocusToken)
336 {
337     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
338     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
339     return abms->ChangeFocusAbility(lostFocusToken, getFocusToken);
340 }
341 
GetFloatingMissions(std::vector<AbilityMissionInfo> & list)342 ErrCode AbilityManagerClient::GetFloatingMissions(std::vector<AbilityMissionInfo> &list)
343 {
344     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
345     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
346     return abms->GetFloatingMissions(list);
347 }
348 
CloseMultiWindow(int missionId)349 ErrCode AbilityManagerClient::CloseMultiWindow(int missionId)
350 {
351     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
352     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
353     return abms->CloseMultiWindow(missionId);
354 }
355 
SetMissionStackSetting(const StackSetting & stackSetting)356 ErrCode AbilityManagerClient::SetMissionStackSetting(const StackSetting &stackSetting)
357 {
358     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
359     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
360     return abms->SetMissionStackSetting(stackSetting);
361 }
362 
PowerOff()363 ErrCode AbilityManagerClient::PowerOff()
364 {
365     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
366     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
367     return abms->PowerOff();
368 }
369 
PowerOn()370 ErrCode AbilityManagerClient::PowerOn()
371 {
372     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
373     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
374     return abms->PowerOn();
375 }
376 
LockMission(int missionId)377 ErrCode AbilityManagerClient::LockMission(int missionId)
378 {
379     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
380     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
381     return abms->LockMission(missionId);
382 }
383 
UnlockMission(int missionId)384 ErrCode AbilityManagerClient::UnlockMission(int missionId)
385 {
386     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
387     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
388     return abms->UnlockMission(missionId);
389 }
390 
SetMissionDescriptionInfo(const sptr<IRemoteObject> & token,const MissionDescriptionInfo & description)391 ErrCode AbilityManagerClient::SetMissionDescriptionInfo(
392     const sptr<IRemoteObject> &token, const MissionDescriptionInfo &description)
393 {
394     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
395     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
396     return abms->SetMissionDescriptionInfo(token, description);
397 }
398 
GetMissionLockModeState()399 ErrCode AbilityManagerClient::GetMissionLockModeState()
400 {
401     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
402     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
403     return abms->GetMissionLockModeState();
404 }
405 
UpdateConfiguration(const DummyConfiguration & config)406 ErrCode AbilityManagerClient::UpdateConfiguration(const DummyConfiguration &config)
407 {
408     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
409     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
410     return abms->UpdateConfiguration(config);
411 }
412 
GetWantSender(const WantSenderInfo & wantSenderInfo,const sptr<IRemoteObject> & callerToken)413 sptr<IWantSender> AbilityManagerClient::GetWantSender(
414     const WantSenderInfo &wantSenderInfo, const sptr<IRemoteObject> &callerToken)
415 {
416     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, nullptr);
417     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
418     return abms->GetWantSender(wantSenderInfo, callerToken);
419 }
420 
SendWantSender(const sptr<IWantSender> & target,const SenderInfo & senderInfo)421 ErrCode AbilityManagerClient::SendWantSender(const sptr<IWantSender> &target, const SenderInfo &senderInfo)
422 {
423     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
424     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
425     return abms->SendWantSender(target, senderInfo);
426 }
427 
CancelWantSender(const sptr<IWantSender> & sender)428 void AbilityManagerClient::CancelWantSender(const sptr<IWantSender> &sender)
429 {
430     CHECK_REMOTE_OBJECT(remoteObject_);
431     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
432     abms->CancelWantSender(sender);
433 }
434 
GetPendingWantUid(const sptr<IWantSender> & target,int32_t & uid)435 ErrCode AbilityManagerClient::GetPendingWantUid(const sptr<IWantSender> &target, int32_t &uid)
436 {
437     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
438     if (target == nullptr) {
439         HILOG_ERROR("target is nullptr.");
440         return ABILITY_SERVICE_NOT_CONNECTED;
441     }
442     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
443     uid = abms->GetPendingWantUid(target);
444     return ERR_OK;
445 }
446 
GetPendingWantUserId(const sptr<IWantSender> & target,int32_t & userId)447 ErrCode AbilityManagerClient::GetPendingWantUserId(const sptr<IWantSender> &target, int32_t &userId)
448 {
449     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
450     if (target == nullptr) {
451         HILOG_ERROR("target is nullptr.");
452         return ABILITY_SERVICE_NOT_CONNECTED;
453     }
454     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
455     userId = abms->GetPendingWantUserId(target);
456     return ERR_OK;
457 }
458 
GetPendingWantBundleName(const sptr<IWantSender> & target,std::string & bundleName)459 ErrCode AbilityManagerClient::GetPendingWantBundleName(const sptr<IWantSender> &target, std::string &bundleName)
460 {
461     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
462     if (target == nullptr) {
463         HILOG_ERROR("target is nullptr.");
464         return ABILITY_SERVICE_NOT_CONNECTED;
465     }
466     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
467     bundleName = abms->GetPendingWantBundleName(target);
468     return ERR_OK;
469 }
470 
GetPendingWantCode(const sptr<IWantSender> & target,int32_t & code)471 ErrCode AbilityManagerClient::GetPendingWantCode(const sptr<IWantSender> &target, int32_t &code)
472 {
473     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
474     if (target == nullptr) {
475         HILOG_ERROR("target is nullptr.");
476         return ABILITY_SERVICE_NOT_CONNECTED;
477     }
478     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
479     code = abms->GetPendingWantCode(target);
480     return ERR_OK;
481 }
482 
GetPendingWantType(const sptr<IWantSender> & target,int32_t & type)483 ErrCode AbilityManagerClient::GetPendingWantType(const sptr<IWantSender> &target, int32_t &type)
484 {
485     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
486     if (target == nullptr) {
487         HILOG_ERROR("target is nullptr.");
488         return ABILITY_SERVICE_NOT_CONNECTED;
489     }
490     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
491     type = abms->GetPendingWantType(target);
492     type < 0 ? type = 0 : type;
493     return ERR_OK;
494 }
495 
RegisterCancelListener(const sptr<IWantSender> & sender,const sptr<IWantReceiver> & recevier)496 void AbilityManagerClient::RegisterCancelListener(const sptr<IWantSender> &sender, const sptr<IWantReceiver> &recevier)
497 {
498     CHECK_REMOTE_OBJECT(remoteObject_);
499     if (sender == nullptr) {
500         HILOG_ERROR("sender is nullptr.");
501         return;
502     }
503     if (recevier == nullptr) {
504         HILOG_ERROR("recevier is nullptr.");
505         return;
506     }
507     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
508     abms->RegisterCancelListener(sender, recevier);
509 }
510 
UnregisterCancelListener(const sptr<IWantSender> & sender,const sptr<IWantReceiver> & recevier)511 void AbilityManagerClient::UnregisterCancelListener(
512     const sptr<IWantSender> &sender, const sptr<IWantReceiver> &recevier)
513 {
514     CHECK_REMOTE_OBJECT(remoteObject_);
515     if (sender == nullptr) {
516         HILOG_ERROR("sender is nullptr.");
517         return;
518     }
519     if (recevier == nullptr) {
520         HILOG_ERROR("recevier is nullptr.");
521         return;
522     }
523     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
524     abms->UnregisterCancelListener(sender, recevier);
525 }
526 
GetPendingRequestWant(const sptr<IWantSender> & target,std::shared_ptr<Want> & want)527 ErrCode AbilityManagerClient::GetPendingRequestWant(const sptr<IWantSender> &target, std::shared_ptr<Want> &want)
528 {
529     CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED);
530     if (target == nullptr) {
531         HILOG_ERROR("target is nullptr.");
532         return ABILITY_SERVICE_NOT_CONNECTED;
533     }
534     if (want == nullptr) {
535         HILOG_ERROR("want is nullptr.");
536         return ABILITY_SERVICE_NOT_CONNECTED;
537     }
538     sptr<IAbilityManager> abms = iface_cast<IAbilityManager>(remoteObject_);
539     return abms->GetPendingRequestWant(target, want);
540 }
541 }  // namespace AAFwk
542 }  // namespace OHOS
543