diff --git a/frameworks/ans/IAnsSubscriber.idl b/frameworks/ans/IAnsSubscriber.idl index 26c446aa28570ed125a77d4cde585e3988a04736..0eb075a91aa5c0c45a5569211e0236b2a2f2e162 100644 --- a/frameworks/ans/IAnsSubscriber.idl +++ b/frameworks/ans/IAnsSubscriber.idl @@ -20,23 +20,33 @@ sequenceable OHOS.Notification.EnabledNotificationCallbackData; sequenceable OHOS.Notification.BadgeNumberCallbackData; sequenceable OHOS.Notification.NotificationOperationInfo; interface OHOS.Notification.IAnsSubscriber { - void OnConnected(); - void OnDisconnected(); - void OnConsumed([in] sptr notification, [in] sptr notificationMap); - void OnConsumed([in] sptr notification); + [oneway] void OnConnected(); + + [oneway] void OnDisconnected(); + + [oneway] void OnConsumed([in] sptr notification, [in] sptr notificationMap); + [oneway] void OnConsumed([in] sptr notification); + [ipcincapacity 520] void OnConsumedWithMaxCapacity([in] sptr notification, [in] sptr notificationMap); [ipcincapacity 520] void OnConsumedWithMaxCapacity([in] sptr notification); - void OnConsumedList([in] sptr[] notifications, [in] sptr notificationMap); - void OnCanceled([in] sptr notification, [in] sptr notificationMap, [in] int deleteReason); - void OnCanceled([in] sptr notification, [in] int deleteReason); + + [ipcincapacity 520, oneway] void OnConsumedList([in] sptr[] notifications, [in] sptr notificationMap); + [ipcincapacity 520, oneway] void OnConsumedList([in] sptr[] notifications); + + [oneway] void OnCanceled([in] sptr notification, [in] sptr notificationMap, [in] int deleteReason); + [oneway] void OnCanceled([in] sptr notification, [in] int deleteReason); + [ipcincapacity 520] void OnCanceledWithMaxCapacity([in] sptr notification, [in] sptr notificationMap, [in] int deleteReason); [ipcincapacity 520] void OnCanceledWithMaxCapacity([in] sptr notification, [in] int deleteReason); - void OnCanceledList([in] sptr[] notifications, [in] sptr notificationMap, [in] int deleteReason); - void OnUpdated([in] sptr notificationMap); - void OnDoNotDisturbDateChange([in] sptr date); - void OnEnabledNotificationChanged([in] sptr callbackData); - void OnBadgeChanged([in] sptr badgeData); - void OnBadgeEnabledChanged([in] sptr callbackData); - void OnApplicationInfoNeedChanged([in] String bundleName); + + [ipcincapacity 520, oneway] void OnCanceledList([in] sptr[] notifications, [in] sptr notificationMap, [in] int deleteReason); + [ipcincapacity 520, oneway] void OnCanceledList([in] sptr[] notifications, [in] int deleteReason); + + [oneway] void OnUpdated([in] sptr notificationMap); + [oneway] void OnDoNotDisturbDateChange([in] sptr date); + [oneway] void OnEnabledNotificationChanged([in] sptr callbackData); + [oneway] void OnBadgeChanged([in] sptr badgeData); + [oneway] void OnBadgeEnabledChanged([in] sptr callbackData); + [oneway] void OnApplicationInfoNeedChanged([in] String bundleName); int OnOperationResponse([in] sptr operationInfo); } diff --git a/frameworks/ans/src/notification_subscriber.cpp b/frameworks/ans/src/notification_subscriber.cpp index 6fd51f541073169d231da97c76eead14af904ec0..42135f27591effa84bfc3eeaaef3f33bab25d862 100644 --- a/frameworks/ans/src/notification_subscriber.cpp +++ b/frameworks/ans/src/notification_subscriber.cpp @@ -179,6 +179,11 @@ ErrCode NotificationSubscriber::SubscriberImpl::OnConsumedList(const std::vector return ERR_OK; } +ErrCode NotificationSubscriber::SubscriberImpl::OnConsumedList(const std::vector> ¬ifications) +{ + return OnConsumedList(notifications, nullptr); +} + ErrCode NotificationSubscriber::SubscriberImpl::OnCanceled( const sptr ¬ification, const sptr ¬ificationMap, int32_t deleteReason) { @@ -242,6 +247,12 @@ ErrCode NotificationSubscriber::SubscriberImpl::OnCanceledList(const std::vector return ERR_OK; } +ErrCode NotificationSubscriber::SubscriberImpl::OnCanceledList( + const std::vector> ¬ifications, int32_t deleteReason) +{ + return OnCanceledList(notifications, nullptr, deleteReason); +} + ErrCode NotificationSubscriber::SubscriberImpl::OnUpdated(const sptr ¬ificationMap) { subscriber_.OnUpdate(std::make_shared(*notificationMap)); diff --git a/frameworks/core/include/ans_subscriber_listener.h b/frameworks/core/include/ans_subscriber_listener.h index 2ae48915576dc5c1e84a781126eb378fb455f3bd..61d47924077503d18b434c28bfbb5810302c32d3 100644 --- a/frameworks/core/include/ans_subscriber_listener.h +++ b/frameworks/core/include/ans_subscriber_listener.h @@ -47,6 +47,8 @@ public: ErrCode OnConsumedList(const std::vector> ¬ifications, const sptr ¬ificationMap) override; + ErrCode OnConsumedList(const std::vector> ¬ifications) override; + ErrCode OnCanceled(const sptr ¬ification, const sptr ¬ificationMap, int32_t deleteReason) override; @@ -60,6 +62,8 @@ public: ErrCode OnCanceledList(const std::vector> ¬ifications, const sptr ¬ificationMap, int32_t deleteReason) override; + ErrCode OnCanceledList(const std::vector> ¬ifications, int32_t deleteReason) override; + void OnBatchCanceled(const std::vector> ¬ifications, const sptr ¬ificationMap, int32_t deleteReason); diff --git a/frameworks/core/src/listener/ans_subscriber_listener.cpp b/frameworks/core/src/listener/ans_subscriber_listener.cpp index 466683cf6e6f67ce629474f8b2bd0003a3691978..9e0de9732f0dfb1d8c7c0630d9e4d3f1ee234759 100644 --- a/frameworks/core/src/listener/ans_subscriber_listener.cpp +++ b/frameworks/core/src/listener/ans_subscriber_listener.cpp @@ -100,6 +100,11 @@ ErrCode SubscriberListener::OnConsumedList(const std::vector> return ERR_OK; } +ErrCode SubscriberListener::OnConsumedList(const std::vector> ¬ifications) +{ + return OnConsumedList(notifications, nullptr); +} + ErrCode SubscriberListener::OnCanceled( const sptr ¬ification, const sptr ¬ificationMap, int32_t deleteReason) { @@ -175,6 +180,12 @@ ErrCode SubscriberListener::OnCanceledList(const std::vector> return ERR_OK; } +ErrCode SubscriberListener::OnCanceledList( + const std::vector> ¬ifications, int32_t deleteReason) +{ + return OnCanceledList(notifications, nullptr, deleteReason); +} + ErrCode SubscriberListener::OnUpdated(const sptr ¬ificationMap) { auto subscriber = subscriber_.lock(); diff --git a/interfaces/inner_api/notification_subscriber.h b/interfaces/inner_api/notification_subscriber.h index 1f4b43ebb041a0d3250acf226973022d3a8503b8..4f56735386c8f1361a1344f725d13db42f4d4490 100644 --- a/interfaces/inner_api/notification_subscriber.h +++ b/interfaces/inner_api/notification_subscriber.h @@ -173,6 +173,8 @@ private: ErrCode OnConsumedList(const std::vector> ¬ifications, const sptr ¬ificationMap) override; + ErrCode OnConsumedList(const std::vector> ¬ifications) override; + ErrCode OnCanceled(const sptr ¬ification, const sptr ¬ificationMap, int32_t deleteReason) override; @@ -186,6 +188,8 @@ private: ErrCode OnCanceledList(const std::vector> ¬ifications, const sptr ¬ificationMap, int32_t deleteReason) override; + ErrCode OnCanceledList(const std::vector> ¬ifications, int32_t deleteReason) override; + void OnBatchCanceled(const std::vector> ¬ifications, const sptr ¬ificationMap, int32_t deleteReason); diff --git a/services/ans/src/notification_subscriber_manager.cpp b/services/ans/src/notification_subscriber_manager.cpp index 6f12aaa6a6b93256345824fb0243a306e040f1c6..dcfc0e932feb7893172a53184df5ea38d5a19b2f 100644 --- a/services/ans/src/notification_subscriber_manager.cpp +++ b/services/ans/src/notification_subscriber_manager.cpp @@ -486,6 +486,10 @@ ErrCode NotificationSubscriberManager::RemoveSubscriberInner( void NotificationSubscriberManager::NotifyConsumedInner( const sptr ¬ification, const sptr ¬ificationMap) { + if (notification == nullptr) { + ANS_LOGE("[OnConsumed] fail: notification is nullptr."); + return; + } HITRACE_METER_NAME(HITRACE_TAG_NOTIFICATION, __PRETTY_FUNCTION__); ANS_LOGD("%{public}s notification->GetUserId <%{public}d>", __FUNCTION__, notification->GetUserId()); @@ -583,7 +587,11 @@ void NotificationSubscriberManager::BatchNotifyConsumedInner(const std::vector", currNotifications.size()); if (record->subscriber != nullptr) { - record->subscriber->OnConsumedList(currNotifications, notificationMap); + if (notificationMap != nullptr) { + record->subscriber->OnConsumedList(currNotifications, notificationMap); + } else { + record->subscriber->OnConsumedList(currNotifications); + } } } } @@ -591,6 +599,10 @@ void NotificationSubscriberManager::BatchNotifyConsumedInner(const std::vector ¬ification, const sptr ¬ificationMap, int32_t deleteReason) { + if (notification == nullptr) { + ANS_LOGE("[OnCanceled] fail: notification is nullptr."); + return; + } HITRACE_METER_NAME(HITRACE_TAG_NOTIFICATION, __PRETTY_FUNCTION__); ANS_LOGD("%{public}s notification->GetUserId <%{public}d>", __FUNCTION__, notification->GetUserId()); std::shared_ptr liveViewContent = nullptr; @@ -715,7 +727,11 @@ void NotificationSubscriberManager::BatchNotifyCanceledInner(const std::vector", currNotifications.size()); if (record->subscriber != nullptr) { - record->subscriber->OnCanceledList(currNotifications, notificationMap, deleteReason); + if (notificationMap != nullptr) { + record->subscriber->OnCanceledList(currNotifications, notificationMap, deleteReason); + } else { + record->subscriber->OnCanceledList(currNotifications, deleteReason); + } } } } @@ -723,6 +739,10 @@ void NotificationSubscriberManager::BatchNotifyCanceledInner(const std::vector ¬ificationMap) { + if (notificationMap == nullptr) { + ANS_LOGE("[OnUpdated] fail: notificationMap is nullptr."); + return; + } for (auto record : subscriberRecordList_) { record->subscriber->OnUpdated(notificationMap); } @@ -731,6 +751,10 @@ void NotificationSubscriberManager::NotifyUpdatedInner(const sptr &date) { + if (date == nullptr) { + ANS_LOGE("[OnDoNotDisturbDateChange] fail: date is nullptr."); + return; + } for (auto record : subscriberRecordList_) { if (record->userId == SUBSCRIBE_USER_ALL || IsSystemUser(record->userId) || IsSystemUser(userId) || record->userId == userId) { @@ -742,6 +766,10 @@ void NotificationSubscriberManager::NotifyDoNotDisturbDateChangedInner(const int void NotificationSubscriberManager::NotifyBadgeEnabledChangedInner( const sptr &callbackData) { + if (callbackData == nullptr) { + ANS_LOGE("[OnBadgeEnabledChanged] fail: callbackData is nullptr."); + return; + } int32_t userId = SUBSCRIBE_USER_INIT; OsAccountManagerHelper::GetInstance().GetOsAccountLocalIdFromUid(callbackData->GetUid(), userId); for (auto record : subscriberRecordList_) { @@ -760,6 +788,10 @@ bool NotificationSubscriberManager::IsSystemUser(int32_t userId) void NotificationSubscriberManager::NotifyEnabledNotificationChangedInner( const sptr &callbackData) { + if (callbackData == nullptr) { + ANS_LOGE("[OnEnabledNotificationChanged] fail: callbackData is nullptr."); + return; + } int32_t userId = SUBSCRIBE_USER_INIT; OsAccountManagerHelper::GetInstance().GetOsAccountLocalIdFromUid(callbackData->GetUid(), userId); for (auto record : subscriberRecordList_) { @@ -772,8 +804,8 @@ void NotificationSubscriberManager::NotifyEnabledNotificationChangedInner( void NotificationSubscriberManager::SetBadgeNumber(const sptr &badgeData) { - if (notificationSubQueue_ == nullptr) { - ANS_LOGE("queue is nullptr"); + if (notificationSubQueue_ == nullptr || badgeData == nullptr) { + ANS_LOGE("queue or badgeData is nullptr"); return; } std::function setBadgeNumberFunc = [this, badgeData] () { diff --git a/services/ans/test/unittest/mock/include/mock_ans_subscriber.h b/services/ans/test/unittest/mock/include/mock_ans_subscriber.h index f87247f4716b93a9881bdbe4307c0c98e7e7a101..aedd39afb5c69f6eb92043019cdc5c450ced4734 100644 --- a/services/ans/test/unittest/mock/include/mock_ans_subscriber.h +++ b/services/ans/test/unittest/mock/include/mock_ans_subscriber.h @@ -49,6 +49,8 @@ public: MOCK_METHOD(ErrCode, OnConsumedList, (const std::vector> ¬ifications, const sptr ¬ificationMap)); + MOCK_METHOD(ErrCode, OnConsumedList, (const std::vector> ¬ifications)); + ErrCode OnCanceled(const sptr ¬ification, const sptr ¬ificationMap, int32_t deleteReason) override { return ERR_OK; }; @@ -64,6 +66,9 @@ public: ErrCode OnCanceledList(const std::vector> ¬ifications, const sptr ¬ificationMap, int32_t deleteReason) override { return ERR_OK; }; + ErrCode OnCanceledList( + const std::vector> ¬ifications, int32_t deleteReason) override { return ERR_OK; }; + ErrCode OnUpdated(const sptr ¬ificationMap) override { return ERR_OK; }; ErrCode OnDoNotDisturbDateChange(const sptr &date) override { return ERR_OK; };