From a9588a8f0b5433bf2337c6b0b11d490ffb8b1974 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Fri, 5 Sep 2025 13:03:12 +0000 Subject: [PATCH 01/31] update services/test/unittest/bg_continuous_task_mgr_test.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- .../unittest/bg_continuous_task_mgr_test.cpp | 174 ++++++++++++++++-- 1 file changed, 161 insertions(+), 13 deletions(-) diff --git a/services/test/unittest/bg_continuous_task_mgr_test.cpp b/services/test/unittest/bg_continuous_task_mgr_test.cpp index 57594dcb..8c26e025 100644 --- a/services/test/unittest/bg_continuous_task_mgr_test.cpp +++ b/services/test/unittest/bg_continuous_task_mgr_test.cpp @@ -1434,7 +1434,7 @@ HWTEST_F(BgContinuousTaskMgrTest, BgTaskManagerUnitTest_058, TestSize.Level1) /** * @tc.name: BgTaskManagerUnitTest_059 - * @tc.desc: test CheckCombinedTaskNotifacation. + * @tc.desc: test CheckCombinedTaskNotification. * @tc.type: FUNC * @tc.require: issueICUX92 */ @@ -1448,13 +1448,13 @@ HWTEST_F(BgContinuousTaskMgrTest, BgTaskManagerUnitTest_059, TestSize.Level1) continuousTaskRecord->isByRequestObject_ = true; continuousTaskRecord->bgModeIds_.push_back(continuousTaskRecord->bgModeId_); // 不需要合并 - EXPECT_EQ(bgContinuousTaskMgr_->CheckCombinedTaskNotifacation(continuousTaskRecord, sendNotification), ERR_OK); + EXPECT_EQ(bgContinuousTaskMgr_->CheckCombinedTaskNotification(continuousTaskRecord, sendNotification), ERR_OK); continuousTaskRecord->combinedNotificationTaskId_ = TEST_NUM_ONE; continuousTaskRecord->isCombinedTaskNotification_ = true; bgContinuousTaskMgr_->continuousTaskInfosMap_["key1"] = nullptr; // 需要合并,但没有任务 - EXPECT_EQ(bgContinuousTaskMgr_->CheckCombinedTaskNotifacation(continuousTaskRecord, sendNotification), + EXPECT_EQ(bgContinuousTaskMgr_->CheckCombinedTaskNotification(continuousTaskRecord, sendNotification), ERR_BGTASK_CONTINUOUS_TASKID_INVALID); bgContinuousTaskMgr_->continuousTaskInfosMap_.clear(); @@ -1464,19 +1464,19 @@ HWTEST_F(BgContinuousTaskMgrTest, BgTaskManagerUnitTest_059, TestSize.Level1) continuousTaskRecord2->bgModeIds_.push_back(continuousTaskRecord->bgModeId_); bgContinuousTaskMgr_->continuousTaskInfosMap_["key1"] = continuousTaskRecord2; // 需要合并,任务uid不相等 - EXPECT_EQ(bgContinuousTaskMgr_->CheckCombinedTaskNotifacation(continuousTaskRecord, sendNotification), + EXPECT_EQ(bgContinuousTaskMgr_->CheckCombinedTaskNotification(continuousTaskRecord, sendNotification), ERR_BGTASK_CONTINUOUS_TASKID_INVALID); bgContinuousTaskMgr_->continuousTaskInfosMap_.clear(); continuousTaskRecord2->continuousTaskId_ = TEST_NUM_ONE + 1; // 需要合并,任务id不相等 - EXPECT_EQ(bgContinuousTaskMgr_->CheckCombinedTaskNotifacation(continuousTaskRecord, sendNotification), + EXPECT_EQ(bgContinuousTaskMgr_->CheckCombinedTaskNotification(continuousTaskRecord, sendNotification), ERR_BGTASK_CONTINUOUS_TASKID_INVALID); } /** * @tc.name: BgTaskManagerUnitTest_060 - * @tc.desc: test CheckCombinedTaskNotifacation. + * @tc.desc: test CheckCombinedTaskNotification. * @tc.type: FUNC * @tc.require: issueICUX92 */ @@ -1495,14 +1495,14 @@ HWTEST_F(BgContinuousTaskMgrTest, BgTaskManagerUnitTest_060, TestSize.Level1) continuousTaskRecord2->isCombinedTaskNotification_ = false; bgContinuousTaskMgr_->continuousTaskInfosMap_["key1"] = continuousTaskRecord2; // 需要合并,任务不支持合并 - EXPECT_EQ(bgContinuousTaskMgr_->CheckCombinedTaskNotifacation(continuousTaskRecord, sendNotification), + EXPECT_EQ(bgContinuousTaskMgr_->CheckCombinedTaskNotification(continuousTaskRecord, sendNotification), ERR_BGTASK_CONTINUOUS_NOT_MERGE_COMBINED_FALSE); bgContinuousTaskMgr_->continuousTaskInfosMap_.clear(); continuousTaskRecord2->isCombinedTaskNotification_ = true; continuousTaskRecord2->notificationId_ = -1; bgContinuousTaskMgr_->continuousTaskInfosMap_["key1"] = continuousTaskRecord2; // 需要合并,任务没有通知 - EXPECT_EQ(bgContinuousTaskMgr_->CheckCombinedTaskNotifacation(continuousTaskRecord, sendNotification), + EXPECT_EQ(bgContinuousTaskMgr_->CheckCombinedTaskNotification(continuousTaskRecord, sendNotification), ERR_BGTASK_CONTINUOUS_NOT_MERGE_NOTIFICATION_NOT_EXIST); bgContinuousTaskMgr_->continuousTaskInfosMap_.clear(); continuousTaskRecord->bgModeId_ = 2; @@ -1514,7 +1514,7 @@ HWTEST_F(BgContinuousTaskMgrTest, BgTaskManagerUnitTest_060, TestSize.Level1) continuousTaskRecord2->notificationId_ = 1; bgContinuousTaskMgr_->continuousTaskInfosMap_["key1"] = continuousTaskRecord2; // 需要合并,任务主类型不相等 - EXPECT_EQ(bgContinuousTaskMgr_->CheckCombinedTaskNotifacation(continuousTaskRecord, sendNotification), + EXPECT_EQ(bgContinuousTaskMgr_->CheckCombinedTaskNotification(continuousTaskRecord, sendNotification), ERR_BGTASK_CONTINUOUS_MODE_OR_SUBMODE_TYPE_MISMATCH); bgContinuousTaskMgr_->continuousTaskInfosMap_.clear(); continuousTaskRecord->bgSubModeIds_.clear(); @@ -1523,13 +1523,13 @@ HWTEST_F(BgContinuousTaskMgrTest, BgTaskManagerUnitTest_060, TestSize.Level1) continuousTaskRecord2->bgSubModeIds_.push_back(3); bgContinuousTaskMgr_->continuousTaskInfosMap_["key1"] = continuousTaskRecord2; // 需要合并,任务子类型不相等 - EXPECT_EQ(bgContinuousTaskMgr_->CheckCombinedTaskNotifacation(continuousTaskRecord, sendNotification), + EXPECT_EQ(bgContinuousTaskMgr_->CheckCombinedTaskNotification(continuousTaskRecord, sendNotification), ERR_BGTASK_CONTINUOUS_MODE_OR_SUBMODE_TYPE_MISMATCH); } /** * @tc.name: BgTaskManagerUnitTest_061 - * @tc.desc: test CheckCombinedTaskNotifacation. + * @tc.desc: test CheckCombinedTaskNotification. * @tc.type: FUNC * @tc.require: issueICUX92 */ @@ -1560,7 +1560,7 @@ HWTEST_F(BgContinuousTaskMgrTest, BgTaskManagerUnitTest_061, TestSize.Level1) continuousTaskRecord2->notificationId_ = 1; bgContinuousTaskMgr_->continuousTaskInfosMap_["key1"] = continuousTaskRecord2; // 需要合并,任务类型包含上传下载,不能合并 - EXPECT_EQ(bgContinuousTaskMgr_->CheckCombinedTaskNotifacation(continuousTaskRecord, sendNotification), + EXPECT_EQ(bgContinuousTaskMgr_->CheckCombinedTaskNotification(continuousTaskRecord, sendNotification), ERR_BGTASK_CONTINUOUS_DATA_TRANSFER_NOT_MERGE_NOTIFICATION); bgContinuousTaskMgr_->continuousTaskInfosMap_.clear(); @@ -1576,7 +1576,7 @@ HWTEST_F(BgContinuousTaskMgrTest, BgTaskManagerUnitTest_061, TestSize.Level1) continuousTaskRecord2->bgSubModeIds_.clear(); continuousTaskRecord2->bgSubModeIds_.push_back(1); bgContinuousTaskMgr_->continuousTaskInfosMap_["key1"] = continuousTaskRecord2; - EXPECT_EQ(bgContinuousTaskMgr_->CheckCombinedTaskNotifacation(continuousTaskRecord, sendNotification), ERR_OK); + EXPECT_EQ(bgContinuousTaskMgr_->CheckCombinedTaskNotification(continuousTaskRecord, sendNotification), ERR_OK); } /** @@ -1589,5 +1589,153 @@ HWTEST_F(BgContinuousTaskMgrTest, BgTaskManagerUnitTest_062, TestSize.Level1) { EXPECT_EQ(bgContinuousTaskMgr_->StopBackgroundRunning("ability1", 1, 1), ERR_BGTASK_OBJECT_NOT_EXIST); } + +/** + * @tc.name: UpdateBackgroundRunning_63 + * @tc.desc: use api 21. + * @tc.type: FUNC + * @tc.require: issueICWHAG + */ +HWTEST_F(BgContinuousTaskMgrTest, UpdateBackgroundRunning_63, TestSize.Level1) +{ + sptr taskParam1 = new (std::nothrow) ContinuousTaskParam(true, 4, + std::make_shared(), + "ability1", nullptr, "Entry", true, {4}); + taskParam1->isByRequestObject_ = true; + taskParam1->abilityId_ = 1; + taskParam1->updateTaskId_ = -1; + taskParam1->bgSubModeIds_.clear(); + taskParam1->bgSubModeIds_.push_back(1); + // 更新的任务id为-1,非法参数 + EXPECT_EQ(bgContinuousTaskMgr_->UpdateBackgroundRunning(taskParam1), ERR_BGTASK_CONTINUOUS_TASKID_INVALID); + + bgContinuousTaskMgr_->continuousTaskInfosMap_.clear(); + taskParam1->updateTaskId_ = 1; + // 更新的任务id为1,但没有对应任务 + EXPECT_EQ(bgContinuousTaskMgr_->UpdateBackgroundRunning(taskParam1), ERR_BGTASK_OBJECT_NOT_EXIST); + + std::shared_ptr continuousTaskRecord2 = std::make_shared(); + continuousTaskRecord2->uid_ = TEST_NUM_ONE; + continuousTaskRecord2->continuousTaskId_ = TEST_NUM_ONE; + continuousTaskRecord2->bgModeId_ = 4; + continuousTaskRecord2->bgModeIds_.clear(); + continuousTaskRecord2->bgModeIds_.push_back(4); + continuousTaskRecord2->bgSubModeIds_.clear(); + continuousTaskRecord2->bgSubModeIds_.push_back(1); + continuousTaskRecord2->abilityName_ = "ability1"; + continuousTaskRecord2->bundleName_ = "Entry"; + continuousTaskRecord2->abilityId_ = 1; + continuousTaskRecord2->isByRequestObject_ = true; + bgContinuousTaskMgr_->continuousTaskInfosMap_["key1"] = continuousTaskRecord2; + // 更新的任务id为1,有对应任务,但mode检查不通过 + EXPECT_EQ(bgContinuousTaskMgr_->UpdateBackgroundRunning(taskParam1), ERR_BGTASK_INVALID_BGMODE); + + bgContinuousTaskMgr_->cachedBundleInfos_.clear(); + CachedBundleInfo info = CachedBundleInfo(); + info.abilityBgMode_["ability1"] = CONFIGURE_ALL_MODES; + info.appName_ = "Entry"; + bgContinuousTaskMgr_->cachedBundleInfos_.emplace(1, info); + continuousTaskRecord2->notificationId_ = -1; + // 通知不存在,直接更新内容 + EXPECT_EQ(bgContinuousTaskMgr_->UpdateBackgroundRunning(taskParam1), ERR_OK); +} + +/** + * @tc.name: UpdateBackgroundRunning_64 + * @tc.desc: use api 21. + * @tc.type: FUNC + * @tc.require: issueICWHAG + */ +HWTEST_F(BgContinuousTaskMgrTest, UpdateBackgroundRunning_64, TestSize.Level1) +{ + bgContinuousTaskMgr_->continuousTaskInfosMap_.clear(); + std::shared_ptr continuousTaskRecord2 = std::make_shared(); + continuousTaskRecord2->uid_ = TEST_NUM_ONE; + continuousTaskRecord2->continuousTaskId_ = TEST_NUM_ONE; + continuousTaskRecord2->bgModeId_ = 1; + continuousTaskRecord2->bgModeIds_.clear(); + continuousTaskRecord2->bgModeIds_.push_back(1); + continuousTaskRecord2->bgSubModeIds_.clear(); + continuousTaskRecord2->bgSubModeIds_.push_back(1); + continuousTaskRecord2->abilityName_ = "ability1"; + continuousTaskRecord2->bundleName_ = "Entry"; + continuousTaskRecord2->abilityId_ = 1; + continuousTaskRecord2->notificationId_ = 1; + continuousTaskRecord2->isByRequestObject_ = true; + bgContinuousTaskMgr_->continuousTaskInfosMap_["key1"] = continuousTaskRecord2; + + bgContinuousTaskMgr_->cachedBundleInfos_.clear(); + CachedBundleInfo info = CachedBundleInfo(); + info.abilityBgMode_["ability1"] = CONFIGURE_ALL_MODES; + info.appName_ = "Entry"; + bgContinuousTaskMgr_->cachedBundleInfos_.emplace(1, info); + + sptr taskParam1 = new (std::nothrow) ContinuousTaskParam(true, 1, + std::make_shared(), + "ability1", nullptr, "Entry", true, {1}); + taskParam1->isByRequestObject_ = true; + taskParam1->abilityId_ = 1; + taskParam1->updateTaskId_ = 1; + taskParam1->bgSubModeIds_.clear(); + taskParam1->bgSubModeIds_.push_back(1); + // 通知存在,但前后都是上传下载 + EXPECT_EQ(bgContinuousTaskMgr_->UpdateBackgroundRunning(taskParam1), ERR_OK); +} + +/** + * @tc.name: UpdateBackgroundRunning_65 + * @tc.desc: use api 21. + * @tc.type: FUNC + * @tc.require: issueICWHAG + */ +HWTEST_F(BgContinuousTaskMgrTest, UpdateBackgroundRunning_65, TestSize.Level1) +{ + bgContinuousTaskMgr_->continuousTaskInfosMap_.clear(); + std::shared_ptr continuousTaskRecord2 = std::make_shared(); + continuousTaskRecord2->uid_ = TEST_NUM_ONE; + continuousTaskRecord2->continuousTaskId_ = TEST_NUM_ONE; + continuousTaskRecord2->bgModeId_ = 4; + continuousTaskRecord2->bgModeIds_.clear(); + continuousTaskRecord2->bgModeIds_.push_back(4); + continuousTaskRecord2->bgSubModeIds_.clear(); + continuousTaskRecord2->bgSubModeIds_.push_back(3); + continuousTaskRecord2->abilityName_ = "ability1"; + continuousTaskRecord2->bundleName_ = "Entry"; + continuousTaskRecord2->abilityId_ = 1; + continuousTaskRecord2->notificationId_ = 1; + continuousTaskRecord2->isByRequestObject_ = true; + bgContinuousTaskMgr_->continuousTaskInfosMap_["key1"] = continuousTaskRecord2; + + bgContinuousTaskMgr_->cachedBundleInfos_.clear(); + CachedBundleInfo info = CachedBundleInfo(); + info.abilityBgMode_["ability1"] = CONFIGURE_ALL_MODES; + info.appName_ = "Entry"; + bgContinuousTaskMgr_->cachedBundleInfos_.emplace(1, info); + + sptr taskParam1 = new (std::nothrow) ContinuousTaskParam(true, 4, + std::make_shared(), + "ability1", nullptr, "Entry", true, {4}); + taskParam1->isByRequestObject_ = true; + taskParam1->abilityId_ = 1; + taskParam1->updateTaskId_ = 1; + taskParam1->bgSubModeIds_.clear(); + taskParam1->bgSubModeIds_.push_back(3); + + bgContinuousTaskMgr_->continuousTaskText_.clear(); + // 通知存在,获取不到对应类型的通知文字 + EXPECT_EQ(bgContinuousTaskMgr_->UpdateBackgroundRunning(taskParam1), ERR_BGTASK_NOTIFICATION_VERIFY_FAILED); + + std::fill_n(std::back_inserter(bgContinuousTaskMgr_->continuousTaskText_), PROMPT_NUMS, "bgmode_test"); + bgContinuousTaskMgr_->continuousTaskInfosMap_.clear(); + bgContinuousTaskMgr_->continuousTaskInfosMap_["key1"] = continuousTaskRecord2; + // 通知存在,只更新want + EXPECT_EQ(bgContinuousTaskMgr_->UpdateBackgroundRunning(taskParam1), ERR_OK); + + bgContinuousTaskMgr_->continuousTaskInfosMap_.clear(); + continuousTaskRecord2->isCombinedTaskNotification_ = true; + bgContinuousTaskMgr_->continuousTaskInfosMap_["key1"] = continuousTaskRecord2; + // 通知存在,更新want与content + EXPECT_EQ(bgContinuousTaskMgr_->UpdateBackgroundRunning(taskParam1), ERR_OK); +} } // namespace BackgroundTaskMgr } // namespace OHOS \ No newline at end of file -- Gitee From ca0af0de8aba34323e2ce3fdff513aeec2c9c036 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Fri, 5 Sep 2025 13:05:21 +0000 Subject: [PATCH 02/31] update services/continuous_task/include/bg_continuous_task_mgr.h. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- services/continuous_task/include/bg_continuous_task_mgr.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/services/continuous_task/include/bg_continuous_task_mgr.h b/services/continuous_task/include/bg_continuous_task_mgr.h index f2f43aed..ac6c6fe5 100644 --- a/services/continuous_task/include/bg_continuous_task_mgr.h +++ b/services/continuous_task/include/bg_continuous_task_mgr.h @@ -116,6 +116,11 @@ private: ErrCode StartBackgroundRunningInner(std::shared_ptr &continuousTaskRecordPtr); ErrCode UpdateBackgroundRunningInner(const std::string &taskInfoMapKey, const sptr &taskParam); + ErrCode UpdateTaskInfo(std::shared_ptr record, const sptr &taskParam, + bool updateNotification); + ErrCode UpdateTaskNotification(const std::vector &oldModes, + std::shared_ptr record); + ErrCode UpdateBackgroundRunningByTaskIdInner(int32_t uid, const sptr &taskParam); ErrCode StartBackgroundRunningForInner(const sptr &taskParam); ErrCode StopBackgroundRunningInner(int32_t uid, const std::string &abilityName, int32_t abilityId, int32_t continuousTaskId = -1); @@ -183,7 +188,7 @@ private: bool CanNotifyHap(const std::shared_ptr subscriberInfo, const std::shared_ptr &callbackInfo); bool IsExistCallback(int32_t uid, uint32_t type); - ErrCode CheckCombinedTaskNotifacation(std::shared_ptr &record, bool &sendNotification); + ErrCode CheckCombinedTaskNotification(std::shared_ptr &record, bool &sendNotification); bool StopContinuousTaskByUserInner(const std::string &key); ErrCode DetermineMatchCombinedTaskNotifacation(std::shared_ptr recordParam, bool &sendNotification); -- Gitee From 95d1a89c41a7d2fcd6ee0bed3022e5a4228b1f52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Fri, 5 Sep 2025 13:05:35 +0000 Subject: [PATCH 03/31] update services/continuous_task/include/notification_tools.h. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- services/continuous_task/include/notification_tools.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/services/continuous_task/include/notification_tools.h b/services/continuous_task/include/notification_tools.h index 529714ed..a445b922 100644 --- a/services/continuous_task/include/notification_tools.h +++ b/services/continuous_task/include/notification_tools.h @@ -31,6 +31,9 @@ public: void GetAllActiveNotificationsLabels(std::set ¬ificationLabels); void RefreshContinuousNotifications( const std::map> &newPromptInfos, int32_t serviceUid); + void RefreshContinuousNotificationWantAndContext(int32_t serviceUid, + const std::map> &newPromptInfos, + const std::shared_ptr continuousTaskRecord, bool updateContent = false); private: static int32_t notificationIdIndex_; -- Gitee From 9deca7b7f2c12e1c5803e20da4bcc0f31b01ae94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Fri, 5 Sep 2025 13:06:04 +0000 Subject: [PATCH 04/31] update services/continuous_task/src/notification_tools.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- .../src/notification_tools.cpp | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/services/continuous_task/src/notification_tools.cpp b/services/continuous_task/src/notification_tools.cpp index 11f9a147..276078f7 100644 --- a/services/continuous_task/src/notification_tools.cpp +++ b/services/continuous_task/src/notification_tools.cpp @@ -179,5 +179,35 @@ WEAK_FUNC void NotificationTools::RefreshContinuousNotifications( } #endif } + +WEAK_FUNC void NotificationTools::RefreshContinuousNotificationWantAndContext(int32_t serviceUid, + const std::map> &newPromptInfos, + const std::shared_ptr continuousTaskRecord, bool updateContent) +{ +#ifdef DISTRIBUTED_NOTIFICATION_ENABLE + std::vector> notificationRequests; + ErrCode ret = Notification::NotificationHelper::GetActiveNotifications(notificationRequests); + if (ret != ERR_OK) { + BGTASK_LOGE("refresh task, get all active notification fail!"); + return; + } + for (Notification::NotificationRequest *var : notificationRequests) { + std::string label = var->GetLabel(); + if (newPromptInfos.count(label) == 0 || var->GetCreatorUid() != serviceUid) { + continue; + } + var->SetWantAgent(continuousTaskRecord->GetWantAgent()); + if (updateContent) { + auto &content = var->GetContent(); + auto const &normalContent = content->GetNotificationContent(); + normalContent->SetTitle(newPromptInfos.at(label).first); + normalContent->SetText(newPromptInfos.at(label).second); + } + if (Notification::NotificationHelper::PublishContinuousTaskNotification(*var) != ERR_OK) { + BGTASK_LOGE("refresh notification error, label: %{public}s", label.c_str()); + } + } +#endif +} } } -- Gitee From 023f270822d2a16648dc7a81ac01a6fbbc083f25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Fri, 5 Sep 2025 13:07:23 +0000 Subject: [PATCH 05/31] update services/test/unittest/mock/mock_notification_tools.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- services/test/unittest/mock/mock_notification_tools.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/services/test/unittest/mock/mock_notification_tools.cpp b/services/test/unittest/mock/mock_notification_tools.cpp index 437a4b31..24f3b9ca 100644 --- a/services/test/unittest/mock/mock_notification_tools.cpp +++ b/services/test/unittest/mock/mock_notification_tools.cpp @@ -32,5 +32,9 @@ void NotificationTools::GetAllActiveNotificationsLabels(std::set &n void NotificationTools::RefreshContinuousNotifications( const std::map> &newPromptInfos, int32_t serviceUid) {} + +void NotificationTools::RefreshContinuousNotificationWantAndContext(int32_t serviceUid, + const std::map> &newPromptInfos, + const std::shared_ptr continuousTaskRecord, bool updateContent) {} } } -- Gitee From 621f2ba6bf5f3dfa49fa4523ebe6bc541c93b9dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Fri, 5 Sep 2025 13:08:37 +0000 Subject: [PATCH 06/31] update interfaces/innerkits/src/continuous_task_mode.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- interfaces/innerkits/src/continuous_task_mode.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/innerkits/src/continuous_task_mode.cpp b/interfaces/innerkits/src/continuous_task_mode.cpp index 04aaad3d..edc18831 100644 --- a/interfaces/innerkits/src/continuous_task_mode.cpp +++ b/interfaces/innerkits/src/continuous_task_mode.cpp @@ -71,7 +71,7 @@ std::string ContinuousTaskMode::GetContinuousTaskModeStr(uint32_t mode) { auto iter = PARAM_CONTINUOUS_TASK_MODE_STR_MAP.find(mode); if (iter != PARAM_CONTINUOUS_TASK_MODE_STR_MAP.end()) { - return iter->second.c_str(); + return iter->second; } return "default"; } -- Gitee From 3aa0310466d87f77abb5049d30f9c06dcc0becf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Fri, 5 Sep 2025 13:10:49 +0000 Subject: [PATCH 07/31] update interfaces/kits/napi/src/bg_continuous_task_napi_module.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- .../kits/napi/src/bg_continuous_task_napi_module.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/interfaces/kits/napi/src/bg_continuous_task_napi_module.cpp b/interfaces/kits/napi/src/bg_continuous_task_napi_module.cpp index 39466dfe..24c51d40 100644 --- a/interfaces/kits/napi/src/bg_continuous_task_napi_module.cpp +++ b/interfaces/kits/napi/src/bg_continuous_task_napi_module.cpp @@ -257,7 +257,7 @@ void UpdateBackgroundRunningByRequestExecuteCB(napi_env env, void *data) "", true, continuousTaskModes, asyncCallbackInfo->abilityContext->GetAbilityRecordId()); taskParam.isByRequestObject_ = true; taskParam.isCombinedTaskNotification_ = asyncCallbackInfo->request->IsCombinedTaskNotification(); - taskParam.combinedNotificationTaskId_ = asyncCallbackInfo->request->GetContinuousTaskId(); + taskParam.updateTaskId_ = asyncCallbackInfo->request->GetContinuousTaskId(); taskParam.bgSubModeIds_ = asyncCallbackInfo->request->GetContinuousTaskSubmodes(); asyncCallbackInfo->errCode = BackgroundTaskMgrHelper::RequestUpdateBackgroundRunning(taskParam); asyncCallbackInfo->bgModes = continuousTaskModes; @@ -425,7 +425,9 @@ napi_value UpdateBackgroundRunningByRequestPromise(napi_env env, AsyncCallbackIn BGTASK_LOGE("param is nullptr"); return nullptr; } - if (!CheckBackgroundMode(env, asyncCallbackInfo, isThrow)) { + if (asyncCallbackInfo->request->GetContinuousTaskId() < 0) { + Common::HandleErrCode(env, ERR_BGTASK_CONTINUOUS_TASKID_INVALID, true); + asyncCallbackInfo->errCode = ERR_BGTASK_CONTINUOUS_TASKID_INVALID; return nullptr; } napi_value resourceName; @@ -746,7 +748,9 @@ napi_value UpdateBackgroundRunning(napi_env env, napi_callback_info info, bool i ret = UpdateBackgroundRunningPromise(env, asyncCallbackInfo, isThrow); } } else { - BGTASK_LOGE("UpdateBackgroundRunningByRequestPromise"); + if (StartBackgroundRunningCheckRequest(env, argv, isThrow, asyncCallbackInfo)) { + ret = UpdateBackgroundRunningByRequestPromise(env, asyncCallbackInfo, isThrow); + } } callbackPtr.release(); if (ret == nullptr) { -- Gitee From 8f5b3bae63c78747a9e5e7dd6ef0d3d8029df803 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 00:17:34 +0000 Subject: [PATCH 08/31] update services/continuous_task/src/bg_continuous_task_mgr.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- .../src/bg_continuous_task_mgr.cpp | 139 ++++++++++++++++-- 1 file changed, 127 insertions(+), 12 deletions(-) diff --git a/services/continuous_task/src/bg_continuous_task_mgr.cpp b/services/continuous_task/src/bg_continuous_task_mgr.cpp index d2e96a7f..edcd67db 100644 --- a/services/continuous_task/src/bg_continuous_task_mgr.cpp +++ b/services/continuous_task/src/bg_continuous_task_mgr.cpp @@ -773,23 +773,138 @@ ErrCode BgContinuousTaskMgr::UpdateBackgroundRunning(const sptrabilityName_ + SEPARATOR + - std::to_string(taskParam->abilityId_); - auto self = shared_from_this(); - handler_->PostSyncTask([self, &taskInfoMapKey, &result, taskParam]() mutable { - if (!self) { - BGTASK_LOGE("self is null"); - result = ERR_BGTASK_SERVICE_INNER_ERROR; - return; - } - result = self->UpdateBackgroundRunningInner(taskInfoMapKey, taskParam); - }, AppExecFwk::EventQueue::Priority::HIGH); + if (taskParam->isByRequestObject_) { + // 根据任务id更新 + handler_->PostSyncTask([this, callingUid, taskParam, &result]() { + result = this->UpdateBackgroundRunningByTaskIdInner(callingUid, taskParam); + }, AppExecFwk::EventQueue::Priority::HIGH); + } else { + std::string taskInfoMapKey = std::to_string(callingUid) + SEPARATOR + taskParam->abilityName_ + SEPARATOR + + std::to_string(taskParam->abilityId_); + auto self = shared_from_this(); + handler_->PostSyncTask([self, &taskInfoMapKey, &result, taskParam]() mutable { + if (!self) { + BGTASK_LOGE("self is null"); + result = ERR_BGTASK_SERVICE_INNER_ERROR; + return; + } + result = self->UpdateBackgroundRunningInner(taskInfoMapKey, taskParam); + }, AppExecFwk::EventQueue::Priority::HIGH); + } return result; } +ErrCode BgContinuousTaskMgr::UpdateTaskInfo(std::shared_ptr record, + const sptr &taskParam, bool updateNotification) +{ + auto oldModes = record->bgModeIds_; + record->bgModeId_ = taskParam->bgModeId_; + record->bgModeIds_ = taskParam->bgModeIds_; + record->bgSubModeIds_ = taskParam->bgSubModeIds_; + record->wantAgent_ = taskParam->wantAgent_; + if (record->wantAgent_ != nullptr && record->wantAgent_->GetPendingWant() != nullptr) { + auto target = record->wantAgent_->GetPendingWant()->GetTarget(); + auto want = record->wantAgent_->GetPendingWant()->GetWant(target); + if (want != nullptr) { + std::shared_ptr info = std::make_shared(); + info->bundleName_ = want->GetOperation().GetBundleName(); + info->abilityName_ = want->GetOperation().GetAbilityName(); + record->wantAgentInfo_ = info; + } + } + if (updateNotification) { + ErrCode ret = UpdateTaskNotification(oldModes, record); + if (ret != ERR_OK) { + return ret; + } + } + record->isCombinedTaskNotification_ = taskParam->isCombinedTaskNotification_; + if (record->suspendState_) { + std::string taskInfoMapKey = std::to_string(record->uid_) + SEPARATOR + record->abilityName_ + SEPARATOR + + std::to_string(record->abilityId_) + SEPARATOR + CommonUtils::ModesToString(record->bgModeIds_); + HandleActiveContinuousTask(record->uid_, record->pid_, taskInfoMapKey); + } + OnContinuousTaskChanged(record, ContinuousTaskEventTriggerType::TASK_UPDATE); + taskParam->notificationId_ = record->GetNotificationId(); + taskParam->continuousTaskId_ = record->GetContinuousTaskId(); + return RefreshTaskRecord(); +} + +ErrCode BgContinuousTaskMgr::UpdateTaskNotification(const std::vector &oldModes, + std::shared_ptr record) +{ + if (CommonUtils::CheckExistMode(oldModes, BackgroundMode::DATA_TRANSFER) && + CommonUtils::CheckExistMode(record->bgModeIds_, BackgroundMode::DATA_TRANSFER)) { + BGTASK_LOGI("uid: %{public}d, bundleName: %{public}s, abilityId: %{public}d have same mode: DATA_TRANSFER", + record->uid_, record->bundleName_.c_str(), record->abilityId_); + } else { + std::map> newPromptInfos; + std::string mainAbilityLabel = GetMainAbilityLabel(record->bundleName_, record->userId_); + std::string notificationText = GetNotificationText(record); + if (notificationText.empty() || mainAbilityLabel == "") { + NotificationTools::GetInstance()->CancelNotification(record->GetNotificationLabel(), + record->GetNotificationId()); + record->notificationId_ = -1; + BGTASK_LOGE("uid: %{public}d, bundleName: %{public}s get main ability label or notification text fail.", + record->uid_, record->bundleName_.c_str()); + return ERR_BGTASK_NOTIFICATION_VERIFY_FAILED; + } else { + newPromptInfos.emplace(record->notificationLabel_, std::make_pair(mainAbilityLabel, notificationText)); + } + if (record->isCombinedTaskNotification_) { + // 通知合并的任务,只更新want + NotificationTools::GetInstance()->RefreshContinuousNotificationWantAndContext(bgTaskUid_, + newPromptInfos, record); + } else { + // 刷新text,want + NotificationTools::GetInstance()->RefreshContinuousNotificationWantAndContext(bgTaskUid_, + newPromptInfos, record, true); + } + } + return ERR_OK; +} + +ErrCode BgContinuousTaskMgr::UpdateBackgroundRunningByTaskIdInner(int32_t uid, + const sptr &taskParam) +{ + int32_t continuousTaskId = taskParam->updateTaskId_; + std::string abilityName = taskParam->abilityName_; + int32_t abilityId = taskParam->abilityId_; + if (continuousTaskId < 0) { + BGTASK_LOGE("update task fail, taskId: %{public}d", taskParam->updateTaskId_); + return ERR_BGTASK_CONTINUOUS_TASKID_INVALID; + } + auto findTask = [continuousTaskId, uid, abilityName, abilityId](const auto &target) { + return continuousTaskId == target.second->continuousTaskId_ && target.second->uid_ == uid && + target.second->abilityName_ == abilityName && target.second->abilityId_ == abilityId + && target.second->isByRequestObject_; + }; + auto findTaskIter = find_if(continuousTaskInfosMap_.begin(), continuousTaskInfosMap_.end(), findTask); + if (findTaskIter == continuousTaskInfosMap_.end()) { + BGTASK_LOGE("uid: %{public}d not have task, taskId: %{public}d", uid, continuousTaskId); + return ERR_BGTASK_OBJECT_NOT_EXIST; + } + auto record = findTaskIter->second; + uint32_t configuredBgMode = GetBackgroundModeInfo(uid, record->abilityName_); + ErrCode ret = ERR_OK; + for (auto it = taskParam->bgModeIds_.begin(); it != taskParam->bgModeIds_.end(); it++) { + ret = CheckBgmodeType(configuredBgMode, *it, true, record); + if (ret != ERR_OK) { + BGTASK_LOGE("CheckBgmodeType error, mode: %{public}u, apply mode: %{public}u.", configuredBgMode, *it); + return ret; + } + } + // 任务本身没有通知,则只更新任务数据 + if (record->GetNotificationId() == -1) { + ret = UpdateTaskInfo(record, taskParam, false); + } else { + ret = UpdateTaskInfo(record, taskParam, true); + } + return ret; +} + ErrCode BgContinuousTaskMgr::UpdateBackgroundRunningInner(const std::string &taskInfoMapKey, const sptr &taskParam) { -- Gitee From bc24e17d720c1050b1d23d39f6f2d33772f29885 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 00:45:15 +0000 Subject: [PATCH 09/31] update services/continuous_task/src/bg_continuous_task_mgr.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- services/continuous_task/src/bg_continuous_task_mgr.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/continuous_task/src/bg_continuous_task_mgr.cpp b/services/continuous_task/src/bg_continuous_task_mgr.cpp index edcd67db..051d8210 100644 --- a/services/continuous_task/src/bg_continuous_task_mgr.cpp +++ b/services/continuous_task/src/bg_continuous_task_mgr.cpp @@ -1011,7 +1011,7 @@ ErrCode BgContinuousTaskMgr::StartBackgroundRunningSubmit(std::shared_ptr &recordParam, +ErrCode BgContinuousTaskMgr::CheckCombinedTaskNotification(std::shared_ptr &recordParam, bool &sendNotification) { // 无需合并,新申请 -- Gitee From b1f7b58c5eb4258fb9137900c6a816bbf195f755 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 00:47:55 +0000 Subject: [PATCH 10/31] update interfaces/innerkits/include/continuous_task_callback_info.h. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- .../include/continuous_task_callback_info.h | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/interfaces/innerkits/include/continuous_task_callback_info.h b/interfaces/innerkits/include/continuous_task_callback_info.h index 5f35aac8..743d908c 100644 --- a/interfaces/innerkits/include/continuous_task_callback_info.h +++ b/interfaces/innerkits/include/continuous_task_callback_info.h @@ -28,10 +28,11 @@ public: ContinuousTaskCallbackInfo(); ContinuousTaskCallbackInfo(uint32_t typeId, int32_t creatorUid, pid_t creatorPid, std::string abilityName, bool isFromWebview = false, bool isBatchApi = false, - const std::vector &typeIds = {}, int32_t abilityId = -1, uint64_t tokenId = 0) + const std::vector &typeIds = {}, int32_t abilityId = -1, uint64_t tokenId = 0, + bool isByRequestObject = false) : typeId_(typeId), creatorUid_(creatorUid), creatorPid_(creatorPid), abilityName_(abilityName), isFromWebview_(isFromWebview), isBatchApi_(isBatchApi), typeIds_(typeIds), abilityId_(abilityId), - tokenId_(tokenId) {} + tokenId_(tokenId), isByRequestObject(isByRequestObject) {} /** * @brief Get the id of type. @@ -152,6 +153,20 @@ public: */ void SetSuspendState(const bool suspendState); + /** + * @brief By new api 21 operation. + * + * @return True if success, else false. + */ + bool IsByRequestObject() const; + + /** + * @brief Set the operation new api. + * + * @param suspendState The by request operation. + */ + void SetByRequestObject(const bool isByRequestObject); + /** * @brief Marshals a purpose into a parcel. * @@ -178,6 +193,7 @@ private: int32_t cancelReason_ {-1}; bool suspendState_ {false}; int32_t suspendReason_ {-1}; + bool isByRequestObject_ {false}; }; } // namespace BackgroundTaskMgr } // namespace OHOS -- Gitee From d6872b3067d593f954f49c67198932dfef61a1eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 00:48:59 +0000 Subject: [PATCH 11/31] update interfaces/innerkits/src/continuous_task_callback_info.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- .../innerkits/src/continuous_task_callback_info.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/interfaces/innerkits/src/continuous_task_callback_info.cpp b/interfaces/innerkits/src/continuous_task_callback_info.cpp index 0c5c4f1f..16d3d764 100644 --- a/interfaces/innerkits/src/continuous_task_callback_info.cpp +++ b/interfaces/innerkits/src/continuous_task_callback_info.cpp @@ -107,6 +107,16 @@ bool ContinuousTaskCallbackInfo::GetSuspendState() const return suspendState_; } +bool ContinuousTaskCallbackInfo::IsByRequestObject() const +{ + return isByRequestObject_; +} + +void ContinuousTaskCallbackInfo::SetByRequestObject(const bool isByRequestObject); +{ + isByRequestObject_ = isByRequestObject; +} + bool ContinuousTaskCallbackInfo::Marshalling(Parcel &parcel) const { WRITE_PARCEL_WITH_RET(parcel, Uint32, typeId_, false); @@ -123,6 +133,7 @@ bool ContinuousTaskCallbackInfo::Marshalling(Parcel &parcel) const WRITE_PARCEL_WITH_RET(parcel, Int32, cancelReason_, false); WRITE_PARCEL_WITH_RET(parcel, Bool, suspendState_, false); WRITE_PARCEL_WITH_RET(parcel, Int32, suspendReason_, false); + WRITE_PARCEL_WITH_RET(parcel, Bool, isByRequestObject_, false); return true; } @@ -154,6 +165,7 @@ bool ContinuousTaskCallbackInfo::ReadFromParcel(Parcel &parcel) READ_PARCEL_WITH_RET(parcel, Int32, cancelReason_, false); READ_PARCEL_WITH_RET(parcel, Bool, suspendState_, false); READ_PARCEL_WITH_RET(parcel, Int32, suspendReason_, false); + READ_PARCEL_WITH_RET(parcel, Bool, isByRequestObject_, false); return true; } } // namespace BackgroundTaskMgr -- Gitee From fa124e7e4ec4e02a7bad20fb8a1178d3a331af69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 00:50:20 +0000 Subject: [PATCH 12/31] update services/continuous_task/src/bg_continuous_task_mgr.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- services/continuous_task/src/bg_continuous_task_mgr.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/services/continuous_task/src/bg_continuous_task_mgr.cpp b/services/continuous_task/src/bg_continuous_task_mgr.cpp index 051d8210..ba3dcfbf 100644 --- a/services/continuous_task/src/bg_continuous_task_mgr.cpp +++ b/services/continuous_task/src/bg_continuous_task_mgr.cpp @@ -2194,6 +2194,7 @@ void BgContinuousTaskMgr::OnContinuousTaskChanged(const std::shared_ptrSetCancelReason(continuousTaskInfo->reason_); continuousTaskCallbackInfo->SetSuspendState(continuousTaskInfo->suspendState_); continuousTaskCallbackInfo->SetSuspendReason(continuousTaskInfo->suspendReason_); + continuousTaskCallbackInfo->SetByRequestObject(continuousTaskInfo->isByRequestObject_); NotifySubscribers(changeEventType, continuousTaskCallbackInfo); ReportHisysEvent(changeEventType, continuousTaskInfo); } -- Gitee From 5cae58b3d39367d23aacefe98a1e12d72f3824cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 01:12:04 +0000 Subject: [PATCH 13/31] update interfaces/innerkits/src/continuous_task_callback_info.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- .../innerkits/src/continuous_task_callback_info.cpp | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/interfaces/innerkits/src/continuous_task_callback_info.cpp b/interfaces/innerkits/src/continuous_task_callback_info.cpp index 16d3d764..0c5c4f1f 100644 --- a/interfaces/innerkits/src/continuous_task_callback_info.cpp +++ b/interfaces/innerkits/src/continuous_task_callback_info.cpp @@ -107,16 +107,6 @@ bool ContinuousTaskCallbackInfo::GetSuspendState() const return suspendState_; } -bool ContinuousTaskCallbackInfo::IsByRequestObject() const -{ - return isByRequestObject_; -} - -void ContinuousTaskCallbackInfo::SetByRequestObject(const bool isByRequestObject); -{ - isByRequestObject_ = isByRequestObject; -} - bool ContinuousTaskCallbackInfo::Marshalling(Parcel &parcel) const { WRITE_PARCEL_WITH_RET(parcel, Uint32, typeId_, false); @@ -133,7 +123,6 @@ bool ContinuousTaskCallbackInfo::Marshalling(Parcel &parcel) const WRITE_PARCEL_WITH_RET(parcel, Int32, cancelReason_, false); WRITE_PARCEL_WITH_RET(parcel, Bool, suspendState_, false); WRITE_PARCEL_WITH_RET(parcel, Int32, suspendReason_, false); - WRITE_PARCEL_WITH_RET(parcel, Bool, isByRequestObject_, false); return true; } @@ -165,7 +154,6 @@ bool ContinuousTaskCallbackInfo::ReadFromParcel(Parcel &parcel) READ_PARCEL_WITH_RET(parcel, Int32, cancelReason_, false); READ_PARCEL_WITH_RET(parcel, Bool, suspendState_, false); READ_PARCEL_WITH_RET(parcel, Int32, suspendReason_, false); - READ_PARCEL_WITH_RET(parcel, Bool, isByRequestObject_, false); return true; } } // namespace BackgroundTaskMgr -- Gitee From 48505e376a22775dfac204198836fda0d728f49f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 01:21:20 +0000 Subject: [PATCH 14/31] update interfaces/innerkits/src/continuous_task_callback_info.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- .../innerkits/src/continuous_task_callback_info.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/interfaces/innerkits/src/continuous_task_callback_info.cpp b/interfaces/innerkits/src/continuous_task_callback_info.cpp index 0c5c4f1f..a36886ed 100644 --- a/interfaces/innerkits/src/continuous_task_callback_info.cpp +++ b/interfaces/innerkits/src/continuous_task_callback_info.cpp @@ -107,6 +107,16 @@ bool ContinuousTaskCallbackInfo::GetSuspendState() const return suspendState_; } +bool ContinuousTaskCallbackInfo::IsByRequestObject() const +{ + return IsByRequestObject_; +} + +void ContinuousTaskCallbackInfo::SetByRequestObject(const bool isByRequestObject) +{ + IsByRequestObject_ = isByRequestObject; +} + bool ContinuousTaskCallbackInfo::Marshalling(Parcel &parcel) const { WRITE_PARCEL_WITH_RET(parcel, Uint32, typeId_, false); @@ -123,6 +133,7 @@ bool ContinuousTaskCallbackInfo::Marshalling(Parcel &parcel) const WRITE_PARCEL_WITH_RET(parcel, Int32, cancelReason_, false); WRITE_PARCEL_WITH_RET(parcel, Bool, suspendState_, false); WRITE_PARCEL_WITH_RET(parcel, Int32, suspendReason_, false); + WRITE_PARCEL_WITH_RET(parcel, Bool, IsByRequestObject_, false); return true; } @@ -154,6 +165,7 @@ bool ContinuousTaskCallbackInfo::ReadFromParcel(Parcel &parcel) READ_PARCEL_WITH_RET(parcel, Int32, cancelReason_, false); READ_PARCEL_WITH_RET(parcel, Bool, suspendState_, false); READ_PARCEL_WITH_RET(parcel, Int32, suspendReason_, false); + READ_PARCEL_WITH_RET(parcel, Bool, IsByRequestObject_, false); return true; } } // namespace BackgroundTaskMgr -- Gitee From 98e89ca5f7b6fc0ab4ffd82b9dd412ff1ce5716e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 01:33:00 +0000 Subject: [PATCH 15/31] update interfaces/innerkits/include/continuous_task_callback_info.h. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- interfaces/innerkits/include/continuous_task_callback_info.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/innerkits/include/continuous_task_callback_info.h b/interfaces/innerkits/include/continuous_task_callback_info.h index 743d908c..4f07315d 100644 --- a/interfaces/innerkits/include/continuous_task_callback_info.h +++ b/interfaces/innerkits/include/continuous_task_callback_info.h @@ -32,7 +32,7 @@ public: bool isByRequestObject = false) : typeId_(typeId), creatorUid_(creatorUid), creatorPid_(creatorPid), abilityName_(abilityName), isFromWebview_(isFromWebview), isBatchApi_(isBatchApi), typeIds_(typeIds), abilityId_(abilityId), - tokenId_(tokenId), isByRequestObject(isByRequestObject) {} + tokenId_(tokenId), isByRequestObject_(isByRequestObject) {} /** * @brief Get the id of type. -- Gitee From 30ab3a75f02cb66746496980d169cf2890fa2d1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 01:45:13 +0000 Subject: [PATCH 16/31] =?UTF-8?q?=E9=95=BF=E6=97=B6=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=96=B0=E6=8E=A5=E5=8F=A3=E6=9B=B4=E6=96=B0=20Signed-off-by:?= =?UTF-8?q?=20=E8=83=A1=E4=BC=9F=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../innerkits/include/continuous_task_callback_info.h | 2 +- .../innerkits/src/continuous_task_callback_info.cpp | 10 +++++----- services/continuous_task/include/notification_tools.h | 2 +- .../continuous_task/src/bg_continuous_task_mgr.cpp | 6 +++--- services/continuous_task/src/notification_tools.cpp | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/interfaces/innerkits/include/continuous_task_callback_info.h b/interfaces/innerkits/include/continuous_task_callback_info.h index 4f07315d..47bcd47f 100644 --- a/interfaces/innerkits/include/continuous_task_callback_info.h +++ b/interfaces/innerkits/include/continuous_task_callback_info.h @@ -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 diff --git a/interfaces/innerkits/src/continuous_task_callback_info.cpp b/interfaces/innerkits/src/continuous_task_callback_info.cpp index a36886ed..d404636f 100644 --- a/interfaces/innerkits/src/continuous_task_callback_info.cpp +++ b/interfaces/innerkits/src/continuous_task_callback_info.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 @@ -109,12 +109,12 @@ bool ContinuousTaskCallbackInfo::GetSuspendState() const bool ContinuousTaskCallbackInfo::IsByRequestObject() const { - return IsByRequestObject_; + return isByRequestObject_ ; } void ContinuousTaskCallbackInfo::SetByRequestObject(const bool isByRequestObject) { - IsByRequestObject_ = isByRequestObject; + isByRequestObject_ = isByRequestObject; } bool ContinuousTaskCallbackInfo::Marshalling(Parcel &parcel) const @@ -133,7 +133,7 @@ bool ContinuousTaskCallbackInfo::Marshalling(Parcel &parcel) const WRITE_PARCEL_WITH_RET(parcel, Int32, cancelReason_, false); WRITE_PARCEL_WITH_RET(parcel, Bool, suspendState_, false); WRITE_PARCEL_WITH_RET(parcel, Int32, suspendReason_, false); - WRITE_PARCEL_WITH_RET(parcel, Bool, IsByRequestObject_, false); + WRITE_PARCEL_WITH_RET(parcel, Bool, isByRequestObject_, false); return true; } @@ -165,7 +165,7 @@ bool ContinuousTaskCallbackInfo::ReadFromParcel(Parcel &parcel) READ_PARCEL_WITH_RET(parcel, Int32, cancelReason_, false); READ_PARCEL_WITH_RET(parcel, Bool, suspendState_, false); READ_PARCEL_WITH_RET(parcel, Int32, suspendReason_, false); - READ_PARCEL_WITH_RET(parcel, Bool, IsByRequestObject_, false); + READ_PARCEL_WITH_RET(parcel, Bool, isByRequestObject_, false); return true; } } // namespace BackgroundTaskMgr diff --git a/services/continuous_task/include/notification_tools.h b/services/continuous_task/include/notification_tools.h index a445b922..9d666bd1 100644 --- a/services/continuous_task/include/notification_tools.h +++ b/services/continuous_task/include/notification_tools.h @@ -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 diff --git a/services/continuous_task/src/bg_continuous_task_mgr.cpp b/services/continuous_task/src/bg_continuous_task_mgr.cpp index ba3dcfbf..25b62256 100644 --- a/services/continuous_task/src/bg_continuous_task_mgr.cpp +++ b/services/continuous_task/src/bg_continuous_task_mgr.cpp @@ -878,8 +878,8 @@ ErrCode BgContinuousTaskMgr::UpdateBackgroundRunningByTaskIdInner(int32_t uid, } auto findTask = [continuousTaskId, uid, abilityName, abilityId](const auto &target) { return continuousTaskId == target.second->continuousTaskId_ && target.second->uid_ == uid && - target.second->abilityName_ == abilityName && target.second->abilityId_ == abilityId - && target.second->isByRequestObject_; + target.second->abilityName_ == abilityName && target.second->abilityId_ == abilityId && + target.second->isByRequestObject_; }; auto findTaskIter = find_if(continuousTaskInfosMap_.begin(), continuousTaskInfosMap_.end(), findTask); if (findTaskIter == continuousTaskInfosMap_.end()) { @@ -889,7 +889,7 @@ ErrCode BgContinuousTaskMgr::UpdateBackgroundRunningByTaskIdInner(int32_t uid, auto record = findTaskIter->second; uint32_t configuredBgMode = GetBackgroundModeInfo(uid, record->abilityName_); ErrCode ret = ERR_OK; - for (auto it = taskParam->bgModeIds_.begin(); it != taskParam->bgModeIds_.end(); it++) { + for (auto it = taskParam->bgModeIds_.begin(); it != taskParam->bgModeIds_.end(); it++) { ret = CheckBgmodeType(configuredBgMode, *it, true, record); if (ret != ERR_OK) { BGTASK_LOGE("CheckBgmodeType error, mode: %{public}u, apply mode: %{public}u.", configuredBgMode, *it); diff --git a/services/continuous_task/src/notification_tools.cpp b/services/continuous_task/src/notification_tools.cpp index 276078f7..c44edaf0 100644 --- a/services/continuous_task/src/notification_tools.cpp +++ b/services/continuous_task/src/notification_tools.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 -- Gitee From 69ac0ba28d58b17a06411fd7550903e0d1e38c8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 08:12:14 +0000 Subject: [PATCH 17/31] update services/continuous_task/src/bg_continuous_task_mgr.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- .../src/bg_continuous_task_mgr.cpp | 35 +++++++++++-------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/services/continuous_task/src/bg_continuous_task_mgr.cpp b/services/continuous_task/src/bg_continuous_task_mgr.cpp index 25b62256..0f33b5a7 100644 --- a/services/continuous_task/src/bg_continuous_task_mgr.cpp +++ b/services/continuous_task/src/bg_continuous_task_mgr.cpp @@ -797,13 +797,8 @@ ErrCode BgContinuousTaskMgr::UpdateBackgroundRunning(const sptr record, - const sptr &taskParam, bool updateNotification) + const sptr &taskParam) { - auto oldModes = record->bgModeIds_; - record->bgModeId_ = taskParam->bgModeId_; - record->bgModeIds_ = taskParam->bgModeIds_; - record->bgSubModeIds_ = taskParam->bgSubModeIds_; - record->wantAgent_ = taskParam->wantAgent_; if (record->wantAgent_ != nullptr && record->wantAgent_->GetPendingWant() != nullptr) { auto target = record->wantAgent_->GetPendingWant()->GetTarget(); auto want = record->wantAgent_->GetPendingWant()->GetWant(target); @@ -815,7 +810,7 @@ ErrCode BgContinuousTaskMgr::UpdateTaskInfo(std::shared_ptr &oldModes, +ErrCode BgContinuousTaskMgr::UpdateTaskNotification(const sptr &taskParam, std::shared_ptr record) { + auto oldModes = record->bgModeIds_; + if (!record->isCombinedTaskNotification_) { + record->bgModeId_ = taskParam->bgModeId_; + record->bgModeIds_ = taskParam->bgModeIds_; + record->bgSubModeIds_ = taskParam->bgSubModeIds_; + record->wantAgent_ = taskParam->wantAgent_; + } if (CommonUtils::CheckExistMode(oldModes, BackgroundMode::DATA_TRANSFER) && - CommonUtils::CheckExistMode(record->bgModeIds_, BackgroundMode::DATA_TRANSFER)) { + CommonUtils::CheckExistMode(taskParam->bgModeIds_, BackgroundMode::DATA_TRANSFER)) { BGTASK_LOGI("uid: %{public}d, bundleName: %{public}s, abilityId: %{public}d have same mode: DATA_TRANSFER", record->uid_, record->bundleName_.c_str(), record->abilityId_); + } else if (CommonUtils::CheckModesSame(oldModes, taskParam->bgModeIds_)) { + // 前后类型一致,只刷新want + NotificationTools::GetInstance()->RefreshContinuousNotificationWantAndContext(bgTaskUid_, + newPromptInfos, record); } else { std::map> newPromptInfos; std::string mainAbilityLabel = GetMainAbilityLabel(record->bundleName_, record->userId_); std::string notificationText = GetNotificationText(record); - if (notificationText.empty() || mainAbilityLabel == "") { - NotificationTools::GetInstance()->CancelNotification(record->GetNotificationLabel(), - record->GetNotificationId()); - record->notificationId_ = -1; - BGTASK_LOGE("uid: %{public}d, bundleName: %{public}s get main ability label or notification text fail.", + if (mainAbilityLabel == "") { + BGTASK_LOGE("uid: %{public}d, bundleName: %{public}s get main ability label text fail.", record->uid_, record->bundleName_.c_str()); return ERR_BGTASK_NOTIFICATION_VERIFY_FAILED; + } else if (notificationText.empty()) { + std::string modeStr = CommonUtils::ModesToString(record->bgModeIds_); + BGTASK_LOGE("uid: %{public}d notificationText is empty, modes: %{public}s.", record->uid_, + modeStr.c_str()); } else { newPromptInfos.emplace(record->notificationLabel_, std::make_pair(mainAbilityLabel, notificationText)); } -- Gitee From 238dc3efb92c720750038e0a9a513f6bb7da9b25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 08:13:04 +0000 Subject: [PATCH 18/31] update services/continuous_task/include/bg_continuous_task_mgr.h. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- services/continuous_task/include/bg_continuous_task_mgr.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/services/continuous_task/include/bg_continuous_task_mgr.h b/services/continuous_task/include/bg_continuous_task_mgr.h index ac6c6fe5..a8e11950 100644 --- a/services/continuous_task/include/bg_continuous_task_mgr.h +++ b/services/continuous_task/include/bg_continuous_task_mgr.h @@ -116,9 +116,8 @@ private: ErrCode StartBackgroundRunningInner(std::shared_ptr &continuousTaskRecordPtr); ErrCode UpdateBackgroundRunningInner(const std::string &taskInfoMapKey, const sptr &taskParam); - ErrCode UpdateTaskInfo(std::shared_ptr record, const sptr &taskParam, - bool updateNotification); - ErrCode UpdateTaskNotification(const std::vector &oldModes, + ErrCode UpdateTaskInfo(std::shared_ptr record, const sptr &taskParam); + ErrCode UpdateTaskNotification(const sptr &taskParam, std::shared_ptr record); ErrCode UpdateBackgroundRunningByTaskIdInner(int32_t uid, const sptr &taskParam); ErrCode StartBackgroundRunningForInner(const sptr &taskParam); -- Gitee From 34c33f2ab5e66a601138152293df97f49930081d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 08:21:46 +0000 Subject: [PATCH 19/31] update services/continuous_task/src/bg_continuous_task_mgr.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- .../src/bg_continuous_task_mgr.cpp | 20 +++++-------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/services/continuous_task/src/bg_continuous_task_mgr.cpp b/services/continuous_task/src/bg_continuous_task_mgr.cpp index 0f33b5a7..abfcd838 100644 --- a/services/continuous_task/src/bg_continuous_task_mgr.cpp +++ b/services/continuous_task/src/bg_continuous_task_mgr.cpp @@ -799,6 +799,7 @@ ErrCode BgContinuousTaskMgr::UpdateBackgroundRunning(const sptr record, const sptr &taskParam) { + record->wantAgent_ = taskParam->wantAgent_; if (record->wantAgent_ != nullptr && record->wantAgent_->GetPendingWant() != nullptr) { auto target = record->wantAgent_->GetPendingWant()->GetTarget(); auto want = record->wantAgent_->GetPendingWant()->GetWant(target); @@ -841,8 +842,9 @@ ErrCode BgContinuousTaskMgr::UpdateTaskNotification(const sptrbgModeIds_, BackgroundMode::DATA_TRANSFER)) { BGTASK_LOGI("uid: %{public}d, bundleName: %{public}s, abilityId: %{public}d have same mode: DATA_TRANSFER", record->uid_, record->bundleName_.c_str(), record->abilityId_); - } else if (CommonUtils::CheckModesSame(oldModes, taskParam->bgModeIds_)) { - // 前后类型一致,只刷新want + } else if (CommonUtils::CheckModesSame(oldModes, taskParam->bgModeIds_) || + record->isCombinedTaskNotification_) { + // 前后类型一致或已支持合并,只刷新want NotificationTools::GetInstance()->RefreshContinuousNotificationWantAndContext(bgTaskUid_, newPromptInfos, record); } else { @@ -859,12 +861,6 @@ ErrCode BgContinuousTaskMgr::UpdateTaskNotification(const sptrnotificationLabel_, std::make_pair(mainAbilityLabel, notificationText)); - } - if (record->isCombinedTaskNotification_) { - // 通知合并的任务,只更新want - NotificationTools::GetInstance()->RefreshContinuousNotificationWantAndContext(bgTaskUid_, - newPromptInfos, record); - } else { // 刷新text,want NotificationTools::GetInstance()->RefreshContinuousNotificationWantAndContext(bgTaskUid_, newPromptInfos, record, true); @@ -903,13 +899,7 @@ ErrCode BgContinuousTaskMgr::UpdateBackgroundRunningByTaskIdInner(int32_t uid, return ret; } } - // 任务本身没有通知,则只更新任务数据 - if (record->GetNotificationId() == -1) { - ret = UpdateTaskInfo(record, taskParam, false); - } else { - ret = UpdateTaskInfo(record, taskParam, true); - } - return ret; + return UpdateTaskInfo(record, taskParam); } ErrCode BgContinuousTaskMgr::UpdateBackgroundRunningInner(const std::string &taskInfoMapKey, -- Gitee From 7ec1672bd59580f773b7cadd69d43ded423fe7c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 08:22:54 +0000 Subject: [PATCH 20/31] update services/continuous_task/src/bg_continuous_task_mgr.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- services/continuous_task/src/bg_continuous_task_mgr.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/services/continuous_task/src/bg_continuous_task_mgr.cpp b/services/continuous_task/src/bg_continuous_task_mgr.cpp index abfcd838..bff5527c 100644 --- a/services/continuous_task/src/bg_continuous_task_mgr.cpp +++ b/services/continuous_task/src/bg_continuous_task_mgr.cpp @@ -810,11 +810,9 @@ ErrCode BgContinuousTaskMgr::UpdateTaskInfo(std::shared_ptrwantAgentInfo_ = info; } } - if (updateNotification) { - ErrCode ret = UpdateTaskNotification(taskParam, record); - if (ret != ERR_OK) { - return ret; - } + ErrCode ret = UpdateTaskNotification(taskParam, record); + if (ret != ERR_OK) { + return ret; } record->isCombinedTaskNotification_ = taskParam->isCombinedTaskNotification_; if (record->suspendState_) { -- Gitee From 4ad40a5592b9399105d36ba67b380f5930e3054d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 09:06:41 +0000 Subject: [PATCH 21/31] update services/continuous_task/include/bg_continuous_task_mgr.h. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- services/continuous_task/include/bg_continuous_task_mgr.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/services/continuous_task/include/bg_continuous_task_mgr.h b/services/continuous_task/include/bg_continuous_task_mgr.h index a8e11950..013fca1a 100644 --- a/services/continuous_task/include/bg_continuous_task_mgr.h +++ b/services/continuous_task/include/bg_continuous_task_mgr.h @@ -116,9 +116,9 @@ private: ErrCode StartBackgroundRunningInner(std::shared_ptr &continuousTaskRecordPtr); ErrCode UpdateBackgroundRunningInner(const std::string &taskInfoMapKey, const sptr &taskParam); - ErrCode UpdateTaskInfo(std::shared_ptr record, const sptr &taskParam); - ErrCode UpdateTaskNotification(const sptr &taskParam, - std::shared_ptr record); + ErrCode UpdateTaskInfo(std::shared_ptr record, const sptr &taskParam); + ErrCode UpdateTaskNotification(std::shared_ptr record, + const sptr &taskParam); ErrCode UpdateBackgroundRunningByTaskIdInner(int32_t uid, const sptr &taskParam); ErrCode StartBackgroundRunningForInner(const sptr &taskParam); ErrCode StopBackgroundRunningInner(int32_t uid, const std::string &abilityName, int32_t abilityId, -- Gitee From 0b5930f6cc123c8aece1eae197acd74a87459a27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 09:07:08 +0000 Subject: [PATCH 22/31] update services/continuous_task/include/notification_tools.h. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- services/continuous_task/include/notification_tools.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/continuous_task/include/notification_tools.h b/services/continuous_task/include/notification_tools.h index 9d666bd1..6e14182f 100644 --- a/services/continuous_task/include/notification_tools.h +++ b/services/continuous_task/include/notification_tools.h @@ -31,7 +31,7 @@ public: void GetAllActiveNotificationsLabels(std::set ¬ificationLabels); void RefreshContinuousNotifications( const std::map> &newPromptInfos, int32_t serviceUid); - void RefreshContinuousNotificationWantAndContext(int32_t serviceUid, + ErrCode RefreshContinuousNotificationWantAndContext(int32_t serviceUid, const std::map> &newPromptInfos, const std::shared_ptr continuousTaskRecord, bool updateContent = false); -- Gitee From 80be30f3d349c15a0bae04f76054833e69cceff2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 09:08:43 +0000 Subject: [PATCH 23/31] update services/continuous_task/src/notification_tools.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- .../src/notification_tools.cpp | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/services/continuous_task/src/notification_tools.cpp b/services/continuous_task/src/notification_tools.cpp index c44edaf0..15994cf7 100644 --- a/services/continuous_task/src/notification_tools.cpp +++ b/services/continuous_task/src/notification_tools.cpp @@ -180,7 +180,7 @@ WEAK_FUNC void NotificationTools::RefreshContinuousNotifications( #endif } -WEAK_FUNC void NotificationTools::RefreshContinuousNotificationWantAndContext(int32_t serviceUid, +WEAK_FUNC ErrCode NotificationTools::RefreshContinuousNotificationWantAndContext(int32_t serviceUid, const std::map> &newPromptInfos, const std::shared_ptr continuousTaskRecord, bool updateContent) { @@ -189,9 +189,13 @@ WEAK_FUNC void NotificationTools::RefreshContinuousNotificationWantAndContext(in ErrCode ret = Notification::NotificationHelper::GetActiveNotifications(notificationRequests); if (ret != ERR_OK) { BGTASK_LOGE("refresh task, get all active notification fail!"); - return; + return ret; } for (Notification::NotificationRequest *var : notificationRequests) { + if (!var) { + BGTASK_LOGE("NotificationRequest is null!"); + return ERR_BGTASK_NOTIFICATION_VERIFY_FAILED; + } std::string label = var->GetLabel(); if (newPromptInfos.count(label) == 0 || var->GetCreatorUid() != serviceUid) { continue; @@ -199,14 +203,25 @@ WEAK_FUNC void NotificationTools::RefreshContinuousNotificationWantAndContext(in var->SetWantAgent(continuousTaskRecord->GetWantAgent()); if (updateContent) { auto &content = var->GetContent(); + if (!content) { + BGTASK_LOGE("content is null!"); + return ERR_BGTASK_NOTIFICATION_VERIFY_FAILED; + } auto const &normalContent = content->GetNotificationContent(); + if (!normalContent) { + BGTASK_LOGE("normalContent is null!"); + return ERR_BGTASK_NOTIFICATION_VERIFY_FAILED; + } normalContent->SetTitle(newPromptInfos.at(label).first); normalContent->SetText(newPromptInfos.at(label).second); } - if (Notification::NotificationHelper::PublishContinuousTaskNotification(*var) != ERR_OK) { + ret = Notification::NotificationHelper::PublishContinuousTaskNotification(*var); + if (ret != ERR_OK) { BGTASK_LOGE("refresh notification error, label: %{public}s", label.c_str()); + return ret; } } + return ERR_OK; #endif } } -- Gitee From ee67b1b1aa523fb2d4bd28652ff9fc3544a23283 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 09:09:39 +0000 Subject: [PATCH 24/31] update interfaces/test/unittest/bgtask_manager_client_test/bgtask_client_unit_test.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- .../bgtask_manager_client_test/bgtask_client_unit_test.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/interfaces/test/unittest/bgtask_manager_client_test/bgtask_client_unit_test.cpp b/interfaces/test/unittest/bgtask_manager_client_test/bgtask_client_unit_test.cpp index dd8e6f7a..950c0b6e 100644 --- a/interfaces/test/unittest/bgtask_manager_client_test/bgtask_client_unit_test.cpp +++ b/interfaces/test/unittest/bgtask_manager_client_test/bgtask_client_unit_test.cpp @@ -623,6 +623,7 @@ HWTEST_F(BgTaskClientUnitTest, ContinuousTaskCallbackInfo_001, TestSize.Level1) new ContinuousTaskCallbackInfo(1, 1, 1, "test")); info2->SetContinuousTaskId(1); info2->SetCancelReason(1); + info2->SetByRequestObject(true); Parcel parcel = Parcel(); info2->Marshalling(parcel); sptr info3 = sptr( @@ -637,6 +638,7 @@ HWTEST_F(BgTaskClientUnitTest, ContinuousTaskCallbackInfo_001, TestSize.Level1) EXPECT_EQ(info3->GetCancelReason(), 1); EXPECT_EQ(info3->GetSuspendState(), false); EXPECT_EQ(info3->GetSuspendReason(), -1); + EXPECT_EQ(info3->IsByRequestObject(), true); } /** -- Gitee From 400a1faded3438de735d1f3400d30f51d34f05f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 09:12:33 +0000 Subject: [PATCH 25/31] update services/continuous_task/src/bg_continuous_task_mgr.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- .../src/bg_continuous_task_mgr.cpp | 32 +++++++++---------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/services/continuous_task/src/bg_continuous_task_mgr.cpp b/services/continuous_task/src/bg_continuous_task_mgr.cpp index bff5527c..05d5a52f 100644 --- a/services/continuous_task/src/bg_continuous_task_mgr.cpp +++ b/services/continuous_task/src/bg_continuous_task_mgr.cpp @@ -810,7 +810,7 @@ ErrCode BgContinuousTaskMgr::UpdateTaskInfo(std::shared_ptrwantAgentInfo_ = info; } } - ErrCode ret = UpdateTaskNotification(taskParam, record); + ErrCode ret = UpdateTaskNotification(record, taskParam); if (ret != ERR_OK) { return ret; } @@ -826,41 +826,43 @@ ErrCode BgContinuousTaskMgr::UpdateTaskInfo(std::shared_ptr &taskParam, - std::shared_ptr record) +ErrCode BgContinuousTaskMgr::UpdateTaskNotification(std::shared_ptr record, + const sptr &taskParam) { auto oldModes = record->bgModeIds_; if (!record->isCombinedTaskNotification_) { + // 不支持合并的任务,才更新任务类型 record->bgModeId_ = taskParam->bgModeId_; record->bgModeIds_ = taskParam->bgModeIds_; record->bgSubModeIds_ = taskParam->bgSubModeIds_; - record->wantAgent_ = taskParam->wantAgent_; } + std::map> newPromptInfos; if (CommonUtils::CheckExistMode(oldModes, BackgroundMode::DATA_TRANSFER) && CommonUtils::CheckExistMode(taskParam->bgModeIds_, BackgroundMode::DATA_TRANSFER)) { BGTASK_LOGI("uid: %{public}d, bundleName: %{public}s, abilityId: %{public}d have same mode: DATA_TRANSFER", record->uid_, record->bundleName_.c_str(), record->abilityId_); } else if (CommonUtils::CheckModesSame(oldModes, taskParam->bgModeIds_) || record->isCombinedTaskNotification_) { - // 前后类型一致或已支持合并,只刷新want - NotificationTools::GetInstance()->RefreshContinuousNotificationWantAndContext(bgTaskUid_, + // 前后类型一致,只刷新want + return NotificationTools::GetInstance()->RefreshContinuousNotificationWantAndContext(bgTaskUid_, + newPromptInfos, record); + } else if (record->isCombinedTaskNotification_) { + return NotificationTools::GetInstance()->RefreshContinuousNotificationWantAndContext(bgTaskUid_, newPromptInfos, record); } else { - std::map> newPromptInfos; std::string mainAbilityLabel = GetMainAbilityLabel(record->bundleName_, record->userId_); std::string notificationText = GetNotificationText(record); if (mainAbilityLabel == "") { - BGTASK_LOGE("uid: %{public}d, bundleName: %{public}s get main ability label text fail.", + BGTASK_LOGE("uid: %{public}d, bundleName: %{public}s get main ability label or notification text fail.", record->uid_, record->bundleName_.c_str()); return ERR_BGTASK_NOTIFICATION_VERIFY_FAILED; } else if (notificationText.empty()) { std::string modeStr = CommonUtils::ModesToString(record->bgModeIds_); - BGTASK_LOGE("uid: %{public}d notificationText is empty, modes: %{public}s.", record->uid_, - modeStr.c_str()); + BGTASK_LOGE("notificationText is empty, bgmode : %{public}s", modeStr.c_str()); } else { newPromptInfos.emplace(record->notificationLabel_, std::make_pair(mainAbilityLabel, notificationText)); // 刷新text,want - NotificationTools::GetInstance()->RefreshContinuousNotificationWantAndContext(bgTaskUid_, + return NotificationTools::GetInstance()->RefreshContinuousNotificationWantAndContext(bgTaskUid_, newPromptInfos, record, true); } } @@ -871,16 +873,12 @@ ErrCode BgContinuousTaskMgr::UpdateBackgroundRunningByTaskIdInner(int32_t uid, const sptr &taskParam) { int32_t continuousTaskId = taskParam->updateTaskId_; - std::string abilityName = taskParam->abilityName_; - int32_t abilityId = taskParam->abilityId_; if (continuousTaskId < 0) { BGTASK_LOGE("update task fail, taskId: %{public}d", taskParam->updateTaskId_); return ERR_BGTASK_CONTINUOUS_TASKID_INVALID; } - auto findTask = [continuousTaskId, uid, abilityName, abilityId](const auto &target) { - return continuousTaskId == target.second->continuousTaskId_ && target.second->uid_ == uid && - target.second->abilityName_ == abilityName && target.second->abilityId_ == abilityId && - target.second->isByRequestObject_; + auto findTask = [continuousTaskId](const auto &target) { + return continuousTaskId == target.second->continuousTaskId_ && target.second->isByRequestObject_; }; auto findTaskIter = find_if(continuousTaskInfosMap_.begin(), continuousTaskInfosMap_.end(), findTask); if (findTaskIter == continuousTaskInfosMap_.end()) { -- Gitee From aebb9e62ddd20fa7fa6acd477f00ceb2c4b31c12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 09:27:52 +0000 Subject: [PATCH 26/31] update services/continuous_task/include/bg_continuous_task_mgr.h. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- services/continuous_task/include/bg_continuous_task_mgr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/continuous_task/include/bg_continuous_task_mgr.h b/services/continuous_task/include/bg_continuous_task_mgr.h index 013fca1a..921e8299 100644 --- a/services/continuous_task/include/bg_continuous_task_mgr.h +++ b/services/continuous_task/include/bg_continuous_task_mgr.h @@ -116,7 +116,7 @@ private: ErrCode StartBackgroundRunningInner(std::shared_ptr &continuousTaskRecordPtr); ErrCode UpdateBackgroundRunningInner(const std::string &taskInfoMapKey, const sptr &taskParam); - ErrCode UpdateTaskInfo(std::shared_ptr record, const sptr &taskParam); + ErrCode UpdateTaskInfo(std::shared_ptr record, const sptr &taskParam); ErrCode UpdateTaskNotification(std::shared_ptr record, const sptr &taskParam); ErrCode UpdateBackgroundRunningByTaskIdInner(int32_t uid, const sptr &taskParam); -- Gitee From fdaabb9da850a7f101e34f6821518d1cd445b1b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 09:30:12 +0000 Subject: [PATCH 27/31] update services/continuous_task/src/notification_tools.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- services/continuous_task/src/notification_tools.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/services/continuous_task/src/notification_tools.cpp b/services/continuous_task/src/notification_tools.cpp index 15994cf7..80e781ff 100644 --- a/services/continuous_task/src/notification_tools.cpp +++ b/services/continuous_task/src/notification_tools.cpp @@ -189,7 +189,7 @@ WEAK_FUNC ErrCode NotificationTools::RefreshContinuousNotificationWantAndContext ErrCode ret = Notification::NotificationHelper::GetActiveNotifications(notificationRequests); if (ret != ERR_OK) { BGTASK_LOGE("refresh task, get all active notification fail!"); - return ret; + return ERR_BGTASK_NOTIFICATION_VERIFY_FAILED; } for (Notification::NotificationRequest *var : notificationRequests) { if (!var) { @@ -218,11 +218,11 @@ WEAK_FUNC ErrCode NotificationTools::RefreshContinuousNotificationWantAndContext ret = Notification::NotificationHelper::PublishContinuousTaskNotification(*var); if (ret != ERR_OK) { BGTASK_LOGE("refresh notification error, label: %{public}s", label.c_str()); - return ret; + return ERR_BGTASK_NOTIFICATION_VERIFY_FAILED; } } - return ERR_OK; #endif + return ERR_OK; } } } -- Gitee From 202c7b0c692d28b02365cd1ece1e8ce3e24ef700 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 09:47:24 +0000 Subject: [PATCH 28/31] update frameworks/common/include/bgtaskmgr_inner_errors.h. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- frameworks/common/include/bgtaskmgr_inner_errors.h | 1 + 1 file changed, 1 insertion(+) diff --git a/frameworks/common/include/bgtaskmgr_inner_errors.h b/frameworks/common/include/bgtaskmgr_inner_errors.h index e183a03e..d9708c1c 100644 --- a/frameworks/common/include/bgtaskmgr_inner_errors.h +++ b/frameworks/common/include/bgtaskmgr_inner_errors.h @@ -61,6 +61,7 @@ enum : int32_t { ERR_BGTASK_CONTINUOUS_NOT_MERGE_COMBINED_FALSE, ERR_BGTASK_CONTINUOUS_NOT_UPDATE_BECAUSE_MERGE, ERR_BGTASK_CONTINUOUS_NOT_MERGE_CURRENTTASK_COMBINED_FALSE, + ERR_BGTASK_CONTINUOUS_UPDATE_FAIL_SAME_MODE_AND_MERGED, ERR_BGTASK_NOTIFICATION_VERIFY_FAILED = 980000601, ERR_BGTASK_NOTIFICATION_ERR, ERR_BGTASK_CHECK_TASK_PARAM, -- Gitee From ee890187a697f2756fa268a368a8ebb8a624691a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 09:48:09 +0000 Subject: [PATCH 29/31] update interfaces/kits/napi/src/common.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- interfaces/kits/napi/src/common.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/interfaces/kits/napi/src/common.cpp b/interfaces/kits/napi/src/common.cpp index bb7a4c64..56e754fe 100644 --- a/interfaces/kits/napi/src/common.cpp +++ b/interfaces/kits/napi/src/common.cpp @@ -115,6 +115,8 @@ const std::map SA_ERRCODE_MSG_MAP = { "Continuous Task verification failed. The continuous task not update because of merged."}, {ERR_BGTASK_CONTINUOUS_NOT_MERGE_CURRENTTASK_COMBINED_FALSE, "Continuous Task verification failed. Current continuous task do not support merged."}, + {ERR_BGTASK_CONTINUOUS_UPDATE_FAIL_SAME_MODE_AND_MERGED, + "Continuous Task verification failed. Current continuous task support merged but the modes are inconsistent."}, }; const std::map PARAM_ERRCODE_MSG_MAP = { -- Gitee From 0c77271cb9b8dede3c0ae361917158d9bb3cacc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 09:54:13 +0000 Subject: [PATCH 30/31] update services/continuous_task/src/bg_continuous_task_mgr.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- .../continuous_task/src/bg_continuous_task_mgr.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/services/continuous_task/src/bg_continuous_task_mgr.cpp b/services/continuous_task/src/bg_continuous_task_mgr.cpp index 05d5a52f..aa051f44 100644 --- a/services/continuous_task/src/bg_continuous_task_mgr.cpp +++ b/services/continuous_task/src/bg_continuous_task_mgr.cpp @@ -841,14 +841,13 @@ ErrCode BgContinuousTaskMgr::UpdateTaskNotification(std::shared_ptrbgModeIds_, BackgroundMode::DATA_TRANSFER)) { BGTASK_LOGI("uid: %{public}d, bundleName: %{public}s, abilityId: %{public}d have same mode: DATA_TRANSFER", record->uid_, record->bundleName_.c_str(), record->abilityId_); - } else if (CommonUtils::CheckModesSame(oldModes, taskParam->bgModeIds_) || - record->isCombinedTaskNotification_) { - // 前后类型一致,只刷新want - return NotificationTools::GetInstance()->RefreshContinuousNotificationWantAndContext(bgTaskUid_, - newPromptInfos, record); } else if (record->isCombinedTaskNotification_) { - return NotificationTools::GetInstance()->RefreshContinuousNotificationWantAndContext(bgTaskUid_, - newPromptInfos, record); + if (CommonUtils::CheckModesSame(oldModes, taskParam->bgModeIds_)) { + return NotificationTools::GetInstance()->RefreshContinuousNotificationWantAndContext(bgTaskUid_, + newPromptInfos, record); + } else { + return ERR_BGTASK_CONTINUOUS_UPDATE_FAIL_SAME_MODE_AND_MERGED; + } } else { std::string mainAbilityLabel = GetMainAbilityLabel(record->bundleName_, record->userId_); std::string notificationText = GetNotificationText(record); -- Gitee From f29fb4eba6eb7e5f3803fabdf60dd4c7d27c4672 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E4=BC=9F?= Date: Sat, 6 Sep 2025 09:56:28 +0000 Subject: [PATCH 31/31] update services/test/unittest/mock/mock_notification_tools.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 胡伟 --- services/test/unittest/mock/mock_notification_tools.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/services/test/unittest/mock/mock_notification_tools.cpp b/services/test/unittest/mock/mock_notification_tools.cpp index 24f3b9ca..74b23d28 100644 --- a/services/test/unittest/mock/mock_notification_tools.cpp +++ b/services/test/unittest/mock/mock_notification_tools.cpp @@ -33,8 +33,11 @@ void NotificationTools::GetAllActiveNotificationsLabels(std::set &n void NotificationTools::RefreshContinuousNotifications( const std::map> &newPromptInfos, int32_t serviceUid) {} -void NotificationTools::RefreshContinuousNotificationWantAndContext(int32_t serviceUid, +ErrCode NotificationTools::RefreshContinuousNotificationWantAndContext(int32_t serviceUid, const std::map> &newPromptInfos, - const std::shared_ptr continuousTaskRecord, bool updateContent) {} + const std::shared_ptr continuousTaskRecord, bool updateContent) +{ + return ERR_OK; +} } } -- Gitee