1 /*
2 * Copyright (c) 2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include "ani_manager.h"
16
17 #include "ans_log_wrapper.h"
18 #include "ani_display_badge.h"
19 #include "ani_slot.h"
20 #include "ani_cance.h"
21 #include "ani_notification_enable.h"
22 #include "ani_do_not_disturb_date.h"
23 #include "ani_do_not_disturb_profile.h"
24 #include "ani_get_active.h"
25 #include "ani_publish.h"
26 #include "ani_local_live_view.h"
27 #include "ani_request_enable.h"
28 #include "ani_on.h"
29 #include "ani_support_template.h"
30 #include "ani_distributed_enable.h"
31 #include "ani_remove_group.h"
32 #include "ani_open_settings.h"
33 #include "ani_sync_config.h"
34
35 namespace OHOS {
36 namespace NotificationManagerSts {
37 static std::array kitManagerFunctions = {
38 ani_native_function {"nativeCancelAll", nullptr, reinterpret_cast<void *>(AniCancelAll)},
39 ani_native_function {"nativeCancelWithIdOptionalLabel", nullptr,
40 reinterpret_cast<void *>(AniCancelWithIdOptinalLabel)},
41 ani_native_function {"nativeCancelWithId", nullptr, reinterpret_cast<void *>(AniCancelWithId)},
42 ani_native_function {"nativeCancelWithIdLabel", nullptr, reinterpret_cast<void *>(AniCancelWithIdLabel)},
43 ani_native_function {"nativeCancelWithBundle", nullptr, reinterpret_cast<void *>(AniCancelWithBundle)},
44 ani_native_function {"nativeDisplayBadge", nullptr, reinterpret_cast<void *>(AniDisplayBadge)},
45 ani_native_function {"nativeIsBadgeDisplayed", nullptr, reinterpret_cast<void *>(AniIsBadgeDisplayed)},
46 ani_native_function {"nativeGetActiveNotificationCount", ":D",
47 reinterpret_cast<void *>(AniGetActiveNotificationCount)},
48 ani_native_function {"nativeGetActiveNotifications", nullptr,
49 reinterpret_cast<void *>(AniGetActiveNotifications)},
50 ani_native_function {"nativeGetAllActiveNotifications", nullptr,
51 reinterpret_cast<void *>(AniGetAllActiveNotifications)},
52 ani_native_function {"nativeAddDoNotDisturbProfile", nullptr,
53 reinterpret_cast<void *>(AniAddDoNotDisturbProfile)},
54 ani_native_function {"nativeRemoveDoNotDisturbProfile", nullptr,
55 reinterpret_cast<void *>(AniRemoveDoNotDisturbProfile)},
56 ani_native_function {"nativeSubscribeSystemLiveView", nullptr,
57 reinterpret_cast<void *>(AniSubscribeSystemLiveView)},
58 ani_native_function {"nativeTriggerSystemLiveView", nullptr,
59 reinterpret_cast<void *>(AniTriggerSystemLiveView)},
60 ani_native_function {"nativePublishWithUserId", nullptr, reinterpret_cast<void *>(AniPublishWithId)},
61 ani_native_function {"nativePublish", nullptr, reinterpret_cast<void *>(AniPublish)},
62 ani_native_function {"nativeGetSlotFlagsByBundle", nullptr, reinterpret_cast<void *>(AniGetSlotFlagsByBundle)},
63 ani_native_function {"nativeSetSlotFlagsByBundle", nullptr, reinterpret_cast<void *>(AniSetSlotFlagsByBundle)},
64 ani_native_function {"nativeGetSlotsByBundle", nullptr, reinterpret_cast<void *>(AniGetSlotsByBundle)},
65 ani_native_function {"nativeIsNotificationSlotEnabled", nullptr,
66 reinterpret_cast<void *>(AniIsNotificationSlotEnabled)},
67 ani_native_function {"nativeSetNotificationEnableSlot", nullptr,
68 reinterpret_cast<void *>(AniSetNotificationEnableSlot)},
69 ani_native_function {"nativeSetNotificationEnableSlotWithForce", nullptr,
70 reinterpret_cast<void *>(AniSetNotificationEnableSlotWithForce)},
71 ani_native_function {"nativeIsNotificationEnabled", nullptr,
72 reinterpret_cast<void *>(AniIsNotificationEnabled)},
73 ani_native_function {"nativeIsNotificationEnabledWithId", nullptr,
74 reinterpret_cast<void *>(AniIsNotificationEnabledWithId)},
75 ani_native_function {"nativeIsNotificationEnabledWithBundleOption", nullptr,
76 reinterpret_cast<void *>(AniIsNotificationEnabledWithBundleOption)},
77 ani_native_function {"nativeSetNotificationEnable",
78 nullptr, reinterpret_cast<void *>(AniSetNotificationEnable)},
79 ani_native_function {"nativeRequestEnableNotification",
80 "Lapplication/UIAbilityContext/UIAbilityContext;:Lstd/core/Promise;",
81 reinterpret_cast<void *>(AniRequestEnableNotification)},
82 ani_native_function {"nativePublishAsBundle", nullptr, reinterpret_cast<void *>(AniPublishAsBundle)},
83 ani_native_function {"nativePublishAsBundleWithBundleOption", nullptr,
84 reinterpret_cast<void *>(AniPublishAsBundleWithBundleOption)},
85 ani_native_function {"nativeCancelAsBundle", nullptr, reinterpret_cast<void *>(AniCancelAsBundle)},
86 ani_native_function {"nativeCancelAsBundleWithBundleOption", nullptr,
87 reinterpret_cast<void *>(AniCancelAsBundleWithBundleOption)},
88 ani_native_function {"nativeCancelGroup", nullptr, reinterpret_cast<void *>(AniCancelGroup)},
89 ani_native_function {"nativeSetDoNotDisturbDate", nullptr, reinterpret_cast<void *>(AniSetDoNotDisturbDate)},
90 ani_native_function {"nativeSetDoNotDisturbDateWithId", nullptr,
91 reinterpret_cast<void *>(AniSetDoNotDisturbDateWithId)},
92 ani_native_function {"nativeGetDoNotDisturbDate", nullptr, reinterpret_cast<void *>(AniGetDoNotDisturbDate)},
93 ani_native_function {"nativeGetDoNotDisturbDateWithId", nullptr,
94 reinterpret_cast<void *>(AniGetDoNotDisturbDateWithId)},
95 ani_native_function {"nativeIsSupportDoNotDisturbMode", nullptr,
96 reinterpret_cast<void *>(AniIsSupportDoNotDisturbMode)},
97 ani_native_function {"nativeGetDoNotDisturbProfile", nullptr, reinterpret_cast<void *>(AniGetDoNotDisturbProfile)},
98 ani_native_function {"nativeOn",
99 "Lstd/core/String;"
100 "Lstd/core/Function1;"
101 "Lnotification/notificationRequest/NotificationCheckRequest;"
102 ":I",
103 reinterpret_cast<void *>(AniOn)},
104 ani_native_function {"nativeOff", "Lstd/core/String;Lstd/core/Function1;:I", reinterpret_cast<void *>(AniOff)},
105 ani_native_function {"nativeGetAllNotificationEnabledBundles", nullptr,
106 reinterpret_cast<void *>(AniGetAllNotificationEnabledBundles)},
107 ani_native_function {"nativeIsNotificationEnabledSync", nullptr,
108 reinterpret_cast<void *>(AniIsNotificationEnabledSync)},
109 ani_native_function {"nativeSetBadgeNumber", "D:V",
110 reinterpret_cast<void *>(AniSetBadgeNumber)},
111 ani_native_function {"nativeSetBadgeNumberByBundle", nullptr,
112 reinterpret_cast<void *>(AniSetBadgeNumberByBundle)},
113 ani_native_function {"nativeGetActiveNotificationByFilter", nullptr,
114 reinterpret_cast<void *>(AniGetActiveNotificationByFilter)},
115 ani_native_function {"nativeRemoveGroupByBundle", nullptr,
116 reinterpret_cast<void *>(AniRemoveGroupByBundle)},
117 ani_native_function {"nativeAddSlotByNotificationSlot", nullptr,
118 reinterpret_cast<void *>(AniAddSlotByNotificationSlot)},
119 ani_native_function {"nativeAddSlotBySlotType", nullptr,
120 reinterpret_cast<void *>(AniAddSlotBySlotType)},
121 ani_native_function {"nativeAddSlots", nullptr,
122 reinterpret_cast<void *>(AniAddSlots)},
123 ani_native_function {"nativeGetSlot", nullptr,
124 reinterpret_cast<void *>(AniGetSlot)},
125 ani_native_function {"nativeGetSlotByBundle", nullptr,
126 reinterpret_cast<void *>(AniGetSlotByBundle)},
127 ani_native_function {"nativeGetSlots", nullptr,
128 reinterpret_cast<void *>(AniGetSlots)},
129 ani_native_function {"nativeRemoveSlot", nullptr,
130 reinterpret_cast<void *>(AniRemoveSlot)},
131 ani_native_function {"nativeRemoveAllSlots", nullptr,
132 reinterpret_cast<void *>(AniRemoveAllSlots)},
133 ani_native_function {"nativeSetSlotByBundle", nullptr,
134 reinterpret_cast<void *>(AniSetSlotByBundle)},
135 ani_native_function {"nativeGetSlotNumByBundle", nullptr,
136 reinterpret_cast<void *>(AniGetSlotNumByBundle)},
137 ani_native_function {"nativeOpenNotificationSettings",
138 "Lapplication/UIAbilityContext/UIAbilityContext;:Lstd/core/Promise;",
139 reinterpret_cast<void *>(AniOpenNotificationSettings)},
140 ani_native_function {"nativesetTargetDeviceStatus", nullptr,
141 reinterpret_cast<void *>(AniSetTargetDeviceStatus)},
142 ani_native_function {"nativesetDistributedEnabledByBundle", nullptr,
143 reinterpret_cast<void *>(AniSetDistributedEnableByBundleAndType)},
144 ani_native_function {"nativesetSmartReminderEnabled", nullptr,
145 reinterpret_cast<void *>(AniSetSmartReminderEnable)},
146 ani_native_function {"nativeisSmartReminderEnabled", nullptr,
147 reinterpret_cast<void *>(AniIsSmartReminderEnabled)},
148 ani_native_function {"nativesetDistributedEnabledBySlot", nullptr,
149 reinterpret_cast<void *>(AniSetDistributedEnableBySlot)},
150 ani_native_function {"nativeisDistributedEnabledBySlot", nullptr,
151 reinterpret_cast<void *>(AniIsDistributedEnabledBySlot)},
152 ani_native_function {"nativesetAdditionalConfig", nullptr,
153 reinterpret_cast<void *>(AniSetAdditionalConfig)},
154 ani_native_function {"nativesetDistributedEnableByBundle", nullptr,
155 reinterpret_cast<void *>(AniSetDistributedEnableByBundle)},
156 ani_native_function {"nativedisableNotificationFeature", nullptr,
157 reinterpret_cast<void *>(AniDisableNotificationFeature)},
158 ani_native_function {"nativeIsSupportTemplate", nullptr, reinterpret_cast<void *>(AniIsSupportTemplate)},
159 ani_native_function {"nativeSetDistributedEnable", nullptr, reinterpret_cast<void *>(AniSetDistributedEnable)},
160 ani_native_function {"nativeIsDistributedEnabled", nullptr, reinterpret_cast<void *>(AniIsDistributedEnabled)},
161 ani_native_function {"nativeIsDistributedEnabledByBundle", nullptr,
162 reinterpret_cast<void *>(AniIsDistributedEnabledByBundle)},
163 ani_native_function {"nativeIsDistributedEnabledByBundleType", nullptr,
164 reinterpret_cast<void *>(AniIsDistributedEnabledByBundleType)},
165 ani_native_function {"nativeGetDeviceRemindType", nullptr, reinterpret_cast<void *>(AniGetDeviceRemindType)},
166 ani_native_function {"nativeGetSyncNotificationEnabledWithoutApp", nullptr,
167 reinterpret_cast<void *>(AniGetSyncNotificationEnabledWithoutApp)},
168 ani_native_function {"nativeSetSyncNotificationEnabledWithoutApp", nullptr,
169 reinterpret_cast<void *>(AniSetSyncNotificationEnabledWithoutApp)},
170 };
171
AniNotificationManagerRegistryInit(ani_env * env)172 void AniNotificationManagerRegistryInit(ani_env *env)
173 {
174 ANS_LOGD("StsNotificationManagerRegistryInit call");
175 ani_status status = ANI_ERROR;
176 if (env->ResetError() != ANI_OK) {
177 ANS_LOGD("ResetError failed");
178 }
179 ani_namespace ns;
180 status = env->FindNamespace("L@ohos/notificationManager/notificationManager;", &ns);
181 if (status != ANI_OK) {
182 ANS_LOGE("FindNamespace notificationManager failed status : %{public}d", status);
183 return;
184 }
185 status = env->Namespace_BindNativeFunctions(ns, kitManagerFunctions.data(), kitManagerFunctions.size());
186 if (status != ANI_OK) {
187 ANS_LOGD("Namespace_BindNativeFunctions failed status : %{public}d", status);
188 }
189 if (env->ResetError() != ANI_OK) {
190 ANS_LOGD("ResetError failed");
191 }
192 ANS_LOGD("StsNotificationManagerRegistryInit end");
193 }
194 } // namespace NotificationManagerSts
195 } // namespace OHOS
196
197 extern "C" {
ANI_Constructor(ani_vm * vm,uint32_t * result)198 ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result)
199 {
200 ANS_LOGD("ANI_Constructor");
201 ani_env *env = nullptr;
202 ani_status status = ANI_ERROR;
203 status = vm->GetEnv(ANI_VERSION_1, &env);
204 if (status != ANI_OK) {
205 ANS_LOGE("GetEnv failed status : %{public}d", status);
206 return ANI_NOT_FOUND;
207 }
208
209 OHOS::NotificationManagerSts::AniNotificationManagerRegistryInit(env);
210 *result = ANI_VERSION_1;
211 ANS_LOGD("ANI_Constructor finish");
212 return ANI_OK;
213 }
214 }