From efdc34a3d63584f0f034e8c4161886981f32826e Mon Sep 17 00:00:00 2001 From: z30053788 Date: Fri, 11 Jul 2025 11:36:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=BA=E5=88=B6=E6=89=93=E5=BC=80ccm?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E7=9A=84=E9=80=9A=E7=9F=A5=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: z30053788 Change-Id: Iee8ec22bc14fea53190754123b3e46271ef52aaf --- services/ans/include/notification_app_privileges.h | 2 ++ services/ans/include/notification_config_parse.h | 1 + .../ans/src/common/notification_app_privileges.cpp | 11 +++++++++++ services/ans/src/common/notification_config_parse.cpp | 9 +++++++++ services/ans/src/permission_filter.cpp | 6 +++--- .../notification_config_parse_mock.cpp | 5 +++++ 6 files changed, 31 insertions(+), 3 deletions(-) diff --git a/services/ans/include/notification_app_privileges.h b/services/ans/include/notification_app_privileges.h index 3135c7c4f..e22e9401b 100644 --- a/services/ans/include/notification_app_privileges.h +++ b/services/ans/include/notification_app_privileges.h @@ -30,8 +30,10 @@ public: bool IsBannerEnabled() const; bool IsReminderEnabled() const; bool IsDistributedReplyEnabled() const; + bool IsNotificationForcedEnable() const; private: + static constexpr int32_t NOTIFICATION_FORCED_ENABLE = 5; static constexpr int32_t DISTRIBUTED_REPLY_SEQ = 4; static constexpr int32_t REMINDER_ENABLED_SEQ = 2; static constexpr int32_t BANNER_ENABLED_SEQ = 1; diff --git a/services/ans/include/notification_config_parse.h b/services/ans/include/notification_config_parse.h index cb3923f82..b5229c1fb 100644 --- a/services/ans/include/notification_config_parse.h +++ b/services/ans/include/notification_config_parse.h @@ -52,6 +52,7 @@ public: bool IsBannerEnabled(const std::string bundleName) const; bool IsReminderEnabled(const std::string& bundleName) const; bool IsDistributedReplyEnabled(const std::string& bundleName) const; + bool IsNotificationForcedEnable(const std::string& bundleName) const; void GetFlowCtrlConfigFromCCM(FlowControlThreshold &threshold); bool GetSmartReminderEnableList(std::vector& deviceTypes); bool GetMirrorNotificationEnabledStatus(std::vector& deviceTypes); diff --git a/services/ans/src/common/notification_app_privileges.cpp b/services/ans/src/common/notification_app_privileges.cpp index 11bb6fb44..f61994d68 100644 --- a/services/ans/src/common/notification_app_privileges.cpp +++ b/services/ans/src/common/notification_app_privileges.cpp @@ -31,6 +31,9 @@ NotificationAppPrivileges::NotificationAppPrivileges(const std::string &flagStr) if (flagStr.size() > DISTRIBUTED_REPLY_SEQ && flagStr[DISTRIBUTED_REPLY_SEQ] == '1') { privileges_ |= 1 << DISTRIBUTED_REPLY_SEQ; } + if (flagStr.size() >= NOTIFICATION_FORCED_ENABLE && flagStr[NOTIFICATION_FORCED_ENABLE] == '1') { + privileges_ |= 1 << NOTIFICATION_FORCED_ENABLE; + } } bool NotificationAppPrivileges::IsLiveViewEnabled() const { @@ -60,5 +63,13 @@ bool NotificationAppPrivileges::IsDistributedReplyEnabled() const } return false; } + +bool NotificationAppPrivileges::IsNotificationForcedEnable() const +{ + if ((privileges_ & (1 << NOTIFICATION_FORCED_ENABLE)) != 0) { + return true; + } + return false; +} } // namespace Notification } // namespace OHOS diff --git a/services/ans/src/common/notification_config_parse.cpp b/services/ans/src/common/notification_config_parse.cpp index df49e3fe3..971829f63 100644 --- a/services/ans/src/common/notification_config_parse.cpp +++ b/services/ans/src/common/notification_config_parse.cpp @@ -207,6 +207,15 @@ bool NotificationConfigParse::IsBannerEnabled(const std::string bundleName) cons #endif } +bool NotificationConfigParse::IsNotificationForcedEnable(const std::string& bundleName) const +{ + std::shared_ptr appPrivileges = GetAppPrivileges(bundleName); + if (appPrivileges == nullptr) { + return false; + } + return appPrivileges->IsNotificationForcedEnable(); +} + void NotificationConfigParse::GetFlowCtrlConfigFromCCM(FlowControlThreshold &threshold) { nlohmann::json root; diff --git a/services/ans/src/permission_filter.cpp b/services/ans/src/permission_filter.cpp index b082a9b9d..e49836e9d 100644 --- a/services/ans/src/permission_filter.cpp +++ b/services/ans/src/permission_filter.cpp @@ -20,12 +20,11 @@ #include "bundle_manager_helper.h" #include "notification_preferences.h" #include "notification_analytics_util.h" +#include "notification_config_parse.h" namespace OHOS { namespace Notification { -constexpr const char *PRIVACYCENTER_BUNDLE_NAME = "com.huawei.hmos.security.privacycenter"; - void PermissionFilter::OnStart() {} @@ -74,7 +73,8 @@ ErrCode PermissionFilter::OnPublish(const std::shared_ptr &r } if (result == ERR_OK) { - if (record->bundleOption->GetBundleName().compare(PRIVACYCENTER_BUNDLE_NAME) == 0 && !enable) { + if (!enable && DelayedSingleton::GetInstance()-> + IsNotificationForcedEnable(record->bundleOption->GetBundleName())) { AdvancedNotificationService::GetInstance()-> SetNotificationsEnabledForSpecialBundle("", record->bundleOption, true); return result; diff --git a/services/ans/test/unittest/notification_extension/notification_config_parse_mock.cpp b/services/ans/test/unittest/notification_extension/notification_config_parse_mock.cpp index 1d0e6cd38..b34baaacb 100644 --- a/services/ans/test/unittest/notification_extension/notification_config_parse_mock.cpp +++ b/services/ans/test/unittest/notification_extension/notification_config_parse_mock.cpp @@ -129,6 +129,11 @@ bool NotificationConfigParse::IsBannerEnabled(const std::string bundleName) cons return false; } +bool NotificationConfigParse::IsNotificationForcedEnable(const std::string& bundleName) const +{ + return false; +} + void NotificationConfigParse::GetFlowCtrlConfigFromCCM(FlowControlThreshold &threshold) { } -- Gitee