diff --git a/services/ans/src/advanced_notification_live_view_service.cpp b/services/ans/src/advanced_notification_live_view_service.cpp index 1c850e3e13ca1dd504c2089e7c88888270ade07a..e6fa874a3c97551d2e121ab1df559bf15538aae8 100644 --- a/services/ans/src/advanced_notification_live_view_service.cpp +++ b/services/ans/src/advanced_notification_live_view_service.cpp @@ -15,6 +15,7 @@ #include "advanced_notification_service.h" +#include "cpp/task.h" #include "errors.h" #include "ans_inner_errors.h" #include "notification_constant.h" @@ -48,58 +49,62 @@ void AdvancedNotificationService::RecoverLiveViewFromDb(int32_t userId) ANS_LOGE("Get liveView from db failed."); return; } + if (notificationSvrQueue_ == nullptr) { + ANS_LOGE("notificationSvrQueue_ is nullptr."); + return; + } + ffrt::task_handle handler = notificationSvrQueue_->submit_h(std::bind([&]() { + ANS_LOGE("There are %zu live views to recover.", requestsdb.size()); + for (const auto &requestObj : requestsdb) { + ANS_LOGD("Recover request: %{public}s.", requestObj.request->Dump().c_str()); + if (!IsLiveViewCanRecover(requestObj.request)) { + int32_t userId = requestObj.request->GetReceiverUserId(); + if (DeleteNotificationRequestFromDb(requestObj.request->GetKey(), userId) != ERR_OK) { + ANS_LOGE("Delete notification failed."); + } + continue; + } - for (const auto &requestObj : requestsdb) { - ANS_LOGD("Recover request: %{public}s.", requestObj.request->Dump().c_str()); - if (!IsLiveViewCanRecover(requestObj.request)) { - int32_t userId = requestObj.request->GetReceiverUserId(); - if (DoubleDeleteNotificationFromDb(requestObj.request->GetKey(), - requestObj.request->GetSecureKey(), userId) != ERR_OK) { - ANS_LOGE("Delete notification failed."); + auto record = std::make_shared(); + if (FillNotificationRecord(requestObj, record) != ERR_OK) { + ANS_LOGE("Fill notification record failed."); + continue; } - continue; - } - auto record = std::make_shared(); - if (FillNotificationRecord(requestObj, record) != ERR_OK) { - ANS_LOGE("Fill notification record failed."); - continue; - } + if (Filter(record, true) != ERR_OK) { + ANS_LOGE("Filter record failed."); + continue; + } - if (Filter(record, true) != ERR_OK) { - ANS_LOGE("Filter record failed."); - continue; - } + if (FlowControl(record) != ERR_OK) { + ANS_LOGE("Flow control failed."); + continue; + } - if (FlowControl(record) != ERR_OK) { - ANS_LOGE("Flow control failed."); - continue; - } + // Turn off ringtone and vibration during recovery process + auto notificationFlags = record->request->GetFlags(); + notificationFlags->SetSoundEnabled(NotificationConstant::FlagStatus::CLOSE); + notificationFlags->SetVibrationEnabled(NotificationConstant::FlagStatus::CLOSE); + record->request->SetFlags(notificationFlags); + ANS_LOGI("SetFlags-Recovery, notificationKey = %{public}s flags = %{public}d", + record->request->GetKey().c_str(), notificationFlags->GetReminderFlags()); + if (AssignToNotificationList(record) != ERR_OK) { + ANS_LOGE("Add notification to record list failed."); + continue; + } + UpdateRecentNotification(record->notification, false, 0); - // Turn off ringtone and vibration during recovery process - auto notificationFlags = record->request->GetFlags(); - notificationFlags->SetSoundEnabled(NotificationConstant::FlagStatus::CLOSE); - notificationFlags->SetVibrationEnabled(NotificationConstant::FlagStatus::CLOSE); - record->request->SetFlags(notificationFlags); - ANS_LOGI("SetFlags-Recovery, notificationKey = %{public}s flags = %{public}d", - record->request->GetKey().c_str(), notificationFlags->GetReminderFlags()); - if (AssignToNotificationList(record) != ERR_OK) { - ANS_LOGE("Add notification to record list failed."); - continue; + StartFinishTimer(record, requestObj.request->GetFinishDeadLine(), + NotificationConstant::TRIGGER_EIGHT_HOUR_REASON_DELETE); + StartUpdateTimer(record, requestObj.request->GetUpdateDeadLine(), + NotificationConstant::TRIGGER_FOUR_HOUR_REASON_DELETE); } - UpdateRecentNotification(record->notification, false, 0); - - StartFinishTimer(record, requestObj.request->GetFinishDeadLine(), - NotificationConstant::TRIGGER_EIGHT_HOUR_REASON_DELETE); - StartUpdateTimer(record, requestObj.request->GetUpdateDeadLine(), - NotificationConstant::TRIGGER_FOUR_HOUR_REASON_DELETE); - } - - // publish notifications - for (const auto &subscriber : NotificationSubscriberManager::GetInstance()->GetSubscriberRecords()) { - OnSubscriberAdd(subscriber); - } + // publish notifications + for (const auto &subscriber : NotificationSubscriberManager::GetInstance()->GetSubscriberRecords()) { + OnSubscriberAdd(subscriber); + } + })); ANS_LOGI("End recover live view from db."); }