diff --git a/services/ans/include/notification_extension_wrapper.h b/services/ans/include/notification_extension_wrapper.h index 2c7ab2ce4b949420d97aada8f19a317633e439e3..b1cb951a543e23169fa94693899a5cb8020ac410 100644 --- a/services/ans/include/notification_extension_wrapper.h +++ b/services/ans/include/notification_extension_wrapper.h @@ -70,8 +70,7 @@ public: int32_t BannerControl(const std::string &bundleName); int32_t VerifyCloudCapability(const int32_t &uid, const std::string &capability); bool NotificationDialogControl(); - bool IsSubscribeControl(const std::string &bundleName, const int32_t &uid, - NotificationConstant::SlotType slotType); + bool IsSubscribeControl(const std::string &bundleName, NotificationConstant::SlotType slotType); #ifdef ENABLE_ANS_PRIVILEGED_MESSAGE_EXT_WRAPPER bool IsPrivilegeMessage(const sptr &request); diff --git a/services/ans/src/notification_extension_wrapper.cpp b/services/ans/src/notification_extension_wrapper.cpp index a50854a7e929a7384e0e880c6b9445b4eaf2dfa0..38f33adb4c3a56cfe9c490f8f1d3cc4592614780 100644 --- a/services/ans/src/notification_extension_wrapper.cpp +++ b/services/ans/src/notification_extension_wrapper.cpp @@ -244,8 +244,7 @@ int32_t ExtensionWrapper::BannerControl(const std::string &bundleName) return bannerControl_(bundleName); } -bool ExtensionWrapper::IsSubscribeControl(const std::string &bundleName, const int32_t &uid, - NotificationConstant::SlotType slotType) +bool ExtensionWrapper::IsSubscribeControl(const std::string &bundleName, NotificationConstant::SlotType slotType) { if (subscribeControl_ == nullptr) { ANS_LOGE("SubscribeControl wrapper symbol failed"); diff --git a/services/ans/src/notification_subscriber_manager.cpp b/services/ans/src/notification_subscriber_manager.cpp index d0bc59ace4ad591803b9beb76378b8479e464269..c1055f5ed558d0239d7198ff7c8766c778fcfa78 100644 --- a/services/ans/src/notification_subscriber_manager.cpp +++ b/services/ans/src/notification_subscriber_manager.cpp @@ -666,7 +666,8 @@ bool NotificationSubscriberManager::IsSubscribedBysubscriber( auto soltType = notification->GetNotificationRequestPoint()->GetSlotType(); auto bundleNames = notification->GetBundleName(); #ifdef ENABLE_ANS_ADDITIONAL_CONTROL - if (EXTENTION_WRAPPER->IsSubscribeControl(record->subscriberBundleName_, record->subscriberUid, soltType)) { + if (!record->isSubscribeSelf && + EXTENTION_WRAPPER->IsSubscribeControl(record->subscriberBundleName_, soltType)) { ANS_LOGD("%{public}s cannot receive %{public}d notification", record->subscriberBundleName_.c_str(), soltType); return false; } diff --git a/services/ans/test/unittest/notification_extension_wrapper_test.cpp b/services/ans/test/unittest/notification_extension_wrapper_test.cpp index 76c39ce59b07638029258279a15416285530809e..1517355abbaf9de9dc7af45bb096c83cd3297062 100644 --- a/services/ans/test/unittest/notification_extension_wrapper_test.cpp +++ b/services/ans/test/unittest/notification_extension_wrapper_test.cpp @@ -371,7 +371,7 @@ HWTEST_F(NotificationExtensionWrapperTest, SubscribeControl_NullSubscribeControl wrapper.subscribeControl_ = nullptr; // Act - bool result = wrapper.IsSubscribeControl(bundleName, 1, NotificationConstant::SlotType::LIVE_VIEW); + bool result = wrapper.IsSubscribeControl(bundleName, NotificationConstant::SlotType::LIVE_VIEW); // Assert EXPECT_FALSE(result); @@ -388,7 +388,7 @@ HWTEST_F(NotificationExtensionWrapperTest, SubscribeControl_ValidSubscribeContro wrapper.subscribeControl_ = mockSubscribeControl; // Act - bool result = wrapper.IsSubscribeControl(bundleName, 2, NotificationConstant::SlotType::LIVE_VIEW); + bool result = wrapper.IsSubscribeControl(bundleName, NotificationConstant::SlotType::LIVE_VIEW); // Assert EXPECT_TRUE(result); diff --git a/services/ans/test/unittest/notification_subscriber_manager_test.cpp b/services/ans/test/unittest/notification_subscriber_manager_test.cpp index ec26d2effff453a79416898294e5eddf533fef9a..0bf050d597e5cdfcf632d82463a007274503c769 100644 --- a/services/ans/test/unittest/notification_subscriber_manager_test.cpp +++ b/services/ans/test/unittest/notification_subscriber_manager_test.cpp @@ -1114,7 +1114,7 @@ HWTEST_F(NotificationSubscriberManagerTest, IsDeviceTypeAffordConsume_001, Funct } #endif #ifdef ENABLE_ANS_ADDITIONAL_CONTROL -HWTEST_F(NotificationSubscriberManagerTest, IsSubscribedBysubscriber_004, Function | SmallTest | Level1) +HWTEST_F(NotificationSubscriberManagerTest, IsSubscribedBysubscriber_subscribeControlIsTrue, Level1) { EXTENTION_WRAPPER->subscribeControl_ = nullptr; @@ -1129,6 +1129,7 @@ HWTEST_F(NotificationSubscriberManagerTest, IsSubscribedBysubscriber_004, Functi NotificationSubscriberManager notificationSubscriberManager; std::shared_ptr record = notificationSubscriberManager.CreateSubscriberRecord(subscriber); + record->isSubscribeSelf = false; sptr subscribeInfo(new NotificationSubscribeInfo()); subscribeInfo->SetSubscriberUid(101); @@ -1138,7 +1139,7 @@ HWTEST_F(NotificationSubscriberManagerTest, IsSubscribedBysubscriber_004, Functi ASSERT_TRUE(res); } -HWTEST_F(NotificationSubscriberManagerTest, IsSubscribedBysubscriber_005, Function | SmallTest | Level1) +HWTEST_F(NotificationSubscriberManagerTest, IsSubscribedBysubscriber_subscribeControlIsFalse, Level1) { EXTENTION_WRAPPER->subscribeControl_ = [](const std::string &bundleName, NotificationConstant::SlotType slotType) { if (bundleName == "subscriberManagerTestBundleName") { @@ -1159,6 +1160,7 @@ HWTEST_F(NotificationSubscriberManagerTest, IsSubscribedBysubscriber_005, Functi std::shared_ptr record = notificationSubscriberManager.CreateSubscriberRecord(subscriber); record->subscriberBundleName_ = "subscriberManagerTestBundleName"; + record->isSubscribeSelf = false; sptr subscribeInfo(new NotificationSubscribeInfo()); subscribeInfo->SetSubscriberUid(101); @@ -1167,6 +1169,37 @@ HWTEST_F(NotificationSubscriberManagerTest, IsSubscribedBysubscriber_005, Functi auto res = notificationSubscriberManager.IsSubscribedBysubscriber(record, notification); ASSERT_FALSE(res); } + +HWTEST_F(NotificationSubscriberManagerTest, IsSubscribedBysubscriber_subscribeSalfAndSubscriberControlIsTrue, Level1) +{ + EXTENTION_WRAPPER->subscribeControl_ = [](const std::string &bundleName, NotificationConstant::SlotType slotType) { + if (bundleName == "subscriberManagerTestBundleName") { + return true; + } + return false; + }; + + sptr request(new NotificationRequest()); + request->SetSlotType(NotificationConstant::SlotType::SOCIAL_COMMUNICATION); + request->SetCreatorUserId(101); + request->SetCreatorUid(101); + sptr notification(new Notification(request)); + + std::shared_ptr testAnsSubscriber = std::make_shared(); + sptr subscriber(new (std::nothrow) SubscriberListener(testAnsSubscriber)); + NotificationSubscriberManager notificationSubscriberManager; + std::shared_ptr record = + notificationSubscriberManager.CreateSubscriberRecord(subscriber); + record->subscriberBundleName_ = "subscriberManagerTestBundleName"; + record->isSubscribeSelf = true; + + sptr subscribeInfo(new NotificationSubscribeInfo()); + subscribeInfo->SetSubscriberUid(101); + subscribeInfo->AddAppUserId(101); + notificationSubscriberManager.AddRecordInfo(record, subscribeInfo); + auto res = notificationSubscriberManager.IsSubscribedBysubscriber(record, notification); + ASSERT_TRUE(res); +} #endif // DEBUG } // namespace Notification } // namespace OHOS