• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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