diff --git a/services/ans/include/advanced_notification_service.h b/services/ans/include/advanced_notification_service.h index 65e31518cf495107b55708ed9f787c754da81a67..1d1cb183508f2e5a34ee69c4a60bca80c2b4f2cb 100644 --- a/services/ans/include/advanced_notification_service.h +++ b/services/ans/include/advanced_notification_service.h @@ -1696,6 +1696,7 @@ private: void CancelWantAgent(const sptr ¬ification); void CancelOnceWantAgent(const std::shared_ptr &wantAgent); void PublishSubscriberExistFlagEvent(bool headsetExistFlag, bool wearableExistFlag); + void UpdateDistributedDeviceList(const std::string &deviceType, int32_t userId); void SetClassificationWithVoip(const sptr &request); void UpdateCollaborateTimerInfo(const std::shared_ptr &record); #ifdef ENABLE_ANS_PRIVILEGED_MESSAGE_EXT_WRAPPER diff --git a/services/ans/src/distributed_manager/advanced_notification_distributed_manager_service.cpp b/services/ans/src/distributed_manager/advanced_notification_distributed_manager_service.cpp index 812f4c147b4827956da40bbe68de52bab1b1ca7f..b01a71ee955f689caf4838eeaf26b2d9bbfc3864 100644 --- a/services/ans/src/distributed_manager/advanced_notification_distributed_manager_service.cpp +++ b/services/ans/src/distributed_manager/advanced_notification_distributed_manager_service.cpp @@ -23,6 +23,8 @@ #include "ans_const_define.h" #include "ans_inner_errors.h" #include "ans_log_wrapper.h" +#include "common_event_manager.h" +#include "common_event_publish_info.h" #include "errors.h" #include "ipc_skeleton.h" @@ -47,6 +49,9 @@ namespace OHOS { namespace Notification { using namespace OHOS::AccountSA; +const static std::string NOTIFICATION_EVENT_DISTRIBUTED_DEVICE_TYPES_CHANGE = + "notification.event.DISTRIBUTED_DEVICE_TYPES_CHANGE"; + ErrCode AdvancedNotificationService::IsDistributedEnabled(bool &enabled) { ANS_LOGD("%{public}s", __FUNCTION__); @@ -732,6 +737,33 @@ ErrCode AdvancedNotificationService::GetDistributedAuthStatus( return NotificationPreferences::GetInstance()->GetDistributedAuthStatus(deviceType, deviceId, userId, isAuth); } +void AdvancedNotificationService::UpdateDistributedDeviceList(const std::string &deviceType, int32_t userId) +{ + std::vector deviceTypes; + auto result = NotificationPreferences::GetInstance()->GetDistributedDevicelist(deviceTypes); + if (result != ERR_OK) { + ANS_LOGE("Get distributed device list failed"); + return; + } + auto it = std::find(deviceTypes.begin(), deviceTypes.end(), deviceType); + if (it == deviceTypes.end()) { + deviceTypes.push_back(deviceType); + result = NotificationPreferences::GetInstance()->SetDistributedDevicelist(deviceTypes, userId); + if (result != ERR_OK) { + ANS_LOGE("Set distributed device list failed"); + return; + } + EventFwk::Want want; + want.SetAction(NOTIFICATION_EVENT_DISTRIBUTED_DEVICE_TYPES_CHANGE); + EventFwk::CommonEventData commonData{ want }; + EventFwk::CommonEventPublishInfo publishInfo; + publishInfo.SetSubscriberType(EventFwk::SubscriberType::SYSTEM_SUBSCRIBER_TYPE); + if (!EventFwk::CommonEventManager::PublishCommonEventAsUser(commonData, publishInfo, userId)) { + ANS_LOGE("Publish common event failed"); + } + } +} + ErrCode AdvancedNotificationService::SetDistributedAuthStatus( const std::string &deviceType, const std::string &deviceId, int32_t userId, bool isAuth) { @@ -746,14 +778,7 @@ ErrCode AdvancedNotificationService::SetDistributedAuthStatus( auto result = NotificationPreferences::GetInstance()->SetDistributedAuthStatus(deviceType, deviceId, userId, isAuth); if (result == ERR_OK && isAuth) { - std::vector deviceTypes; - if (NotificationPreferences::GetInstance()->GetDistributedDevicelist(deviceTypes) == ERR_OK) { - auto it = std::find(deviceTypes.begin(), deviceTypes.end(), deviceType); - if (it == deviceTypes.end()) { - deviceTypes.push_back(deviceType); - NotificationPreferences::GetInstance()->SetDistributedDevicelist(deviceTypes, userId); - } - } + UpdateDistributedDeviceList(deviceType, userId); } return result; }