diff --git a/services/ans/include/advanced_notification_service.h b/services/ans/include/advanced_notification_service.h index e2b290e446c4a24010220e5e2866eb84067ed848..d2055b223d43b9d2849c8a6af45e110a36dbc6cd 100644 --- a/services/ans/include/advanced_notification_service.h +++ b/services/ans/include/advanced_notification_service.h @@ -1573,6 +1573,7 @@ private: uint32_t GetDefaultSlotFlags(const sptr &request); bool IsSystemUser(int32_t userId); ErrCode CollaboratePublish(const sptr &request); + ErrCode SetCollaborateRequest(const sptr &request); void SetCollaborateReminderFlag(const sptr &request); ErrCode SetEnabledForBundleSlotInner(const sptr &bundleOption, const sptr &bundle, diff --git a/services/ans/src/advanced_notification_publish_service.cpp b/services/ans/src/advanced_notification_publish_service.cpp index 7145de36ce428208d5072574d83dd465e352d975..7259e3da377191e0e4da86bd9c1fb89938b93ba0 100644 --- a/services/ans/src/advanced_notification_publish_service.cpp +++ b/services/ans/src/advanced_notification_publish_service.cpp @@ -150,15 +150,8 @@ void AdvancedNotificationService::UpdateCollaborateTimerInfo(const std::shared_p } } -ErrCode AdvancedNotificationService::CollaboratePublish(const sptr &request) +ErrCode AdvancedNotificationService::SetCollaborateRequest(const sptr &request) { - auto tokenCaller = IPCSkeleton::GetCallingTokenID(); - if (!AccessTokenHelper::VerifyNativeToken(tokenCaller) || - !AccessTokenHelper::VerifyCallerPermission(tokenCaller, OHOS_PERMISSION_NOTIFICATION_CONTROLLER)) { - ANS_LOGE("Collaborate publish cheak permission failed."); - return ERR_ANS_PERMISSION_DENIED; - } - int32_t uid = IPCSkeleton::GetCallingUid(); int32_t pid = IPCSkeleton::GetCallingPid(); request->SetCreatorUid(uid); @@ -174,7 +167,20 @@ ErrCode AdvancedNotificationService::CollaboratePublish(const sptrGetDeliveryTime() <= 0) { request->SetDeliveryTime(GetCurrentTime()); } + SetCollaborateReminderFlag(request); + return ERR_OK; +} + +ErrCode AdvancedNotificationService::CollaboratePublish(const sptr &request) +{ + auto tokenCaller = IPCSkeleton::GetCallingTokenID(); + if (!AccessTokenHelper::VerifyNativeToken(tokenCaller) || + !AccessTokenHelper::VerifyCallerPermission(tokenCaller, OHOS_PERMISSION_NOTIFICATION_CONTROLLER)) { + ANS_LOGE("Collaborate publish cheak permission failed."); + return ERR_ANS_PERMISSION_DENIED; + } std::shared_ptr record = std::make_shared(); + SetCollaborateRequest(request); record->request = request; record->notification = new (std::nothrow) Notification(request); if (record->notification == nullptr) { @@ -183,7 +189,7 @@ ErrCode AdvancedNotificationService::CollaboratePublish(const sptrbundleOption = new (std::nothrow) NotificationBundleOption(request->GetCreatorBundleName(), 0); record->notification->SetKey(request->GetLabel() + request->GetDistributedHashCode()); - SetCollaborateReminderFlag(record->request); + if (notificationSvrQueue_ == nullptr) { ANS_LOGE("Serial queue is invalid."); return ERR_ANS_INVALID_PARAM; diff --git a/services/distributed/src/soft_bus/distributed_publish_service_v2.cpp b/services/distributed/src/soft_bus/distributed_publish_service_v2.cpp index ad75c80b43979570a8be858b73c3ec4f45628399..88075c2c84924b19caf4e04d67ee3afd05fe52f3 100644 --- a/services/distributed/src/soft_bus/distributed_publish_service_v2.cpp +++ b/services/distributed/src/soft_bus/distributed_publish_service_v2.cpp @@ -428,6 +428,10 @@ void DistributedPublishService::MakeNotificationButtons(const NotificationReques } box.GetNotificationUserInput(userInputKey); std::shared_ptr userInput = NotificationUserInput::Create(userInputKey); + if (!userInput) { + ANS_LOGE("Failed to create NotificationUserInput by inputKey=%{public}s", userInputKey.c_str()); + return; + } std::shared_ptr actionButton = NotificationActionButton::Create(nullptr, actionName, nullptr); actionButton->AddNotificationUserInput(userInput);