• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 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 #include "napi/native_api.h"
16 #include <cstddef>
17 #include <cstdint>
18 #include <cstdio>
19 #define LOG_TAG "DisplayManager_NDK"
20 #include <hilog/log.h>
21 #include <window_manager/oh_display_info.h>
22 #include <window_manager/oh_display_manager.h>
23 
24 
Add(napi_env env,napi_callback_info info)25 static napi_value Add(napi_env env, napi_callback_info info)
26 {
27     size_t argc = 2;
28     napi_value args[2] = {nullptr};
29 
30     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
31 
32     napi_valuetype valuetype0;
33     napi_typeof(env, args[0], &valuetype0);
34 
35     napi_valuetype valuetype1;
36     napi_typeof(env, args[1], &valuetype1);
37 
38     double value0;
39     napi_get_value_double(env, args[0], &value0);
40 
41     double value1;
42     napi_get_value_double(env, args[1], &value1);
43 
44     napi_value sum;
45     napi_create_double(env, value0 + value1, &sum);
46 
47     return sum;
48 }
49 
ThrowError(napi_env env,uint32_t errCode,const char * errorMessage)50 static napi_value ThrowError(napi_env env, uint32_t errCode, const char* errorMessage)
51 {
52     OH_LOG_ERROR(LOG_APP, "ThrowError=%{public}d mdErrorMessage=%{public}s.", errCode, errorMessage);
53     napi_value errorInfo = nullptr;
54     napi_create_object(env, &errorInfo);
55     if (errorInfo == nullptr) {
56         napi_value result = nullptr;
57         napi_get_undefined(env, &result);
58         return result;
59     }
60     napi_value errorCode = nullptr;
61 
62     napi_create_uint32(env, errCode, &errorCode);
63     napi_set_named_property(env, errorInfo, "code", errorCode);
64     napi_value errMsg = nullptr;
65     napi_create_string_utf8(env, errorMessage, NAPI_AUTO_LENGTH, &errMsg);
66     napi_set_named_property(env, errorInfo, "message", errMsg);
67     napi_create_error(env, errorCode, errMsg, &errorInfo);
68     napi_value error = nullptr;
69     napi_create_type_error(env, errorCode, errMsg, &error);
70 
71     return error;
72 }
73 
GetDefaultDisplayId(napi_env env,napi_callback_info info)74 static napi_value GetDefaultDisplayId(napi_env env, napi_callback_info info)
75 {
76     OH_LOG_INFO(LOG_APP, "GetDefaultDisplayId come in...");
77     uint64_t displayId;
78     OH_LOG_INFO(LOG_APP, "GetDefaultDisplayId displayId=%{public}lu ", displayId);
79     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_GetDefaultDisplayId(&displayId);
80     OH_LOG_INFO(LOG_APP, "GetDefaultDisplayId displayId=%{public}lu errorCode=%{public}d.", displayId, errCode);
81     if (errCode == NativeDisplayManager_ErrorCode::DISPLAY_MANAGER_OK) {
82         napi_value id;
83         napi_create_uint32(env, displayId, &id);
84         return id;
85     }
86     return ThrowError(env,errCode, "get default display id failed.");
87 }
88 
GetDefaultDisplayWidth(napi_env env,napi_callback_info info)89 static napi_value GetDefaultDisplayWidth(napi_env env, napi_callback_info info)
90 {
91     int32_t displayWidth;
92     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_GetDefaultDisplayWidth(&displayWidth);
93     OH_LOG_INFO(LOG_APP, "GetDefaultDisplayWidth width=%{public}d errorCode=%{public}d.", displayWidth, errCode);
94     if (errCode == NativeDisplayManager_ErrorCode::DISPLAY_MANAGER_OK) {
95         napi_value width;
96         napi_create_int32(env, displayWidth, &width);
97         return width;
98     }
99     return ThrowError(env,errCode, "get default display width failed.");
100 }
101 
GetDefaultDisplayHeight(napi_env env,napi_callback_info info)102 static napi_value GetDefaultDisplayHeight(napi_env env, napi_callback_info info)
103 {
104     int32_t displayHeight;
105     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_GetDefaultDisplayHeight(&displayHeight);
106     OH_LOG_INFO(LOG_APP, "GetDefaultDisplayHeight height=%{public}d errorCode=%{public}d.", displayHeight, errCode);
107     if (errCode == NativeDisplayManager_ErrorCode::DISPLAY_MANAGER_OK) {
108         napi_value height;
109         napi_create_int32(env, displayHeight, &height);
110         return height;
111     }
112     return ThrowError(env,errCode, "get default display height failed.");
113 }
114 
GetDefaultDisplayRotation(napi_env env,napi_callback_info info)115 static napi_value GetDefaultDisplayRotation(napi_env env, napi_callback_info info)
116 {
117     NativeDisplayManager_Rotation displayRotation;
118     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_GetDefaultDisplayRotation(&displayRotation);
119     if (errCode == NativeDisplayManager_ErrorCode::DISPLAY_MANAGER_OK) {
120         napi_value rotation;
121         napi_create_int32(env, displayRotation, &rotation);
122         return rotation;
123     } else {
124         napi_value errorCode;
125         napi_create_int32(env, errCode, &errorCode);
126         return errorCode;
127     }
128 }
129 
GetDefaultDisplayOrientation(napi_env env,napi_callback_info info)130 static napi_value GetDefaultDisplayOrientation(napi_env env, napi_callback_info info)
131 {
132     NativeDisplayManager_Orientation displayOrientation;
133     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_GetDefaultDisplayOrientation(&displayOrientation);
134     OH_LOG_INFO(LOG_APP, "GetDefaultDisplayOrientation orientation=%{public}d errorCode=%{public}d.",
135         displayOrientation, errCode);
136     if (errCode == NativeDisplayManager_ErrorCode::DISPLAY_MANAGER_OK) {
137         napi_value orientation;
138         napi_create_int32(env, displayOrientation, &orientation);
139         return orientation;
140     }
141     return ThrowError(env,errCode, "get default display orientation failed.");
142 }
143 
GetDefaultDisplayVirtualPixelRatio(napi_env env,napi_callback_info info)144 static napi_value GetDefaultDisplayVirtualPixelRatio(napi_env env, napi_callback_info info)
145 {
146     float dmVirtualPixels;
147     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_GetDefaultDisplayVirtualPixelRatio(&dmVirtualPixels);
148     OH_LOG_INFO(LOG_APP, "GetDefaultDisplayVirtualPixelRatio dmVirtualPixels=%{public}f errorCode=%{public}d.",
149         dmVirtualPixels, errCode);
150     if (errCode == NativeDisplayManager_ErrorCode::DISPLAY_MANAGER_OK) {
151         napi_value virtualPixels;
152         napi_create_int32(env, dmVirtualPixels, &virtualPixels);
153         return virtualPixels;
154     }
155     return ThrowError(env,errCode, "get default display virtual pixel failed.");
156 }
157 
GetDefaultDisplayRefreshRate(napi_env env,napi_callback_info info)158 static napi_value GetDefaultDisplayRefreshRate(napi_env env, napi_callback_info info)
159 {
160     uint32_t dmRefreshRate;
161     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_GetDefaultDisplayRefreshRate(&dmRefreshRate);
162     OH_LOG_INFO(LOG_APP, "GetDefaultDisplayRefreshRate dmRefreshRate=%{public}d errorCode=%{public}d.", dmRefreshRate,
163         errCode);
164     if (errCode == NativeDisplayManager_ErrorCode::DISPLAY_MANAGER_OK) {
165         napi_value refreshRate;
166         napi_create_int32(env, dmRefreshRate, &refreshRate);
167         return refreshRate;
168     }
169     return ThrowError(env,errCode, "get default display refresh rate failed.");
170 }
171 
GetDefaultDisplayDensityDpi(napi_env env,napi_callback_info info)172 static napi_value GetDefaultDisplayDensityDpi(napi_env env, napi_callback_info info)
173 {
174     int32_t dmDensityDpi;
175     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_GetDefaultDisplayDensityDpi(&dmDensityDpi);
176     OH_LOG_INFO(LOG_APP, "GetDefaultDisplayDensityDpi dmDensityDpi=%{public}d errorCode=%{public}d.", dmDensityDpi,
177         errCode);
178     if (errCode == NativeDisplayManager_ErrorCode::DISPLAY_MANAGER_OK) {
179         napi_value densityDpi;
180         napi_create_int32(env, dmDensityDpi, &densityDpi);
181         return densityDpi;
182     }
183     return ThrowError(env,errCode, "get default display density dpi failed.");
184 }
185 
GetDefaultDisplayDensityPixels(napi_env env,napi_callback_info info)186 static napi_value GetDefaultDisplayDensityPixels(napi_env env, napi_callback_info info)
187 {
188     float dmDensityPixels;
189     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_GetDefaultDisplayDensityPixels(&dmDensityPixels);
190     OH_LOG_INFO(LOG_APP, "GetDefaultDisplayDensityPixels dmDensityPixels=%{public}f errorCode=%{public}d.",
191         dmDensityPixels, errCode);
192     if (errCode == NativeDisplayManager_ErrorCode::DISPLAY_MANAGER_OK) {
193         napi_value densityPixels;
194         napi_create_int32(env, dmDensityPixels, &densityPixels);
195         return densityPixels;
196     }
197     return ThrowError(env,errCode, "get default display density pixels failed.");
198 }
199 
GetDefaultDisplayScaledDensity(napi_env env,napi_callback_info info)200 static napi_value GetDefaultDisplayScaledDensity(napi_env env, napi_callback_info info)
201 {
202     float dmScaledDensity;
203     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_GetDefaultDisplayScaledDensity(&dmScaledDensity);
204     OH_LOG_INFO(LOG_APP, "GetDefaultDisplayScaledDensity dmDensityPixels=%{public}f errorCode=%{public}d.",
205         dmScaledDensity, errCode);
206     if (errCode == NativeDisplayManager_ErrorCode::DISPLAY_MANAGER_OK) {
207         napi_value scaledDensity;
208         napi_create_int32(env, dmScaledDensity, &scaledDensity);
209         return scaledDensity;
210     }
211     return ThrowError(env,errCode, "get default display density pixels failed.");
212 }
213 
GetDefaultDisplayDensityXdpi(napi_env env,napi_callback_info info)214 static napi_value GetDefaultDisplayDensityXdpi(napi_env env, napi_callback_info info)
215 {
216     float dmxDpi;
217     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_GetDefaultDisplayDensityXdpi(&dmxDpi);
218     OH_LOG_INFO(LOG_APP, "GetDefaultDisplayDensityXdpi dmxDpi =%{public}f errorCode=%{public}d.", dmxDpi, errCode);
219     if (errCode == NativeDisplayManager_ErrorCode::DISPLAY_MANAGER_OK) {
220         napi_value xDpi;
221         napi_create_int32(env, dmxDpi, &xDpi);
222         return xDpi;
223     }
224     return ThrowError(env,errCode, "get default display xDPI failed.");
225 }
226 
GetDefaultDisplayDensityYdpi(napi_env env,napi_callback_info info)227 static napi_value GetDefaultDisplayDensityYdpi(napi_env env, napi_callback_info info)
228 {
229     float dmyDpi;
230     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_GetDefaultDisplayDensityYdpi(&dmyDpi);
231     OH_LOG_INFO(LOG_APP, "GetDefaultDisplayDensityYdpi dmyDpi =%{public}f errorCode=%{public}d.", dmyDpi, errCode);
232     if (errCode == NativeDisplayManager_ErrorCode::DISPLAY_MANAGER_OK) {
233         napi_value xDpi;
234         napi_create_int32(env, dmyDpi, &xDpi);
235         return xDpi;
236     }
237     return ThrowError(env,errCode, "get default display xDPI failed.");
238 }
239 
CreateDefaultDisplayCutoutInfo(napi_env env,napi_callback_info info)240 static napi_value CreateDefaultDisplayCutoutInfo(napi_env env, napi_callback_info info)
241 {
242     NativeDisplayManager_CutoutInfo *cutOutInfo = NULL;
243     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_CreateDefaultDisplayCutoutInfo(&cutOutInfo);
244     OH_LOG_INFO(LOG_APP, "GetDefaultCutoutInfo errCode=%{public}d", errCode);
245     if (errCode == NativeDisplayManager_ErrorCode::DISPLAY_MANAGER_OK) {
246         if (cutOutInfo != NULL && cutOutInfo->boundingRectsLength != 0) {
247             OH_LOG_INFO(LOG_APP, "GetDefaultCutoutInfo cutOutInfo length=%{public}d", cutOutInfo->boundingRectsLength);
248             for (int i = 0; i < cutOutInfo->boundingRectsLength; i++) {
249                 OH_LOG_INFO(LOG_APP, "cutOutInfo[%{public}d]=[%{public}d %{public}d %{public}d %{public}d]",
250                     i, cutOutInfo->boundingRects[i].left, cutOutInfo->boundingRects[i].top,
251                     cutOutInfo->boundingRects[i].width, cutOutInfo->boundingRects[i].height);
252             }
253             OH_LOG_INFO(LOG_APP, "cutOutInfo waterfall left rect=[%{public}d %{public}d %{public}d %{public}d]",
254             cutOutInfo->waterfallDisplayAreaRects.left.left, cutOutInfo->waterfallDisplayAreaRects.left.top,
255             cutOutInfo->waterfallDisplayAreaRects.left.left, cutOutInfo->waterfallDisplayAreaRects.left.left);
256             OH_LOG_INFO(LOG_APP, "cutOutInfo waterfall top rect=[%{public}d %{public}d %{public}d %{public}d]",
257             cutOutInfo->waterfallDisplayAreaRects.top.left, cutOutInfo->waterfallDisplayAreaRects.top.top,
258             cutOutInfo->waterfallDisplayAreaRects.top.left, cutOutInfo->waterfallDisplayAreaRects.top.left);
259             OH_LOG_INFO(LOG_APP, "cutOutInfo waterfall right rect=[%{public}d %{public}d %{public}d %{public}d]",
260             cutOutInfo->waterfallDisplayAreaRects.right.left, cutOutInfo->waterfallDisplayAreaRects.right.top,
261             cutOutInfo->waterfallDisplayAreaRects.right.left, cutOutInfo->waterfallDisplayAreaRects.right.left);
262             OH_LOG_INFO(LOG_APP, "cutOutInfo waterfall bottom rect=[%{public}d %{public}d %{public}d %{public}d]",
263             cutOutInfo->waterfallDisplayAreaRects.bottom.left, cutOutInfo->waterfallDisplayAreaRects.bottom.top,
264             cutOutInfo->waterfallDisplayAreaRects.bottom.left, cutOutInfo->waterfallDisplayAreaRects.bottom.left);
265         }
266         napi_value boundingRectsLength;
267         napi_create_int32(env, cutOutInfo->boundingRectsLength, &boundingRectsLength);
268         OH_NativeDisplayManager_DestroyDefaultDisplayCutoutInfo(cutOutInfo);
269         return boundingRectsLength;
270     } else {
271         napi_value errorCode;
272         napi_create_int32(env, errCode, &errorCode);
273         return errorCode;
274     }
275 }
276 
IsFoldable(napi_env env,napi_callback_info info)277 static napi_value IsFoldable(napi_env env, napi_callback_info info)
278 {
279     bool isFoldDevice = OH_NativeDisplayManager_IsFoldable();
280     OH_LOG_INFO(LOG_APP, "IsFoldable isFoldDevice =%{public}d.", isFoldDevice);
281     napi_value isFold;
282     napi_get_boolean(env, isFoldDevice, &isFold);
283     return isFold;
284 }
285 
GetFoldDisplayMode(napi_env env,napi_callback_info info)286 static napi_value GetFoldDisplayMode(napi_env env, napi_callback_info info)
287 {
288     NativeDisplayManager_FoldDisplayMode displayMode;
289     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_GetFoldDisplayMode(&displayMode);
290     OH_LOG_INFO(LOG_APP, "GetFoldDisplayMode displayMode =%{public}d errorCode=%{public}d.", displayMode, errCode);
291     if (errCode == NativeDisplayManager_ErrorCode::DISPLAY_MANAGER_OK) {
292         napi_value currentMode;
293         napi_create_int32(env, displayMode, &currentMode);
294         return currentMode;
295     } else {
296         napi_value errorCode;
297         napi_create_int32(env, errCode, &errorCode);
298         return errorCode;
299     }
300 }
301 
DisplayChangeCallback(uint64_t displayId)302 void DisplayChangeCallback(uint64_t displayId)
303 {
304     OH_LOG_INFO(LOG_APP, "DisplayChangeCallback displayId=%{public}lu.", displayId);
305 }
306 
RegisterDisplayChangeListener(napi_env env,napi_callback_info info)307 static napi_value RegisterDisplayChangeListener(napi_env env, napi_callback_info info)
308 {
309     uint32_t listenerIndex;
310     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_RegisterDisplayChangeListener(
311         DisplayChangeCallback, &listenerIndex);
312     OH_LOG_INFO(LOG_APP, "RegisterDisplayChangeListener listenerIndex =%{public}d errCode=%{public}d.",
313         listenerIndex, errCode);
314     if (errCode == NativeDisplayManager_ErrorCode::DISPLAY_MANAGER_OK) {
315         napi_value registerIndex;
316         napi_create_int32(env, listenerIndex, &registerIndex);
317         return registerIndex;
318     } else {
319         napi_value errorCode;
320         napi_create_int32(env, errCode, &errorCode);
321         return errorCode;
322     }
323 }
324 
UnregisterDisplayChangeListener(napi_env env,napi_callback_info info)325 static napi_value UnregisterDisplayChangeListener(napi_env env, napi_callback_info info)
326 {
327     size_t argc = 1;
328     napi_value args[1] = { nullptr };
329 
330     uint32_t listenerIndex;
331     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
332     napi_get_value_uint32(env, args[0], &listenerIndex);
333     OH_LOG_INFO(LOG_APP, "UnregisterDisplayChangeListener listenerIndex =%{public}d.", listenerIndex);
334     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_UnregisterDisplayChangeListener(listenerIndex);
335     OH_LOG_INFO(LOG_APP, "UnregisterDisplayChangeListener errCode=%{public}d.", errCode);
336     napi_value errorCode;
337     napi_create_int32(env, errCode, &errorCode);
338     return errorCode;
339 }
340 
FoldDisplayModeChangeCallback(NativeDisplayManager_FoldDisplayMode displayMode)341 void FoldDisplayModeChangeCallback(NativeDisplayManager_FoldDisplayMode displayMode)
342 {
343     OH_LOG_INFO(LOG_APP, "displayMode=%{public}d.", displayMode);
344 }
345 
RegisterFoldDisplayModeChangeListener(napi_env env,napi_callback_info info)346 static napi_value RegisterFoldDisplayModeChangeListener(napi_env env, napi_callback_info info)
347 {
348     uint32_t listenerIndex = 0;
349     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_RegisterFoldDisplayModeChangeListener(
350         FoldDisplayModeChangeCallback, &listenerIndex);
351     OH_LOG_INFO(LOG_APP, "listenerIndex =%{public}d errCode=%{public}d.",
352         listenerIndex, errCode);
353     if (errCode == NativeDisplayManager_ErrorCode::DISPLAY_MANAGER_OK) {
354         napi_value registerIndex;
355         napi_create_int32(env, listenerIndex, &registerIndex);
356         return registerIndex;
357     } else {
358         napi_value errorCode;
359         napi_create_int32(env, errCode, &errorCode);
360         return errorCode;
361     }
362 }
363 
UnregisterFoldDisplayModeChangeListener(napi_env env,napi_callback_info info)364 static napi_value UnregisterFoldDisplayModeChangeListener(napi_env env, napi_callback_info info)
365 {
366     size_t argc = 1;
367     napi_value args[1] = { nullptr };
368     uint32_t listenerIndex;
369     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
370     napi_get_value_uint32(env, args[0], &listenerIndex);
371     OH_LOG_INFO(LOG_APP, "listenerIndex =%{public}d.", listenerIndex);
372     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_UnregisterFoldDisplayModeChangeListener(listenerIndex);
373     OH_LOG_INFO(LOG_APP, "errorCode=%{public}d", errCode);
374     napi_value errorCode;
375     napi_create_int32(env, errCode, &errorCode);
376     return errorCode;
377 }
378 
CreateAvailableArea(napi_env env,napi_callback_info info)379 static napi_value CreateAvailableArea(napi_env env, napi_callback_info info)
380 {
381     NativeDisplayManager_Rect *availableAreaInfo;
382     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_CreateAvailableArea(0, &availableAreaInfo);
383     OH_LOG_INFO(LOG_APP, "errorCode=%{public}d", errCode);
384     OH_LOG_INFO(LOG_APP, "left=%{public}d", availableAreaInfo->left);
385     OH_LOG_INFO(LOG_APP, "top=%{public}d", availableAreaInfo->top);
386     OH_LOG_INFO(LOG_APP, "width=%{public}d", availableAreaInfo->width);
387     OH_LOG_INFO(LOG_APP, "height=%{public}d", availableAreaInfo->height);
388     napi_value result;
389     napi_create_object(env, &result);
390     napi_value errorCode;
391     napi_create_int32(env, errCode, &errorCode);
392     napi_set_named_property(env, result, "errcode", errorCode);
393     napi_value left;
394     napi_create_int32(env, availableAreaInfo->left, &left);
395     napi_set_named_property(env, result, "left", left);
396     napi_value top;
397     napi_create_int32(env, availableAreaInfo->top, &top);
398     napi_set_named_property(env, result, "top", top);
399     napi_value width;
400     napi_create_int32(env, availableAreaInfo->width, &width);
401     napi_set_named_property(env, result, "width", width);
402     napi_value height;
403     napi_create_int32(env, availableAreaInfo->height, &height);
404     napi_set_named_property(env, result, "height", height);
405     return result;
406 }
407 
CreateAvailableArea_ErrCode140004(napi_env env,napi_callback_info info)408 static napi_value CreateAvailableArea_ErrCode140004(napi_env env, napi_callback_info info)
409 {
410     NativeDisplayManager_Rect *availableAreaInfo;
411     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_CreateAvailableArea(-1, &availableAreaInfo);
412     OH_LOG_INFO(LOG_APP, "errorCode=%{public}d", errCode);
413     napi_value errorCode;
414     napi_create_int32(env, errCode, &errorCode);
415     return errorCode;
416 }
417 
DestroyAvailableArea(napi_env env,napi_callback_info info)418 static napi_value DestroyAvailableArea(napi_env env, napi_callback_info info)
419 {
420     NativeDisplayManager_Rect *availableAreaInfo;
421     OH_NativeDisplayManager_CreateAvailableArea(0, &availableAreaInfo);
422     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_DestroyAvailableArea(availableAreaInfo);
423     OH_LOG_INFO(LOG_APP, "errorCode=%{public}d", errCode);
424     napi_value errorCode;
425     napi_create_int32(env, errCode, &errorCode);
426     return errorCode;
427 }
428 
GetDisplaySourceMode_1(napi_env env,napi_callback_info info)429 static napi_value GetDisplaySourceMode_1(napi_env env, napi_callback_info info)
430 {
431     NativeDisplayManager_SourceMode displaySourceMode;
432     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_GetDisplaySourceMode(0, &displaySourceMode);
433     OH_LOG_INFO(LOG_APP, "errorCode=%{public}d", errCode);
434     napi_value result;
435     if (errCode != 0) {
436         napi_create_int32(env, errCode, &result);
437     } else {
438         OH_LOG_INFO(LOG_APP, "displaySourceMode=%{public}d", displaySourceMode);
439         napi_create_int32(env, displaySourceMode, &result);
440     }
441     return result;
442 }
443 
GetDisplaySourceMode_2(napi_env env,napi_callback_info info)444 static napi_value GetDisplaySourceMode_2(napi_env env, napi_callback_info info)
445 {
446     size_t argc = 1;
447     napi_value args[1] = { nullptr };
448     int64_t displayId;
449     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
450     napi_get_value_int64(env, args[0], &displayId);
451     OH_LOG_INFO(LOG_APP, "displayId =%{public}d.", displayId);
452     NativeDisplayManager_SourceMode displaySourceMode;
453     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_GetDisplaySourceMode(displayId,
454         &displaySourceMode);
455     OH_LOG_INFO(LOG_APP, "errorCode=%{public}d", errCode);
456     napi_value result;
457     if (errCode != 0) {
458         napi_create_int32(env, errCode, &result);
459     } else {
460         OH_LOG_INFO(LOG_APP, "displaySourceMode=%{public}d", displaySourceMode);
461         napi_create_int32(env, displaySourceMode, &result);
462     }
463     return result;
464 }
465 
GetDisplaySourceMode_4(napi_env env,napi_callback_info info)466 static napi_value GetDisplaySourceMode_4(napi_env env, napi_callback_info info)
467 {
468     size_t argc = 1;
469     napi_value args[1] = { nullptr };
470     int64_t displayId;
471     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
472     napi_get_value_int64(env, args[0], &displayId);
473     OH_LOG_INFO(LOG_APP, "displayId =%{public}d.", displayId);
474     NativeDisplayManager_SourceMode displaySourceMode;
475     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_GetDisplaySourceMode(displayId,
476         &displaySourceMode);
477     OH_LOG_INFO(LOG_APP, "errorCode=%{public}d", errCode);
478     napi_value result;
479     if (errCode != 0) {
480         napi_create_int32(env, errCode, &result);
481     } else {
482         OH_LOG_INFO(LOG_APP, "displaySourceMode=%{public}d", displaySourceMode);
483         napi_create_int32(env, displaySourceMode, &result);
484     }
485     return result;
486 }
487 
GetDisplaySourceMode_ErrCode140004(napi_env env,napi_callback_info info)488 static napi_value GetDisplaySourceMode_ErrCode140004(napi_env env, napi_callback_info info)
489 {
490     NativeDisplayManager_SourceMode displaySourceMode;
491     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_GetDisplaySourceMode(-1, &displaySourceMode);
492     OH_LOG_INFO(LOG_APP, "errorCode=%{public}d", errCode);
493     napi_value errorCode;
494     napi_create_int32(env, errCode, &errorCode);
495     return errorCode;
496 }
497 
GetDisplayPosition(napi_env env,napi_callback_info info)498 static napi_value GetDisplayPosition(napi_env env, napi_callback_info info)
499 {
500     int32_t x;
501     int32_t y;
502     uint64_t displayId = 0;
503     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_GetDisplayPosition(displayId, &x, &y);
504     OH_LOG_INFO(LOG_APP, "errorCode=%{public}d", errCode);
505     OH_LOG_INFO(LOG_APP, "x=%{public}d", x);
506     OH_LOG_INFO(LOG_APP, "y=%{public}d", y);
507     napi_value errorCode;
508     napi_create_int32(env, errCode, &errorCode);
509     return errorCode;
510 }
511 
GetDisplayPosition_ErrCode140004(napi_env env,napi_callback_info info)512 static napi_value GetDisplayPosition_ErrCode140004(napi_env env, napi_callback_info info)
513 {
514     int32_t x;
515     int32_t y;
516     uint64_t displayId = -1;
517     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_GetDisplayPosition(displayId, &x, &y);
518     OH_LOG_INFO(LOG_APP, "errorCode=%{public}d", errCode);
519     OH_LOG_INFO(LOG_APP, "x=%{public}d", x);
520     OH_LOG_INFO(LOG_APP, "y=%{public}d", y);
521     napi_value errorCode;
522     napi_create_int32(env, errCode, &errorCode);
523     return errorCode;
524 }
525 
AvailableAreaChangeCallback(uint64_t displayId)526 void AvailableAreaChangeCallback(uint64_t displayId)
527 {
528     OH_LOG_INFO(LOG_APP, "AvailableAreaChangeCallback displayId=%{public}lu.", displayId);
529 }
530 
531 
RegisterAvailableAreaChangeListener(napi_env env,napi_callback_info info)532 static napi_value RegisterAvailableAreaChangeListener(napi_env env, napi_callback_info info)
533 {
534     uint32_t listenerIndex = 0;
535     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_RegisterAvailableAreaChangeListener(
536         AvailableAreaChangeCallback, &listenerIndex);
537     OH_LOG_INFO(LOG_APP, "errorCode=%{public}d", errCode);
538     napi_value errorCode;
539     napi_create_int32(env, errCode, &errorCode);
540     OH_NativeDisplayManager_UnregisterAvailableAreaChangeListener(listenerIndex);
541     return errorCode;
542 }
543 
UnregisterAvailableAreaChangeListener(napi_env env,napi_callback_info info)544 static napi_value UnregisterAvailableAreaChangeListener(napi_env env, napi_callback_info info)
545 {
546     uint32_t listenerIndex = 0;
547     OH_NativeDisplayManager_RegisterAvailableAreaChangeListener(AvailableAreaChangeCallback, &listenerIndex);
548     NativeDisplayManager_ErrorCode errCode =
549     OH_NativeDisplayManager_UnregisterAvailableAreaChangeListener(listenerIndex);
550     OH_LOG_INFO(LOG_APP, "errorCode=%{public}d", errCode);
551     napi_value errorCode;
552     napi_create_int32(env, errCode, &errorCode);
553     return errorCode;
554 }
555 
UnregisterAvailableAreaChangeListener_ErrCode140004(napi_env env,napi_callback_info info)556 static napi_value UnregisterAvailableAreaChangeListener_ErrCode140004(napi_env env, napi_callback_info info)
557 {
558     uint32_t listenerIndex = 0;
559     NativeDisplayManager_ErrorCode errCode =
560         OH_NativeDisplayManager_UnregisterAvailableAreaChangeListener(listenerIndex);
561     OH_LOG_INFO(LOG_APP, "errorCode=%{public}d", errCode);
562     napi_value errorCode;
563     napi_create_int32(env, errCode, &errorCode);
564     return errorCode;
565 }
566 
DisplayAddCallback(uint64_t displayId)567 void DisplayAddCallback(uint64_t displayId)
568 {
569     OH_LOG_INFO(LOG_APP, "DisplayAddCallback displayId=%{public}lu.", displayId);
570 }
571 
RegisterDisplayAddListener(napi_env env,napi_callback_info info)572 static napi_value RegisterDisplayAddListener(napi_env env, napi_callback_info info)
573 {
574     uint32_t listenerIndex = 0;
575     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_RegisterDisplayAddListener(DisplayAddCallback,
576         &listenerIndex);
577     OH_LOG_INFO(LOG_APP, "errorCode=%{public}d", errCode);
578     napi_value errorCode;
579     napi_create_int32(env, errCode, &errorCode);
580     OH_NativeDisplayManager_UnregisterDisplayAddListener(listenerIndex);
581     return errorCode;
582 }
583 
UnregisterDisplayAddListener(napi_env env,napi_callback_info info)584 static napi_value UnregisterDisplayAddListener(napi_env env, napi_callback_info info)
585 {
586     uint32_t listenerIndex = 0;
587     OH_NativeDisplayManager_RegisterDisplayAddListener(DisplayAddCallback, &listenerIndex);
588     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_UnregisterDisplayAddListener(listenerIndex);
589     OH_LOG_INFO(LOG_APP, "errorCode=%{public}d", errCode);
590     napi_value errorCode;
591     napi_create_int32(env, errCode, &errorCode);
592     return errorCode;
593 }
594 
UnregisterDisplayAddListener_ErrCode140004(napi_env env,napi_callback_info info)595 static napi_value UnregisterDisplayAddListener_ErrCode140004(napi_env env, napi_callback_info info)
596 {
597     uint32_t listenerIndex = 0;
598     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_UnregisterDisplayAddListener(listenerIndex);
599     OH_LOG_INFO(LOG_APP, "errorCode=%{public}d", errCode);
600     napi_value errorCode;
601     napi_create_int32(env, errCode, &errorCode);
602     return errorCode;
603 }
604 
DisplayRemoveCallback(uint64_t displayId)605 void DisplayRemoveCallback(uint64_t displayId)
606 {
607     OH_LOG_INFO(LOG_APP, "DisplayRemoveCallback displayId=%{public}lu.", displayId);
608 }
609 
RegisterDisplayRemoveListener(napi_env env,napi_callback_info info)610 static napi_value RegisterDisplayRemoveListener(napi_env env, napi_callback_info info)
611 {
612     uint32_t listenerIndex = 0;
613     NativeDisplayManager_ErrorCode errCode =
614         OH_NativeDisplayManager_RegisterDisplayRemoveListener(DisplayRemoveCallback, &listenerIndex);
615     OH_LOG_INFO(LOG_APP, "errorCode=%{public}d", errCode);
616     napi_value errorCode;
617     napi_create_int32(env, errCode, &errorCode);
618     OH_NativeDisplayManager_UnregisterDisplayRemoveListener(listenerIndex);
619     return errorCode;
620 }
621 
UnregisterDisplayRemoveListener(napi_env env,napi_callback_info info)622 static napi_value UnregisterDisplayRemoveListener(napi_env env, napi_callback_info info)
623 {
624     uint32_t listenerIndex = 0;
625     OH_NativeDisplayManager_RegisterDisplayRemoveListener(DisplayRemoveCallback, &listenerIndex);
626     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_UnregisterDisplayRemoveListener(listenerIndex);
627     OH_LOG_INFO(LOG_APP, "errorCode=%{public}d", errCode);
628     napi_value errorCode;
629     napi_create_int32(env, errCode, &errorCode);
630     return errorCode;
631 }
632 
RegisterDisplayRemoveListener_ErrCode140004(napi_env env,napi_callback_info info)633 static napi_value RegisterDisplayRemoveListener_ErrCode140004(napi_env env, napi_callback_info info)
634 {
635     uint32_t listenerIndex = 0;
636     NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_UnregisterDisplayRemoveListener(listenerIndex);
637     OH_LOG_INFO(LOG_APP, "errorCode=%{public}d", errCode);
638     napi_value errorCode;
639     napi_create_int32(env, errCode, &errorCode);
640     return errorCode;
641 }
642 
643 EXTERN_C_START
Init(napi_env env,napi_value exports)644 static napi_value Init(napi_env env, napi_value exports)
645 {
646     napi_property_descriptor desc[] = {
647         { "add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr },
648         { "getId", nullptr, GetDefaultDisplayId, nullptr, nullptr, nullptr, napi_default, nullptr },
649         { "getWidth", nullptr, GetDefaultDisplayWidth, nullptr, nullptr, nullptr, napi_default, nullptr },
650         { "getHeight", nullptr, GetDefaultDisplayHeight, nullptr, nullptr, nullptr, napi_default, nullptr },
651         { "getRotation", nullptr, GetDefaultDisplayRotation, nullptr, nullptr, nullptr, napi_default, nullptr },
652         { "getOrientation", nullptr, GetDefaultDisplayOrientation, nullptr, nullptr, nullptr, napi_default, nullptr },
653         { "getVirtualPixelRatio", nullptr, GetDefaultDisplayVirtualPixelRatio, nullptr, nullptr, nullptr,
654             napi_default, nullptr },
655         { "getRefreshRate", nullptr, GetDefaultDisplayRefreshRate, nullptr, nullptr, nullptr, napi_default, nullptr },
656         { "getDensityDpi", nullptr, GetDefaultDisplayDensityDpi, nullptr, nullptr, nullptr, napi_default, nullptr },
657         { "getDensityPixels", nullptr, GetDefaultDisplayDensityPixels, nullptr, nullptr, nullptr,
658             napi_default, nullptr },
659         { "getScaledDensity", nullptr, GetDefaultDisplayScaledDensity, nullptr, nullptr, nullptr,
660             napi_default, nullptr },
661         { "getDensityXdpi", nullptr, GetDefaultDisplayDensityXdpi, nullptr, nullptr, nullptr, napi_default, nullptr },
662         { "getDensityYdpi", nullptr, GetDefaultDisplayDensityYdpi, nullptr, nullptr, nullptr, napi_default, nullptr },
663         { "getCutoutInfo", nullptr, CreateDefaultDisplayCutoutInfo, nullptr, nullptr, nullptr, napi_default, nullptr },
664         { "checkIsFoldDevice", nullptr, IsFoldable, nullptr, nullptr, nullptr, napi_default, nullptr },
665         { "getDisplayMode", nullptr, GetFoldDisplayMode, nullptr, nullptr, nullptr, napi_default, nullptr },
666         { "registerDisplayChange", nullptr, RegisterDisplayChangeListener, nullptr, nullptr, nullptr,
667             napi_default, nullptr },
668         { "unregisterDisplayChange", nullptr, UnregisterDisplayChangeListener, nullptr, nullptr, nullptr,
669             napi_default, nullptr },
670         { "registerFoldDisplayModeChange", nullptr, RegisterFoldDisplayModeChangeListener, nullptr, nullptr, nullptr,
671             napi_default, nullptr },
672         { "unregisterFoldDisplayModeChange", nullptr, UnregisterFoldDisplayModeChangeListener, nullptr, nullptr,
673             nullptr, napi_default, nullptr },
674         { "createAvailableArea", nullptr, CreateAvailableArea, nullptr, nullptr,
675             nullptr, napi_default, nullptr },
676         { "createAvailableArea_ErrCode140004", nullptr, CreateAvailableArea_ErrCode140004, nullptr, nullptr,
677             nullptr, napi_default, nullptr },
678         { "destroyAvailableArea", nullptr, DestroyAvailableArea, nullptr, nullptr,
679             nullptr, napi_default, nullptr },
680         { "getDisplaySourceMode_1", nullptr, GetDisplaySourceMode_1, nullptr, nullptr,
681             nullptr, napi_default, nullptr },
682         { "getDisplaySourceMode_2", nullptr, GetDisplaySourceMode_2, nullptr, nullptr,
683             nullptr, napi_default, nullptr },
684         { "getDisplaySourceMode_4", nullptr, GetDisplaySourceMode_4, nullptr, nullptr,
685             nullptr, napi_default, nullptr },
686         { "getDisplaySourceMode_ErrCode140004", nullptr, GetDisplaySourceMode_ErrCode140004, nullptr, nullptr,
687             nullptr, napi_default, nullptr },
688         { "getDisplayPosition", nullptr, GetDisplayPosition, nullptr, nullptr,
689             nullptr, napi_default, nullptr },
690         { "getDisplayPosition_ErrCode140004", nullptr, GetDisplayPosition_ErrCode140004, nullptr, nullptr,
691             nullptr, napi_default, nullptr },
692         { "registerAvailableAreaChangeListener", nullptr, RegisterAvailableAreaChangeListener, nullptr, nullptr,
693             nullptr, napi_default, nullptr },
694         { "unregisterAvailableAreaChangeListener", nullptr, UnregisterAvailableAreaChangeListener, nullptr, nullptr,
695             nullptr, napi_default, nullptr },
696         { "unregisterAvailableAreaChangeListener_ErrCode140004", nullptr,
697             UnregisterAvailableAreaChangeListener_ErrCode140004, nullptr, nullptr, nullptr, napi_default, nullptr },
698         { "registerDisplayAddListener", nullptr, RegisterDisplayAddListener, nullptr, nullptr,
699             nullptr, napi_default, nullptr },
700         { "unregisterDisplayAddListener", nullptr, UnregisterDisplayAddListener, nullptr, nullptr,
701             nullptr, napi_default, nullptr },
702         { "unregisterDisplayAddListener_ErrCode140004", nullptr, UnregisterDisplayAddListener_ErrCode140004,
703             nullptr, nullptr, nullptr, napi_default, nullptr },
704         { "registerDisplayRemoveListener", nullptr, RegisterDisplayRemoveListener, nullptr, nullptr,
705             nullptr, napi_default, nullptr },
706         { "unregisterDisplayRemoveListener", nullptr, UnregisterDisplayRemoveListener, nullptr, nullptr,
707             nullptr, napi_default, nullptr },
708         { "registerDisplayRemoveListener_ErrCode140004", nullptr, RegisterDisplayRemoveListener_ErrCode140004,
709             nullptr, nullptr, nullptr, napi_default, nullptr },
710 
711     };
712     napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
713     return exports;
714 }
715 EXTERN_C_END
716 
717 static napi_module demoModule = {
718     .nm_version = 1,
719     .nm_flags = 0,
720     .nm_filename = nullptr,
721     .nm_register_func = Init,
722     .nm_modname = "entry",
723     .nm_priv = ((void*)0),
724     .reserved = { 0 },
725 };
726 
RegisterEntryModule(void)727 extern "C" __attribute__((constructor)) void RegisterEntryModule(void)
728 {
729     napi_module_register(&demoModule);
730 }
731