From 6c16fa4f301e2cca964ee3ba216cf2bb36c0875e Mon Sep 17 00:00:00 2001 From: "zhangyafei.echo" Date: Thu, 3 Aug 2023 13:15:09 +0000 Subject: [PATCH] Description:Fix crash of notification_preferences_test Sig:SIG_ApplicationFramework Feature or BugFix: Feature Binary Source: No Signed-off-by: zhangyafei.echo Change-Id: I3f1a4c4e90a5d01b990bf9b3ce3cad51c30c682d --- .../include/advanced_notification_service.h | 4 ++ .../ans/src/advanced_notification_service.cpp | 49 +++++++++++-------- .../notification_preferences_test.cpp | 11 +++-- 3 files changed, 41 insertions(+), 23 deletions(-) diff --git a/services/ans/include/advanced_notification_service.h b/services/ans/include/advanced_notification_service.h index 22311a6fa..682d87619 100644 --- a/services/ans/include/advanced_notification_service.h +++ b/services/ans/include/advanced_notification_service.h @@ -33,7 +33,9 @@ #include "notification.h" #include "notification_bundle_option.h" #include "notification_record.h" +#include "notification_slot_filter.h" #include "notification_sorting_map.h" +#include "permission_filter.h" #include "push_callback_interface.h" #include "system_event_observer.h" @@ -854,6 +856,8 @@ private: NotificationConstant::DistributedReminderPolicy distributedReminderPolicy_ = DEFAULT_DISTRIBUTED_REMINDER_POLICY; bool localScreenOn_ = true; #endif + std::shared_ptr permissonFilter_ = nullptr; + std::shared_ptr notificationSlotFilter_ = nullptr; }; /** diff --git a/services/ans/src/advanced_notification_service.cpp b/services/ans/src/advanced_notification_service.cpp index 7a2b52079..69f2f7b7d 100644 --- a/services/ans/src/advanced_notification_service.cpp +++ b/services/ans/src/advanced_notification_service.cpp @@ -116,11 +116,6 @@ std::mutex AdvancedNotificationService::instanceMutex_; std::mutex AdvancedNotificationService::pushMutex_; sptr AdvancedNotificationService::pushCallBack_; -static const std::shared_ptr NOTIFICATION_FILTERS[] = { - std::make_shared(), - std::make_shared(), -}; - inline std::string GetClientBundleName() { std::string bundle; @@ -322,6 +317,8 @@ AdvancedNotificationService::AdvancedNotificationService() }; DistributedNotificationManager::GetInstance()->RegisterCallback(distributedCallback); #endif + permissonFilter_ = std::make_shared(); + notificationSlotFilter_ = std::make_shared(); } AdvancedNotificationService::~AdvancedNotificationService() @@ -630,16 +627,24 @@ bool AdvancedNotificationService::IsNotificationExists(const std::string &key) ErrCode AdvancedNotificationService::Filter(const std::shared_ptr &record) { - ErrCode result = ERR_OK; + if (permissonFilter_ == nullptr || notificationSlotFilter_ == nullptr) { + ANS_LOGE("Filter is invalid."); + return ERR_ANS_INVALID_PARAM; + } - for (auto filter : NOTIFICATION_FILTERS) { - result = filter->OnPublish(record); - if (result != ERR_OK) { - break; - } + auto result = permissonFilter_->OnPublish(record); + if (result != ERR_OK) { + ANS_LOGE("Permission filter on publish failed with %{public}d.", result); + return result; } - return result; + result = notificationSlotFilter_->OnPublish(record); + if (result != ERR_OK) { + ANS_LOGE("Notification slot filter on publish failed with %{public}d.", result); + return result; + } + + return ERR_OK; } void AdvancedNotificationService::AddToNotificationList(const std::shared_ptr &record) @@ -692,19 +697,23 @@ sptr AdvancedNotificationService::GenerateSortingMap() void AdvancedNotificationService::StartFilters() { - for (auto filter : NOTIFICATION_FILTERS) { - if (filter != nullptr) { - filter->OnStart(); - } + if (permissonFilter_ != nullptr) { + permissonFilter_->OnStart(); + } + + if (notificationSlotFilter_ != nullptr) { + notificationSlotFilter_->OnStart(); } } void AdvancedNotificationService::StopFilters() { - for (auto filter : NOTIFICATION_FILTERS) { - if (filter != nullptr) { - filter->OnStop(); - } + if (permissonFilter_ != nullptr) { + permissonFilter_->OnStop(); + } + + if (notificationSlotFilter_ != nullptr) { + notificationSlotFilter_->OnStop(); } } diff --git a/services/ans/test/unittest/notification_preferences_test.cpp b/services/ans/test/unittest/notification_preferences_test.cpp index a85425dc0..5bb976445 100644 --- a/services/ans/test/unittest/notification_preferences_test.cpp +++ b/services/ans/test/unittest/notification_preferences_test.cpp @@ -30,7 +30,13 @@ namespace Notification { class NotificationPreferencesTest : public testing::Test { public: static void SetUpTestCase() {}; - static void TearDownTestCase() {}; + static void TearDownTestCase() + { + if (advancedNotificationService_ != nullptr) { + advancedNotificationService_->SelfClean(); + } + } + void SetUp() {}; void TearDown(); @@ -235,7 +241,6 @@ HWTEST_F(NotificationPreferencesTest, RemoveNotificationForBundle_00100, Functio { TestAddNotificationSlot(); EXPECT_EQ((int)NotificationPreferences::GetInstance().RemoveNotificationForBundle(bundleOption_), (int)ERR_OK); - advancedNotificationService_->OnBundleRemoved(bundleOption_); } /** @@ -869,7 +874,7 @@ HWTEST_F(NotificationPreferencesTest, GetNotificationsEnabled_00200, Function | HWTEST_F(NotificationPreferencesTest, GetNotificationsEnabled_00300, Function | SmallTest | Level1) { bool enable = false; - EXPECT_EQ((int)NotificationPreferences::GetInstance().GetNotificationsEnabled(TEST_SUBSCRIBE_USER_INIT, enable), + EXPECT_EQ((int)NotificationPreferences::GetInstance().GetNotificationsEnabled(TEST_SUBSCRIBE_USER_INIT, enable), (int)ERR_ANS_INVALID_PARAM); } -- Gitee