1 /*
2 * Copyright (c) 2021-2024 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 "app_scheduler.h"
17
18 #include "ability_manager_service.h"
19 #include "ability_util.h"
20 #include "hitrace_meter.h"
21 #include "param.h"
22 #include "utils/state_utils.h"
23
24 namespace OHOS {
25 namespace AAFwk {
AppScheduler()26 AppScheduler::AppScheduler() : appMgrClient_(std::make_unique<AppExecFwk::AppMgrClient>())
27 {}
28
~AppScheduler()29 AppScheduler::~AppScheduler()
30 {}
31
Init(const std::weak_ptr<AppStateCallback> & callback)32 bool AppScheduler::Init(const std::weak_ptr<AppStateCallback> &callback)
33 {
34 CHECK_POINTER_RETURN_BOOL(callback.lock());
35 CHECK_POINTER_RETURN_BOOL(appMgrClient_);
36
37 std::lock_guard<std::mutex> guard(lock_);
38 if (isInit_) {
39 return true;
40 }
41
42 callback_ = callback;
43 /* because the errcode type of AppMgr Client API will be changed to int,
44 * so must to covert the return result */
45 int result = static_cast<int>(appMgrClient_->ConnectAppMgrService());
46 if (result != ERR_OK) {
47 TAG_LOGE(AAFwkTag::ABILITYMGR, "failed to ConnectAppMgrService");
48 return false;
49 }
50 this->IncStrongRef(this);
51 result = static_cast<int>(appMgrClient_->RegisterAppStateCallback(sptr<AppScheduler>(this)));
52 if (result != ERR_OK) {
53 TAG_LOGE(AAFwkTag::ABILITYMGR, "failed to RegisterAppStateCallback");
54 return false;
55 }
56
57 startSpecifiedAbilityResponse_ = new (std::nothrow) StartSpecifiedAbilityResponse();
58 if (startSpecifiedAbilityResponse_ == nullptr) {
59 TAG_LOGE(AAFwkTag::ABILITYMGR, "startSpecifiedAbilityResponse_ is nullptr.");
60 return false;
61 }
62 appMgrClient_->RegisterStartSpecifiedAbilityResponse(startSpecifiedAbilityResponse_);
63
64 TAG_LOGI(AAFwkTag::ABILITYMGR, "success to ConnectAppMgrService");
65 isInit_ = true;
66 return true;
67 }
68
LoadAbility(const AbilityRuntime::LoadParam & loadParam,const AppExecFwk::AbilityInfo & abilityInfo,const AppExecFwk::ApplicationInfo & applicationInfo,const Want & want)69 int AppScheduler::LoadAbility(const AbilityRuntime::LoadParam &loadParam, const AppExecFwk::AbilityInfo &abilityInfo,
70 const AppExecFwk::ApplicationInfo &applicationInfo, const Want &want)
71 {
72 HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__);
73 TAG_LOGD(AAFwkTag::ABILITYMGR, "called");
74 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
75 /* because the errcode type of AppMgr Client API will be changed to int,
76 * so must to covert the return result */
77 int ret = static_cast<int>(IN_PROCESS_CALL(
78 appMgrClient_->LoadAbility(abilityInfo, applicationInfo, want, loadParam)));
79 if (ret != ERR_OK) {
80 TAG_LOGE(AAFwkTag::ABILITYMGR, "AppScheduler fail to LoadAbility. ret %d", ret);
81 return INNER_ERR;
82 }
83 return ERR_OK;
84 }
85
TerminateAbility(const sptr<IRemoteObject> & token,bool clearMissionFlag)86 int AppScheduler::TerminateAbility(const sptr<IRemoteObject> &token, bool clearMissionFlag)
87 {
88 HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__);
89 TAG_LOGD(AAFwkTag::ABILITYMGR, "Terminate ability.");
90 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
91 /* because the errcode type of AppMgr Client API will be changed to int,
92 * so must to covert the return result */
93 int ret = static_cast<int>(IN_PROCESS_CALL(appMgrClient_->TerminateAbility(token, clearMissionFlag)));
94 if (ret != ERR_OK) {
95 TAG_LOGE(AAFwkTag::ABILITYMGR, "AppScheduler fail to TerminateAbility. ret %d", ret);
96 return INNER_ERR;
97 }
98 return ERR_OK;
99 }
100
UpdateApplicationInfoInstalled(const std::string & bundleName,const int32_t uid)101 int AppScheduler::UpdateApplicationInfoInstalled(const std::string &bundleName, const int32_t uid)
102 {
103 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
104 TAG_LOGD(AAFwkTag::ABILITYMGR, "Start to update the application info after new module installed.");
105 int ret = (int)appMgrClient_->UpdateApplicationInfoInstalled(bundleName, uid);
106 if (ret != ERR_OK) {
107 TAG_LOGE(AAFwkTag::ABILITYMGR, "Fail to UpdateApplicationInfoInstalled.");
108 return INNER_ERR;
109 }
110
111 return ERR_OK;
112 }
113
MoveToForeground(const sptr<IRemoteObject> & token)114 void AppScheduler::MoveToForeground(const sptr<IRemoteObject> &token)
115 {
116 HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__);
117 TAG_LOGD(AAFwkTag::ABILITYMGR, "Start to move the ability to foreground.");
118 CHECK_POINTER(appMgrClient_);
119 IN_PROCESS_CALL_WITHOUT_RET(
120 appMgrClient_->UpdateAbilityState(token, AppExecFwk::AbilityState::ABILITY_STATE_FOREGROUND));
121 }
122
MoveToBackground(const sptr<IRemoteObject> & token)123 void AppScheduler::MoveToBackground(const sptr<IRemoteObject> &token)
124 {
125 HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__);
126 TAG_LOGD(AAFwkTag::ABILITYMGR, "Move the app to background.");
127 CHECK_POINTER(appMgrClient_);
128 IN_PROCESS_CALL_WITHOUT_RET(
129 appMgrClient_->UpdateAbilityState(token, AppExecFwk::AbilityState::ABILITY_STATE_BACKGROUND));
130 }
131
UpdateAbilityState(const sptr<IRemoteObject> & token,const AppExecFwk::AbilityState state)132 void AppScheduler::UpdateAbilityState(const sptr<IRemoteObject> &token, const AppExecFwk::AbilityState state)
133 {
134 TAG_LOGD(AAFwkTag::ABILITYMGR, "UpdateAbilityState.");
135 CHECK_POINTER(appMgrClient_);
136 IN_PROCESS_CALL_WITHOUT_RET(appMgrClient_->UpdateAbilityState(token, state));
137 }
138
UpdateExtensionState(const sptr<IRemoteObject> & token,const AppExecFwk::ExtensionState state)139 void AppScheduler::UpdateExtensionState(const sptr<IRemoteObject> &token, const AppExecFwk::ExtensionState state)
140 {
141 TAG_LOGD(AAFwkTag::ABILITYMGR, "UpdateExtensionState.");
142 CHECK_POINTER(appMgrClient_);
143 IN_PROCESS_CALL_WITHOUT_RET(appMgrClient_->UpdateExtensionState(token, state));
144 }
145
AbilityBehaviorAnalysis(const sptr<IRemoteObject> & token,const sptr<IRemoteObject> & preToken,const int32_t visibility,const int32_t perceptibility,const int32_t connectionState)146 void AppScheduler::AbilityBehaviorAnalysis(const sptr<IRemoteObject> &token, const sptr<IRemoteObject> &preToken,
147 const int32_t visibility, const int32_t perceptibility, const int32_t connectionState)
148 {
149 TAG_LOGD(AAFwkTag::ABILITYMGR, "Ability behavior analysis.");
150 CHECK_POINTER(appMgrClient_);
151 IN_PROCESS_CALL_WITHOUT_RET(
152 appMgrClient_->AbilityBehaviorAnalysis(token, preToken, visibility, perceptibility, connectionState));
153 }
154
KillProcessByAbilityToken(const sptr<IRemoteObject> & token)155 void AppScheduler::KillProcessByAbilityToken(const sptr<IRemoteObject> &token)
156 {
157 TAG_LOGI(AAFwkTag::ABILITYMGR, "Kill process by ability token.");
158 CHECK_POINTER(appMgrClient_);
159 appMgrClient_->KillProcessByAbilityToken(token);
160 }
161
KillProcessesByUserId(int32_t userId)162 void AppScheduler::KillProcessesByUserId(int32_t userId)
163 {
164 TAG_LOGI(AAFwkTag::ABILITYMGR, "User id: %{public}d.", userId);
165 CHECK_POINTER(appMgrClient_);
166 appMgrClient_->KillProcessesByUserId(userId);
167 }
168
KillProcessesByPids(std::vector<int32_t> & pids)169 void AppScheduler::KillProcessesByPids(std::vector<int32_t> &pids)
170 {
171 TAG_LOGI(AAFwkTag::ABILITYMGR, "called");
172 CHECK_POINTER(appMgrClient_);
173 appMgrClient_->KillProcessesByPids(pids);
174 }
175
AttachPidToParent(const sptr<IRemoteObject> & token,const sptr<IRemoteObject> & callerToken)176 void AppScheduler::AttachPidToParent(const sptr<IRemoteObject> &token, const sptr<IRemoteObject> &callerToken)
177 {
178 TAG_LOGI(AAFwkTag::ABILITYMGR, "called");
179 CHECK_POINTER(appMgrClient_);
180 appMgrClient_->AttachPidToParent(token, callerToken);
181 }
182
ConvertToAppAbilityState(const int32_t state)183 AppAbilityState AppScheduler::ConvertToAppAbilityState(const int32_t state)
184 {
185 AppExecFwk::AbilityState abilityState = static_cast<AppExecFwk::AbilityState>(state);
186 switch (abilityState) {
187 case AppExecFwk::AbilityState::ABILITY_STATE_FOREGROUND: {
188 return AppAbilityState::ABILITY_STATE_FOREGROUND;
189 }
190 case AppExecFwk::AbilityState::ABILITY_STATE_BACKGROUND: {
191 return AppAbilityState::ABILITY_STATE_BACKGROUND;
192 }
193 default:
194 return AppAbilityState::ABILITY_STATE_UNDEFINED;
195 }
196 }
197
GetAbilityState() const198 AppAbilityState AppScheduler::GetAbilityState() const
199 {
200 return appAbilityState_;
201 }
202
OnAbilityRequestDone(const sptr<IRemoteObject> & token,const AppExecFwk::AbilityState state)203 void AppScheduler::OnAbilityRequestDone(const sptr<IRemoteObject> &token, const AppExecFwk::AbilityState state)
204 {
205 HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__);
206 TAG_LOGD(AAFwkTag::ABILITYMGR, "state:%{public}d", static_cast<int32_t>(state));
207 auto callback = callback_.lock();
208 CHECK_POINTER(callback);
209 appAbilityState_ = ConvertToAppAbilityState(static_cast<int32_t>(state));
210 callback->OnAbilityRequestDone(token, static_cast<int32_t>(state));
211 }
212
NotifyConfigurationChange(const AppExecFwk::Configuration & config,int32_t userId)213 void AppScheduler::NotifyConfigurationChange(const AppExecFwk::Configuration &config, int32_t userId)
214 {
215 auto callback = callback_.lock();
216 CHECK_POINTER(callback);
217 callback->NotifyConfigurationChange(config, userId);
218 }
219
NotifyStartResidentProcess(std::vector<AppExecFwk::BundleInfo> & bundleInfos)220 void AppScheduler::NotifyStartResidentProcess(std::vector<AppExecFwk::BundleInfo> &bundleInfos)
221 {
222 auto callback = callback_.lock();
223 CHECK_POINTER(callback);
224 callback->NotifyStartResidentProcess(bundleInfos);
225 }
226
OnAppRemoteDied(const std::vector<sptr<IRemoteObject>> & abilityTokens)227 void AppScheduler::OnAppRemoteDied(const std::vector<sptr<IRemoteObject>> &abilityTokens)
228 {
229 auto callback = callback_.lock();
230 CHECK_POINTER(callback);
231 callback->OnAppRemoteDied(abilityTokens);
232 }
233
NotifyAppPreCache(int32_t pid,int32_t userId)234 void AppScheduler::NotifyAppPreCache(int32_t pid, int32_t userId)
235 {
236 auto callback = callback_.lock();
237 CHECK_POINTER(callback);
238 callback->NotifyAppPreCache(pid, userId);
239 }
240
KillApplication(const std::string & bundleName,const bool clearPageStack)241 int AppScheduler::KillApplication(const std::string &bundleName, const bool clearPageStack)
242 {
243 TAG_LOGI(AAFwkTag::ABILITYMGR, "[%{public}s(%{public}s)] enter", __FILE__, __FUNCTION__);
244 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
245 int ret = (int)appMgrClient_->KillApplication(bundleName, clearPageStack);
246 if (ret != ERR_OK) {
247 TAG_LOGE(AAFwkTag::ABILITYMGR, "Fail to kill application.");
248 return INNER_ERR;
249 }
250
251 return ERR_OK;
252 }
253
ForceKillApplication(const std::string & bundleName,const int userId,const int appIndex)254 int AppScheduler::ForceKillApplication(const std::string &bundleName,
255 const int userId, const int appIndex)
256 {
257 TAG_LOGI(AAFwkTag::ABILITYMGR, "Called.");
258 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
259 int ret = (int)appMgrClient_->ForceKillApplication(bundleName, userId, appIndex);
260 if (ret != ERR_OK) {
261 TAG_LOGE(AAFwkTag::ABILITYMGR, "Fail to force kill application.");
262 return INNER_ERR;
263 }
264
265 return ERR_OK;
266 }
267
KillProcessesByAccessTokenId(const uint32_t accessTokenId)268 int AppScheduler::KillProcessesByAccessTokenId(const uint32_t accessTokenId)
269 {
270 TAG_LOGI(AAFwkTag::ABILITYMGR, "Called.");
271 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
272 int ret = (int)appMgrClient_->KillProcessesByAccessTokenId(accessTokenId);
273 if (ret != ERR_OK) {
274 TAG_LOGE(AAFwkTag::ABILITYMGR, "Fail to force kill application by accessTokenId.");
275 return INNER_ERR;
276 }
277
278 return ERR_OK;
279 }
280
KillApplicationByUid(const std::string & bundleName,int32_t uid,const std::string & reason)281 int AppScheduler::KillApplicationByUid(const std::string &bundleName, int32_t uid,
282 const std::string& reason)
283 {
284 TAG_LOGI(AAFwkTag::ABILITYMGR, "[%{public}s(%{public}s)] enter", __FILE__, __FUNCTION__);
285 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
286 int ret = (int)appMgrClient_->KillApplicationByUid(bundleName, uid, reason);
287 if (ret != ERR_OK) {
288 TAG_LOGE(AAFwkTag::ABILITYMGR, "Fail to kill application by uid.");
289 return INNER_ERR;
290 }
291
292 return ERR_OK;
293 }
294
AttachTimeOut(const sptr<IRemoteObject> & token)295 void AppScheduler::AttachTimeOut(const sptr<IRemoteObject> &token)
296 {
297 CHECK_POINTER(appMgrClient_);
298 IN_PROCESS_CALL_WITHOUT_RET(appMgrClient_->AbilityAttachTimeOut(token));
299 }
300
PrepareTerminate(const sptr<IRemoteObject> & token,bool clearMissionFlag)301 void AppScheduler::PrepareTerminate(const sptr<IRemoteObject> &token, bool clearMissionFlag)
302 {
303 CHECK_POINTER(appMgrClient_);
304 IN_PROCESS_CALL_WITHOUT_RET(appMgrClient_->PrepareTerminate(token, clearMissionFlag));
305 }
306
OnAppStateChanged(const AppExecFwk::AppProcessData & appData)307 void AppScheduler::OnAppStateChanged(const AppExecFwk::AppProcessData &appData)
308 {
309 HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__);
310 auto callback = callback_.lock();
311 CHECK_POINTER(callback);
312 AppInfo info;
313 for (const auto &list : appData.appDatas) {
314 AppData data;
315 data.appName = list.appName;
316 data.uid = list.uid;
317 info.appData.push_back(data);
318 }
319 info.processName = appData.processName;
320 info.state = static_cast<AppState>(appData.appState);
321 info.pid = appData.pid;
322 callback->OnAppStateChanged(info);
323 }
324
GetRunningProcessInfoByToken(const sptr<IRemoteObject> & token,AppExecFwk::RunningProcessInfo & info)325 void AppScheduler::GetRunningProcessInfoByToken(const sptr<IRemoteObject> &token, AppExecFwk::RunningProcessInfo &info)
326 {
327 HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__);
328 CHECK_POINTER(appMgrClient_);
329 IN_PROCESS_CALL_WITHOUT_RET(appMgrClient_->GetRunningProcessInfoByToken(token, info));
330 }
331
GetRunningProcessInfoByPid(const pid_t pid,OHOS::AppExecFwk::RunningProcessInfo & info) const332 void AppScheduler::GetRunningProcessInfoByPid(const pid_t pid, OHOS::AppExecFwk::RunningProcessInfo &info) const
333 {
334 CHECK_POINTER(appMgrClient_);
335 IN_PROCESS_CALL_WITHOUT_RET(appMgrClient_->GetRunningProcessInfoByPid(pid, info));
336 }
337
SetAbilityForegroundingFlagToAppRecord(const pid_t pid) const338 void AppScheduler::SetAbilityForegroundingFlagToAppRecord(const pid_t pid) const
339 {
340 CHECK_POINTER(appMgrClient_);
341 IN_PROCESS_CALL_WITHOUT_RET(appMgrClient_->SetAbilityForegroundingFlagToAppRecord(pid));
342 }
343
StartupResidentProcess(const std::vector<AppExecFwk::BundleInfo> & bundleInfos)344 void AppScheduler::StartupResidentProcess(const std::vector<AppExecFwk::BundleInfo> &bundleInfos)
345 {
346 CHECK_POINTER(appMgrClient_);
347 appMgrClient_->StartupResidentProcess(bundleInfos);
348 }
349
StartSpecifiedAbility(const AAFwk::Want & want,const AppExecFwk::AbilityInfo & abilityInfo,int32_t requestId)350 void AppScheduler::StartSpecifiedAbility(const AAFwk::Want &want, const AppExecFwk::AbilityInfo &abilityInfo,
351 int32_t requestId)
352 {
353 CHECK_POINTER(appMgrClient_);
354 IN_PROCESS_CALL_WITHOUT_RET(appMgrClient_->StartSpecifiedAbility(want, abilityInfo, requestId));
355 }
356
OnAcceptWantResponse(const AAFwk::Want & want,const std::string & flag,int32_t requestId)357 void StartSpecifiedAbilityResponse::OnAcceptWantResponse(
358 const AAFwk::Want &want, const std::string &flag, int32_t requestId)
359 {
360 DelayedSingleton<AbilityManagerService>::GetInstance()->OnAcceptWantResponse(want, flag, requestId);
361 }
362
OnTimeoutResponse(const AAFwk::Want & want,int32_t requestId)363 void StartSpecifiedAbilityResponse::OnTimeoutResponse(const AAFwk::Want &want, int32_t requestId)
364 {
365 DelayedSingleton<AbilityManagerService>::GetInstance()->OnStartSpecifiedAbilityTimeoutResponse(want, requestId);
366 }
367
StartSpecifiedProcess(const AAFwk::Want & want,const AppExecFwk::AbilityInfo & abilityInfo,int32_t requestId)368 void AppScheduler::StartSpecifiedProcess(
369 const AAFwk::Want &want, const AppExecFwk::AbilityInfo &abilityInfo, int32_t requestId)
370 {
371 CHECK_POINTER(appMgrClient_);
372 IN_PROCESS_CALL_WITHOUT_RET(appMgrClient_->StartSpecifiedProcess(want, abilityInfo, requestId));
373 }
374
OnNewProcessRequestResponse(const AAFwk::Want & want,const std::string & flag,int32_t requestId)375 void StartSpecifiedAbilityResponse::OnNewProcessRequestResponse(
376 const AAFwk::Want &want, const std::string &flag, int32_t requestId)
377 {
378 DelayedSingleton<AbilityManagerService>::GetInstance()->OnStartSpecifiedProcessResponse(want, flag, requestId);
379 }
380
OnNewProcessRequestTimeoutResponse(const AAFwk::Want & want,int32_t requestId)381 void StartSpecifiedAbilityResponse::OnNewProcessRequestTimeoutResponse(const AAFwk::Want &want, int32_t requestId)
382 {
383 DelayedSingleton<AbilityManagerService>::GetInstance()->OnStartSpecifiedProcessTimeoutResponse(want, requestId);
384 }
385
GetProcessRunningInfos(std::vector<AppExecFwk::RunningProcessInfo> & info)386 int AppScheduler::GetProcessRunningInfos(std::vector<AppExecFwk::RunningProcessInfo> &info)
387 {
388 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
389 return static_cast<int>(appMgrClient_->GetAllRunningProcesses(info));
390 }
391
GetProcessRunningInfosByUserId(std::vector<AppExecFwk::RunningProcessInfo> & info,int32_t userId)392 int AppScheduler::GetProcessRunningInfosByUserId(std::vector<AppExecFwk::RunningProcessInfo> &info, int32_t userId)
393 {
394 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
395 return static_cast<int>(appMgrClient_->GetProcessRunningInfosByUserId(info, userId));
396 }
397
ConvertAppState(const AppState & state)398 std::string AppScheduler::ConvertAppState(const AppState &state)
399 {
400 return StateUtils::AppStateToStrMap(state);
401 }
402
StartUserTest(const Want & want,const sptr<IRemoteObject> & observer,const AppExecFwk::BundleInfo & bundleInfo,int32_t userId)403 int AppScheduler::StartUserTest(
404 const Want &want, const sptr<IRemoteObject> &observer, const AppExecFwk::BundleInfo &bundleInfo, int32_t userId)
405 {
406 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
407 int ret = appMgrClient_->StartUserTestProcess(want, observer, bundleInfo, userId);
408 if (ret != ERR_OK) {
409 TAG_LOGE(AAFwkTag::ABILITYMGR, "Fail to start user test.");
410 return INNER_ERR;
411 }
412 return ERR_OK;
413 }
414
FinishUserTest(const std::string & msg,const int64_t & resultCode,const std::string & bundleName)415 int AppScheduler::FinishUserTest(const std::string &msg, const int64_t &resultCode, const std::string &bundleName)
416 {
417 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
418 int ret = appMgrClient_->FinishUserTest(msg, resultCode, bundleName);
419 if (ret != ERR_OK) {
420 TAG_LOGE(AAFwkTag::ABILITYMGR, "Fail to start user test.");
421 return INNER_ERR;
422 }
423 return ERR_OK;
424 }
425
UpdateConfiguration(const AppExecFwk::Configuration & config)426 int AppScheduler::UpdateConfiguration(const AppExecFwk::Configuration &config)
427 {
428 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
429 auto ret = static_cast<int>(appMgrClient_->UpdateConfiguration(config));
430 if (ret != ERR_OK) {
431 TAG_LOGE(AAFwkTag::ABILITYMGR, "UpdateConfiguration failed.");
432 return INNER_ERR;
433 }
434
435 return ERR_OK;
436 }
437
GetConfiguration(AppExecFwk::Configuration & config)438 int AppScheduler::GetConfiguration(AppExecFwk::Configuration &config)
439 {
440 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
441 auto ret = static_cast<int>(appMgrClient_->GetConfiguration(config));
442 if (ret != ERR_OK) {
443 TAG_LOGE(AAFwkTag::ABILITYMGR, "GetConfiguration failed.");
444 return INNER_ERR;
445 }
446
447 return ERR_OK;
448 }
449
GetAbilityRecordsByProcessID(const int pid,std::vector<sptr<IRemoteObject>> & tokens)450 int AppScheduler::GetAbilityRecordsByProcessID(const int pid, std::vector<sptr<IRemoteObject>> &tokens)
451 {
452 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
453 auto ret = static_cast<int>(appMgrClient_->GetAbilityRecordsByProcessID(pid, tokens));
454 if (ret != ERR_OK) {
455 TAG_LOGE(AAFwkTag::ABILITYMGR, "GetAbilityRecordsByProcessID failed.");
456 return INNER_ERR;
457 }
458
459 return ERR_OK;
460 }
461
GetApplicationInfoByProcessID(const int pid,AppExecFwk::ApplicationInfo & application,bool & debug)462 int AppScheduler::GetApplicationInfoByProcessID(const int pid, AppExecFwk::ApplicationInfo &application, bool &debug)
463 {
464 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
465 auto ret = static_cast<int>(appMgrClient_->GetApplicationInfoByProcessID(pid, application, debug));
466 if (ret != ERR_OK) {
467 TAG_LOGE(AAFwkTag::ABILITYMGR, "GetApplicationInfoByProcessID failed.");
468 return ret;
469 }
470
471 return ERR_OK;
472 }
473
NotifyAppMgrRecordExitReason(int32_t pid,int32_t reason,const std::string & exitMsg)474 int32_t AppScheduler::NotifyAppMgrRecordExitReason(int32_t pid, int32_t reason, const std::string &exitMsg)
475 {
476 if (pid < 0) {
477 TAG_LOGW(AAFwkTag::ABILITYMGR, "NotifyAppMgrRecordExitReason failed, pid <= 0.");
478 return ERR_INVALID_VALUE;
479 }
480 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
481 auto ret = static_cast<int32_t>(IN_PROCESS_CALL(appMgrClient_->NotifyAppMgrRecordExitReason(pid, reason, exitMsg)));
482 if (ret != ERR_OK) {
483 TAG_LOGE(AAFwkTag::ABILITYMGR, "NotifyAppMgrRecordExitReason failed.");
484 return ret;
485 }
486 return ERR_OK;
487 }
488
GetBundleNameByPid(const int pid,std::string & bundleName,int32_t & uid)489 int32_t AppScheduler::GetBundleNameByPid(const int pid, std::string &bundleName, int32_t &uid)
490 {
491 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
492 int32_t ret = static_cast<int32_t>(IN_PROCESS_CALL(appMgrClient_->GetBundleNameByPid(pid, bundleName, uid)));
493 if (ret != ERR_OK) {
494 TAG_LOGE(AAFwkTag::ABILITYMGR, "Get bundle name failed.");
495 return INNER_ERR;
496 }
497 return ERR_OK;
498 }
499
SetCurrentUserId(const int32_t userId)500 void AppScheduler::SetCurrentUserId(const int32_t userId)
501 {
502 CHECK_POINTER(appMgrClient_);
503 IN_PROCESS_CALL_WITHOUT_RET(appMgrClient_->SetCurrentUserId(userId));
504 }
505
SetEnableStartProcessFlagByUserId(int32_t userId,bool enableStartProcess)506 void AppScheduler::SetEnableStartProcessFlagByUserId(int32_t userId, bool enableStartProcess)
507 {
508 CHECK_POINTER(appMgrClient_);
509 IN_PROCESS_CALL_WITHOUT_RET(appMgrClient_->SetEnableStartProcessFlagByUserId(userId, enableStartProcess));
510 }
511
NotifyFault(const AppExecFwk::FaultData & faultData)512 int32_t AppScheduler::NotifyFault(const AppExecFwk::FaultData &faultData)
513 {
514 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
515 auto ret = static_cast<int>(appMgrClient_->NotifyAppFault(faultData));
516 if (ret != ERR_OK) {
517 TAG_LOGE(AAFwkTag::ABILITYMGR, "NotifyAppFault failed.");
518 return INNER_ERR;
519 }
520
521 return ERR_OK;
522 }
523
RegisterAppDebugListener(const sptr<AppExecFwk::IAppDebugListener> & listener)524 int32_t AppScheduler::RegisterAppDebugListener(const sptr<AppExecFwk::IAppDebugListener> &listener)
525 {
526 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
527 auto ret = static_cast<int32_t>(appMgrClient_->RegisterAppDebugListener(listener));
528 if (ret != ERR_OK) {
529 TAG_LOGE(AAFwkTag::ABILITYMGR, "Register app debug listener failed.");
530 return INNER_ERR;
531 }
532 return ERR_OK;
533 }
534
UnregisterAppDebugListener(const sptr<AppExecFwk::IAppDebugListener> & listener)535 int32_t AppScheduler::UnregisterAppDebugListener(const sptr<AppExecFwk::IAppDebugListener> &listener)
536 {
537 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
538 auto ret = static_cast<int32_t>(appMgrClient_->UnregisterAppDebugListener(listener));
539 if (ret != ERR_OK) {
540 TAG_LOGE(AAFwkTag::ABILITYMGR, "Unregister app debug listener failed.");
541 return INNER_ERR;
542 }
543 return ERR_OK;
544 }
545
AttachAppDebug(const std::string & bundleName)546 int32_t AppScheduler::AttachAppDebug(const std::string &bundleName)
547 {
548 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
549 auto ret = static_cast<int32_t>(appMgrClient_->AttachAppDebug(bundleName));
550 if (ret != ERR_OK) {
551 TAG_LOGE(AAFwkTag::ABILITYMGR, "Attach app debug failed.");
552 return INNER_ERR;
553 }
554 return ERR_OK;
555 }
556
DetachAppDebug(const std::string & bundleName)557 int32_t AppScheduler::DetachAppDebug(const std::string &bundleName)
558 {
559 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
560 auto ret = static_cast<int32_t>(appMgrClient_->DetachAppDebug(bundleName));
561 if (ret != ERR_OK) {
562 TAG_LOGE(AAFwkTag::ABILITYMGR, "Detach app debug failed.");
563 return INNER_ERR;
564 }
565 return ERR_OK;
566 }
567
RegisterAbilityDebugResponse(const sptr<AppExecFwk::IAbilityDebugResponse> & response)568 int32_t AppScheduler::RegisterAbilityDebugResponse(const sptr<AppExecFwk::IAbilityDebugResponse> &response)
569 {
570 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
571 auto ret = static_cast<int32_t>(appMgrClient_->RegisterAbilityDebugResponse(response));
572 if (ret != ERR_OK) {
573 TAG_LOGE(AAFwkTag::ABILITYMGR, "Register ability debug response failed.");
574 return INNER_ERR;
575 }
576 return ERR_OK;
577 }
578
IsAttachDebug(const std::string & bundleName)579 bool AppScheduler::IsAttachDebug(const std::string &bundleName)
580 {
581 CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR);
582 auto ret = static_cast<int32_t>(appMgrClient_->IsAttachDebug(bundleName));
583 if (ret != ERR_OK) {
584 TAG_LOGE(AAFwkTag::ABILITYMGR, "Call is attach debug failed.");
585 return INNER_ERR;
586 }
587 return ERR_OK;
588 }
589
ClearProcessByToken(sptr<IRemoteObject> token) const590 void AppScheduler::ClearProcessByToken(sptr<IRemoteObject> token) const
591 {
592 HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__);
593 CHECK_POINTER(appMgrClient_);
594 appMgrClient_->ClearProcessByToken(token);
595 }
596
IsMemorySizeSufficent() const597 bool AppScheduler::IsMemorySizeSufficent() const
598 {
599 if (!appMgrClient_) {
600 TAG_LOGE(AAFwkTag::ABILITYMGR, "appMgrClient is nullptr");
601 return true;
602 }
603 return appMgrClient_->IsMemorySizeSufficent();
604 }
605
AttachedToStatusBar(const sptr<IRemoteObject> & token)606 void AppScheduler::AttachedToStatusBar(const sptr<IRemoteObject> &token)
607 {
608 TAG_LOGI(AAFwkTag::ABILITYMGR, "called");
609 CHECK_POINTER(appMgrClient_);
610 appMgrClient_->AttachedToStatusBar(token);
611 }
612
BlockProcessCacheByPids(const std::vector<int32_t> & pids)613 void AppScheduler::BlockProcessCacheByPids(const std::vector<int32_t> &pids)
614 {
615 TAG_LOGI(AAFwkTag::ABILITYMGR, "called");
616 CHECK_POINTER(appMgrClient_);
617 appMgrClient_->BlockProcessCacheByPids(pids);
618 }
619
IsKilledForUpgradeWeb(const std::string & bundleName)620 bool AppScheduler::IsKilledForUpgradeWeb(const std::string &bundleName)
621 {
622 if (!appMgrClient_) {
623 TAG_LOGE(AAFwkTag::ABILITYMGR, "appMgrClient is nullptr");
624 return false;
625 }
626 return appMgrClient_->IsKilledForUpgradeWeb(bundleName);
627 }
628
CleanAbilityByUserRequest(const sptr<IRemoteObject> & token)629 bool AppScheduler::CleanAbilityByUserRequest(const sptr<IRemoteObject> &token)
630 {
631 HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__);
632 TAG_LOGD(AAFwkTag::ABILITYMGR, "called");
633 if (!appMgrClient_) {
634 TAG_LOGE(AAFwkTag::ABILITYMGR, "appMgrClient is nullptr");
635 return false;
636 }
637 return IN_PROCESS_CALL(appMgrClient_->CleanAbilityByUserRequest(token));
638 }
639
IsProcessContainsOnlyUIAbility(const pid_t pid)640 bool AppScheduler::IsProcessContainsOnlyUIAbility(const pid_t pid)
641 {
642 if (!appMgrClient_) {
643 TAG_LOGE(AAFwkTag::ABILITYMGR, "appMgrClient is nullptr");
644 return false;
645 }
646 return appMgrClient_->IsProcessContainsOnlyUIAbility(pid);
647 }
IsProcessAttached(sptr<IRemoteObject> token) const648 bool AppScheduler::IsProcessAttached(sptr<IRemoteObject> token) const
649 {
650 if (!appMgrClient_) {
651 TAG_LOGE(AAFwkTag::ABILITYMGR, "appMgrClient is nullptr");
652 return false;
653 }
654 return appMgrClient_->IsProcessAttached(token);
655 }
656
SetProcessCacheStatus(int32_t pid,bool isSupport)657 void AppScheduler::SetProcessCacheStatus(int32_t pid, bool isSupport)
658 {
659 if (!appMgrClient_) {
660 TAG_LOGE(AAFwkTag::ABILITYMGR, "appMgrClient is nullptr");
661 return;
662 }
663 appMgrClient_->SetSupportedProcessCache(pid, isSupport);
664 }
665 } // namespace AAFwk
666 } // namespace OHOS
667