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