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
16 #ifndef BASE_NOTIFICATION_DISTRIBUTED_NOTIFICATION_SERVICE_FRAMEWORKS_ETS_ANI_INCLUDE_STS_CONTENT_H
17 #define BASE_NOTIFICATION_DISTRIBUTED_NOTIFICATION_SERVICE_FRAMEWORKS_ETS_ANI_INCLUDE_STS_CONTENT_H
18 #include "ani.h"
19 #include <string>
20 #include <vector>
21 #include "ans_inner_errors.h"
22 #include "ans_log_wrapper.h"
23 #include "ets_error_utils.h"
24
25 namespace OHOS {
26 namespace NotificationSts {
27 using namespace OHOS::Notification;
28 static const std::unordered_map<int32_t, std::string> ERROR_CODE_TO_MESSAGE {
29 {ERROR_PERMISSION_DENIED, "Permission denied"},
30 {ERROR_NOT_SYSTEM_APP, "The application isn't system application"},
31 {ERROR_PARAM_INVALID, "Invalid parameter"},
32 {ERROR_SYSTEM_CAP_ERROR, "SystemCapability not found"},
33 {ERROR_INTERNAL_ERROR, "Internal error"},
34 {ERROR_IPC_ERROR, "Marshalling or unmarshalling error"},
35 {ERROR_SERVICE_CONNECT_ERROR, "Failed to connect to the service"},
36 {ERROR_NOTIFICATION_CLOSED, "Notification disabled"},
37 {ERROR_SLOT_CLOSED, "Notification slot disabled"},
38 {ERROR_NOTIFICATION_UNREMOVABLE, "Notification deletion disabled"},
39 {ERROR_NOTIFICATION_NOT_EXIST, "The notification does not exist"},
40 {ERROR_USER_NOT_EXIST, "The user does not exist"},
41 {ERROR_OVER_MAX_NUM_PER_SECOND, "The notification sending frequency reaches the upper limit"},
42 {ERROR_DISTRIBUTED_OPERATION_FAILED, "Distributed operation failed"},
43 {ERROR_READ_TEMPLATE_CONFIG_FAILED, "Failed to read the template configuration"},
44 {ERROR_NO_MEMORY, "No memory space"},
45 {ERROR_BUNDLE_NOT_FOUND, "The specified bundle name was not found"},
46 {ERROR_NO_AGENT_SETTING, "There is no corresponding agent relationship configuration"},
47 {ERROR_DIALOG_IS_POPPING, "Dialog is popping"},
48 {ERROR_SETTING_WINDOW_EXIST, "The notification settings window is already displayed"},
49 {ERROR_NO_PROFILE_TEMPLATE, "Not exit noNotDisturb profile template"},
50 {ERROR_REPEAT_SET, "Repeat create or end"},
51 {ERROR_NO_RIGHT, "No permission"},
52 {ERROR_EXPIRED_NOTIFICATION, "Low update version"},
53 {ERROR_NETWORK_UNREACHABLE, "Network unreachable"},
54 {ERROR_REJECTED_WITH_DISABLE_NOTIFICATION,
55 "The application is not allowed to send notifications due to permission settings"},
56 {ERROR_DISTRIBUTED_OPERATION_TIMEOUT, "Distributed operation timeout"},
57 };
58
59 static const std::vector<std::pair<uint32_t, int32_t>> ERRORS_CONVERT = {
60 {ERR_ANS_PERMISSION_DENIED, ERROR_PERMISSION_DENIED},
61 {ERR_ANS_NON_SYSTEM_APP, ERROR_NOT_SYSTEM_APP},
62 {ERR_ANS_NOT_SYSTEM_SERVICE, ERROR_NOT_SYSTEM_APP},
63 {ERR_ANS_INVALID_PARAM, ERROR_PARAM_INVALID},
64 {ERR_ANS_INVALID_UID, ERROR_PARAM_INVALID},
65 {ERR_ANS_ICON_OVER_SIZE, ERROR_PARAM_INVALID},
66 {ERR_ANS_PICTURE_OVER_SIZE, ERROR_PARAM_INVALID},
67 {ERR_ANS_PUSH_CHECK_EXTRAINFO_INVALID, ERROR_PARAM_INVALID},
68 {ERR_ANS_NO_MEMORY, ERROR_NO_MEMORY},
69 {ERR_ANS_TASK_ERR, ERROR_INTERNAL_ERROR},
70 {ERR_ANS_PARCELABLE_FAILED, ERROR_IPC_ERROR},
71 {ERR_ANS_TRANSACT_FAILED, ERROR_IPC_ERROR},
72 {ERR_ANS_REMOTE_DEAD, ERROR_IPC_ERROR},
73 {ERR_ANS_SERVICE_NOT_READY, ERROR_SERVICE_CONNECT_ERROR},
74 {ERR_ANS_SERVICE_NOT_CONNECTED, ERROR_SERVICE_CONNECT_ERROR},
75 {ERR_ANS_NOT_ALLOWED, ERROR_NOTIFICATION_CLOSED},
76 {ERR_ANS_PREFERENCES_NOTIFICATION_SLOT_ENABLED, ERROR_SLOT_CLOSED},
77 {ERR_ANS_NOTIFICATION_IS_UNREMOVABLE, ERROR_NOTIFICATION_UNREMOVABLE},
78 {ERR_ANS_NOTIFICATION_NOT_EXISTS, ERROR_NOTIFICATION_NOT_EXIST},
79 {ERR_ANS_GET_ACTIVE_USER_FAILED, ERROR_USER_NOT_EXIST},
80 {ERR_ANS_INVALID_PID, ERROR_BUNDLE_NOT_FOUND},
81 {ERR_ANS_INVALID_BUNDLE, ERROR_BUNDLE_NOT_FOUND},
82 {ERR_ANS_OVER_MAX_ACTIVE_PERSECOND, ERROR_OVER_MAX_NUM_PER_SECOND},
83 {ERR_ANS_OVER_MAX_UPDATE_PERSECOND, ERROR_OVER_MAX_NUM_PER_SECOND},
84 {ERR_ANS_DISTRIBUTED_OPERATION_FAILED, ERROR_DISTRIBUTED_OPERATION_FAILED},
85 {ERR_ANS_DISTRIBUTED_GET_INFO_FAILED, ERROR_DISTRIBUTED_OPERATION_FAILED},
86 {ERR_ANS_PREFERENCES_NOTIFICATION_READ_TEMPLATE_CONFIG_FAILED, ERROR_READ_TEMPLATE_CONFIG_FAILED},
87 {ERR_ANS_REPEAT_CREATE, ERROR_REPEAT_SET},
88 {ERR_ANS_END_NOTIFICATION, ERROR_REPEAT_SET},
89 {ERR_ANS_EXPIRED_NOTIFICATION, ERROR_EXPIRED_NOTIFICATION},
90 {ERR_ANS_PUSH_CHECK_FAILED, ERROR_NO_RIGHT},
91 {ERR_ANS_PUSH_CHECK_UNREGISTERED, ERROR_NO_RIGHT},
92 {ERR_ANS_LOCAL_SUBSCRIBE_CHECK_FAILED, ERROR_NO_RIGHT},
93 {ERR_ANS_PUSH_CHECK_NETWORK_UNREACHABLE, ERROR_NETWORK_UNREACHABLE},
94 {ERR_ANS_NO_AGENT_SETTING, ERROR_NO_AGENT_SETTING},
95 {ERR_ANS_DIALOG_IS_POPPING, ERROR_DIALOG_IS_POPPING},
96 {ERR_ANS_NO_PROFILE_TEMPLATE, ERROR_NO_PROFILE_TEMPLATE},
97 {ERR_ANS_REJECTED_WITH_DISABLE_NOTIFICATION, ERROR_REJECTED_WITH_DISABLE_NOTIFICATION},
98 {ERR_ANS_OPERATION_TIMEOUT, ERROR_DISTRIBUTED_OPERATION_TIMEOUT},
99 };
100
101
102 int32_t GetExternalCode(uint32_t errCode);
103
104 std::string FindAnsErrMsg(const int32_t errCode);
105
106 void ThrowError(ani_env *env, int32_t errCode, const std::string &errorMsg);
107
108 ani_object CreateError(ani_env *env, int32_t code, const std::string &msg);
109
ThrowErrorWithMsg(ani_env * env,std::string logMsg)110 inline void ThrowErrorWithMsg(ani_env *env, std::string logMsg)
111 {
112 ThrowError(env, OHOS::Notification::ERROR_INTERNAL_ERROR,
113 FindAnsErrMsg(OHOS::Notification::ERROR_INTERNAL_ERROR));
114 }
115
116 inline void ThrowErrorWithCode(ani_env *env, const int32_t errCode, std::string msg = "")
117 {
118 if (env == nullptr) return;
119 ThrowError(env, errCode, msg.empty() ? FindAnsErrMsg(errCode) : msg);
120 }
121
ThrowErrorWithInvalidParam(ani_env * env)122 inline void ThrowErrorWithInvalidParam(ani_env *env)
123 {
124 ThrowErrorWithCode(env, ERROR_PARAM_INVALID);
125 }
126
127 } // namespace NotificationSts
128 } // OHOS
129 #endif
130
131