diff --git a/frameworks/ans/core/common/include/ans_const_define.h b/frameworks/ans/core/common/include/ans_const_define.h index 7d474f2d5d82f55ed38cc486456fc5f647905c37..56287bf2ecc01348c518adbd2c19de07e772a6dd 100644 --- a/frameworks/ans/core/common/include/ans_const_define.h +++ b/frameworks/ans/core/common/include/ans_const_define.h @@ -45,7 +45,7 @@ const static Uri DEFAULT_NOTIFICATION_SOUND("file://system/etc/Light.ogg"); const static std::vector DEFAULT_NOTIFICATION_VIBRATION = {200}; // Default path for template -const static std::string DEFAULT_TEMPLATE_PATH("/system/etc/external.json"); +const static std::string DEFAULT_TEMPLATE_PATH("/system/etc/NotificationTemplate/external.json"); #ifdef DISTRIBUTED_NOTIFICATION_SUPPORTED constexpr NotificationConstant::DistributedReminderPolicy DEFAULT_DISTRIBUTED_REMINDER_POLICY = diff --git a/frameworks/ans/native/src/notification_template.cpp b/frameworks/ans/native/src/notification_template.cpp index 6bc3b1ed56af11c18edb8a4dab03959f0113bc1d..894bd0e34403a863a78466ab6ffedaa42d085dc4 100644 --- a/frameworks/ans/native/src/notification_template.cpp +++ b/frameworks/ans/native/src/notification_template.cpp @@ -57,6 +57,13 @@ bool NotificationTemplate::Marshalling(Parcel &parcel) const return false; } + if (valid) { + if (!parcel.WriteParcelable(templateData_.get())) { + ANS_LOGE("Failed to write templateData"); + return false; + } + } + return true; } diff --git a/interfaces/kits/napi/ans/src/ans_template.cpp b/interfaces/kits/napi/ans/src/ans_template.cpp index 1efa212505c3f0296f50e3258adfedf40848dcfe..8c33a73f75dda73d4f59f4474657d91cdff55736 100644 --- a/interfaces/kits/napi/ans/src/ans_template.cpp +++ b/interfaces/kits/napi/ans/src/ans_template.cpp @@ -41,7 +41,7 @@ napi_value ParseParameters(const napi_env &env, const napi_callback_info &info, napi_value argv[IS_TEMPLATE_MAX_PARA] = {nullptr}; napi_value thisVar = nullptr; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL)); - NAPI_ASSERT(env, argc < IS_TEMPLATE_MAX_PARA, "Wrong number of arguments"); + NAPI_ASSERT(env, argc <= IS_TEMPLATE_MAX_PARA, "Wrong number of arguments"); napi_valuetype valuetype = napi_undefined; // argv[0]: name: string @@ -89,7 +89,7 @@ napi_value IsSupportTemplate(napi_env env, napi_callback_info info) ANS_LOGI("IsSupportTemplate napi_create_async_work start"); AsyncCallbackInfoTemplate *asyncCallbackinfo = (AsyncCallbackInfoTemplate *)data; - asyncCallbackinfo->info.errorCode = NotificationHelper::CancelNotification( + asyncCallbackinfo->info.errorCode = NotificationHelper::IsSupportTemplate( asyncCallbackinfo->params.templateName, asyncCallbackinfo->params.support); }, [](napi_env env, napi_status status, void *data) { @@ -105,7 +105,7 @@ napi_value IsSupportTemplate(napi_env env, napi_callback_info info) } napi_delete_async_work(env, asyncCallbackinfo->asyncWork); - if (asyncCallbackinfo) { + if (asyncCallbackinfo != nullptr) { delete asyncCallbackinfo; asyncCallbackinfo = nullptr; } diff --git a/interfaces/kits/napi/ans/src/common.cpp b/interfaces/kits/napi/ans/src/common.cpp index 65cad546c8a90049b03e1bbabc665ff22f7f1dc6..2097b51d3ebeb6bc36fa9c5dca059ba1179810c9 100644 --- a/interfaces/kits/napi/ans/src/common.cpp +++ b/interfaces/kits/napi/ans/src/common.cpp @@ -4000,7 +4000,7 @@ napi_value Common::GetNotificationTemplate(const napi_env &env, const napi_value ANS_LOGE("template is null"); return nullptr; } - if (GetNotificationTemplateInfo(env, value, templ) == nullptr) { + if (GetNotificationTemplateInfo(env, result, templ) == nullptr) { return nullptr; } diff --git a/services/ans/BUILD.gn b/services/ans/BUILD.gn index 7694c78b15a20a262c7db9c4ee594773c9e1107c..a3de29582f7648ac5752ca8f704e2fbcc42c145e 100644 --- a/services/ans/BUILD.gn +++ b/services/ans/BUILD.gn @@ -65,6 +65,7 @@ ohos_shared_library("libans") { "${frameworks_path}/wantagent:wantagent_innerkits", "//base/account/os_account/frameworks/osaccount/native:os_account_innerkits", "//base/miscservices/time/services:time_service", + "//foundation/aafwk/standard/frameworks/kits/ability/native:abilitykit_native", "//foundation/aafwk/standard/services/abilitymgr:abilityms", "//foundation/distributedschedule/dmsfwk/services/dtbschedmgr:distributedschedsvr", "//utils/native/base:utils", diff --git a/services/ans/include/advanced_notification_service.h b/services/ans/include/advanced_notification_service.h index bab0e6840eadcc0a5add7c6f81db80aa759d3127..b96688ec255813c64f0f24004d6e703bc203367e 100644 --- a/services/ans/include/advanced_notification_service.h +++ b/services/ans/include/advanced_notification_service.h @@ -173,6 +173,7 @@ private: bool CheckPermission(const std::string &bundleName); ErrCode PrepereContinuousTaskNotificationRequest(const sptr &request, const int &uid); bool GetActiveUserId(int& userId); + void TriggerRemoveWantAgent(const sptr &request); ErrCode SetNotificationRemindType(sptr notification, bool isLocal); #ifdef DISTRIBUTED_NOTIFICATION_SUPPORTED diff --git a/services/ans/src/advanced_notification_service.cpp b/services/ans/src/advanced_notification_service.cpp index f4bc69ca99e2b31ac2276ea0a5840166040cc964..9c5bc5a09354c2c011829e418e764fceea5d8961 100644 --- a/services/ans/src/advanced_notification_service.cpp +++ b/services/ans/src/advanced_notification_service.cpp @@ -19,6 +19,7 @@ #include #include +#include "ability_context.h" #include "ans_const_define.h" #include "ans_inner_errors.h" #include "ans_log_wrapper.h" @@ -33,6 +34,8 @@ #include "os_account_manager.h" #include "permission_filter.h" #include "reminder_data_manager.h" +#include "trigger_info.h" +#include "want_agent_helper.h" #ifdef DISTRIBUTED_NOTIFICATION_SUPPORTED #include "distributed_notification_manager.h" @@ -1111,6 +1114,10 @@ ErrCode AdvancedNotificationService::RemoveFromNotificationList(const sptrnotification; + // delete or delete all, call the function + if (!isCancel) { + TriggerRemoveWantAgent(record->request); + } notificationList_.remove(record); return ERR_OK; } @@ -1894,6 +1901,8 @@ ErrCode AdvancedNotificationService::RemoveNotification( handler_->PostSyncTask(std::bind([&]() { sptr notification = nullptr; + sptr notificationRequest = nullptr; + #ifdef DISTRIBUTED_NOTIFICATION_SUPPORTED std::string deviceId; #endif @@ -1912,6 +1921,7 @@ ErrCode AdvancedNotificationService::RemoveNotification( deviceId = record->deviceId; #endif notification = record->notification; + notificationRequest = record->request; notificationList_.remove(record); result = ERR_OK; break; @@ -1927,6 +1937,8 @@ ErrCode AdvancedNotificationService::RemoveNotification( DoDistributedDelete(deviceId, notification); #endif } + + TriggerRemoveWantAgent(notificationRequest); })); return result; @@ -1977,6 +1989,8 @@ ErrCode AdvancedNotificationService::RemoveAllNotifications(const sptrdeviceId, record->notification); #endif } + + TriggerRemoveWantAgent(record->request); } })); @@ -2749,6 +2763,7 @@ ErrCode AdvancedNotificationService::IsSupportTemplate(const std::string& templa })); return result; } + bool AdvancedNotificationService::GetActiveUserId(int& userId) { std::vector osAccountInfos; @@ -2762,5 +2777,18 @@ bool AdvancedNotificationService::GetActiveUserId(int& userId) } return false; } + +void AdvancedNotificationService::TriggerRemoveWantAgent(const sptr &request) +{ + ANS_LOGD("%{public}s", __FUNCTION__); + + if (request == nullptr || request->GetRemovalWantAgent() == nullptr) { + return; + } + OHOS::Notification::WantAgent::TriggerInfo triggerInfo; + std::shared_ptr context = std::make_shared(); + std::shared_ptr agent = request->GetRemovalWantAgent(); + WantAgent::WantAgentHelper::TriggerWantAgent(context, agent, nullptr, triggerInfo); +} } // namespace Notification } // namespace OHOS \ No newline at end of file diff --git a/services/ans/test/unittest/BUILD.gn b/services/ans/test/unittest/BUILD.gn index 86c2c6e2b5e4674ed735eaf1132d9ff99d560834..bf2a10e6b514c4fe41542ad90d39f09b0f54374a 100644 --- a/services/ans/test/unittest/BUILD.gn +++ b/services/ans/test/unittest/BUILD.gn @@ -81,6 +81,7 @@ ohos_unittest("ans_unit_test") { "${frameworks_path}/wantagent:wantagent_innerkits", "//base/account/os_account/frameworks/osaccount/native:os_account_innerkits", "//base/miscservices/time/services:time_service", + "//foundation/aafwk/standard/frameworks/kits/ability/native:abilitykit_native", "//foundation/distributeddatamgr/distributeddatamgr/interfaces/innerkits/distributeddata:distributeddata_inner", "//foundation/distributedschedule/dmsfwk/services/dtbschedmgr:distributedschedsvr", "//third_party/googletest:gtest_main", diff --git a/services/test/moduletest/BUILD.gn b/services/test/moduletest/BUILD.gn index c5587e171b2ce4f18e4a3a9716df9ef4f89489b8..405b7fb7c02f52ff7935ddf374a3860cc7e3a5ec 100644 --- a/services/test/moduletest/BUILD.gn +++ b/services/test/moduletest/BUILD.gn @@ -74,6 +74,7 @@ ohos_moduletest("ans_module_test") { "${frameworks_path}/wantagent:wantagent_innerkits", "//base/account/os_account/frameworks/osaccount/native:os_account_innerkits", "//base/miscservices/time/services:time_service", + "//foundation/aafwk/standard/frameworks/kits/ability/native:abilitykit_native", "//foundation/aafwk/standard/services/abilitymgr:abilityms", "//foundation/distributeddatamgr/distributeddatamgr/interfaces/innerkits/distributeddata:distributeddata_inner", "//foundation/distributedschedule/dmsfwk/services/dtbschedmgr:distributedschedsvr",