diff --git a/interfaces/innerkits/IBackgroundTaskMgr.idl b/interfaces/innerkits/IBackgroundTaskMgr.idl index 3d6b2e276aecbb67f0737b8d2e6ceffa0c160a9a..8c1afab209f7098c28b55c14d582c7b584e989a6 100644 --- a/interfaces/innerkits/IBackgroundTaskMgr.idl +++ b/interfaces/innerkits/IBackgroundTaskMgr.idl @@ -52,5 +52,5 @@ interface OHOS.BackgroundTaskMgr.IBackgroundTaskMgr { void StartTransientTaskTimeForInner([in] int uid); void AVSessionNotifyUpdateNotification([in] int uid, [in] int pid, [in] boolean isPublish); void SetBgTaskConfig([in] String configData, [in] int sourceType); - void SuspendContinuousAudioTask([in] int uid); + [oneway] void SuspendContinuousAudioTask([in] int uid); } diff --git a/interfaces/innerkits/include/continuous_task_param.h b/interfaces/innerkits/include/continuous_task_param.h index e7f8624185dd1c6c97976367277f761ebf8613fe..ffc20be04d2ba5ea51d6aebdb47be25bfc3c097d 100644 --- a/interfaces/innerkits/include/continuous_task_param.h +++ b/interfaces/innerkits/include/continuous_task_param.h @@ -41,26 +41,9 @@ struct ContinuousTaskParam : public Parcelable { ContinuousTaskParam() = default; ContinuousTaskParam(bool isNewApi, uint32_t bgModeId, - const std::shared_ptr wantAgent, const std::string abilityName, + const std::shared_ptr wantAgent, const std::string &abilityName, const sptr abilityToken, const std::string &appName, bool isBatchApi = false, - const std::vector &bgModeIds = {}, int32_t abilityId = -1) - : isNewApi_(isNewApi), bgModeId_(bgModeId), wantAgent_(wantAgent), abilityName_(abilityName), - abilityToken_(abilityToken), appName_(appName), isBatchApi_(isBatchApi), bgModeIds_(bgModeIds), - abilityId_(abilityId) { - if (isBatchApi_ && bgModeIds_.size() > 0) { - auto findNonDataTransfer = [](const auto &target) { - return target != BackgroundMode::DATA_TRANSFER; - }; - auto iter = std::find_if(bgModeIds_.begin(), bgModeIds_.end(), findNonDataTransfer); - if (iter != bgModeIds_.end()) { - bgModeId_ = *iter; - } else { - bgModeId_ = bgModeIds_[0]; - } - } else { - bgModeIds_.push_back(bgModeId); - } - } + const std::vector &bgModeIds = {}, int32_t abilityId = -1); bool ReadFromParcel(Parcel &parcel); bool Marshalling(Parcel &parcel) const override; static ContinuousTaskParam *Unmarshalling(Parcel &parcel); diff --git a/interfaces/innerkits/src/continuous_task_param.cpp b/interfaces/innerkits/src/continuous_task_param.cpp index 04aa5847b14a4dbfaa06dbdcac61745cb34a9824..efc0c8ebf5ac89a197788f6b939609a07b7aca69 100644 --- a/interfaces/innerkits/src/continuous_task_param.cpp +++ b/interfaces/innerkits/src/continuous_task_param.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 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 @@ -21,6 +21,28 @@ namespace OHOS { namespace BackgroundTaskMgr { +ContinuousTaskParam::ContinuousTaskParam(bool isNewApi, uint32_t bgModeId, + const std::shared_ptr wantAgent, const std::string &abilityName, + const sptr abilityToken, const std::string &appName, bool isBatchApi, + const std::vector &bgModeIds, int32_t abilityId) + : isNewApi_(isNewApi), bgModeId_(bgModeId), wantAgent_(wantAgent), abilityName_(abilityName), + abilityToken_(abilityToken), appName_(appName), isBatchApi_(isBatchApi), bgModeIds_(bgModeIds), + abilityId_(abilityId) { + if (isBatchApi_ && bgModeIds_.size() > 0) { + auto findNonDataTransfer = [](const auto &target) { + return target != BackgroundMode::DATA_TRANSFER; + }; + auto iter = std::find_if(bgModeIds_.begin(), bgModeIds_.end(), findNonDataTransfer); + if (iter != bgModeIds_.end()) { + bgModeId_ = *iter; + } else { + bgModeId_ = bgModeIds_[0]; + } + } else { + bgModeIds_.push_back(bgModeId); + } +} + bool ContinuousTaskParam::ReadFromParcel(Parcel &parcel) { if (!parcel.ReadBool(isNewApi_)) { diff --git a/services/continuous_task/include/bg_continuous_task_dumper.h b/services/continuous_task/include/bg_continuous_task_dumper.h index c2917eaf8ca27f5bdb8ac80dc640cd95ba0550e0..bdfa219029420cd72d2f19d0fbeecd55761bbc5f 100644 --- a/services/continuous_task/include/bg_continuous_task_dumper.h +++ b/services/continuous_task/include/bg_continuous_task_dumper.h @@ -24,7 +24,7 @@ namespace OHOS { namespace BackgroundTaskMgr { class BgContinuousTaskDumper : public DelayedSingleton { public: - void DumpInnerTask(const std::vector &dumpOption, std::vector &dumpInfo); + void DebugContinuousTask(const std::vector &dumpOption, std::vector &dumpInfo); void DumpGetTask(const std::vector &dumpOption, std::vector &dumpInfo); diff --git a/services/continuous_task/include/bg_continuous_task_mgr.h b/services/continuous_task/include/bg_continuous_task_mgr.h index f6175628768ce668af26d8aa4d1c38053dbf5367..ca044ac12938e169d666cdf28270187366e332b5 100644 --- a/services/continuous_task/include/bg_continuous_task_mgr.h +++ b/services/continuous_task/include/bg_continuous_task_mgr.h @@ -89,6 +89,7 @@ public: ErrCode ShellDump(const std::vector &dumpOption, std::vector &dumpInfo); ErrCode GetContinuousTaskApps(std::vector> &list, int32_t uid = -1); ErrCode AVSessionNotifyUpdateNotification(int32_t uid, int32_t pid, bool isPublish = false); + ErrCode DebugContinuousTaskInner(const sptr &taskParam); bool StopContinuousTaskByUser(const std::string &mapKey); void OnAccountsStateChanged(int32_t id); void OnBundleInfoChanged(const std::string &action, const std::string &bundleName, int32_t uid); @@ -107,8 +108,6 @@ public: void OnConfigurationChanged(const AppExecFwk::Configuration &configuration); void OnRemoveSystemAbility(int32_t systemAbilityId, const std::string& deviceId); void HandleRemoveTaskByMode(uint32_t mode); - void SetDumperTest(const bool dumperTest); - bool IsDumperTest() const; private: ErrCode StartBackgroundRunningInner(std::shared_ptr &continuousTaskRecordPtr); @@ -198,7 +197,6 @@ private: std::vector continuousTaskText_ {}; std::vector continuousTaskSubText_ {}; int32_t continuousTaskIdIndex_ = 0; - bool dumperTest_ {false}; DECLARE_DELAYED_SINGLETON(BgContinuousTaskMgr); }; diff --git a/services/continuous_task/src/bg_continuous_task_dumper.cpp b/services/continuous_task/src/bg_continuous_task_dumper.cpp index 62fd81d991b1ca7ff17a23fd15bec06963f26975..ac56a881b966ee75f4fab9423f9bf05e00960105 100644 --- a/services/continuous_task/src/bg_continuous_task_dumper.cpp +++ b/services/continuous_task/src/bg_continuous_task_dumper.cpp @@ -27,10 +27,10 @@ BgContinuousTaskDumper::BgContinuousTaskDumper() {} BgContinuousTaskDumper::~BgContinuousTaskDumper() {} -void BgContinuousTaskDumper::DumpInnerTask(const std::vector &dumpOption, +void BgContinuousTaskDumper::DebugContinuousTask(const std::vector &dumpOption, std::vector &dumpInfo) { - if (dumpOption.size() != MAX_DUMP_INNER_PARAM_NUMS) { + if (dumpOption.size() < MAX_DUMP_INNER_PARAM_NUMS) { dumpInfo.emplace_back("param invaild\n"); return; } @@ -49,11 +49,14 @@ void BgContinuousTaskDumper::DumpInnerTask(const std::vector &dumpO return; } bool isApply = (operationType == "apply"); + int32_t uid = 1; + if (dumpOption.size() == MAX_DUMP_INNER_PARAM_NUMS + 1) { + uid = std::atoi(dumpOption[MAX_DUMP_PARAM_NUMS + 1].c_str()); + } sptr taskParam = sptr( - new ContinuousTaskParamForInner(1, mode, isApply)); + new ContinuousTaskParamForInner(uid, mode, isApply)); ErrCode ret = ERR_OK; - BgContinuousTaskMgr::GetInstance()->SetDumperTest(true); - ret = BgContinuousTaskMgr::GetInstance()->RequestBackgroundRunningForInner(taskParam); + ret = BgContinuousTaskMgr::GetInstance()->DebugContinuousTaskInner(taskParam); if (ret != ERR_OK) { dumpInfo.emplace_back("dump inner continuous task fail.\n"); } else { diff --git a/services/continuous_task/src/bg_continuous_task_mgr.cpp b/services/continuous_task/src/bg_continuous_task_mgr.cpp index 4b3431f737fd1e133221acaba56e72f182604160..dd12947c9f987e9215714a7867a4161c811ac5ae 100644 --- a/services/continuous_task/src/bg_continuous_task_mgr.cpp +++ b/services/continuous_task/src/bg_continuous_task_mgr.cpp @@ -615,10 +615,7 @@ ErrCode BgContinuousTaskMgr::RequestBackgroundRunningForInner(const sptruid_) { + if (callingUid != VOIP_SA_UID && callingUid != HEALTHSPORT_SA_UID && callingUid != taskParam->uid_) { BGTASK_LOGE("continuous task param uid %{public}d is invalid, real %{public}d", taskParam->uid_, callingUid); return ERR_BGTASK_CHECK_TASK_PARAM; } @@ -1187,7 +1184,7 @@ bool BgContinuousTaskMgr::IsExistCallback(int32_t uid, uint32_t type) { for (auto iter = bgTaskSubscribers_.begin(); iter != bgTaskSubscribers_.end(); ++iter) { if ((*iter)->isHap_ && (*iter)->uid_ == uid && (((*iter)->flag_ & type) > 0)) { - BGTASK_LOGD("falg: %{public}d", (*iter)->flag_); + BGTASK_LOGD("flag: %{public}u", (*iter)->flag_); return true; } } @@ -1543,7 +1540,7 @@ ErrCode BgContinuousTaskMgr::ShellDumpInner(const std::vector &dump } else if (dumpOption[1] == DUMP_PARAM_GET) { BgContinuousTaskDumper::GetInstance()->DumpGetTask(dumpOption, dumpInfo); } else if (dumpOption[1] == DUMP_INNER_TASK) { - BgContinuousTaskDumper::GetInstance()->DumpInnerTask(dumpOption, dumpInfo); + BgContinuousTaskDumper::GetInstance()->DebugContinuousTask(dumpOption, dumpInfo); } else { BGTASK_LOGW("invalid dump param"); } @@ -2120,14 +2117,18 @@ void BgContinuousTaskMgr::OnRemoveSystemAbility(int32_t systemAbilityId, const s } } -void BgContinuousTaskMgr::SetDumperTest(const bool dumperTest) +ErrCode BgContinuousTaskMgr::DebugContinuousTaskInner(const sptr &taskParam) { - dumperTest_ = dumperTest; -} - -bool BgContinuousTaskMgr::IsDumperTest() const -{ - return dumperTest_; + if (!isSysReady_.load()) { + return ERR_BGTASK_SYS_NOT_READY; + } + if (!taskParam) { + return ERR_BGTASK_CHECK_TASK_PARAM; + } + if (taskParam->isStart_) { + return StartBackgroundRunningForInner(taskParam); + } + return StopBackgroundRunningForInner(taskParam); } } // namespace BackgroundTaskMgr } // namespace OHOS diff --git a/services/core/src/background_task_mgr_service.cpp b/services/core/src/background_task_mgr_service.cpp index 987cfafd59880099b3ff184254b4db258ac58edd..d2d698ac34c3e60cbaa639f18c7068e27b962348 100644 --- a/services/core/src/background_task_mgr_service.cpp +++ b/services/core/src/background_task_mgr_service.cpp @@ -370,7 +370,7 @@ ErrCode BackgroundTaskMgrService::SubscribeBackgroundTask( } pid_t callingPid = IPCSkeleton::GetCallingPid(); pid_t callingUid = IPCSkeleton::GetCallingUid(); - BGTASK_LOGI("uid %{public}d pid %{public}d isHap %{public}d flag %{public}d subscribe", + BGTASK_LOGI("uid %{public}d pid %{public}d isHap %{public}d flag %{public}u subscribe", callingUid, callingPid, isHap, flag); auto subscriberInfo = std::make_shared(subscriber, callingUid, callingPid, isHap, flag); if (BgContinuousTaskMgr::GetInstance()->AddSubscriber(subscriberInfo) != ERR_OK) {