From 315c3433ee8d2cbd169884039e80b26001dfbace Mon Sep 17 00:00:00 2001 From: xdongs Date: Thu, 5 Jun 2025 22:12:15 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=94=AF=E6=8C=81pc/pad=E5=8D=8F=E5=90=8C?= =?UTF-8?q?=E9=80=9A=E9=81=93=E8=83=BD=E5=8A=9B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: xdongs --- .../ans/src/notification_subscriber.cpp | 14 +++++++ .../src/listener/ans_subscriber_listener.cpp | 3 +- .../js/napi/src/common_convert_request.cpp | 8 ++++ .../inner_api/notification_subscriber.h | 2 + services/ans/include/bundle_manager_helper.h | 10 +++++ services/ans/src/bundle_manager_helper.cpp | 23 ++++++++++++ .../smart_reminder_center.cpp | 37 +++++++++++++++---- 7 files changed, 88 insertions(+), 9 deletions(-) diff --git a/frameworks/ans/src/notification_subscriber.cpp b/frameworks/ans/src/notification_subscriber.cpp index 67559b7e6..b235bb7fc 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 9e0de9732..5b38c4a69 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 0ad27f935..75905fe08 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 d5b63b61c..f0d14a6c4 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 e96a34e7f..5bc8a5a9f 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 0ad74dde2..406f26e9e 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 63e52c7be..cf3f20776 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; @@ -391,6 +391,8 @@ void SmartReminderCenter::InitPcPadDevices(const string &deviceType, ANS_LOGI("PC/PAD init, not get any used device, type = %{public}s", deviceType.c_str()); return; } + ANS_LOGI("InitPcPadDevices deviceStatus type = %{public}s deviceId= %{public}s userId = %{public}d", + deviceStatus.deviceType.c_str(), deviceStatus.deviceId.c_str(), deviceStatus.userId); // switch string deviceId = deviceStatus.deviceId; if (NotificationConstant::SlotType::LIVE_VIEW == request->GetSlotType()) { @@ -442,20 +444,39 @@ 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 + "_" + deviceType + "_" + EXTEND_INFO_DEVICE_ID, AAFwk::String::Box(deviceStatus.deviceId)); + extendInfo->SetParam(EXTEND_INFO_PRE + "_" + deviceType + "_" + EXTEND_INFO_USER_ID, 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"); -- Gitee From 2a160688c9c73b5b28eede131419db7b8ad14b83 Mon Sep 17 00:00:00 2001 From: xdongs2009 Date: Thu, 5 Jun 2025 14:24:01 +0000 Subject: [PATCH 2/2] update services/ans/src/notification_smart_reminder/smart_reminder_center.cpp. Signed-off-by: xdongs2009 --- .../src/notification_smart_reminder/smart_reminder_center.cpp | 2 -- 1 file changed, 2 deletions(-) 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 cf3f20776..5e3f0316a 100644 --- a/services/ans/src/notification_smart_reminder/smart_reminder_center.cpp +++ b/services/ans/src/notification_smart_reminder/smart_reminder_center.cpp @@ -391,8 +391,6 @@ void SmartReminderCenter::InitPcPadDevices(const string &deviceType, ANS_LOGI("PC/PAD init, not get any used device, type = %{public}s", deviceType.c_str()); return; } - ANS_LOGI("InitPcPadDevices deviceStatus type = %{public}s deviceId= %{public}s userId = %{public}d", - deviceStatus.deviceType.c_str(), deviceStatus.deviceId.c_str(), deviceStatus.userId); // switch string deviceId = deviceStatus.deviceId; if (NotificationConstant::SlotType::LIVE_VIEW == request->GetSlotType()) { -- Gitee