1 /*
2 * Copyright (c) 2021 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 #include "ability_window_configuration.h"
17 #include "hilog_wrapper.h"
18 #include "launch_param.h"
19 #include "napi/native_api.h"
20 #include "napi/native_common.h"
21 #include "recovery_param.h"
22
23 namespace OHOS {
24 namespace AAFwk {
25 enum class MemoryLevel {
26 MEMORY_LEVEL_MODERATE = 0,
27 MEMORY_LEVEL_LOW = 1,
28 MEMORY_LEVEL_CRITICAL = 2,
29 };
30
SetEnumItem(napi_env env,napi_value object,const char * name,int32_t value)31 static napi_status SetEnumItem(napi_env env, napi_value object, const char* name, int32_t value)
32 {
33 napi_status status;
34 napi_value itemName;
35 napi_value itemValue;
36
37 NAPI_CALL_BASE(env, status = napi_create_string_utf8(env, name, NAPI_AUTO_LENGTH, &itemName), status);
38 NAPI_CALL_BASE(env, status = napi_create_int32(env, value, &itemValue), status);
39
40 NAPI_CALL_BASE(env, status = napi_set_property(env, object, itemName, itemValue), status);
41 NAPI_CALL_BASE(env, status = napi_set_property(env, object, itemValue, itemName), status);
42
43 return napi_ok;
44 }
45
InitLaunchReasonObject(napi_env env)46 static napi_value InitLaunchReasonObject(napi_env env)
47 {
48 napi_value object;
49 NAPI_CALL(env, napi_create_object(env, &object));
50
51 NAPI_CALL(env, SetEnumItem(env, object, "UNKNOWN", LAUNCHREASON_UNKNOWN));
52 NAPI_CALL(env, SetEnumItem(env, object, "START_ABILITY", LAUNCHREASON_START_ABILITY));
53 NAPI_CALL(env, SetEnumItem(env, object, "CALL", LAUNCHREASON_CALL));
54 NAPI_CALL(env, SetEnumItem(env, object, "CONTINUATION", LAUNCHREASON_CONTINUATION));
55 NAPI_CALL(env, SetEnumItem(env, object, "APP_RECOVERY", LAUNCHREASON_APP_RECOVERY));
56
57 return object;
58 }
59
InitLastExitReasonObject(napi_env env)60 static napi_value InitLastExitReasonObject(napi_env env)
61 {
62 napi_value object;
63 NAPI_CALL(env, napi_create_object(env, &object));
64
65 NAPI_CALL(env, SetEnumItem(env, object, "UNKNOWN", LASTEXITREASON_UNKNOWN));
66 NAPI_CALL(env, SetEnumItem(env, object, "ABILITY_NOT_RESPONDING", LASTEXITREASON_ABILITY_NOT_RESPONDING));
67 NAPI_CALL(env, SetEnumItem(env, object, "NORMAL", LASTEXITREASON_NORMAL));
68
69 return object;
70 }
71
InitOnContinueResultObject(napi_env env)72 static napi_value InitOnContinueResultObject(napi_env env)
73 {
74 napi_value object;
75 NAPI_CALL(env, napi_create_object(env, &object));
76
77 NAPI_CALL(env, SetEnumItem(env, object, "AGREE", ONCONTINUE_AGREE));
78 NAPI_CALL(env, SetEnumItem(env, object, "REJECT", ONCONTINUE_REJECT));
79 NAPI_CALL(env, SetEnumItem(env, object, "MISMATCH", ONCONTINUE_MISMATCH));
80
81 return object;
82 }
83
InitWindowModeObject(napi_env env)84 static napi_value InitWindowModeObject(napi_env env)
85 {
86 napi_value object;
87 NAPI_CALL(env, napi_create_object(env, &object));
88
89 NAPI_CALL(env, SetEnumItem(env, object, "WINDOW_MODE_UNDEFINED", MULTI_WINDOW_DISPLAY_UNDEFINED));
90 NAPI_CALL(env, SetEnumItem(env, object, "WINDOW_MODE_FULLSCREEN", MULTI_WINDOW_DISPLAY_FULLSCREEN));
91 NAPI_CALL(env, SetEnumItem(env, object, "WINDOW_MODE_SPLIT_PRIMARY", MULTI_WINDOW_DISPLAY_PRIMARY));
92 NAPI_CALL(env, SetEnumItem(env, object, "WINDOW_MODE_SPLIT_SECONDARY", MULTI_WINDOW_DISPLAY_SECONDARY));
93 NAPI_CALL(env, SetEnumItem(env, object, "WINDOW_MODE_FLOATING", MULTI_WINDOW_DISPLAY_FLOATING));
94
95 return object;
96 }
97
98 // AbilityConstant.OnSaveResult
InitOnSaveResultEnum(napi_env env)99 static napi_value InitOnSaveResultEnum(napi_env env)
100 {
101 napi_value object;
102 NAPI_CALL(env, napi_create_object(env, &object));
103 NAPI_CALL(env, SetEnumItem(env, object, "ALL_AGREE", AppExecFwk::ALL_AGREE));
104 NAPI_CALL(env, SetEnumItem(env, object, "CONTINUATION_REJECT", AppExecFwk::CONTINUATION_REJECT));
105 NAPI_CALL(env, SetEnumItem(env, object, "CONTINUATION_MISMATCH", AppExecFwk::CONTINUATION_MISMATCH));
106 NAPI_CALL(env, SetEnumItem(env, object, "RECOVERY_AGREE", AppExecFwk::RECOVERY_AGREE));
107 NAPI_CALL(env, SetEnumItem(env, object, "RECOVERY_REJECT", AppExecFwk::RECOVERY_REJECT));
108 NAPI_CALL(env, SetEnumItem(env, object, "ALL_REJECT", AppExecFwk::ALL_REJECT));
109 return object;
110 }
111
112 // AbilityConstant.StateType
InitStateTypeEnum(napi_env env)113 static napi_value InitStateTypeEnum(napi_env env)
114 {
115 napi_value object;
116 NAPI_CALL(env, napi_create_object(env, &object));
117 NAPI_CALL(env, SetEnumItem(env, object, "CONTINUATION", AppExecFwk::CONTINUATION));
118 NAPI_CALL(env, SetEnumItem(env, object, "APP_RECOVERY", AppExecFwk::APP_RECOVERY));
119 return object;
120 }
121
InitMemoryLevelObject(napi_env env)122 static napi_value InitMemoryLevelObject(napi_env env)
123 {
124 napi_value object;
125 NAPI_CALL(env, napi_create_object(env, &object));
126
127 NAPI_CALL(env, SetEnumItem(env, object, "MEMORY_LEVEL_MODERATE",
128 static_cast<int>(MemoryLevel::MEMORY_LEVEL_MODERATE)));
129 NAPI_CALL(env, SetEnumItem(env, object, "MEMORY_LEVEL_LOW",
130 static_cast<int>(MemoryLevel::MEMORY_LEVEL_LOW)));
131 NAPI_CALL(env, SetEnumItem(env, object, "MEMORY_LEVEL_CRITICAL",
132 static_cast<int>(MemoryLevel::MEMORY_LEVEL_CRITICAL)));
133
134 return object;
135 }
136
137 /*
138 * The module initialization.
139 */
AbilityConstantInit(napi_env env,napi_value exports)140 static napi_value AbilityConstantInit(napi_env env, napi_value exports)
141 {
142 napi_value launchReason = InitLaunchReasonObject(env);
143 if (launchReason == nullptr) {
144 HILOG_ERROR("failed to create launch reason object");
145 return nullptr;
146 }
147
148 napi_value lastExitReason = InitLastExitReasonObject(env);
149 if (lastExitReason == nullptr) {
150 HILOG_ERROR("failed to create last exit reason object");
151 return nullptr;
152 }
153
154 napi_value onContinueResult = InitOnContinueResultObject(env);
155 if (onContinueResult == nullptr) {
156 HILOG_ERROR("failed to create onContinue result object");
157 return nullptr;
158 }
159
160 napi_value windowMode = InitWindowModeObject(env);
161 if (windowMode == nullptr) {
162 HILOG_ERROR("failed to create window mode object");
163 return nullptr;
164 }
165
166 napi_value memoryLevel = InitMemoryLevelObject(env);
167 if (memoryLevel == nullptr) {
168 HILOG_ERROR("failed to create memory level object");
169 return nullptr;
170 }
171
172 napi_value stateType = InitStateTypeEnum(env);
173 if (stateType == nullptr) {
174 HILOG_ERROR("failed to create state type object");
175 return nullptr;
176 }
177
178 napi_value saveResult = InitOnSaveResultEnum(env);
179 if (saveResult == nullptr) {
180 HILOG_ERROR("failed to create save result object");
181 return nullptr;
182 }
183
184 napi_property_descriptor exportObjs[] = {
185 DECLARE_NAPI_PROPERTY("LaunchReason", launchReason),
186 DECLARE_NAPI_PROPERTY("LastExitReason", lastExitReason),
187 DECLARE_NAPI_PROPERTY("OnContinueResult", onContinueResult),
188 DECLARE_NAPI_PROPERTY("WindowMode", windowMode),
189 DECLARE_NAPI_PROPERTY("MemoryLevel", memoryLevel),
190 DECLARE_NAPI_PROPERTY("OnSaveResult", saveResult),
191 DECLARE_NAPI_PROPERTY("StateType", stateType),
192 };
193 napi_status status = napi_define_properties(env, exports, sizeof(exportObjs) / sizeof(exportObjs[0]), exportObjs);
194 if (status != napi_ok) {
195 HILOG_ERROR("failed to define properties for exports");
196 return nullptr;
197 }
198
199 return exports;
200 }
201
202 /*
203 * The module definition.
204 */
205 static napi_module _module = {
206 .nm_version = 1,
207 .nm_flags = 0,
208 .nm_filename = nullptr,
209 .nm_register_func = AbilityConstantInit,
210 #ifdef ENABLE_ERRCODE
211 .nm_modname = "app.ability.AbilityConstant",
212 #else
213 .nm_modname = "application.AbilityConstant",
214 #endif
215 .nm_priv = ((void *)0),
216 .reserved = {0}
217 };
218
219 /*
220 * The module registration.
221 */
RegisterModule(void)222 extern "C" __attribute__((constructor)) void RegisterModule(void)
223 {
224 napi_module_register(&_module);
225 }
226 } // namespace AAFwk
227 } // namespace OHOS
228