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