• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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 <cstdio>
17 #include <cstring>
18 #include <pthread.h>
19 #include <unistd.h>
20 
21 #include "hilog_wrapper.h"
22 #include "napi_accessibility_config.h"
23 #include "napi/native_api.h"
24 #include "napi/native_node_api.h"
25 #include "accessibility_config.h"
26 
27 EXTERN_C_START
28 /*
29  * function for module exports
30  */
31 static napi_property_descriptor configDesc[] = {
32     DECLARE_NAPI_FUNCTION("set", NAccessibilityConfig::SetConfig),
33     DECLARE_NAPI_FUNCTION("get", NAccessibilityConfig::GetConfig),
34     DECLARE_NAPI_FUNCTION("on", NAccessibilityConfig::SubscribeConfigObserver),
35     DECLARE_NAPI_FUNCTION("off", NAccessibilityConfig::UnSubscribeConfigObserver),
36 };
37 
InitHighContrastText(napi_env env)38 static napi_value InitHighContrastText(napi_env env)
39 {
40     napi_value highContrastTextValue;
41     napi_create_object(env, &highContrastTextValue);
42     NAPI_CALL(env, napi_define_properties(env, highContrastTextValue,
43                                           sizeof(configDesc) / sizeof(configDesc[0]),
44                                           configDesc));
45     NAccessibilityConfigClass* nativeObj =
46         new(std::nothrow) NAccessibilityConfigClass(OHOS::AccessibilityConfig::CONFIG_HIGH_CONTRAST_TEXT);
47     if (!nativeObj) {
48         HILOG_ERROR("Failed to create nativeObj.");
49         return nullptr;
50     }
51     nativeObj->SetEnv(env);
52     NAPI_CALL(env, napi_wrap(env, highContrastTextValue, reinterpret_cast<void*>(nativeObj),
53                              NAccessibilityConfigClass::Destructor, nullptr, nativeObj->GetWrapper()));
54     return highContrastTextValue;
55 }
56 
InitInvertColor(napi_env env)57 static napi_value InitInvertColor(napi_env env)
58 {
59     napi_value invertColorValue;
60     napi_create_object(env, &invertColorValue);
61     NAPI_CALL(env, napi_define_properties(env, invertColorValue,
62                                           sizeof(configDesc) / sizeof(configDesc[0]),
63                                           configDesc));
64     NAccessibilityConfigClass* nativeObj =
65         new(std::nothrow) NAccessibilityConfigClass(OHOS::AccessibilityConfig::CONFIG_INVERT_COLOR);
66     if (!nativeObj) {
67         HILOG_ERROR("Failed to create nativeObj.");
68         return nullptr;
69     }
70     nativeObj->SetEnv(env);
71     NAPI_CALL(env, napi_wrap(env, invertColorValue, reinterpret_cast<void*>(nativeObj),
72                              NAccessibilityConfigClass::Destructor, nullptr, nativeObj->GetWrapper()));
73     return invertColorValue;
74 }
75 
InitDaltonizationColorFilter(napi_env env)76 static napi_value InitDaltonizationColorFilter(napi_env env)
77 {
78     napi_value daltonizationColorFilterValue;
79     napi_create_object(env, &daltonizationColorFilterValue);
80     NAPI_CALL(env, napi_define_properties(env, daltonizationColorFilterValue,
81                                           sizeof(configDesc) /
82                                           sizeof(configDesc[0]),
83                                           configDesc));
84     NAccessibilityConfigClass* nativeObj =
85         new(std::nothrow) NAccessibilityConfigClass(OHOS::AccessibilityConfig::CONFIG_DALTONIZATION_COLOR_FILTER);
86     if (!nativeObj) {
87         HILOG_ERROR("Failed to create nativeObj.");
88         return nullptr;
89     }
90     nativeObj->SetEnv(env);
91     NAPI_CALL(env, napi_wrap(env, daltonizationColorFilterValue, reinterpret_cast<void*>(nativeObj),
92                              NAccessibilityConfigClass::Destructor, nullptr, nativeObj->GetWrapper()));
93     return daltonizationColorFilterValue;
94 }
95 
InitContentTimeout(napi_env env)96 static napi_value InitContentTimeout(napi_env env)
97 {
98     napi_value contentTimeoutValue;
99     napi_create_object(env, &contentTimeoutValue);
100     NAPI_CALL(env, napi_define_properties(env, contentTimeoutValue,
101                                           sizeof(configDesc) / sizeof(configDesc[0]),
102                                           configDesc));
103     NAccessibilityConfigClass* nativeObj =
104         new(std::nothrow) NAccessibilityConfigClass(OHOS::AccessibilityConfig::CONFIG_CONTENT_TIMEOUT);
105     if (!nativeObj) {
106         HILOG_ERROR("Failed to create nativeObj.");
107         return nullptr;
108     }
109     nativeObj->SetEnv(env);
110     NAPI_CALL(env, napi_wrap(env, contentTimeoutValue, reinterpret_cast<void*>(nativeObj),
111                              NAccessibilityConfigClass::Destructor, nullptr, nativeObj->GetWrapper()));
112     return contentTimeoutValue;
113 }
114 
InitAnimationOff(napi_env env)115 static napi_value InitAnimationOff(napi_env env)
116 {
117     napi_value animationOffValue;
118     napi_create_object(env, &animationOffValue);
119     NAPI_CALL(env, napi_define_properties(env, animationOffValue,
120                                           sizeof(configDesc) / sizeof(configDesc[0]),
121                                           configDesc));
122     NAccessibilityConfigClass* nativeObj =
123         new(std::nothrow) NAccessibilityConfigClass(OHOS::AccessibilityConfig::CONFIG_ANIMATION_OFF);
124     if (!nativeObj) {
125         HILOG_ERROR("Failed to create nativeObj.");
126         return nullptr;
127     }
128     nativeObj->SetEnv(env);
129     NAPI_CALL(env, napi_wrap(env, animationOffValue, reinterpret_cast<void*>(nativeObj),
130                              NAccessibilityConfigClass::Destructor, nullptr, nativeObj->GetWrapper()));
131     return animationOffValue;
132 }
133 
InitBrightnessDiscount(napi_env env)134 static napi_value InitBrightnessDiscount(napi_env env)
135 {
136     napi_value brightnessDiscountValue;
137     napi_create_object(env, &brightnessDiscountValue);
138     NAPI_CALL(env, napi_define_properties(env, brightnessDiscountValue,
139                                           sizeof(configDesc) / sizeof(configDesc[0]),
140                                           configDesc));
141     NAccessibilityConfigClass* nativeObj =
142         new(std::nothrow) NAccessibilityConfigClass(OHOS::AccessibilityConfig::CONFIG_BRIGHTNESS_DISCOUNT);
143     if (!nativeObj) {
144         HILOG_ERROR("Failed to create nativeObj.");
145         return nullptr;
146     }
147     nativeObj->SetEnv(env);
148     NAPI_CALL(env, napi_wrap(env, brightnessDiscountValue, reinterpret_cast<void*>(nativeObj),
149                              NAccessibilityConfigClass::Destructor, nullptr, nativeObj->GetWrapper()));
150     return brightnessDiscountValue;
151 }
152 
InitScreenMagnifier(napi_env env)153 static napi_value InitScreenMagnifier(napi_env env)
154 {
155     napi_value screenMagnifierValue;
156     napi_create_object(env, &screenMagnifierValue);
157     NAPI_CALL(env, napi_define_properties(env, screenMagnifierValue,
158                                           sizeof(configDesc) / sizeof(configDesc[0]),
159                                           configDesc));
160     NAccessibilityConfigClass* nativeObj =
161         new(std::nothrow) NAccessibilityConfigClass(OHOS::AccessibilityConfig::CONFIG_SCREEN_MAGNIFICATION);
162     if (!nativeObj) {
163         HILOG_ERROR("Failed to create nativeObj.");
164         return nullptr;
165     }
166     nativeObj->SetEnv(env);
167     NAPI_CALL(env, napi_wrap(env, screenMagnifierValue, reinterpret_cast<void*>(nativeObj),
168                              NAccessibilityConfigClass::Destructor, nullptr, nativeObj->GetWrapper()));
169     return screenMagnifierValue;
170 }
171 
InitAudioMono(napi_env env)172 static napi_value InitAudioMono(napi_env env)
173 {
174     napi_value audioMonoValue;
175     napi_create_object(env, &audioMonoValue);
176     NAPI_CALL(env, napi_define_properties(env, audioMonoValue,
177                                           sizeof(configDesc) / sizeof(configDesc[0]),
178                                           configDesc));
179     NAccessibilityConfigClass* nativeObj =
180         new(std::nothrow) NAccessibilityConfigClass(OHOS::AccessibilityConfig::CONFIG_AUDIO_MONO);
181     if (!nativeObj) {
182         HILOG_ERROR("Failed to create nativeObj.");
183         return nullptr;
184     }
185     nativeObj->SetEnv(env);
186     NAPI_CALL(env, napi_wrap(env, audioMonoValue, reinterpret_cast<void*>(nativeObj),
187                              NAccessibilityConfigClass::Destructor, nullptr, nativeObj->GetWrapper()));
188     return audioMonoValue;
189 }
190 
InitAudioBalance(napi_env env)191 static napi_value InitAudioBalance(napi_env env)
192 {
193     napi_value audioBalanceValue;
194     napi_create_object(env, &audioBalanceValue);
195     NAPI_CALL(env, napi_define_properties(env, audioBalanceValue,
196                                           sizeof(configDesc) / sizeof(configDesc[0]),
197                                           configDesc));
198     NAccessibilityConfigClass* nativeObj =
199         new(std::nothrow) NAccessibilityConfigClass(OHOS::AccessibilityConfig::CONFIG_AUDIO_BALANCE);
200     if (!nativeObj) {
201         HILOG_ERROR("Failed to create nativeObj.");
202         return nullptr;
203     }
204     nativeObj->SetEnv(env);
205     NAPI_CALL(env, napi_wrap(env, audioBalanceValue, reinterpret_cast<void*>(nativeObj),
206                              NAccessibilityConfigClass::Destructor, nullptr, nativeObj->GetWrapper()));
207     return audioBalanceValue;
208 }
209 
InitMouseKey(napi_env env)210 static napi_value InitMouseKey(napi_env env)
211 {
212     napi_value mouseKeyValue;
213     napi_create_object(env, &mouseKeyValue);
214     NAPI_CALL(env, napi_define_properties(env, mouseKeyValue,
215                                           sizeof(configDesc) / sizeof(configDesc[0]),
216                                           configDesc));
217     NAccessibilityConfigClass* nativeObj =
218         new(std::nothrow) NAccessibilityConfigClass(OHOS::AccessibilityConfig::CONFIG_MOUSE_KEY);
219     if (!nativeObj) {
220         HILOG_ERROR("Failed to create nativeObj.");
221         return nullptr;
222     }
223     nativeObj->SetEnv(env);
224     NAPI_CALL(env, napi_wrap(env, mouseKeyValue, reinterpret_cast<void*>(nativeObj),
225                              NAccessibilityConfigClass::Destructor, nullptr, nativeObj->GetWrapper()));
226     return mouseKeyValue;
227 }
228 
InitMouseAutoClick(napi_env env)229 static napi_value InitMouseAutoClick(napi_env env)
230 {
231     napi_value mouseAutoClickValue;
232     napi_create_object(env, &mouseAutoClickValue);
233     NAPI_CALL(env, napi_define_properties(env, mouseAutoClickValue,
234                                           sizeof(configDesc) / sizeof(configDesc[0]),
235                                           configDesc));
236     NAccessibilityConfigClass* nativeObj =
237         new(std::nothrow) NAccessibilityConfigClass(OHOS::AccessibilityConfig::CONFIG_MOUSE_AUTOCLICK);
238     if (!nativeObj) {
239         HILOG_ERROR("Failed to create nativeObj.");
240         return nullptr;
241     }
242     nativeObj->SetEnv(env);
243     NAPI_CALL(env, napi_wrap(env, mouseAutoClickValue, reinterpret_cast<void*>(nativeObj),
244                              NAccessibilityConfigClass::Destructor, nullptr, nativeObj->GetWrapper()));
245     return mouseAutoClickValue;
246 }
247 
InitShortKey(napi_env env)248 static napi_value InitShortKey(napi_env env)
249 {
250     napi_value shortKeyValue;
251     napi_create_object(env, &shortKeyValue);
252     NAPI_CALL(env, napi_define_properties(env, shortKeyValue,
253                                           sizeof(configDesc) / sizeof(configDesc[0]),
254                                           configDesc));
255     NAccessibilityConfigClass* nativeObj =
256         new(std::nothrow) NAccessibilityConfigClass(OHOS::AccessibilityConfig::CONFIG_SHORT_KEY);
257     if (!nativeObj) {
258         HILOG_ERROR("Failed to create nativeObj.");
259         return nullptr;
260     }
261     nativeObj->SetEnv(env);
262     NAPI_CALL(env, napi_wrap(env, shortKeyValue, reinterpret_cast<void*>(nativeObj),
263                              NAccessibilityConfigClass::Destructor, nullptr, nativeObj->GetWrapper()));
264     return shortKeyValue;
265 }
266 
InitShortKeyTarget(napi_env env)267 static napi_value InitShortKeyTarget(napi_env env)
268 {
269     napi_value shortKeyTargetValue;
270     napi_create_object(env, &shortKeyTargetValue);
271     NAPI_CALL(env, napi_define_properties(env, shortKeyTargetValue,
272                                           sizeof(configDesc) / sizeof(configDesc[0]),
273                                           configDesc));
274     NAccessibilityConfigClass* nativeObj =
275         new(std::nothrow) NAccessibilityConfigClass(OHOS::AccessibilityConfig::CONFIG_SHORT_KEY_TARGET);
276     if (!nativeObj) {
277         HILOG_ERROR("Failed to create nativeObj.");
278         return nullptr;
279     }
280     nativeObj->SetEnv(env);
281     NAPI_CALL(env, napi_wrap(env, shortKeyTargetValue, reinterpret_cast<void*>(nativeObj),
282                              NAccessibilityConfigClass::Destructor, nullptr, nativeObj->GetWrapper()));
283     return shortKeyTargetValue;
284 }
285 
InitCaptionsState(napi_env env)286 static napi_value InitCaptionsState(napi_env env)
287 {
288     napi_value captionsValue;
289     napi_create_object(env, &captionsValue);
290     NAPI_CALL(env, napi_define_properties(env, captionsValue,
291                                           sizeof(configDesc) / sizeof(configDesc[0]),
292                                           configDesc));
293     NAccessibilityConfigClass* nativeObj =
294         new(std::nothrow) NAccessibilityConfigClass(OHOS::AccessibilityConfig::CONFIG_CAPTION_STATE);
295     if (!nativeObj) {
296         HILOG_ERROR("Failed to create nativeObj.");
297         return nullptr;
298     }
299     nativeObj->SetEnv(env);
300     NAPI_CALL(env, napi_wrap(env, captionsValue, reinterpret_cast<void*>(nativeObj),
301                              NAccessibilityConfigClass::Destructor, nullptr, nativeObj->GetWrapper()));
302     return captionsValue;
303 }
304 
InitCaptionsStyle(napi_env env)305 static napi_value InitCaptionsStyle(napi_env env)
306 {
307     napi_value captionsStyleValue;
308     napi_create_object(env, &captionsStyleValue);
309     NAPI_CALL(env, napi_define_properties(env, captionsStyleValue,
310                                           sizeof(configDesc) / sizeof(configDesc[0]),
311                                           configDesc));
312     NAccessibilityConfigClass* nativeObj =
313         new(std::nothrow) NAccessibilityConfigClass(OHOS::AccessibilityConfig::CONFIG_CAPTION_STYLE);
314     if (!nativeObj) {
315         HILOG_ERROR("Failed to create nativeObj.");
316         return nullptr;
317     }
318     nativeObj->SetEnv(env);
319     NAPI_CALL(env, napi_wrap(env, captionsStyleValue, reinterpret_cast<void*>(nativeObj),
320                              NAccessibilityConfigClass::Destructor, nullptr, nativeObj->GetWrapper()));
321     return captionsStyleValue;
322 }
323 
InitConfigModule(napi_env env,napi_value exports)324 static napi_value InitConfigModule(napi_env env, napi_value exports)
325 {
326     napi_value highContrastTextValue = InitHighContrastText(env);
327     napi_value invertColorValue = InitInvertColor(env);
328     napi_value daltonizationColorFilterValue = InitDaltonizationColorFilter(env);
329     napi_value contentTimeoutValue = InitContentTimeout(env);
330     napi_value animationOffValue = InitAnimationOff(env);
331     napi_value brightnessDiscountValue = InitBrightnessDiscount(env);
332     napi_value screenMagnifierValue = InitScreenMagnifier(env);
333     napi_value audioMonoValue = InitAudioMono(env);
334     napi_value audioBalanceValue = InitAudioBalance(env);
335     napi_value mouseKeyValue = InitMouseKey(env);
336     napi_value mouseAutoClickValue = InitMouseAutoClick(env);
337     napi_value shortKeyValue = InitShortKey(env);
338     napi_value shortKeyTargetValue = InitShortKeyTarget(env);
339     napi_value captionsValue = InitCaptionsState(env);
340     napi_value captionsStyleValue = InitCaptionsStyle(env);
341 
342     napi_property_descriptor desc[] = {
343         DECLARE_NAPI_FUNCTION("on", NAccessibilityConfig::SubscribeState),
344         DECLARE_NAPI_FUNCTION("off", NAccessibilityConfig::UnsubscribeState),
345         DECLARE_NAPI_FUNCTION("enableAbility", NAccessibilityConfig::EnableAbility),
346         DECLARE_NAPI_FUNCTION("disableAbility", NAccessibilityConfig::DisableAbility),
347         DECLARE_NAPI_STATIC_PROPERTY("highContrastText", highContrastTextValue),
348         DECLARE_NAPI_STATIC_PROPERTY("invertColor", invertColorValue),
349         DECLARE_NAPI_STATIC_PROPERTY("daltonizationColorFilter", daltonizationColorFilterValue),
350         DECLARE_NAPI_STATIC_PROPERTY("contentTimeout", contentTimeoutValue),
351         DECLARE_NAPI_STATIC_PROPERTY("animationOff", animationOffValue),
352         DECLARE_NAPI_STATIC_PROPERTY("brightnessDiscount", brightnessDiscountValue),
353         DECLARE_NAPI_STATIC_PROPERTY("screenMagnifier", screenMagnifierValue),
354         DECLARE_NAPI_STATIC_PROPERTY("audioMono", audioMonoValue),
355         DECLARE_NAPI_STATIC_PROPERTY("audioBalance", audioBalanceValue),
356         DECLARE_NAPI_STATIC_PROPERTY("mouseKey", mouseKeyValue),
357         DECLARE_NAPI_STATIC_PROPERTY("mouseAutoClick", mouseAutoClickValue),
358         DECLARE_NAPI_STATIC_PROPERTY("shortkey", shortKeyValue),
359         DECLARE_NAPI_STATIC_PROPERTY("shortkeyTarget", shortKeyTargetValue),
360         DECLARE_NAPI_STATIC_PROPERTY("captions", captionsValue),
361         DECLARE_NAPI_STATIC_PROPERTY("captionsStyle", captionsStyleValue),
362     };
363 
364     NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
365 
366     auto &instance = OHOS::AccessibilityConfig::AccessibilityConfig::GetInstance();
367     (void)instance.InitializeContext();
368     NAccessibilityConfig::configObservers_->SubscribeToFramework();
369     NAccessibilityConfig::enableAbilityListsObservers_->SubscribeToFramework();
370     HILOG_INFO("-----Init config module end------");
371     return exports;
372 }
373 EXTERN_C_END
374 
375 /*
376  * Module define
377  */
378 static napi_module _config_module = {
379     .nm_version = 1,
380     .nm_flags = 0,
381     .nm_filename = nullptr,
382     .nm_register_func = InitConfigModule,
383     .nm_modname = "accessibility.config",
384     .nm_priv = ((void*)0),
385     .reserved = {0},
386 };
387 /*
388  * Module register function
389  */
RegisterNapiAccessibilityConfigModule(void)390 extern "C" __attribute__((constructor)) void RegisterNapiAccessibilityConfigModule(void)
391 {
392     napi_module_register(&_config_module);
393 }
394