diff --git a/frameworks/ans/src/notification_subscriber.cpp b/frameworks/ans/src/notification_subscriber.cpp index 67559b7e6eb6fcbf2be0a8f93ffdcaf462e581c6..b235bb7fc8f247945f77c5b60805f1184b7f0026 100644 --- a/frameworks/ans/src/notification_subscriber.cpp +++ b/frameworks/ans/src/notification_subscriber.cpp @@ -104,6 +104,19 @@ NotificationConstant::FlagStatus NotificationSubscriber::DowngradeReminder( } #endif +void NotificationSubscriber::ProcessRemoveExtendInfo(std::shared_ptr ¬ification) const +{ + sptr request = notification->GetNotificationRequestPoint(); + std::shared_ptr extendInfo = request->GetExtendInfo(); + if (extendInfo != nullptr) { + std::set keySet = extendInfo->KeySet(); + for (std::string key : keySet) { + extendInfo->Remove(key); + } + } + return; +} + const sptr NotificationSubscriber::GetImpl() const { return impl_; @@ -148,6 +161,7 @@ ErrCode NotificationSubscriber::SubscriberImpl::OnConsumed( return ERR_OK; } #endif + subscriber_.ProcessRemoveExtendInfo(sharedNotification); subscriber_.OnConsumed( sharedNotification, std::make_shared(*notificationMap)); return ERR_OK; diff --git a/frameworks/core/src/listener/ans_subscriber_listener.cpp b/frameworks/core/src/listener/ans_subscriber_listener.cpp index 9e0de9732f0dfb1d8c7c0630d9e4d3f1ee234759..5b38c4a6905c31bdb3fbc3e4a18b4bbe31bce8fb 100644 --- a/frameworks/core/src/listener/ans_subscriber_listener.cpp +++ b/frameworks/core/src/listener/ans_subscriber_listener.cpp @@ -68,7 +68,8 @@ ErrCode SubscriberListener::OnConsumed( return ERR_INVALID_OPERATION; } #endif - + + subscriber->ProcessRemoveExtendInfo(sharedNotification); subscriber->OnConsumed( sharedNotification, std::make_shared(*notificationMap)); return ERR_OK; diff --git a/frameworks/js/napi/src/common_convert_request.cpp b/frameworks/js/napi/src/common_convert_request.cpp index 0ad27f935df18dcae469232bb75ce3e2d2a79bb8..75905fe085ab5b171d7643fe628fbcfb97df822f 100644 --- a/frameworks/js/napi/src/common_convert_request.cpp +++ b/frameworks/js/napi/src/common_convert_request.cpp @@ -320,6 +320,14 @@ napi_value Common::SetNotificationRequestByCustom( napi_set_named_property(env, result, "extraInfo", extraInfo); } + // extendInfo?: {[key:string] : any} + std::shared_ptr extendInfoData = request->GetExtendInfo(); + if (extendInfoData) { + napi_value extendInfo = nullptr; + extendInfo = OHOS::AppExecFwk::WrapWantParams(env, *extendInfoData); + napi_set_named_property(env, result, "extendInfo", extendInfo); + } + // actionButtons?: Array napi_value arr = nullptr; uint32_t count = 0; diff --git a/interfaces/inner_api/notification_subscriber.h b/interfaces/inner_api/notification_subscriber.h index d5b63b61c5975674785cc51a71e11a803b6f263a..f0d14a6c4d55868edce5e7c4bce0adf9f5d4d00f 100644 --- a/interfaces/inner_api/notification_subscriber.h +++ b/interfaces/inner_api/notification_subscriber.h @@ -137,6 +137,8 @@ public: bool ProcessSyncDecision(const std::string &deviceType, std::shared_ptr ¬ification) const; #endif +void ProcessRemoveExtendInfo(std::shared_ptr ¬ification) const; + private: class SubscriberImpl final : public AnsSubscriberStub { public: diff --git a/services/ans/include/bundle_manager_helper.h b/services/ans/include/bundle_manager_helper.h index e96a34e7f2cfa5db2bf616bc92eb63fb1ad777dc..5bc8a5a9fbe8446158010167369492618cf54010 100644 --- a/services/ans/include/bundle_manager_helper.h +++ b/services/ans/include/bundle_manager_helper.h @@ -164,6 +164,16 @@ public: ErrCode GetApplicationInfo(const std::string &bundleName, int32_t flags, int32_t userId, AppExecFwk::ApplicationInfo &appInfo); + /** + * @brief GetBundleResourceInfo. + * @param bundleName bundle name. + * @param bundleResourceInfo bundle resource. + * @param appIndex app index. + * @return Returns the query result. if succeed, retrun 0. + */ + ErrCode GetBundleResourceInfo(const std::string &bundleName, + AppExecFwk::BundleResourceInfo &bundleResourceInfo, const int32_t appIndex); + private: void Connect(); void Disconnect(); diff --git a/services/ans/src/bundle_manager_helper.cpp b/services/ans/src/bundle_manager_helper.cpp index 0ad74dde2c66ea754f66749cd7f4a5579a9e012e..406f26e9e97dbfee42e0dc12eb70cb70aee643d5 100644 --- a/services/ans/src/bundle_manager_helper.cpp +++ b/services/ans/src/bundle_manager_helper.cpp @@ -315,5 +315,28 @@ bool BundleManagerHelper::CheckSystemApp(const std::string& bundleName, int32_t ANS_LOGI("Get installed bundle %{public}s %{public}d.", bundleName.c_str(), appInfo.isSystemApp); return appInfo.isSystemApp; } + +ErrCode BundleManagerHelper::GetBundleResourceInfo(const std::string &bundleName, + AppExecFwk::BundleResourceInfo &bundleResourceInfo, const int32_t appIndex) +{ + ErrCode result = 0; + std::lock_guard lock(connectionMutex_); + Connect(); + if (bundleMgr_ == nullptr) { + ANS_LOGE("GetBundleInfo bundle proxy failed."); + return -1; + } + sptr bundleResourceProxy = bundleMgr_->GetBundleResourceProxy(); + if (!bundleResourceProxy) { + ANS_LOGE("GetBundleInfo, get bundle resource proxy failed."); + return -1; + } + + std::string identity = IPCSkeleton::ResetCallingIdentity(); + int32_t flag = static_cast(AppExecFwk::ResourceFlag::GET_RESOURCE_INFO_ALL); + result = bundleResourceProxy->GetBundleResourceInfo(bundleName, flag, bundleResourceInfo, appIndex); + IPCSkeleton::SetCallingIdentity(identity); + return result; +} } // namespace Notification } // namespace OHOS 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 27d18cf2344966b9399488207c6931cb327f851b..ac8aa9a08ad5a98fb26f4696a022a24bcb59c273 100644 --- a/services/ans/src/notification_smart_reminder/smart_reminder_center.cpp +++ b/services/ans/src/notification_smart_reminder/smart_reminder_center.cpp @@ -301,10 +301,6 @@ void SmartReminderCenter::InitValidDevices( pair>(NotificationConstant::CURRENT_DEVICE_TYPE, status)); for (std::string deviceType : NotificationConstant::DEVICESTYPES) { - GetDeviceStatusByType(deviceType, status); - statusMap.insert(pair>(deviceType, status)); - request->AdddeviceStatu(deviceType, status.bitset::to_string()); - bool affordConsume = false; NotificationSubscriberManager::GetInstance()->IsDeviceTypeAffordConsume(deviceType, request, affordConsume); if (!affordConsume) { @@ -317,6 +313,10 @@ void SmartReminderCenter::InitValidDevices( continue; } + GetDeviceStatusByType(deviceType, status); + statusMap.insert(pair>(deviceType, status)); + request->AdddeviceStatu(deviceType, status.bitset::to_string()); + if (NotificationConstant::SlotType::LIVE_VIEW == request->GetSlotType()) { bool isEnable = false; std::string queryDeviceType = deviceType; @@ -442,20 +442,38 @@ void SmartReminderCenter::FillRequestExtendInfo(const string &deviceType, Device int32_t flags = static_cast(AppExecFwk::GetApplicationFlag::GET_APPLICATION_INFO_DEFAULT); AppExecFwk::ApplicationInfo appInfo; if (bundleManager->GetApplicationInfo(bundleName, flags, userId, appInfo) != ERR_OK) { - ANS_LOGI("FillRequestExtendInfo, get GetApplicationInfo error, type = %{public}s, bundleName = %{public}s", + ANS_LOGE("FillRequestExtendInfo, GetApplicationInfo error, type = %{public}s, bundleName = %{public}s", + deviceType.c_str(), bundleName.c_str()); + return; + } + + AppExecFwk::BundleResourceInfo bundleResourceInfo; + if (bundleManager->GetBundleResourceInfo(bundleName, bundleResourceInfo, appInfo.appIndex) != ERR_OK) { + ANS_LOGE("FillRequestExtendInfo, GetBundleResourceInfo error, type = %{public}s, bundleName = %{public}s", deviceType.c_str(), bundleName.c_str()); return; } std::shared_ptr extendInfo = request->GetExtendInfo(); + if (extendInfo == nullptr) { + extendInfo = std::make_shared(); + request->SetExtendInfo(extendInfo); + } extendInfo->SetParam(EXTEND_INFO_PRE + "_" + EXTEND_INFO_APP_NAME, AAFwk::String::Box(appInfo.name)); - extendInfo->SetParam(EXTEND_INFO_PRE + "_" + EXTEND_INFO_APP_LABEL, AAFwk::String::Box(appInfo.label)); - extendInfo->SetParam(EXTEND_INFO_PRE + "_" + EXTEND_INFO_APP_ICON, AAFwk::String::Box(appInfo.icon)); - extendInfo->SetParam(EXTEND_INFO_PRE + "_" + EXTEND_INFO_APP_INDEX, AAFwk::Integer::Box(appInfo.appIndex)); + extendInfo->SetParam(EXTEND_INFO_PRE + "_" + EXTEND_INFO_APP_LABEL, + AAFwk::String::Box(bundleResourceInfo.label)); + extendInfo->SetParam(EXTEND_INFO_PRE + "_" + EXTEND_INFO_APP_ICON, + AAFwk::String::Box(bundleResourceInfo.icon)); + extendInfo->SetParam(EXTEND_INFO_PRE + "_" + EXTEND_INFO_APP_INDEX, + AAFwk::Integer::Box(appInfo.appIndex)); extendInfo->SetParam(EXTEND_INFO_PRE + "_" + EXTEND_INFO_DEVICE_ID + "_" + deviceType, AAFwk::String::Box(deviceStatus.deviceId)); extendInfo->SetParam(EXTEND_INFO_PRE + "_" + EXTEND_INFO_USER_ID + "_" + deviceType, AAFwk::Integer::Box(deviceStatus.userId)); + ANS_LOGI("FillRequestExtendInfo result: %{public}s %{public}s %{public}s %{public}d %{public}s %{public}d", + appInfo.name.c_str(), bundleResourceInfo.label.c_str(), + bundleResourceInfo.icon.c_str(), appInfo.appIndex, + deviceStatus.deviceId.c_str(), deviceStatus.userId); return; } ANS_LOGE("get bundleManager fail");