diff --git a/frameworks/ans/src/notification_subscriber.cpp b/frameworks/ans/src/notification_subscriber.cpp index d29c33b9c3eb6ac0d7b260ae2a45ca3716e0111f..6e6462c867260a7701f6948cd19f90107b7ce336 100644 --- a/frameworks/ans/src/notification_subscriber.cpp +++ b/frameworks/ans/src/notification_subscriber.cpp @@ -42,6 +42,24 @@ std::string NotificationSubscriber::GetDeviceType() const return deviceType_; } +bool NotificationSubscriber::SyncLiveViewVoip( + const std::string &deviceType, std::shared_ptr ¬ification) const +{ + sptr request = notification->GetNotificationRequestPoint(); + if (request == nullptr) { + ANS_LOGE("No need to consume cause invalid reqeuest."); + return false; + } + if (request->GetClassification() == NotificationConstant::ANS_VOIP && + request->GetSlotType() == NotificationConstant::LIVE_VIEW && + (deviceType == CURRENT_DEVICE_TYPE || deviceType == NotificationConstant::LITEWEARABLE_DEVICE_TYPE || + deviceType == NotificationConstant::HEADSET_DEVICE_TYPE || deviceType == + NotificationConstant::WEARABLE_DEVICE_TYPE)) { + return true; + } + return false; +} + #ifdef NOTIFICATION_SMART_REMINDER_SUPPORTED bool NotificationSubscriber::ProcessSyncDecision( const std::string &deviceType, std::shared_ptr ¬ification) const @@ -137,8 +155,12 @@ ErrCode NotificationSubscriber::SubscriberImpl::OnConsumed( { NOTIFICATION_HITRACE(HITRACE_TAG_NOTIFICATION); std::shared_ptr sharedNotification = std::make_shared(*notification); + auto deviceType = subscriber_.GetDeviceType(); + if (subscriber_.SyncLiveViewVoip(deviceType, sharedNotification)) { + ANS_LOGI("Sync LIVE_VIEW VOIP."); + } #ifdef NOTIFICATION_SMART_REMINDER_SUPPORTED - if (!subscriber_.ProcessSyncDecision(subscriber_.GetDeviceType(), sharedNotification)) { + else if (!subscriber_.ProcessSyncDecision(deviceType, sharedNotification)) { return ERR_OK; } #endif diff --git a/frameworks/core/src/listener/ans_subscriber_listener.cpp b/frameworks/core/src/listener/ans_subscriber_listener.cpp index f295de68395720fc6c1d1ebe03a5e5f6b3de8dc3..bf3b15dd6300573902925bb9f4208e1f41095fda 100644 --- a/frameworks/core/src/listener/ans_subscriber_listener.cpp +++ b/frameworks/core/src/listener/ans_subscriber_listener.cpp @@ -67,8 +67,12 @@ ErrCode SubscriberListener::OnConsumed( return ERR_INVALID_DATA; } std::shared_ptr sharedNotification = std::make_shared(*notification); + auto deviceType = subscriber->GetDeviceType(); + if (subscriber->SyncLiveViewVoip(deviceType, sharedNotification)) { + ANS_LOGI("Sync LIVE_VIEW VOIP."); + } #ifdef NOTIFICATION_SMART_REMINDER_SUPPORTED - if (!subscriber->ProcessSyncDecision(subscriber->GetDeviceType(), sharedNotification)) { + else if (!subscriber->ProcessSyncDecision(deviceType, sharedNotification)) { return ERR_INVALID_OPERATION; } #endif diff --git a/interfaces/inner_api/notification_constant.h b/interfaces/inner_api/notification_constant.h index b2e43d63ef036c6b2cef2a4086281827056ab722..361bbc7ed98cbe4a0c6e410f2ee8be48ed09bc39 100644 --- a/interfaces/inner_api/notification_constant.h +++ b/interfaces/inner_api/notification_constant.h @@ -423,6 +423,7 @@ public: constexpr static const char* PAD_DEVICE_TYPE = "pad"; constexpr static const char* PC_DEVICE_TYPE = "pc"; constexpr static const char* DEVICESTYPES[] = {"headset", "liteWearable", "wearable", "pc", "pad"}; + constexpr static const char* ANS_VOIP = "ANS_VOIP"; }; } // namespace Notification } // namespace OHOS diff --git a/interfaces/inner_api/notification_subscriber.h b/interfaces/inner_api/notification_subscriber.h index d5b63b61c5975674785cc51a71e11a803b6f263a..b37a13d316ca137c9751b2c30a95a61452c4fca3 100644 --- a/interfaces/inner_api/notification_subscriber.h +++ b/interfaces/inner_api/notification_subscriber.h @@ -133,6 +133,7 @@ public: std::string GetDeviceType() const; + bool SyncLiveViewVoip(const std::string &deviceType, std::shared_ptr ¬ification) const; #ifdef NOTIFICATION_SMART_REMINDER_SUPPORTED bool ProcessSyncDecision(const std::string &deviceType, std::shared_ptr ¬ification) const; #endif diff --git a/services/ans/src/advanced_notification_service.cpp b/services/ans/src/advanced_notification_service.cpp index 51b81e95c2f06c71d7700a95043de67af153cab9..def3aaa26d949eb5e652f3a115a040022e1081db 100644 --- a/services/ans/src/advanced_notification_service.cpp +++ b/services/ans/src/advanced_notification_service.cpp @@ -103,7 +103,6 @@ constexpr int32_t FIRST_USERID = 0; const std::string DO_NOT_DISTURB_MODE = "1"; const std::string INTELLIGENT_EXPERIENCE = "1"; -const std::string ANS_VOIP = "ANS_VOIP"; const std::string ANS_VERIFICATION_CODE = "ANS_VERIFICATION_CODE"; constexpr const char *KEY_UNIFIED_GROUP_ENABLE = "unified_group_enable"; } // namespace @@ -2083,7 +2082,7 @@ ErrCode AdvancedNotificationService::DisableNotificationFeature(const sptr &request) { - if (!request->GetClassification().empty() && request->GetClassification() != ANS_VOIP) { + if (!request->GetClassification().empty() && request->GetClassification() != NotificationConstant::ANS_VOIP) { return; } if (!AccessTokenHelper::CheckPermission(OHOS_PERMISSION_NOTIFICATION_AGENT_CONTROLLER)) { @@ -2097,7 +2096,7 @@ void AdvancedNotificationService::SetClassificationWithVoip(const sptr( requestContent->GetNotificationContent()); if (localLiveViewContent->GetType() == TYPE_CODE_VOIP) { - request->SetClassification(ANS_VOIP); + request->SetClassification(NotificationConstant::ANS_VOIP); } } } diff --git a/services/ans/src/advanced_notification_slot_service.cpp b/services/ans/src/advanced_notification_slot_service.cpp index c4500044851e062c3b4bae867722dfb7d8c53da3..7e4ad9b4954f645a5c803c97c85a8c95952f2f5d 100644 --- a/services/ans/src/advanced_notification_slot_service.cpp +++ b/services/ans/src/advanced_notification_slot_service.cpp @@ -676,6 +676,10 @@ void AdvancedNotificationService::SetRequestBySlotType(const sptrGetKey().c_str(), flags->GetReminderFlags()); + if (request->GetClassification() == NotificationConstant::ANS_VOIP && + request->GetSlotType() == NotificationConstant::LIVE_VIEW) { + return; + } #ifdef NOTIFICATION_SMART_REMINDER_SUPPORTED DelayedSingleton::GetInstance()->ReminderDecisionProcess(request); #endif diff --git a/services/ans/src/notification_smart_reminder/smart_reminder_center.cpp b/services/ans/src/notification_smart_reminder/smart_reminder_center.cpp index 0ef62a08c51b555e6338fde75b16f5a02aa39be8..e42225fa20e0e66fc4dadcf2628068bd9487d486 100644 --- a/services/ans/src/notification_smart_reminder/smart_reminder_center.cpp +++ b/services/ans/src/notification_smart_reminder/smart_reminder_center.cpp @@ -37,9 +37,7 @@ namespace OHOS { namespace Notification { using namespace std; constexpr int32_t CONTROL_BY_SMART_REMINDER = 1 << 15; -namespace { - const std::string ANS_VOIP = "ANS_VOIP"; -} + SmartReminderCenter::SmartReminderCenter() { DelayedSingleton::GetInstance()->GetCollaborationFilter(); @@ -288,6 +286,7 @@ void SmartReminderCenter::ReminderDecisionProcess(const sptr> statusMap; InitValidDevices(syncDevices, smartDevices, statusMap, request); if (syncDevices.size() <= 1) { + request->SetDeviceFlags(notificationFlagsOfDevices); return; } @@ -504,7 +503,7 @@ void SmartReminderCenter::HandleReminderMethods( { std::string classfication = request->GetClassification(); if (deviceType.compare(NotificationConstant::CURRENT_DEVICE_TYPE) == 0 && - classfication == ANS_VOIP) { + classfication == NotificationConstant::ANS_VOIP) { ANS_LOGI("VOIP or CALL is not affected with SmartReminder"); return; }