/* * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "ability_manager_client.h" #include "string_ex.h" #include "ability_manager_interface.h" #ifdef WITH_DLP #include "dlp_file_kits.h" #endif // WITH_DLP #include "hilog_wrapper.h" #include "if_system_ability_manager.h" #include "ipc_skeleton.h" #include "iservice_registry.h" #include "string_ex.h" #include "system_ability_definition.h" #include "hitrace_meter.h" namespace OHOS { namespace AAFwk { std::shared_ptr AbilityManagerClient::instance_ = nullptr; std::recursive_mutex AbilityManagerClient::mutex_; #ifdef WITH_DLP const std::string DLP_PARAMS_SANDBOX = "ohos.dlp.params.sandbox"; #endif // WITH_DLP #define CHECK_POINTER_RETURN(object) \ if (!object) { \ HILOG_ERROR("proxy is nullptr"); \ return; \ } #define CHECK_POINTER_RETURN_NOT_CONNECTED(object) \ if (!object) { \ HILOG_ERROR("proxy is nullptr."); \ return ABILITY_SERVICE_NOT_CONNECTED; \ } std::shared_ptr AbilityManagerClient::GetInstance() { if (instance_ == nullptr) { std::lock_guard lock_l(mutex_); if (instance_ == nullptr) { instance_ = std::make_shared(); } } return instance_; } AbilityManagerClient::AbilityManagerClient() {} AbilityManagerClient::~AbilityManagerClient() {} ErrCode AbilityManagerClient::AttachAbilityThread( const sptr &scheduler, const sptr &token) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->AttachAbilityThread(scheduler, token); } ErrCode AbilityManagerClient::AbilityTransitionDone(const sptr &token, int state, const PacMap &saveData) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->AbilityTransitionDone(token, state, saveData); } ErrCode AbilityManagerClient::ScheduleConnectAbilityDone( const sptr &token, const sptr &remoteObject) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->ScheduleConnectAbilityDone(token, remoteObject); } ErrCode AbilityManagerClient::ScheduleDisconnectAbilityDone(const sptr &token) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->ScheduleDisconnectAbilityDone(token); } ErrCode AbilityManagerClient::ScheduleCommandAbilityDone(const sptr &token) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->ScheduleCommandAbilityDone(token); } ErrCode AbilityManagerClient::StartAbility(const Want &want, int requestCode, int32_t userId) { HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); HandleDlpApp(const_cast(want)); return abms->StartAbility(want, userId, requestCode); } ErrCode AbilityManagerClient::StartAbility( const Want &want, const sptr &callerToken, int requestCode, int32_t userId) { HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); HILOG_INFO("Start ability come, ability:%{public}s, userId:%{public}d.", want.GetElement().GetAbilityName().c_str(), userId); HandleDlpApp(const_cast(want)); return abms->StartAbility(want, callerToken, userId, requestCode); } ErrCode AbilityManagerClient::StartAbility(const Want &want, const AbilityStartSetting &abilityStartSetting, const sptr &callerToken, int requestCode, int32_t userId) { HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); HandleDlpApp(const_cast(want)); return abms->StartAbility(want, abilityStartSetting, callerToken, userId, requestCode); } ErrCode AbilityManagerClient::StartAbility(const Want &want, const StartOptions &startOptions, const sptr &callerToken, int requestCode, int32_t userId) { HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); HILOG_INFO("%{public}s come, abilityName=%{public}s, userId=%{public}d.", __func__, want.GetElement().GetAbilityName().c_str(), userId); HandleDlpApp(const_cast(want)); return abms->StartAbility(want, startOptions, callerToken, userId, requestCode); } ErrCode AbilityManagerClient::SendResultToAbility(int requestCode, int resultCode, Want& resultWant) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); HILOG_INFO("startSendResultToAbility come."); return abms->SendResultToAbility(requestCode, resultCode, resultWant); } ErrCode AbilityManagerClient::StartExtensionAbility(const Want &want, const sptr &callerToken, int32_t userId, AppExecFwk::ExtensionAbilityType extensionType) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); HILOG_INFO("%{public}s come, bundleName=%{public}s, abilityName=%{public}s, userId=%{public}d.", __func__, want.GetElement().GetAbilityName().c_str(), want.GetElement().GetBundleName().c_str(), userId); return abms->StartExtensionAbility(want, callerToken, userId, extensionType); } ErrCode AbilityManagerClient::StopExtensionAbility(const Want &want, const sptr &callerToken, int32_t userId, AppExecFwk::ExtensionAbilityType extensionType) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); HILOG_INFO("%{public}s come, bundleName=%{public}s, abilityName=%{public}s, userId=%{public}d.", __func__, want.GetElement().GetAbilityName().c_str(), want.GetElement().GetBundleName().c_str(), userId); return abms->StopExtensionAbility(want, callerToken, userId, extensionType); } ErrCode AbilityManagerClient::TerminateAbility(const sptr &token, int resultCode, const Want *resultWant) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); HILOG_INFO("Terminate ability come."); return abms->TerminateAbility(token, resultCode, resultWant); } ErrCode AbilityManagerClient::TerminateAbility(const sptr &callerToken, int requestCode) { HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->TerminateAbilityByCaller(callerToken, requestCode); } ErrCode AbilityManagerClient::TerminateAbilityResult(const sptr &token, int startId) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->TerminateAbilityResult(token, startId); } ErrCode AbilityManagerClient::CloseAbility(const sptr &token, int resultCode, const Want *resultWant) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); HILOG_INFO("Close ability come."); return abms->CloseAbility(token, resultCode, resultWant); } ErrCode AbilityManagerClient::MinimizeAbility(const sptr &token, bool fromUser) { HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); HILOG_INFO("Minimize ability, fromUser:%{public}d.", fromUser); return abms->MinimizeAbility(token, fromUser); } ErrCode AbilityManagerClient::ConnectAbility(const Want &want, const sptr &connect, int32_t userId) { HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); HILOG_INFO("Connect ability called, bundleName:%{public}s, abilityName:%{public}s, userId:%{public}d.", want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str(), userId); return abms->ConnectAbilityCommon(want, connect, nullptr, AppExecFwk::ExtensionAbilityType::SERVICE, userId); } ErrCode AbilityManagerClient::ConnectAbility( const Want &want, const sptr &connect, const sptr &callerToken, int32_t userId) { HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); HILOG_INFO("Connect ability called, bundleName:%{public}s, abilityName:%{public}s, userId:%{public}d.", want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str(), userId); return abms->ConnectAbilityCommon(want, connect, callerToken, AppExecFwk::ExtensionAbilityType::SERVICE, userId); } ErrCode AbilityManagerClient::ConnectDataShareExtensionAbility(const Want &want, const sptr &connect, int32_t userId) { HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); auto abms = GetAbilityManager(); if (abms == nullptr) { HILOG_ERROR("Connect failed, bundleName:%{public}s, abilityName:%{public}s, uri:%{public}s.", want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str(), want.GetUriString().c_str()); return ABILITY_SERVICE_NOT_CONNECTED; } HILOG_INFO("Connect called, bundleName:%{public}s, abilityName:%{public}s, uri:%{public}s.", want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str(), want.GetUriString().c_str()); return abms->ConnectAbilityCommon(want, connect, nullptr, AppExecFwk::ExtensionAbilityType::DATASHARE, userId); } ErrCode AbilityManagerClient::ConnectExtensionAbility(const Want &want, const sptr &connect, int32_t userId) { HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); auto abms = GetAbilityManager(); if (abms == nullptr) { HILOG_ERROR("Connect failed, bundleName:%{public}s, abilityName:%{public}s", want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str()); return ABILITY_SERVICE_NOT_CONNECTED; } HILOG_INFO("Connect called, bundleName:%{public}s, abilityName:%{public}s, userId:%{public}d.", want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str(), userId); return abms->ConnectAbilityCommon(want, connect, nullptr, AppExecFwk::ExtensionAbilityType::UNSPECIFIED, userId); } ErrCode AbilityManagerClient::DisconnectAbility(const sptr &connect) { HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); HILOG_INFO("Disconnect ability begin."); return abms->DisconnectAbility(connect); } sptr AbilityManagerClient::AcquireDataAbility( const Uri &uri, bool tryBind, const sptr &callerToken) { auto abms = GetAbilityManager(); if (!abms) { return nullptr; } return abms->AcquireDataAbility(uri, tryBind, callerToken); } ErrCode AbilityManagerClient::ReleaseDataAbility( sptr dataAbilityScheduler, const sptr &callerToken) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->ReleaseDataAbility(dataAbilityScheduler, callerToken); } ErrCode AbilityManagerClient::DumpState(const std::string &args, std::vector &state) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); abms->DumpState(args, state); return ERR_OK; } ErrCode AbilityManagerClient::DumpSysState( const std::string& args, std::vector& state, bool isClient, bool isUserID, int UserID) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); abms->DumpSysState(args, state, isClient, isUserID, UserID); return ERR_OK; } ErrCode AbilityManagerClient::Connect() { std::lock_guard lock(mutex_); if (proxy_ != nullptr) { return ERR_OK; } sptr systemManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); if (systemManager == nullptr) { HILOG_ERROR("Fail to get registry."); return GET_ABILITY_SERVICE_FAILED; } sptr remoteObj = systemManager->GetSystemAbility(ABILITY_MGR_SERVICE_ID); if (remoteObj == nullptr) { HILOG_ERROR("Fail to connect ability manager service."); return GET_ABILITY_SERVICE_FAILED; } deathRecipient_ = sptr(new AbilityMgrDeathRecipient()); if (deathRecipient_ == nullptr) { HILOG_ERROR("%{public}s :Failed to create AbilityMgrDeathRecipient!", __func__); return GET_ABILITY_SERVICE_FAILED; } if ((remoteObj->IsProxyObject()) && (!remoteObj->AddDeathRecipient(deathRecipient_))) { HILOG_ERROR("%{public}s :Add death recipient to AbilityManagerService failed.", __func__); return GET_ABILITY_SERVICE_FAILED; } proxy_ = iface_cast(remoteObj); HILOG_DEBUG("Connect ability manager service success."); return ERR_OK; } ErrCode AbilityManagerClient::StopServiceAbility(const Want &want) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->StopServiceAbility(want); } ErrCode AbilityManagerClient::KillProcess(const std::string &bundleName) { HILOG_INFO("[%{public}s(%{public}s)] enter", __FILE__, __FUNCTION__); auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->KillProcess(bundleName); } #ifdef ABILITY_COMMAND_FOR_TEST ErrCode AbilityManagerClient::ForceTimeoutForTest(const std::string &abilityName, const std::string &state) { HILOG_INFO("[%{public}s(%{public}s)] enter", __FILE__, __FUNCTION__); auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->ForceTimeoutForTest(abilityName, state); } #endif ErrCode AbilityManagerClient::ClearUpApplicationData(const std::string &bundleName) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->ClearUpApplicationData(bundleName); } sptr AbilityManagerClient::GetWantSender( const WantSenderInfo &wantSenderInfo, const sptr &callerToken) { auto abms = GetAbilityManager(); if (!abms) { return nullptr; } return abms->GetWantSender(wantSenderInfo, callerToken); } ErrCode AbilityManagerClient::SendWantSender(const sptr &target, const SenderInfo &senderInfo) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->SendWantSender(target, senderInfo); } void AbilityManagerClient::CancelWantSender(const sptr &sender) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN(abms); abms->CancelWantSender(sender); } ErrCode AbilityManagerClient::GetPendingWantUid(const sptr &target, int32_t &uid) { if (target == nullptr) { HILOG_ERROR("target is nullptr."); return ABILITY_SERVICE_NOT_CONNECTED; } auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); uid = abms->GetPendingWantUid(target); return ERR_OK; } ErrCode AbilityManagerClient::GetPendingWantUserId(const sptr &target, int32_t &userId) { if (target == nullptr) { HILOG_ERROR("target is nullptr."); return ABILITY_SERVICE_NOT_CONNECTED; } auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); userId = abms->GetPendingWantUserId(target); return ERR_OK; } ErrCode AbilityManagerClient::GetPendingWantBundleName(const sptr &target, std::string &bundleName) { if (target == nullptr) { HILOG_ERROR("target is nullptr."); return ABILITY_SERVICE_NOT_CONNECTED; } auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); bundleName = abms->GetPendingWantBundleName(target); return ERR_OK; } ErrCode AbilityManagerClient::GetPendingWantCode(const sptr &target, int32_t &code) { if (target == nullptr) { HILOG_ERROR("target is nullptr."); return ABILITY_SERVICE_NOT_CONNECTED; } auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); code = abms->GetPendingWantCode(target); return ERR_OK; } ErrCode AbilityManagerClient::GetPendingWantType(const sptr &target, int32_t &type) { if (target == nullptr) { HILOG_ERROR("target is nullptr."); return ABILITY_SERVICE_NOT_CONNECTED; } auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); type = abms->GetPendingWantType(target); type < 0 ? type = 0 : type; return ERR_OK; } void AbilityManagerClient::RegisterCancelListener(const sptr &sender, const sptr &recevier) { if (sender == nullptr) { HILOG_ERROR("sender is nullptr."); return; } if (recevier == nullptr) { HILOG_ERROR("recevier is nullptr."); return; } auto abms = GetAbilityManager(); CHECK_POINTER_RETURN(abms); abms->RegisterCancelListener(sender, recevier); } void AbilityManagerClient::UnregisterCancelListener( const sptr &sender, const sptr &recevier) { if (sender == nullptr) { HILOG_ERROR("sender is nullptr."); return; } if (recevier == nullptr) { HILOG_ERROR("recevier is nullptr."); return; } auto abms = GetAbilityManager(); CHECK_POINTER_RETURN(abms); abms->UnregisterCancelListener(sender, recevier); } ErrCode AbilityManagerClient::GetPendingRequestWant(const sptr &target, std::shared_ptr &want) { if (target == nullptr) { HILOG_ERROR("target is nullptr."); return ABILITY_SERVICE_NOT_CONNECTED; } if (want == nullptr) { HILOG_ERROR("want is nullptr."); return ABILITY_SERVICE_NOT_CONNECTED; } auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->GetPendingRequestWant(target, want); } ErrCode AbilityManagerClient::GetWantSenderInfo(const sptr &target, std::shared_ptr &info) { if (target == nullptr) { HILOG_ERROR("target is nullptr."); return ABILITY_SERVICE_NOT_CONNECTED; } if (info == nullptr) { HILOG_ERROR("info is nullptr."); return ABILITY_SERVICE_NOT_CONNECTED; } auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->GetWantSenderInfo(target, info); } ErrCode AbilityManagerClient::GetAppMemorySize() { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); auto ret = abms->GetAppMemorySize(); return ret; } bool AbilityManagerClient::IsRamConstrainedDevice() { auto abms = GetAbilityManager(); if (!abms) { HILOG_ERROR("abms is nullptr."); return false; } auto ret = abms->IsRamConstrainedDevice(); return ret; } ErrCode AbilityManagerClient::ContinueMission(const std::string &srcDeviceId, const std::string &dstDeviceId, int32_t missionId, const sptr &callback, AAFwk::WantParams &wantParams) { if (srcDeviceId.empty() || dstDeviceId.empty() || callback == nullptr) { HILOG_ERROR("srcDeviceId or dstDeviceId or callback is null!"); return ERR_INVALID_VALUE; } auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); int result = abms->ContinueMission(srcDeviceId, dstDeviceId, missionId, callback, wantParams); return result; } ErrCode AbilityManagerClient::StartContinuation(const Want &want, const sptr &abilityToken, int32_t status) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); int result = abms->StartContinuation(want, abilityToken, status); return result; } void AbilityManagerClient::NotifyCompleteContinuation(const std::string &deviceId, int32_t sessionId, bool isSuccess) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN(abms); abms->NotifyCompleteContinuation(deviceId, sessionId, isSuccess); } ErrCode AbilityManagerClient::ContinueAbility(const std::string &deviceId, int32_t missionId, uint32_t versionCode) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->ContinueAbility(deviceId, missionId, versionCode); } ErrCode AbilityManagerClient::NotifyContinuationResult(int32_t missionId, int32_t result) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->NotifyContinuationResult(missionId, result); } ErrCode AbilityManagerClient::LockMissionForCleanup(int32_t missionId) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->LockMissionForCleanup(missionId); } ErrCode AbilityManagerClient::UnlockMissionForCleanup(int32_t missionId) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->UnlockMissionForCleanup(missionId); } ErrCode AbilityManagerClient::RegisterMissionListener(const sptr &listener) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->RegisterMissionListener(listener); } ErrCode AbilityManagerClient::UnRegisterMissionListener(const sptr &listener) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->UnRegisterMissionListener(listener); } ErrCode AbilityManagerClient::RegisterMissionListener(const std::string &deviceId, const sptr &listener) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->RegisterMissionListener(deviceId, listener); } ErrCode AbilityManagerClient::UnRegisterMissionListener(const std::string &deviceId, const sptr &listener) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->UnRegisterMissionListener(deviceId, listener); } ErrCode AbilityManagerClient::GetMissionInfos(const std::string& deviceId, int32_t numMax, std::vector &missionInfos) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->GetMissionInfos(deviceId, numMax, missionInfos); } ErrCode AbilityManagerClient::GetMissionInfo(const std::string& deviceId, int32_t missionId, MissionInfo &missionInfo) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->GetMissionInfo(deviceId, missionId, missionInfo); } ErrCode AbilityManagerClient::CleanMission(int32_t missionId) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->CleanMission(missionId); } ErrCode AbilityManagerClient::CleanAllMissions() { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->CleanAllMissions(); } ErrCode AbilityManagerClient::MoveMissionToFront(int32_t missionId) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->MoveMissionToFront(missionId); } ErrCode AbilityManagerClient::MoveMissionToFront(int32_t missionId, const StartOptions &startOptions) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->MoveMissionToFront(missionId, startOptions); } ErrCode AbilityManagerClient::GetMissionIdByToken(const sptr &token, int32_t &missionId) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); missionId = abms->GetMissionIdByToken(token); if (missionId <= 0) { HILOG_ERROR("get missionid by token failed!"); return MISSION_NOT_FOUND; } return ERR_OK; } ErrCode AbilityManagerClient::StartAbilityByCall(const Want &want, const sptr &connect) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); HILOG_DEBUG("AbilityManagerClient::StartAbilityByCall called."); return abms->StartAbilityByCall(want, connect, nullptr); } ErrCode AbilityManagerClient::StartAbilityByCall( const Want &want, const sptr &connect, const sptr &callToken) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); HILOG_DEBUG("AbilityManagerClient::StartAbilityByCall called."); return abms->StartAbilityByCall(want, connect, callToken); } void AbilityManagerClient::CallRequestDone(const sptr &token, const sptr &callStub) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN(abms); abms->CallRequestDone(token, callStub); } ErrCode AbilityManagerClient::ReleaseCall( const sptr &connect, const AppExecFwk::ElementName &element) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->ReleaseCall(connect, element); } ErrCode AbilityManagerClient::GetAbilityRunningInfos(std::vector &info) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->GetAbilityRunningInfos(info); } ErrCode AbilityManagerClient::GetExtensionRunningInfos(int upperLimit, std::vector &info) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->GetExtensionRunningInfos(upperLimit, info); } ErrCode AbilityManagerClient::GetProcessRunningInfos(std::vector &info) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->GetProcessRunningInfos(info); } /** * Start synchronizing remote device mission * @param devId, deviceId. * @param fixConflict, resolve synchronizing conflicts flag. * @param tag, call tag. * @return Returns ERR_OK on success, others on failure. */ ErrCode AbilityManagerClient::StartSyncRemoteMissions(const std::string &devId, bool fixConflict, int64_t tag) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->StartSyncRemoteMissions(devId, fixConflict, tag); } /** * Stop synchronizing remote device mission * @param devId, deviceId. * @return Returns ERR_OK on success, others on failure. */ ErrCode AbilityManagerClient::StopSyncRemoteMissions(const std::string &devId) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->StopSyncRemoteMissions(devId); } ErrCode AbilityManagerClient::StartUser(int accountId) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->StartUser(accountId); } ErrCode AbilityManagerClient::StopUser(int accountId, const sptr &callback) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->StopUser(accountId, callback); } ErrCode AbilityManagerClient::RegisterSnapshotHandler(const sptr& handler) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->RegisterSnapshotHandler(handler); } ErrCode AbilityManagerClient::GetMissionSnapshot(const std::string& deviceId, int32_t missionId, MissionSnapshot& snapshot, bool isLowResolution) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->GetMissionSnapshot(deviceId, missionId, snapshot, isLowResolution); } ErrCode AbilityManagerClient::StartUserTest(const Want &want, const sptr &observer) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->StartUserTest(want, observer); } ErrCode AbilityManagerClient::FinishUserTest( const std::string &msg, const int64_t &resultCode, const std::string &bundleName) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->FinishUserTest(msg, resultCode, bundleName); } ErrCode AbilityManagerClient::GetTopAbility(sptr &token) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->GetTopAbility(token); } ErrCode AbilityManagerClient::DelegatorDoAbilityForeground(const sptr &token) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->DelegatorDoAbilityForeground(token); } ErrCode AbilityManagerClient::DelegatorDoAbilityBackground(const sptr &token) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->DelegatorDoAbilityBackground(token); } #ifdef SUPPORT_GRAPHICS ErrCode AbilityManagerClient::SetMissionLabel(const sptr &token, const std::string& label) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->SetMissionLabel(token, label); } ErrCode AbilityManagerClient::SetMissionIcon( const sptr &abilityToken, const std::shared_ptr &icon) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->SetMissionIcon(abilityToken, icon); } ErrCode AbilityManagerClient::RegisterWindowManagerServiceHandler(const sptr& handler) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->RegisterWindowManagerServiceHandler(handler); } void AbilityManagerClient::CompleteFirstFrameDrawing(const sptr &abilityToken) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN(abms); abms->CompleteFirstFrameDrawing(abilityToken); } #endif ErrCode AbilityManagerClient::DoAbilityForeground(const sptr &token, uint32_t flag) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->DoAbilityForeground(token, flag); } ErrCode AbilityManagerClient::DoAbilityBackground(const sptr &token, uint32_t flag) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->DoAbilityBackground(token, flag); } ErrCode AbilityManagerClient::SetAbilityController(const sptr &abilityController, bool imAStabilityTest) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->SetAbilityController(abilityController, imAStabilityTest); } ErrCode AbilityManagerClient::SendANRProcessID(int pid) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->SendANRProcessID(pid); } void AbilityManagerClient::UpdateMissionSnapShot(const sptr& token) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN(abms); return abms->UpdateMissionSnapShot(token); } void AbilityManagerClient::EnableRecoverAbility(const sptr& token) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN(abms); return abms->EnableRecoverAbility(token); } void AbilityManagerClient::ScheduleRecoverAbility(const sptr& token, int32_t reason) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN(abms); return abms->ScheduleRecoverAbility(token, reason); } #ifdef ABILITY_COMMAND_FOR_TEST ErrCode AbilityManagerClient::BlockAmsService() { HILOG_INFO("[%{public}s(%{public}s)] enter", __FILE__, __FUNCTION__); auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->BlockAmsService(); } ErrCode AbilityManagerClient::BlockAbility(int32_t abilityRecordId) { HILOG_INFO("[%{public}s(%{public}s)] enter", __FILE__, __FUNCTION__); auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->BlockAbility(abilityRecordId); } ErrCode AbilityManagerClient::BlockAppService() { HILOG_INFO("[%{public}s(%{public}s)] enter", __FILE__, __FUNCTION__); auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->BlockAppService(); } #endif sptr AbilityManagerClient::GetAbilityManager() { std::lock_guard lock(mutex_); if (!proxy_) { (void)Connect(); } return proxy_; } void AbilityManagerClient::ResetProxy(const wptr& remote) { std::lock_guard lock(mutex_); if (!proxy_) { return; } auto serviceRemote = proxy_->AsObject(); if ((serviceRemote != nullptr) && (serviceRemote == remote.promote())) { serviceRemote->RemoveDeathRecipient(deathRecipient_); proxy_ = nullptr; } } void AbilityManagerClient::AbilityMgrDeathRecipient::OnRemoteDied(const wptr& remote) { HILOG_INFO("AbilityMgrDeathRecipient handle remote died."); AbilityManagerClient::GetInstance()->ResetProxy(remote); } ErrCode AbilityManagerClient::FreeInstallAbilityFromRemote(const Want &want, const sptr &callback, int32_t userId, int requestCode) { HILOG_INFO("[%{public}s(%{public}s)] enter", __FILE__, __FUNCTION__); auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->FreeInstallAbilityFromRemote(want, callback, userId, requestCode); } AppExecFwk::ElementName AbilityManagerClient::GetTopAbility() { HILOG_INFO("[%{public}s(%{public}s)] enter", __FILE__, __FUNCTION__); auto abms = GetAbilityManager(); if (abms == nullptr) { HILOG_ERROR("[%{public}s] abms == nullptr", __FUNCTION__); return {}; } return abms->GetTopAbility(); } ErrCode AbilityManagerClient::DumpAbilityInfoDone(std::vector &infos, const sptr &callerToken) { HILOG_INFO("DumpAbilityInfoDone begin."); auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_NOT_CONNECTED(abms); return abms->DumpAbilityInfoDone(infos, callerToken); } void AbilityManagerClient::HandleDlpApp(Want &want) { #ifdef WITH_DLP bool sandboxFlag = Security::DlpPermission::DlpFileKits::GetSandboxFlag(want); want.SetParam(DLP_PARAMS_SANDBOX, sandboxFlag); #endif // WITH_DLP } } // namespace AAFwk } // namespace OHOS