1 /*
2 * Copyright (c) 2023 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 "js_ui_observer.h"
17 #include "ui_observer.h"
18
19
20 #include "interfaces/napi/kits/utils/napi_utils.h"
21
22
23 namespace OHOS::Ace::Napi {
24 namespace {
25 #define GET_PARAMS(env, info, max) \
26 size_t argc = max; \
27 napi_value argv[max] = { 0 }; \
28 napi_value thisVar = nullptr; \
29 void* data; \
30 napi_get_cb_info(env, info, &argc, argv, &thisVar, &data)
31
32 static constexpr uint32_t PARAM_SIZE_ONE = 1;
33 static constexpr uint32_t PARAM_SIZE_TWO = 2;
34 static constexpr uint32_t PARAM_SIZE_THREE = 3;
35 static constexpr uint32_t PARAM_SIZE_FOUR = 4;
36
37 static constexpr size_t PARAM_INDEX_ZERO = 0;
38 static constexpr size_t PARAM_INDEX_ONE = 1;
39 static constexpr size_t PARAM_INDEX_TWO = 2;
40 static constexpr size_t PARAM_INDEX_THREE = 3;
41
42 static constexpr uint32_t ON_SHOWN = 0;
43 static constexpr uint32_t ON_HIDDEN = 1;
44 static constexpr uint32_t ON_APPEAR = 2;
45 static constexpr uint32_t ON_DISAPPEAR = 3;
46 static constexpr uint32_t ON_WILL_SHOW = 4;
47 static constexpr uint32_t ON_WILL_HIDE = 5;
48 static constexpr uint32_t ON_WILL_APPEAR = 6;
49 static constexpr uint32_t ON_WILL_DISAPPEAR = 7;
50 static constexpr uint32_t ON_ACTIVE = 8;
51 static constexpr uint32_t ON_INACTIVE = 9;
52 static constexpr uint32_t ON_BACKPRESS = 100;
53
54 static constexpr uint32_t SCROLL_START = 0;
55 static constexpr uint32_t SCROLL_STOP = 1;
56
57 static constexpr uint32_t ABOUT_TO_APPEAR = 0;
58 static constexpr uint32_t ABOUT_TO_DISAPPEAR = 1;
59 static constexpr uint32_t ON_PAGE_SHOW = 2;
60 static constexpr uint32_t ON_PAGE_HIDE = 3;
61 static constexpr uint32_t ON_BACK_PRESS = 4;
62
63 static constexpr uint32_t ON_SHOW = 0;
64 static constexpr uint32_t ON_HIDE = 1;
65
66 static constexpr uint32_t TAP_GESTURE = 0;
67 static constexpr uint32_t LONG_PRESS_GESTURE = 1;
68 static constexpr uint32_t PAN_GESTURE = 2;
69 static constexpr uint32_t PINCH_GESTURE = 3;
70 static constexpr uint32_t SWIPE_GESTURE = 4;
71 static constexpr uint32_t ROTATION_GESTURE = 5;
72 static constexpr uint32_t DRAG = 6;
73 static constexpr uint32_t CLICK = 7;
74
75 static constexpr uint32_t READY = 0;
76 static constexpr uint32_t DETECTING = 1;
77 static constexpr uint32_t PENDING = 2;
78 static constexpr uint32_t BLOCKED = 3;
79 static constexpr uint32_t SUCCESSFUL = 4;
80 static constexpr uint32_t FAILED = 5;
81
82 constexpr char NAVDESTINATION_UPDATE[] = "navDestinationUpdate";
83 constexpr char ROUTERPAGE_UPDATE[] = "routerPageUpdate";
84 constexpr char SCROLL_EVENT[] = "scrollEvent";
85 constexpr char DENSITY_UPDATE[] = "densityUpdate";
86 constexpr char LAYOUT_DONE[] = "didLayout";
87 constexpr char DRAW_COMMAND_SEND[] = "willDraw";
88 constexpr char NAVDESTINATION_SWITCH[] = "navDestinationSwitch";
89 constexpr char WILLCLICK_UPDATE[] = "willClick";
90 constexpr char DIDCLICK_UPDATE[] = "didClick";
91 constexpr char TAB_CONTENT_STATE[] = "tabContentUpdate";
92 constexpr char BEFORE_PAN_START[] = "beforePanStart";
93 constexpr char BEFORE_PAN_END[] = "beforePanEnd";
94 constexpr char AFTER_PAN_START[] = "afterPanStart";
95 constexpr char AFTER_PAN_END[] = "afterPanEnd";
96
IsUIAbilityContext(napi_env env,napi_value context)97 bool IsUIAbilityContext(napi_env env, napi_value context)
98 {
99 napi_value abilityInfo = nullptr;
100 napi_get_named_property(env, context, "abilityInfo", &abilityInfo);
101 if (!abilityInfo) {
102 return false;
103 }
104 napi_value abilityInfoName = nullptr;
105 napi_get_named_property(env, abilityInfo, "name", &abilityInfoName);
106 if (abilityInfoName) {
107 return true;
108 }
109 return false;
110 }
111
GetUIContextInstanceId(napi_env env,napi_value uiContext)112 int32_t GetUIContextInstanceId(napi_env env, napi_value uiContext)
113 {
114 int32_t result = 0;
115 if (IsUIAbilityContext(env, uiContext)) {
116 return result;
117 }
118 napi_value instanceId = nullptr;
119 napi_get_named_property(env, uiContext, "instanceId_", &instanceId);
120 napi_get_value_int32(env, instanceId, &result);
121 return result;
122 }
123
MatchValueType(napi_env env,napi_value value,napi_valuetype targetType)124 bool MatchValueType(napi_env env, napi_value value, napi_valuetype targetType)
125 {
126 napi_valuetype valueType = napi_undefined;
127 napi_typeof(env, value, &valueType);
128 return valueType == targetType;
129 }
130
ParseStringFromNapi(napi_env env,napi_value val,std::string & str)131 bool ParseStringFromNapi(napi_env env, napi_value val, std::string& str)
132 {
133 napi_valuetype type;
134 return GetNapiString(env, val, str, type);
135 }
136
ParseNavigationId(napi_env env,napi_value obj,std::string & navigationStr)137 bool ParseNavigationId(napi_env env, napi_value obj, std::string& navigationStr)
138 {
139 napi_value navigationId = nullptr;
140 napi_get_named_property(env, obj, "navigationId", &navigationId);
141 return ParseStringFromNapi(env, navigationId, navigationStr);
142 }
143
ParseScrollId(napi_env env,napi_value obj,std::string & result)144 bool ParseScrollId(napi_env env, napi_value obj, std::string& result)
145 {
146 napi_value resultId = nullptr;
147 napi_get_named_property(env, obj, "id", &resultId);
148 if (!MatchValueType(env, resultId, napi_string)) {
149 return false;
150 }
151 return ParseStringFromNapi(env, resultId, result);
152 }
153
IsNavDestSwitchOptions(napi_env env,napi_value obj,std::string & navigationId)154 bool IsNavDestSwitchOptions(napi_env env, napi_value obj, std::string& navigationId)
155 {
156 if (!MatchValueType(env, obj, napi_object)) {
157 return false;
158 }
159 napi_value navId = nullptr;
160 napi_get_named_property(env, obj, "navigationId", &navId);
161 return ParseStringFromNapi(env, navId, navigationId);
162 }
163
164 struct NavDestinationSwitchParams {
165 bool isUIContext = true;
166 std::optional<std::string> navigationId;
167 napi_value callback = nullptr;
168 napi_value abilityUIContext = nullptr;
169 int32_t uiContextInstanceId = 0;
170 };
171
ParseNavDestSwitchRegisterParams(napi_env env,napi_callback_info info,NavDestinationSwitchParams & params)172 bool ParseNavDestSwitchRegisterParams(napi_env env, napi_callback_info info, NavDestinationSwitchParams& params)
173 {
174 GET_PARAMS(env, info, PARAM_SIZE_FOUR);
175
176 auto& secondArg = argv[PARAM_INDEX_ONE];
177 auto& thirdArg = argv[PARAM_INDEX_TWO];
178 auto& fourthArg = argv[PARAM_INDEX_THREE];
179 std::string navigationId;
180 if (argc == PARAM_SIZE_TWO && MatchValueType(env, secondArg, napi_function)) {
181 // js code: UIObserver.on('navDestinationSwitch', callback)
182 params.callback = secondArg;
183 } else if (argc == PARAM_SIZE_THREE && MatchValueType(env, secondArg, napi_object) &&
184 MatchValueType(env, thirdArg, napi_function)) {
185 if (IsNavDestSwitchOptions(env, secondArg, navigationId)) {
186 // js code: UIObserver.on('navDestinationSwitch', { navigationId: navId }, callback)
187 params.navigationId = navigationId;
188 } else if (IsUIAbilityContext(env, secondArg)) {
189 // js code: observer.on('navDestinationSwitch', AbilityUIContext, callback)
190 params.isUIContext = false;
191 params.abilityUIContext = secondArg;
192 } else {
193 // js code: observer.on('navDestinationSwitch', UIContext, callback)
194 params.uiContextInstanceId = GetUIContextInstanceId(env, secondArg);
195 }
196 params.callback = thirdArg;
197 } else if (argc == PARAM_SIZE_FOUR && MatchValueType(env, secondArg, napi_object) &&
198 IsNavDestSwitchOptions(env, thirdArg, navigationId) &&
199 MatchValueType(env, fourthArg, napi_function)) {
200 if (IsUIAbilityContext(env, secondArg)) {
201 // js code: observer.on('navDestinationSwitch', AbilityUIContext, { navigationId: navId }, callback)
202 params.isUIContext = false;
203 params.abilityUIContext = secondArg;
204 } else {
205 // js code: observer.on('navDestinationSwitch', UIContext, { navigationId: navId }, callback)
206 params.uiContextInstanceId = GetUIContextInstanceId(env, secondArg);
207 }
208 params.navigationId = navigationId;
209 params.callback = fourthArg;
210 } else {
211 return false;
212 }
213
214 return true;
215 }
216
ParseNavDestSwitchUnRegisterParams(napi_env env,napi_value secondArg,NavDestinationSwitchParams & params)217 bool ParseNavDestSwitchUnRegisterParams(
218 napi_env env, napi_value secondArg, NavDestinationSwitchParams& params)
219 {
220 std::string navigationId;
221 if (MatchValueType(env, secondArg, napi_function)) {
222 // js code: UIObserver.off('navDestinationSwitch', callback)
223 params.callback = secondArg;
224 } else if (IsNavDestSwitchOptions(env, secondArg, navigationId)) {
225 // js code: UIObserver.off('navDestinationSwitch', { navigationId: navId })
226 params.navigationId = navigationId;
227 } else if (MatchValueType(env, secondArg, napi_object)) {
228 if (IsUIAbilityContext(env, secondArg)) {
229 // js code: observer.off('navDestinationSwitch', AbilityUIContext)
230 params.isUIContext = false;
231 params.abilityUIContext = secondArg;
232 } else {
233 // js code: observer.off('navDestinationSwitch', UIContext)
234 params.uiContextInstanceId = GetUIContextInstanceId(env, secondArg);
235 }
236 } else {
237 return false;
238 }
239
240 return true;
241 }
242
ParseNavDestSwitchUnRegisterParams(napi_env env,napi_value secondArg,napi_value thirdArg,NavDestinationSwitchParams & params)243 bool ParseNavDestSwitchUnRegisterParams(
244 napi_env env, napi_value secondArg, napi_value thirdArg, NavDestinationSwitchParams& params)
245 {
246 std::string navigationId;
247 if (MatchValueType(env, thirdArg, napi_function)) {
248 params.callback = thirdArg;
249 if (IsNavDestSwitchOptions(env, secondArg, navigationId)) {
250 // js code: UIObserver.off('navDestinationSwitch', { navigationId: navId }, callback)
251 params.navigationId = navigationId;
252 } else if (MatchValueType(env, secondArg, napi_object)) {
253 if (IsUIAbilityContext(env, secondArg)) {
254 // js code: observer.off('navDestinationSwitch', AbilityUIContext, callback)
255 params.isUIContext = false;
256 params.abilityUIContext = secondArg;
257 } else {
258 // js code: observer.off('navDestinationSwitch', UIContext, callback)
259 params.uiContextInstanceId = GetUIContextInstanceId(env, secondArg);
260 }
261 } else {
262 return false;
263 }
264 } else if (MatchValueType(env, secondArg, napi_object) &&
265 IsNavDestSwitchOptions(env, thirdArg, navigationId)) {
266 if (IsUIAbilityContext(env, secondArg)) {
267 // js code: observer.off('navDestinationSwitch', AbilityUIContext, { navigationId: navId })
268 params.isUIContext = false;
269 params.abilityUIContext = secondArg;
270 } else {
271 // js code: observer.off('navDestinationSwitch', UIContext, { navigationId: navId })
272 params.uiContextInstanceId = GetUIContextInstanceId(env, secondArg);
273 }
274 params.navigationId = navigationId;
275 } else {
276 return false;
277 }
278
279 return true;
280 }
281
ParseNavDestSwitchUnRegisterParams(napi_env env,napi_value secondArg,napi_value thirdArg,napi_value fourthArg,NavDestinationSwitchParams & params)282 bool ParseNavDestSwitchUnRegisterParams(
283 napi_env env, napi_value secondArg, napi_value thirdArg,
284 napi_value fourthArg, NavDestinationSwitchParams& params)
285 {
286 std::string navigationId;
287 auto& context = secondArg;
288 auto& options = thirdArg;
289 auto& callback = fourthArg;
290 if (MatchValueType(env, context, napi_object) &&
291 IsNavDestSwitchOptions(env, options, navigationId) &&
292 MatchValueType(env, callback, napi_function)) {
293 if (IsUIAbilityContext(env, context)) {
294 // js code: observer.off('navDestinationSwitch', AbilityUIContext, { navigationId: navId }, callback)
295 params.isUIContext = false;
296 params.abilityUIContext = context;
297 } else {
298 // js code: observer.off('navDestinationSwitch', UIContext, { navigationId: navId }, callback)
299 params.uiContextInstanceId = GetUIContextInstanceId(env, context);
300 }
301 params.navigationId = navigationId;
302 params.callback = callback;
303 return true;
304 }
305
306 return false;
307 }
308
ParseNavDestSwitchUnRegisterParams(napi_env env,napi_callback_info info,NavDestinationSwitchParams & params)309 bool ParseNavDestSwitchUnRegisterParams(
310 napi_env env, napi_callback_info info, NavDestinationSwitchParams& params)
311 {
312 GET_PARAMS(env, info, PARAM_SIZE_FOUR);
313
314 if (argc == PARAM_SIZE_TWO) {
315 return ParseNavDestSwitchUnRegisterParams(env, argv[PARAM_INDEX_ONE], params);
316 } else if (argc == PARAM_SIZE_THREE) {
317 return ParseNavDestSwitchUnRegisterParams(env, argv[PARAM_INDEX_ONE], argv[PARAM_INDEX_TWO], params);
318 } else if (argc == PARAM_SIZE_FOUR) {
319 return ParseNavDestSwitchUnRegisterParams(
320 env, argv[PARAM_INDEX_ONE], argv[PARAM_INDEX_TWO], argv[PARAM_INDEX_THREE], params);
321 } else if (argc != PARAM_SIZE_ONE) {
322 return false;
323 }
324
325 return true;
326 }
327 } // namespace
328
ObserverProcess()329 ObserverProcess::ObserverProcess()
330 {
331 registerProcessMap_ = {
332 { NAVDESTINATION_UPDATE, &ObserverProcess::ProcessNavigationRegister },
333 { SCROLL_EVENT, &ObserverProcess::ProcessScrollEventRegister },
334 { ROUTERPAGE_UPDATE, &ObserverProcess::ProcessRouterPageRegister },
335 { DENSITY_UPDATE, &ObserverProcess::ProcessDensityRegister },
336 { LAYOUT_DONE, &ObserverProcess::ProcessLayoutDoneRegister },
337 { DRAW_COMMAND_SEND, &ObserverProcess::ProcessDrawCommandSendRegister },
338 { NAVDESTINATION_SWITCH, &ObserverProcess::ProcessNavDestinationSwitchRegister },
339 { WILLCLICK_UPDATE, &ObserverProcess::ProcessWillClickRegister },
340 { DIDCLICK_UPDATE, &ObserverProcess::ProcessDidClickRegister },
341 { TAB_CONTENT_STATE, &ObserverProcess::ProcessTabContentStateRegister },
342 { BEFORE_PAN_START, &ObserverProcess::ProcessBeforePanStartRegister },
343 { AFTER_PAN_START, &ObserverProcess::ProcessAfterPanStartRegister },
344 { BEFORE_PAN_END, &ObserverProcess::ProcessBeforePanEndRegister },
345 { AFTER_PAN_END, &ObserverProcess::ProcessAfterPanEndRegister },
346 };
347 unregisterProcessMap_ = {
348 { NAVDESTINATION_UPDATE, &ObserverProcess::ProcessNavigationUnRegister },
349 { SCROLL_EVENT, &ObserverProcess::ProcessScrollEventUnRegister },
350 { ROUTERPAGE_UPDATE, &ObserverProcess::ProcessRouterPageUnRegister },
351 { DENSITY_UPDATE, &ObserverProcess::ProcessDensityUnRegister },
352 { LAYOUT_DONE, &ObserverProcess::ProcessLayoutDoneUnRegister },
353 { DRAW_COMMAND_SEND, &ObserverProcess::ProcessDrawCommandSendUnRegister},
354 { NAVDESTINATION_SWITCH, &ObserverProcess::ProcessNavDestinationSwitchUnRegister },
355 { WILLCLICK_UPDATE, &ObserverProcess::ProcessWillClickUnRegister },
356 { DIDCLICK_UPDATE, &ObserverProcess::ProcessDidClickUnRegister },
357 { TAB_CONTENT_STATE, &ObserverProcess::ProcessTabContentStateUnRegister },
358 { BEFORE_PAN_START, &ObserverProcess::ProcessBeforePanStartUnRegister },
359 { AFTER_PAN_START, &ObserverProcess::ProcessAfterPanStartUnRegister },
360 { BEFORE_PAN_END, &ObserverProcess::ProcessBeforePanEndUnRegister },
361 { AFTER_PAN_END, &ObserverProcess::ProcessAfterPanEndUnRegister },
362 };
363 }
364
GetInstance()365 ObserverProcess& ObserverProcess::GetInstance()
366 {
367 static ObserverProcess instance;
368 return instance;
369 }
370
ProcessRegister(napi_env env,napi_callback_info info)371 napi_value ObserverProcess::ProcessRegister(napi_env env, napi_callback_info info)
372 {
373 GET_PARAMS(env, info, PARAM_SIZE_THREE);
374 NAPI_ASSERT(env, (argc >= PARAM_SIZE_TWO && thisVar != nullptr), "Invalid arguments");
375 std::string type;
376 if (!ParseStringFromNapi(env, argv[PARAM_INDEX_ZERO], type)) {
377 return nullptr;
378 }
379 auto it = registerProcessMap_.find(type);
380 if (it == registerProcessMap_.end()) {
381 return nullptr;
382 }
383 return (this->*(it->second))(env, info);
384 }
385
ProcessUnRegister(napi_env env,napi_callback_info info)386 napi_value ObserverProcess::ProcessUnRegister(napi_env env, napi_callback_info info)
387 {
388 GET_PARAMS(env, info, PARAM_SIZE_THREE);
389 NAPI_ASSERT(env, (argc >= PARAM_SIZE_ONE && thisVar != nullptr), "Invalid arguments");
390 std::string type;
391 if (!ParseStringFromNapi(env, argv[PARAM_INDEX_ZERO], type)) {
392 return nullptr;
393 }
394 auto it = unregisterProcessMap_.find(type);
395 if (it == unregisterProcessMap_.end()) {
396 return nullptr;
397 }
398 return (this->*(it->second))(env, info);
399 }
400
ProcessNavigationRegister(napi_env env,napi_callback_info info)401 napi_value ObserverProcess::ProcessNavigationRegister(napi_env env, napi_callback_info info)
402 {
403 GET_PARAMS(env, info, PARAM_SIZE_THREE);
404
405 if (!isNavigationHandleFuncSetted_) {
406 NG::UIObserverHandler::GetInstance().SetHandleNavigationChangeFunc(&UIObserver::HandleNavigationStateChange);
407 isNavigationHandleFuncSetted_ = true;
408 }
409
410 if (argc == PARAM_SIZE_TWO && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
411 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_ONE]);
412 UIObserver::RegisterNavigationCallback(listener);
413 }
414
415 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object) &&
416 MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
417 std::string id;
418 if (ParseNavigationId(env, argv[PARAM_INDEX_ONE], id)) {
419 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_TWO]);
420 UIObserver::RegisterNavigationCallback(id, listener);
421 }
422 }
423
424 napi_value result = nullptr;
425 return result;
426 }
427
ProcessNavigationUnRegister(napi_env env,napi_callback_info info)428 napi_value ObserverProcess::ProcessNavigationUnRegister(napi_env env, napi_callback_info info)
429 {
430 GET_PARAMS(env, info, PARAM_SIZE_THREE);
431
432 if (argc == PARAM_SIZE_ONE) {
433 UIObserver::UnRegisterNavigationCallback(nullptr);
434 }
435
436 if (argc == PARAM_SIZE_TWO && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
437 UIObserver::UnRegisterNavigationCallback(argv[PARAM_INDEX_ONE]);
438 }
439
440 if (argc == PARAM_SIZE_TWO && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object)) {
441 std::string id;
442 if (ParseNavigationId(env, argv[PARAM_INDEX_ONE], id)) {
443 UIObserver::UnRegisterNavigationCallback(id, nullptr);
444 }
445 }
446
447 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object) &&
448 MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
449 std::string id;
450 if (ParseNavigationId(env, argv[PARAM_INDEX_ONE], id)) {
451 UIObserver::UnRegisterNavigationCallback(id, argv[PARAM_INDEX_TWO]);
452 }
453 }
454
455 napi_value result = nullptr;
456 return result;
457 }
458
ProcessScrollEventRegister(napi_env env,napi_callback_info info)459 napi_value ObserverProcess::ProcessScrollEventRegister(napi_env env, napi_callback_info info)
460 {
461 GET_PARAMS(env, info, PARAM_SIZE_THREE);
462
463 if (!isScrollEventChangeFuncSetted_) {
464 NG::UIObserverHandler::GetInstance().SetHandleScrollEventChangeFunc(&UIObserver::HandleScrollEventStateChange);
465 isScrollEventChangeFuncSetted_ = true;
466 }
467 if (argc == PARAM_SIZE_TWO && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
468 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_ONE]);
469 UIObserver::RegisterScrollEventCallback(listener);
470 }
471
472 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object)
473 && MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
474 std::string id;
475 if (ParseScrollId(env, argv[PARAM_INDEX_ONE], id)) {
476 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_TWO]);
477 UIObserver::RegisterScrollEventCallback(id, listener);
478 }
479 }
480
481 napi_value result = nullptr;
482 return result;
483 }
484
ProcessScrollEventUnRegister(napi_env env,napi_callback_info info)485 napi_value ObserverProcess::ProcessScrollEventUnRegister(napi_env env, napi_callback_info info)
486 {
487 GET_PARAMS(env, info, PARAM_SIZE_THREE);
488
489 if (argc == PARAM_SIZE_ONE) {
490 UIObserver::UnRegisterScrollEventCallback(nullptr);
491 }
492
493 if (argc == PARAM_SIZE_TWO && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
494 UIObserver::UnRegisterScrollEventCallback(argv[PARAM_INDEX_ONE]);
495 }
496
497 if (argc == PARAM_SIZE_TWO && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object)) {
498 std::string id;
499 if (ParseScrollId(env, argv[PARAM_INDEX_ONE], id)) {
500 UIObserver::UnRegisterScrollEventCallback(id, nullptr);
501 }
502 }
503
504 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object)
505 && MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
506 std::string id;
507 if (ParseScrollId(env, argv[PARAM_INDEX_ONE], id)) {
508 UIObserver::UnRegisterScrollEventCallback(id, argv[PARAM_INDEX_TWO]);
509 }
510 }
511
512 napi_value result = nullptr;
513 return result;
514 }
515
ProcessRouterPageRegister(napi_env env,napi_callback_info info)516 napi_value ObserverProcess::ProcessRouterPageRegister(napi_env env, napi_callback_info info)
517 {
518 GET_PARAMS(env, info, PARAM_SIZE_THREE);
519
520 if (!isRouterPageHandleFuncSetted_) {
521 NG::UIObserverHandler::GetInstance().SetHandleRouterPageChangeFunc(&UIObserver::HandleRouterPageStateChange);
522 isRouterPageHandleFuncSetted_ = true;
523 }
524
525 if (argc == PARAM_SIZE_TWO && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
526 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_ONE]);
527 UIObserver::RegisterRouterPageCallback(0, listener);
528 }
529
530 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object) &&
531 MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
532 auto context = argv[PARAM_INDEX_ONE];
533 if (context) {
534 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_TWO]);
535 if (IsUIAbilityContext(env, context)) {
536 UIObserver::RegisterRouterPageCallback(env, context, listener);
537 } else {
538 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
539 UIObserver::RegisterRouterPageCallback(uiContextInstanceId, listener);
540 }
541 }
542 }
543
544 napi_value result = nullptr;
545 return result;
546 }
547
ProcessRouterPageUnRegister(napi_env env,napi_callback_info info)548 napi_value ObserverProcess::ProcessRouterPageUnRegister(napi_env env, napi_callback_info info)
549 {
550 GET_PARAMS(env, info, PARAM_SIZE_THREE);
551
552 if (argc == PARAM_SIZE_ONE) {
553 UIObserver::UnRegisterRouterPageCallback(0, nullptr);
554 }
555
556 if (argc == PARAM_SIZE_TWO && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
557 UIObserver::UnRegisterRouterPageCallback(0, argv[PARAM_INDEX_ONE]);
558 }
559
560 if (argc == PARAM_SIZE_TWO && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object)) {
561 napi_value context = argv[PARAM_INDEX_ONE];
562 if (context) {
563 if (IsUIAbilityContext(env, context)) {
564 UIObserver::UnRegisterRouterPageCallback(env, context, nullptr);
565 } else {
566 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
567 UIObserver::UnRegisterRouterPageCallback(uiContextInstanceId, nullptr);
568 }
569 }
570 }
571
572 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object) &&
573 MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
574 napi_value context = argv[PARAM_INDEX_ONE];
575 if (context) {
576 if (IsUIAbilityContext(env, context)) {
577 UIObserver::UnRegisterRouterPageCallback(env, context, argv[PARAM_INDEX_TWO]);
578 } else {
579 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
580 UIObserver::UnRegisterRouterPageCallback(uiContextInstanceId, argv[PARAM_INDEX_TWO]);
581 }
582 }
583 }
584
585 napi_value result = nullptr;
586 return result;
587 }
588
ProcessDensityRegister(napi_env env,napi_callback_info info)589 napi_value ObserverProcess::ProcessDensityRegister(napi_env env, napi_callback_info info)
590 {
591 GET_PARAMS(env, info, PARAM_SIZE_THREE);
592
593 if (!isDensityChangeSetted_) {
594 NG::UIObserverHandler::GetInstance().SetHandleDensityChangeFunc(&UIObserver::HandleDensityChange);
595 isDensityChangeSetted_ = true;
596 }
597 if (argc == PARAM_SIZE_TWO && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
598 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_ONE]);
599 int32_t instanceId = ContainerScope::CurrentId();
600 UIObserver::RegisterDensityCallback(instanceId, listener);
601 }
602
603 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object) &&
604 MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
605 auto context = argv[PARAM_INDEX_ONE];
606 if (context) {
607 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_TWO]);
608 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
609 UIObserver::RegisterDensityCallback(uiContextInstanceId, listener);
610 }
611 }
612
613 napi_value result = nullptr;
614 return result;
615 }
616
ProcessDensityUnRegister(napi_env env,napi_callback_info info)617 napi_value ObserverProcess::ProcessDensityUnRegister(napi_env env, napi_callback_info info)
618 {
619 GET_PARAMS(env, info, PARAM_SIZE_THREE);
620
621 if (argc == PARAM_SIZE_ONE) {
622 int32_t instanceId = ContainerScope::CurrentId();
623 UIObserver::UnRegisterDensityCallback(instanceId, nullptr);
624 }
625
626 if (argc == PARAM_SIZE_TWO && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object)) {
627 napi_value context = argv[PARAM_INDEX_ONE];
628 if (context) {
629 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
630 UIObserver::UnRegisterDensityCallback(uiContextInstanceId, nullptr);
631 }
632 }
633
634 if (argc == PARAM_SIZE_TWO && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
635 int32_t instanceId = ContainerScope::CurrentId();
636 UIObserver::UnRegisterDensityCallback(instanceId, argv[PARAM_INDEX_ONE]);
637 }
638
639 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object) &&
640 MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
641 napi_value context = argv[PARAM_INDEX_ONE];
642 if (context) {
643 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
644 UIObserver::UnRegisterDensityCallback(uiContextInstanceId, argv[PARAM_INDEX_TWO]);
645 }
646 }
647
648 napi_value result = nullptr;
649 return result;
650 }
651
ProcessDrawCommandSendRegister(napi_env env,napi_callback_info info)652 napi_value ObserverProcess::ProcessDrawCommandSendRegister(napi_env env, napi_callback_info info)
653 {
654 GET_PARAMS(env, info, 3); // 3: Param Size Three
655
656 if (!isDrawCommandSendChangeSetted_) {
657 NG::UIObserverHandler::GetInstance().SetDrawCommandSendHandleFunc(&UIObserver::HandDrawCommandSendChange);
658 isDrawCommandSendChangeSetted_ = true;
659 }
660
661 if (argc == 2 && MatchValueType(env, argv[1], napi_function)) { // 2: Param Size Two
662 auto listener = std::make_shared<UIObserverListener>(env, argv[1]);
663 int32_t instanceId = ContainerScope::CurrentId();
664 UIObserver::RegisterDrawCallback(instanceId, listener);
665 }
666 if (argc == 3 && MatchValueType(env, argv[1], napi_object) && // 3: Param Size Three
667 MatchValueType(env, argv[2], napi_function)) { // 2: Param Index Two
668 auto context = argv[1];
669 if (context) {
670 auto listener = std::make_shared<UIObserverListener>(env, argv[2]); // 2: Param Index Two
671 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
672 UIObserver::RegisterDrawCallback(uiContextInstanceId, listener);
673 }
674 }
675 napi_value result = nullptr;
676 return result;
677 }
678
ProcessDrawCommandSendUnRegister(napi_env env,napi_callback_info info)679 napi_value ObserverProcess::ProcessDrawCommandSendUnRegister(napi_env env, napi_callback_info info)
680 {
681 GET_PARAMS(env, info, 3); // 3: Param Size Three
682
683 if (argc == 1) {
684 int32_t instanceId = ContainerScope::CurrentId();
685 UIObserver::UnRegisterDrawCallback(instanceId, nullptr);
686 }
687
688 if (argc == 2 && MatchValueType(env, argv[1], napi_object)) { // 2: Param Size Two
689 napi_value context = argv[1];
690 if (context) {
691 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
692 UIObserver::UnRegisterDrawCallback(uiContextInstanceId, nullptr);
693 }
694 }
695
696 if (argc == 2 && MatchValueType(env, argv[1], napi_function)) { // 2: Param Size Two
697 int32_t instanceId = ContainerScope::CurrentId();
698 UIObserver::UnRegisterDrawCallback(instanceId, argv[1]);
699 }
700
701 if (argc == 3 && MatchValueType(env, argv[1], napi_object) && // 3: Param Size Three
702 MatchValueType(env, argv[2], napi_function)) { // 2: Param Index Two
703 napi_value context = argv[1];
704 if (context) {
705 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
706 UIObserver::UnRegisterDrawCallback(uiContextInstanceId, argv[2]); // 2: Param Index Two
707 }
708 }
709
710 napi_value result = nullptr;
711 return result;
712 }
713
ProcessLayoutDoneRegister(napi_env env,napi_callback_info info)714 napi_value ObserverProcess::ProcessLayoutDoneRegister(napi_env env, napi_callback_info info)
715 {
716 GET_PARAMS(env, info, 3); // 3: Param Size Three
717
718 if (!isLayoutDoneChangeSetted_) {
719 NG::UIObserverHandler::GetInstance().SetLayoutDoneHandleFunc(&UIObserver::HandLayoutDoneChange);
720 isLayoutDoneChangeSetted_ = true;
721 }
722
723 if (argc == 2 && MatchValueType(env, argv[1], napi_function)) { // 2: Param Size Two
724 auto listener = std::make_shared<UIObserverListener>(env, argv[1]);
725 int32_t instanceId = ContainerScope::CurrentId();
726 UIObserver::RegisterLayoutCallback(instanceId, listener);
727 }
728 if (argc == 3 && MatchValueType(env, argv[1], napi_object) && // 3: Param Size Three
729 MatchValueType(env, argv[2], napi_function)) { // 2: Param Index Two
730 auto context = argv[1];
731 if (context) {
732 auto listener = std::make_shared<UIObserverListener>(env, argv[2]); // 2: Param Index Two
733 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
734 UIObserver::RegisterLayoutCallback(uiContextInstanceId, listener);
735 }
736 }
737 napi_value result = nullptr;
738 return result;
739 }
740
ProcessLayoutDoneUnRegister(napi_env env,napi_callback_info info)741 napi_value ObserverProcess::ProcessLayoutDoneUnRegister(napi_env env, napi_callback_info info)
742 {
743 GET_PARAMS(env, info, 3); // 3: Param Size Three
744
745 if (argc == 1) {
746 int32_t instanceId = ContainerScope::CurrentId();
747 UIObserver::UnRegisterLayoutCallback(instanceId, nullptr);
748 }
749
750 if (argc == 2 && MatchValueType(env, argv[1], napi_object)) { // 2: Param Size Two
751 napi_value context = argv[1];
752 if (context) {
753 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
754 UIObserver::UnRegisterLayoutCallback(uiContextInstanceId, nullptr);
755 }
756 }
757
758 if (argc == 2 && MatchValueType(env, argv[1], napi_function)) { // 2: Param Size Two
759 int32_t instanceId = ContainerScope::CurrentId();
760 UIObserver::UnRegisterLayoutCallback(instanceId, argv[1]);
761 }
762
763 if (argc == 3 && MatchValueType(env, argv[1], napi_object) && // 3: Param Size Three
764 MatchValueType(env, argv[2], napi_function)) { // 2: Param Index Two
765 napi_value context = argv[1];
766 if (context) {
767 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
768 UIObserver::UnRegisterLayoutCallback(uiContextInstanceId, argv[2]); // 2: Param Index Two
769 }
770 }
771
772 napi_value result = nullptr;
773 return result;
774 }
775
ProcessNavDestinationSwitchRegister(napi_env env,napi_callback_info info)776 napi_value ObserverProcess::ProcessNavDestinationSwitchRegister(napi_env env, napi_callback_info info)
777 {
778 NavDestinationSwitchParams params;
779 if (!ParseNavDestSwitchRegisterParams(env, info, params)) {
780 return nullptr;
781 }
782
783 if (!isDestinationSwitchHandleFuncSetted_) {
784 NG::UIObserverHandler::GetInstance().SetHandleNavDestinationSwitchFunc(&UIObserver::HandleNavDestinationSwitch);
785 isDestinationSwitchHandleFuncSetted_ = true;
786 }
787
788 auto listener = std::make_shared<UIObserverListener>(env, params.callback);
789 if (params.isUIContext) {
790 UIObserver::RegisterNavDestinationSwitchCallback(params.uiContextInstanceId, params.navigationId, listener);
791 } else {
792 UIObserver::RegisterNavDestinationSwitchCallback(env, params.abilityUIContext, params.navigationId, listener);
793 }
794
795 return nullptr;
796 }
797
ProcessNavDestinationSwitchUnRegister(napi_env env,napi_callback_info info)798 napi_value ObserverProcess::ProcessNavDestinationSwitchUnRegister(napi_env env, napi_callback_info info)
799 {
800 NavDestinationSwitchParams params;
801 if (!ParseNavDestSwitchUnRegisterParams(env, info, params)) {
802 return nullptr;
803 }
804
805 if (params.isUIContext) {
806 UIObserver::UnRegisterNavDestinationSwitchCallback(
807 params.uiContextInstanceId, params.navigationId, params.callback);
808 } else {
809 UIObserver::UnRegisterNavDestinationSwitchCallback(
810 env, params.abilityUIContext, params.navigationId, params.callback);
811 }
812
813 return nullptr;
814 }
815
ProcessWillClickRegister(napi_env env,napi_callback_info info)816 napi_value ObserverProcess::ProcessWillClickRegister(napi_env env, napi_callback_info info)
817 {
818 GET_PARAMS(env, info, PARAM_SIZE_THREE);
819
820 if (!isWillClickFuncSetted_) {
821 NG::UIObserverHandler::GetInstance().SetWillClickFunc(&UIObserver::HandleWillClick);
822 isWillClickFuncSetted_ = true;
823 }
824
825 if (argc == PARAM_SIZE_TWO && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
826 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_ONE]);
827 UIObserver::RegisterWillClickCallback(0, listener);
828 }
829
830 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object) &&
831 MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
832 auto context = argv[PARAM_INDEX_ONE];
833 if (context) {
834 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_TWO]);
835 if (IsUIAbilityContext(env, context)) {
836 UIObserver::RegisterWillClickCallback(env, context, listener);
837 } else {
838 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
839 UIObserver::RegisterWillClickCallback(uiContextInstanceId, listener);
840 }
841 }
842 }
843
844 return nullptr;
845 }
846
ProcessWillClickUnRegister(napi_env env,napi_callback_info info)847 napi_value ObserverProcess::ProcessWillClickUnRegister(napi_env env, napi_callback_info info)
848 {
849 GET_PARAMS(env, info, PARAM_SIZE_THREE);
850
851 if (argc == PARAM_SIZE_ONE) {
852 UIObserver::UnRegisterWillClickCallback(0, nullptr);
853 }
854
855 if (argc == PARAM_SIZE_TWO) {
856 if (MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
857 UIObserver::UnRegisterWillClickCallback(0, argv[PARAM_INDEX_ONE]);
858 } else if (MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object)) {
859 napi_value context = argv[PARAM_INDEX_ONE];
860 if (!context) {
861 return nullptr;
862 }
863 if (IsUIAbilityContext(env, context)) {
864 UIObserver::UnRegisterWillClickCallback(env, context, nullptr);
865 } else {
866 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
867 UIObserver::UnRegisterWillClickCallback(uiContextInstanceId, nullptr);
868 }
869 }
870 }
871
872 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object) &&
873 MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
874 napi_value context = argv[PARAM_INDEX_ONE];
875 if (context) {
876 if (IsUIAbilityContext(env, context)) {
877 UIObserver::UnRegisterWillClickCallback(env, context, argv[PARAM_INDEX_TWO]);
878 } else {
879 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
880 UIObserver::UnRegisterWillClickCallback(uiContextInstanceId, argv[PARAM_INDEX_TWO]);
881 }
882 }
883 }
884
885 return nullptr;
886 }
887
ProcessDidClickRegister(napi_env env,napi_callback_info info)888 napi_value ObserverProcess::ProcessDidClickRegister(napi_env env, napi_callback_info info)
889 {
890 GET_PARAMS(env, info, PARAM_SIZE_THREE);
891
892 if (!isDidClickFuncSetted_) {
893 NG::UIObserverHandler::GetInstance().SetDidClickFunc(&UIObserver::HandleDidClick);
894 isDidClickFuncSetted_ = true;
895 }
896
897 if (argc == PARAM_SIZE_TWO && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
898 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_ONE]);
899 UIObserver::RegisterDidClickCallback(0, listener);
900 }
901
902 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object) &&
903 MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
904 auto context = argv[PARAM_INDEX_ONE];
905 if (context) {
906 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_TWO]);
907 if (IsUIAbilityContext(env, context)) {
908 UIObserver::RegisterDidClickCallback(env, context, listener);
909 } else {
910 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
911 UIObserver::RegisterDidClickCallback(uiContextInstanceId, listener);
912 }
913 }
914 }
915
916 return nullptr;
917 }
918
ProcessDidClickUnRegister(napi_env env,napi_callback_info info)919 napi_value ObserverProcess::ProcessDidClickUnRegister(napi_env env, napi_callback_info info)
920 {
921 GET_PARAMS(env, info, PARAM_SIZE_THREE);
922
923 if (argc == PARAM_SIZE_ONE) {
924 UIObserver::UnRegisterDidClickCallback(0, nullptr);
925 }
926
927 if (argc == PARAM_SIZE_TWO) {
928 if (MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
929 UIObserver::UnRegisterDidClickCallback(0, argv[PARAM_INDEX_ONE]);
930 } else if (MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object)) {
931 napi_value context = argv[PARAM_INDEX_ONE];
932 if (!context) {
933 return nullptr;
934 }
935 if (IsUIAbilityContext(env, context)) {
936 UIObserver::UnRegisterDidClickCallback(env, context, nullptr);
937 } else {
938 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
939 UIObserver::UnRegisterDidClickCallback(uiContextInstanceId, nullptr);
940 }
941 }
942 }
943
944 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object) &&
945 MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
946 napi_value context = argv[PARAM_INDEX_ONE];
947 if (context) {
948 if (IsUIAbilityContext(env, context)) {
949 UIObserver::UnRegisterDidClickCallback(env, context, argv[PARAM_INDEX_TWO]);
950 } else {
951 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
952 UIObserver::UnRegisterDidClickCallback(uiContextInstanceId, argv[PARAM_INDEX_TWO]);
953 }
954 }
955 }
956
957 return nullptr;
958 }
959
ProcessTabContentStateRegister(napi_env env,napi_callback_info info)960 napi_value ObserverProcess::ProcessTabContentStateRegister(napi_env env, napi_callback_info info)
961 {
962 GET_PARAMS(env, info, PARAM_SIZE_THREE);
963
964 if (!isTabContentStateUpdateFuncSetted_) {
965 NG::UIObserverHandler::GetInstance().SetHandleTabContentStateUpdateFunc(
966 &UIObserver::HandleTabContentStateChange);
967 isTabContentStateUpdateFuncSetted_ = true;
968 }
969
970 if (argc == PARAM_SIZE_TWO && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
971 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_ONE]);
972 UIObserver::RegisterTabContentStateCallback(listener);
973 }
974
975 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object)
976 && MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
977 std::string id;
978 if (ParseScrollId(env, argv[PARAM_INDEX_ONE], id)) {
979 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_TWO]);
980 UIObserver::RegisterTabContentStateCallback(id, listener);
981 }
982 }
983
984 napi_value result = nullptr;
985 return result;
986 }
987
ProcessTabContentStateUnRegister(napi_env env,napi_callback_info info)988 napi_value ObserverProcess::ProcessTabContentStateUnRegister(napi_env env, napi_callback_info info)
989 {
990 GET_PARAMS(env, info, PARAM_SIZE_THREE);
991
992 if (argc == PARAM_SIZE_ONE) {
993 UIObserver::UnRegisterTabContentStateCallback(nullptr);
994 }
995
996 if (argc == PARAM_SIZE_TWO && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
997 UIObserver::UnRegisterTabContentStateCallback(argv[PARAM_INDEX_ONE]);
998 }
999
1000 if (argc == PARAM_SIZE_TWO && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object)) {
1001 std::string id;
1002 if (ParseScrollId(env, argv[PARAM_INDEX_ONE], id)) {
1003 UIObserver::UnRegisterTabContentStateCallback(id, nullptr);
1004 }
1005 }
1006
1007 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object)
1008 && MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
1009 std::string id;
1010 if (ParseScrollId(env, argv[PARAM_INDEX_ONE], id)) {
1011 UIObserver::UnRegisterTabContentStateCallback(id, argv[PARAM_INDEX_TWO]);
1012 }
1013 }
1014
1015 napi_value result = nullptr;
1016 return result;
1017 }
1018
ProcessBeforePanStartRegister(napi_env env,napi_callback_info info)1019 napi_value ObserverProcess::ProcessBeforePanStartRegister(napi_env env, napi_callback_info info)
1020 {
1021 GET_PARAMS(env, info, PARAM_SIZE_THREE);
1022
1023 if (!isPanGestureHandleFuncSetted_) {
1024 NG::UIObserverHandler::GetInstance().SetPanGestureHandleFunc(&UIObserver::HandlePanGestureAccept);
1025 isPanGestureHandleFuncSetted_ = true;
1026 }
1027
1028 if (argc == PARAM_SIZE_TWO && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
1029 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_ONE]);
1030 UIObserver::RegisterBeforePanStartCallback(0, listener);
1031 }
1032
1033 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object) &&
1034 MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
1035 auto context = argv[PARAM_INDEX_ONE];
1036 if (context) {
1037 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_TWO]);
1038 if (IsUIAbilityContext(env, context)) {
1039 UIObserver::RegisterBeforePanStartCallback(env, context, listener);
1040 } else {
1041 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
1042 UIObserver::RegisterBeforePanStartCallback(uiContextInstanceId, listener);
1043 }
1044 }
1045 }
1046
1047 return nullptr;
1048 }
1049
ProcessBeforePanStartUnRegister(napi_env env,napi_callback_info info)1050 napi_value ObserverProcess::ProcessBeforePanStartUnRegister(napi_env env, napi_callback_info info)
1051 {
1052 GET_PARAMS(env, info, PARAM_SIZE_THREE);
1053
1054 if (argc == PARAM_SIZE_ONE) {
1055 UIObserver::UnRegisterBeforePanStartCallback(0, nullptr);
1056 }
1057
1058 if (argc == PARAM_SIZE_TWO) {
1059 if (MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
1060 UIObserver::UnRegisterBeforePanStartCallback(0, argv[PARAM_INDEX_ONE]);
1061 } else if (MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object)) {
1062 napi_value context = argv[PARAM_INDEX_ONE];
1063 if (!context) {
1064 return nullptr;
1065 }
1066 if (IsUIAbilityContext(env, context)) {
1067 UIObserver::UnRegisterBeforePanStartCallback(env, context, nullptr);
1068 } else {
1069 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
1070 UIObserver::UnRegisterBeforePanStartCallback(uiContextInstanceId, nullptr);
1071 }
1072 }
1073 }
1074
1075 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object) &&
1076 MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
1077 napi_value context = argv[PARAM_INDEX_ONE];
1078 if (context) {
1079 if (IsUIAbilityContext(env, context)) {
1080 UIObserver::UnRegisterBeforePanStartCallback(env, context, argv[PARAM_INDEX_TWO]);
1081 } else {
1082 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
1083 UIObserver::UnRegisterBeforePanStartCallback(uiContextInstanceId, argv[PARAM_INDEX_TWO]);
1084 }
1085 }
1086 }
1087
1088 return nullptr;
1089 }
1090
ProcessBeforePanEndRegister(napi_env env,napi_callback_info info)1091 napi_value ObserverProcess::ProcessBeforePanEndRegister(napi_env env, napi_callback_info info)
1092 {
1093 GET_PARAMS(env, info, PARAM_SIZE_THREE);
1094
1095 if (!isPanGestureHandleFuncSetted_) {
1096 NG::UIObserverHandler::GetInstance().SetPanGestureHandleFunc(&UIObserver::HandlePanGestureAccept);
1097 isPanGestureHandleFuncSetted_ = true;
1098 }
1099
1100 if (argc == PARAM_SIZE_TWO && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
1101 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_ONE]);
1102 UIObserver::RegisterBeforePanEndCallback(0, listener);
1103 }
1104
1105 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object) &&
1106 MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
1107 auto context = argv[PARAM_INDEX_ONE];
1108 if (context) {
1109 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_TWO]);
1110 if (IsUIAbilityContext(env, context)) {
1111 UIObserver::RegisterBeforePanEndCallback(env, context, listener);
1112 } else {
1113 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
1114 UIObserver::RegisterBeforePanEndCallback(uiContextInstanceId, listener);
1115 }
1116 }
1117 }
1118
1119 return nullptr;
1120 }
1121
ProcessBeforePanEndUnRegister(napi_env env,napi_callback_info info)1122 napi_value ObserverProcess::ProcessBeforePanEndUnRegister(napi_env env, napi_callback_info info)
1123 {
1124 GET_PARAMS(env, info, PARAM_SIZE_THREE);
1125
1126 if (argc == PARAM_SIZE_ONE) {
1127 UIObserver::UnRegisterBeforePanEndCallback(0, nullptr);
1128 }
1129
1130 if (argc == PARAM_SIZE_TWO) {
1131 if (MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
1132 UIObserver::UnRegisterBeforePanEndCallback(0, argv[PARAM_INDEX_ONE]);
1133 } else if (MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object)) {
1134 napi_value context = argv[PARAM_INDEX_ONE];
1135 if (!context) {
1136 return nullptr;
1137 }
1138 if (IsUIAbilityContext(env, context)) {
1139 UIObserver::UnRegisterBeforePanEndCallback(env, context, nullptr);
1140 } else {
1141 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
1142 UIObserver::UnRegisterBeforePanEndCallback(uiContextInstanceId, nullptr);
1143 }
1144 }
1145 }
1146
1147 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object) &&
1148 MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
1149 napi_value context = argv[PARAM_INDEX_ONE];
1150 if (context) {
1151 if (IsUIAbilityContext(env, context)) {
1152 UIObserver::UnRegisterBeforePanEndCallback(env, context, argv[PARAM_INDEX_TWO]);
1153 } else {
1154 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
1155 UIObserver::UnRegisterBeforePanEndCallback(uiContextInstanceId, argv[PARAM_INDEX_TWO]);
1156 }
1157 }
1158 }
1159
1160 return nullptr;
1161 }
1162
ProcessAfterPanStartRegister(napi_env env,napi_callback_info info)1163 napi_value ObserverProcess::ProcessAfterPanStartRegister(napi_env env, napi_callback_info info)
1164 {
1165 GET_PARAMS(env, info, PARAM_SIZE_THREE);
1166
1167 if (!isPanGestureHandleFuncSetted_) {
1168 NG::UIObserverHandler::GetInstance().SetPanGestureHandleFunc(&UIObserver::HandlePanGestureAccept);
1169 isPanGestureHandleFuncSetted_ = true;
1170 }
1171
1172 if (argc == PARAM_SIZE_TWO && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
1173 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_ONE]);
1174 UIObserver::RegisterAfterPanStartCallback(0, listener);
1175 }
1176
1177 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object) &&
1178 MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
1179 auto context = argv[PARAM_INDEX_ONE];
1180 if (context) {
1181 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_TWO]);
1182 if (IsUIAbilityContext(env, context)) {
1183 UIObserver::RegisterAfterPanStartCallback(env, context, listener);
1184 } else {
1185 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
1186 UIObserver::RegisterAfterPanStartCallback(uiContextInstanceId, listener);
1187 }
1188 }
1189 }
1190
1191 return nullptr;
1192 }
1193
ProcessAfterPanStartUnRegister(napi_env env,napi_callback_info info)1194 napi_value ObserverProcess::ProcessAfterPanStartUnRegister(napi_env env, napi_callback_info info)
1195 {
1196 GET_PARAMS(env, info, PARAM_SIZE_THREE);
1197
1198 if (argc == PARAM_SIZE_ONE) {
1199 UIObserver::UnRegisterBeforePanStartCallback(0, nullptr);
1200 }
1201
1202 if (argc == PARAM_SIZE_TWO) {
1203 if (MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
1204 UIObserver::UnRegisterAfterPanStartCallback(0, argv[PARAM_INDEX_ONE]);
1205 } else if (MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object)) {
1206 napi_value context = argv[PARAM_INDEX_ONE];
1207 if (!context) {
1208 return nullptr;
1209 }
1210 if (IsUIAbilityContext(env, context)) {
1211 UIObserver::UnRegisterAfterPanStartCallback(env, context, nullptr);
1212 } else {
1213 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
1214 UIObserver::UnRegisterAfterPanStartCallback(uiContextInstanceId, nullptr);
1215 }
1216 }
1217 }
1218
1219 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object) &&
1220 MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
1221 napi_value context = argv[PARAM_INDEX_ONE];
1222 if (context) {
1223 if (IsUIAbilityContext(env, context)) {
1224 UIObserver::UnRegisterAfterPanStartCallback(env, context, argv[PARAM_INDEX_TWO]);
1225 } else {
1226 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
1227 UIObserver::UnRegisterAfterPanStartCallback(uiContextInstanceId, argv[PARAM_INDEX_TWO]);
1228 }
1229 }
1230 }
1231
1232 return nullptr;
1233 }
1234
ProcessAfterPanEndRegister(napi_env env,napi_callback_info info)1235 napi_value ObserverProcess::ProcessAfterPanEndRegister(napi_env env, napi_callback_info info)
1236 {
1237 GET_PARAMS(env, info, PARAM_SIZE_THREE);
1238
1239 if (!isPanGestureHandleFuncSetted_) {
1240 NG::UIObserverHandler::GetInstance().SetPanGestureHandleFunc(&UIObserver::HandlePanGestureAccept);
1241 isPanGestureHandleFuncSetted_ = true;
1242 }
1243
1244 if (argc == PARAM_SIZE_TWO && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
1245 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_ONE]);
1246 UIObserver::RegisterAfterPanEndCallback(0, listener);
1247 }
1248
1249 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object) &&
1250 MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
1251 auto context = argv[PARAM_INDEX_ONE];
1252 if (context) {
1253 auto listener = std::make_shared<UIObserverListener>(env, argv[PARAM_INDEX_TWO]);
1254 if (IsUIAbilityContext(env, context)) {
1255 UIObserver::RegisterAfterPanEndCallback(env, context, listener);
1256 } else {
1257 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
1258 UIObserver::RegisterAfterPanEndCallback(uiContextInstanceId, listener);
1259 }
1260 }
1261 }
1262
1263 return nullptr;
1264 }
1265
ProcessAfterPanEndUnRegister(napi_env env,napi_callback_info info)1266 napi_value ObserverProcess::ProcessAfterPanEndUnRegister(napi_env env, napi_callback_info info)
1267 {
1268 GET_PARAMS(env, info, PARAM_SIZE_THREE);
1269
1270 if (argc == PARAM_SIZE_ONE) {
1271 UIObserver::UnRegisterAfterPanEndCallback(0, nullptr);
1272 }
1273
1274 if (argc == PARAM_SIZE_TWO) {
1275 if (MatchValueType(env, argv[PARAM_INDEX_ONE], napi_function)) {
1276 UIObserver::UnRegisterAfterPanEndCallback(0, argv[PARAM_INDEX_ONE]);
1277 } else if (MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object)) {
1278 napi_value context = argv[PARAM_INDEX_ONE];
1279 if (!context) {
1280 return nullptr;
1281 }
1282 if (IsUIAbilityContext(env, context)) {
1283 UIObserver::UnRegisterAfterPanEndCallback(env, context, nullptr);
1284 } else {
1285 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
1286 UIObserver::UnRegisterAfterPanEndCallback(uiContextInstanceId, nullptr);
1287 }
1288 }
1289 }
1290
1291 if (argc == PARAM_SIZE_THREE && MatchValueType(env, argv[PARAM_INDEX_ONE], napi_object) &&
1292 MatchValueType(env, argv[PARAM_INDEX_TWO], napi_function)) {
1293 napi_value context = argv[PARAM_INDEX_ONE];
1294 if (context) {
1295 if (IsUIAbilityContext(env, context)) {
1296 UIObserver::UnRegisterAfterPanEndCallback(env, context, argv[PARAM_INDEX_TWO]);
1297 } else {
1298 auto uiContextInstanceId = GetUIContextInstanceId(env, context);
1299 UIObserver::UnRegisterAfterPanEndCallback(uiContextInstanceId, argv[PARAM_INDEX_TWO]);
1300 }
1301 }
1302 }
1303
1304 return nullptr;
1305 }
1306
ObserverOn(napi_env env,napi_callback_info info)1307 napi_value ObserverOn(napi_env env, napi_callback_info info)
1308 {
1309 return ObserverProcess::GetInstance().ProcessRegister(env, info);
1310 }
1311
ObserverOff(napi_env env,napi_callback_info info)1312 napi_value ObserverOff(napi_env env, napi_callback_info info)
1313 {
1314 return ObserverProcess::GetInstance().ProcessUnRegister(env, info);
1315 }
1316
AddToScrollEventType(napi_env env)1317 napi_value AddToScrollEventType(napi_env env)
1318 {
1319 napi_value scrollEventType = nullptr;
1320 napi_value prop = nullptr;
1321 napi_create_object(env, &scrollEventType);
1322 napi_create_uint32(env, SCROLL_START, &prop);
1323 napi_set_named_property(env, scrollEventType, "SCROLL_START", prop);
1324 napi_create_uint32(env, SCROLL_STOP, &prop);
1325 napi_set_named_property(env, scrollEventType, "SCROLL_STOP", prop);
1326 return scrollEventType;
1327 }
1328
AddToRouterPageState(napi_env env)1329 napi_value AddToRouterPageState(napi_env env)
1330 {
1331 napi_value routerPageState = nullptr;
1332 napi_value prop = nullptr;
1333 napi_create_object(env, &routerPageState);
1334 napi_create_uint32(env, ABOUT_TO_APPEAR, &prop);
1335 napi_set_named_property(env, routerPageState, "ABOUT_TO_APPEAR", prop);
1336 napi_create_uint32(env, ABOUT_TO_DISAPPEAR, &prop);
1337 napi_set_named_property(env, routerPageState, "ABOUT_TO_DISAPPEAR", prop);
1338 napi_create_uint32(env, ON_PAGE_SHOW, &prop);
1339 napi_set_named_property(env, routerPageState, "ON_PAGE_SHOW", prop);
1340 napi_create_uint32(env, ON_PAGE_HIDE, &prop);
1341 napi_set_named_property(env, routerPageState, "ON_PAGE_HIDE", prop);
1342 napi_create_uint32(env, ON_BACK_PRESS, &prop);
1343 napi_set_named_property(env, routerPageState, "ON_BACK_PRESS", prop);
1344 return routerPageState;
1345 }
1346
CreateNavDestinationState(napi_env env)1347 napi_value CreateNavDestinationState(napi_env env)
1348 {
1349 napi_value navDestinationState = nullptr;
1350 napi_create_object(env, &navDestinationState);
1351 napi_value prop = nullptr;
1352 napi_create_uint32(env, ON_SHOWN, &prop);
1353 napi_set_named_property(env, navDestinationState, "ON_SHOWN", prop);
1354 napi_create_uint32(env, ON_HIDDEN, &prop);
1355 napi_set_named_property(env, navDestinationState, "ON_HIDDEN", prop);
1356 napi_create_uint32(env, ON_APPEAR, &prop);
1357 napi_set_named_property(env, navDestinationState, "ON_APPEAR", prop);
1358 napi_create_uint32(env, ON_DISAPPEAR, &prop);
1359 napi_set_named_property(env, navDestinationState, "ON_DISAPPEAR", prop);
1360 napi_create_uint32(env, ON_WILL_SHOW, &prop);
1361 napi_set_named_property(env, navDestinationState, "ON_WILL_SHOW", prop);
1362 napi_create_uint32(env, ON_WILL_HIDE, &prop);
1363 napi_set_named_property(env, navDestinationState, "ON_WILL_HIDE", prop);
1364 napi_create_uint32(env, ON_WILL_APPEAR, &prop);
1365 napi_set_named_property(env, navDestinationState, "ON_WILL_APPEAR", prop);
1366 napi_create_uint32(env, ON_WILL_DISAPPEAR, &prop);
1367 napi_set_named_property(env, navDestinationState, "ON_WILL_DISAPPEAR", prop);
1368 napi_create_uint32(env, ON_BACKPRESS, &prop);
1369 napi_set_named_property(env, navDestinationState, "ON_BACKPRESS", prop);
1370 napi_create_uint32(env, ON_ACTIVE, &prop);
1371 napi_set_named_property(env, navDestinationState, "ON_ACTIVE", prop);
1372 napi_create_uint32(env, ON_INACTIVE, &prop);
1373 napi_set_named_property(env, navDestinationState, "ON_INACTIVE", prop);
1374 return navDestinationState;
1375 }
1376
AddToTabContentState(napi_env env)1377 napi_value AddToTabContentState(napi_env env)
1378 {
1379 napi_value tabContentState = nullptr;
1380 napi_value prop = nullptr;
1381 napi_create_object(env, &tabContentState);
1382 napi_create_uint32(env, ON_SHOW, &prop);
1383 napi_set_named_property(env, tabContentState, "ON_SHOW", prop);
1384 napi_create_uint32(env, ON_HIDE, &prop);
1385 napi_set_named_property(env, tabContentState, "ON_HIDE", prop);
1386 return tabContentState;
1387 }
1388
AddToGestureType(napi_env env)1389 napi_value AddToGestureType(napi_env env)
1390 {
1391 napi_value gestureType = nullptr;
1392 napi_value prop = nullptr;
1393 napi_create_object(env, &gestureType);
1394 napi_create_uint32(env, TAP_GESTURE, &prop);
1395 napi_set_named_property(env, gestureType, "TAP_GESTURE", prop);
1396 napi_create_uint32(env, LONG_PRESS_GESTURE, &prop);
1397 napi_set_named_property(env, gestureType, "LONG_PRESS_GESTURE", prop);
1398 napi_create_uint32(env, PAN_GESTURE, &prop);
1399 napi_set_named_property(env, gestureType, "PAN_GESTURE", prop);
1400 napi_create_uint32(env, PINCH_GESTURE, &prop);
1401 napi_set_named_property(env, gestureType, "PINCH_GESTURE", prop);
1402 napi_create_uint32(env, SWIPE_GESTURE, &prop);
1403 napi_set_named_property(env, gestureType, "SWIPE_GESTURE", prop);
1404 napi_create_uint32(env, ROTATION_GESTURE, &prop);
1405 napi_set_named_property(env, gestureType, "ROTATION_GESTURE", prop);
1406 napi_create_uint32(env, DRAG, &prop);
1407 napi_set_named_property(env, gestureType, "DRAG", prop);
1408 napi_create_uint32(env, CLICK, &prop);
1409 napi_set_named_property(env, gestureType, "CLICK", prop);
1410 return gestureType;
1411 }
1412
AddToGestureRecognizerState(napi_env env)1413 napi_value AddToGestureRecognizerState(napi_env env)
1414 {
1415 napi_value gestureRecognizerState = nullptr;
1416 napi_value prop = nullptr;
1417 napi_create_object(env, &gestureRecognizerState);
1418 napi_create_uint32(env, READY, &prop);
1419 napi_set_named_property(env, gestureRecognizerState, "READY", prop);
1420 napi_create_uint32(env, DETECTING, &prop);
1421 napi_set_named_property(env, gestureRecognizerState, "DETECTING", prop);
1422 napi_create_uint32(env, PENDING, &prop);
1423 napi_set_named_property(env, gestureRecognizerState, "PENDING", prop);
1424 napi_create_uint32(env, BLOCKED, &prop);
1425 napi_set_named_property(env, gestureRecognizerState, "BLOCKED", prop);
1426 napi_create_uint32(env, SUCCESSFUL, &prop);
1427 napi_set_named_property(env, gestureRecognizerState, "SUCCESSFUL", prop);
1428 napi_create_uint32(env, FAILED, &prop);
1429 napi_set_named_property(env, gestureRecognizerState, "FAILED", prop);
1430 return gestureRecognizerState;
1431 }
1432
UIObserverExport(napi_env env,napi_value exports)1433 static napi_value UIObserverExport(napi_env env, napi_value exports)
1434 {
1435 napi_value navDestinationState = CreateNavDestinationState(env);
1436
1437 napi_value scrollEventType = nullptr;
1438 scrollEventType = AddToScrollEventType(env);
1439
1440 napi_value routerPageState = nullptr;
1441 routerPageState = AddToRouterPageState(env);
1442
1443 napi_value tabContentState = nullptr;
1444 tabContentState = AddToTabContentState(env);
1445
1446 napi_value gestureType = nullptr;
1447 gestureType = AddToGestureType(env);
1448
1449 napi_value gestureRecognizerState = nullptr;
1450 gestureRecognizerState = AddToGestureRecognizerState(env);
1451
1452 napi_property_descriptor uiObserverDesc[] = {
1453 DECLARE_NAPI_FUNCTION("on", ObserverOn),
1454 DECLARE_NAPI_FUNCTION("off", ObserverOff),
1455 DECLARE_NAPI_PROPERTY("NavDestinationState", navDestinationState),
1456 DECLARE_NAPI_PROPERTY("ScrollEventType", scrollEventType),
1457 DECLARE_NAPI_PROPERTY("RouterPageState", routerPageState),
1458 DECLARE_NAPI_PROPERTY("TabContentState", tabContentState),
1459 DECLARE_NAPI_PROPERTY("GestureType", gestureType),
1460 DECLARE_NAPI_PROPERTY("GestureRecognizerState", gestureRecognizerState),
1461 };
1462 NAPI_CALL(
1463 env, napi_define_properties(env, exports, sizeof(uiObserverDesc) / sizeof(uiObserverDesc[0]), uiObserverDesc));
1464 return exports;
1465 }
1466
1467 static napi_module uiObserverModule = {
1468 .nm_version = 1,
1469 .nm_flags = 0,
1470 .nm_filename = nullptr,
1471 .nm_register_func = UIObserverExport,
1472 .nm_modname = "arkui.observer",
1473 .nm_priv = ((void*)0),
1474 .reserved = { 0 },
1475 };
1476
ObserverRegister()1477 extern "C" __attribute__((constructor)) void ObserverRegister()
1478 {
1479 napi_module_register(&uiObserverModule);
1480 }
1481 } // namespace OHOS::Ace::Napi
1482