1e41f4b71Sopenharmony_ci# Using OH_DisplayManager to Obtain Basic Display Information and Listen for Status Changes (C/C++) 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ci## When to Use 4e41f4b71Sopenharmony_ci 5e41f4b71Sopenharmony_ciThe [OH_DisplayManager](../reference/apis-arkui/_o_h___display_manager.md) module provides functions for you to obtain the display information and listen for display status changes and folded/unfolded state changes. Applications can adapt to different UIs based on the information and changes. 6e41f4b71Sopenharmony_ci 7e41f4b71Sopenharmony_ci- The display information that can be obtained includes the resolution, physical pixel density, logical pixel density, refresh rate, size, orientation, and rotation angle of the display. 8e41f4b71Sopenharmony_ci 9e41f4b71Sopenharmony_ci- The display status changes include changes of the rotation, resolution, and refresh rate of the display. 10e41f4b71Sopenharmony_ci 11e41f4b71Sopenharmony_ci- The folded/unfolded state changes indicate whether the device is in the folded or unfolded state. A function is also provided for you to check whether a device is foldable. 12e41f4b71Sopenharmony_ci 13e41f4b71Sopenharmony_ci## Basic Concepts 14e41f4b71Sopenharmony_ci 15e41f4b71Sopenharmony_ci- Density DPI: physical pixel density, that is, the number of physical pixels per inch of the display. 16e41f4b71Sopenharmony_ci 17e41f4b71Sopenharmony_ci- Density pixels: logical pixel density, which indicates the scaling coefficient of the physical pixels and logical pixels. It is calculated by dividing the physical pixel density by 160. 18e41f4b71Sopenharmony_ci 19e41f4b71Sopenharmony_ci## Available APIs 20e41f4b71Sopenharmony_ci 21e41f4b71Sopenharmony_ciThe following table lists the common APIs. For more API description, see [OH_DisplayManager](../reference/apis-arkui/_o_h___display_manager.md). 22e41f4b71Sopenharmony_ci 23e41f4b71Sopenharmony_ci| Name| Description| 24e41f4b71Sopenharmony_ci| -------- | -------- | 25e41f4b71Sopenharmony_ci| OH_NativeDisplayManager_GetDefaultDisplayRotation(NativeDisplayManager_Rotation *displayRotation) | Obtains the rotation angle of the default display.| 26e41f4b71Sopenharmony_ci| OH_NativeDisplayManager_CreateDefaultDisplayCutoutInfo(NativeDisplayManager_CutoutInfo **cutoutInfo) | Obtains the cutout information of the default display.| 27e41f4b71Sopenharmony_ci| OH_NativeDisplayManager_DestroyDefaultDisplayCutoutInfo(NativeDisplayManager_CutoutInfo *cutoutInfo) | Destroys the cutout information of the default display.| 28e41f4b71Sopenharmony_ci| OH_NativeDisplayManager_IsFoldable()|Checks whether the device is foldable.| 29e41f4b71Sopenharmony_ci| OH_NativeDisplayManager_RegisterDisplayChangeListener( OH_NativeDisplayManager_DisplayChangeCallback displayChangeCallback, uint32_t *listenerIndex)|Registers a listener for status changes (such as rotation, refresh rate, DPI, and resolution changes) of the display.| 30e41f4b71Sopenharmony_ci|OH_NativeDisplayManager_UnregisterDisplayChangeListener(uint32_t listenerIndex)|Cancels the listening for status changes of the display.| 31e41f4b71Sopenharmony_ci|OH_NativeDisplayManager_RegisterFoldDisplayModeChangeListener( OH_NativeDisplayManager_FoldDisplayModeChangeCallback displayModeChangeCallback, uint32_t *listenerIndex)|Registers a listener for folded/unfolded state changes of the display.| 32e41f4b71Sopenharmony_ci|OH_NativeDisplayManager_UnregisterFoldDisplayModeChangeListener(uint32_t listenerIndex)|Cancels the listening for folded/unfolded state changes of the display.| 33e41f4b71Sopenharmony_ci 34e41f4b71Sopenharmony_ci## Linking the Dynamic Link Library in the CMake Script 35e41f4b71Sopenharmony_ci 36e41f4b71Sopenharmony_ci``` 37e41f4b71Sopenharmony_citarget_link_libraries(entry PUBLIC libhilog_ndk.z.so) 38e41f4b71Sopenharmony_citarget_link_libraries(entry PUBLIC libnative_display_manager.so ) 39e41f4b71Sopenharmony_ci``` 40e41f4b71Sopenharmony_ci 41e41f4b71Sopenharmony_ci## Including Header Files 42e41f4b71Sopenharmony_ci 43e41f4b71Sopenharmony_ci```c++ 44e41f4b71Sopenharmony_ci#include <window_manager/oh_display_info.h> 45e41f4b71Sopenharmony_ci#include <window_manager/oh_display_manager.h> 46e41f4b71Sopenharmony_ci#include <hilog/log.h> 47e41f4b71Sopenharmony_ci``` 48e41f4b71Sopenharmony_ci 49e41f4b71Sopenharmony_ci## Obtaining Display Information 50e41f4b71Sopenharmony_ci 51e41f4b71Sopenharmony_ci1. Call **OH_NativeDisplayManager_GetDefaultDisplayRotation** to obtain the rotation angle of the default display. 52e41f4b71Sopenharmony_ci 53e41f4b71Sopenharmony_ci ```c++ 54e41f4b71Sopenharmony_ci #include "napi/native_api.h" 55e41f4b71Sopenharmony_ci #include <window_manager/oh_display_info.h> 56e41f4b71Sopenharmony_ci #include <window_manager/oh_display_manager.h> 57e41f4b71Sopenharmony_ci #include <hilog/log.h> 58e41f4b71Sopenharmony_ci 59e41f4b71Sopenharmony_ci static napi_value GetDefaultDisplayRotation(napi_env env, napi_callback_info info) 60e41f4b71Sopenharmony_ci { 61e41f4b71Sopenharmony_ci NativeDisplayManager_Rotation displayRotation; 62e41f4b71Sopenharmony_ci NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_GetDefaultDisplayRotation(&displayRotation); 63e41f4b71Sopenharmony_ci if (errCode == NativeDisplayManager_ErrorCode::DISPLAY_MANAGER_OK) { 64e41f4b71Sopenharmony_ci napi_value rotation; 65e41f4b71Sopenharmony_ci napi_create_int32(env, displayRotation, &rotation); 66e41f4b71Sopenharmony_ci return rotation; 67e41f4b71Sopenharmony_ci } else { 68e41f4b71Sopenharmony_ci napi_value errorCode; 69e41f4b71Sopenharmony_ci napi_create_int32(env, errCode, &errorCode); 70e41f4b71Sopenharmony_ci return errorCode; 71e41f4b71Sopenharmony_ci } 72e41f4b71Sopenharmony_ci } 73e41f4b71Sopenharmony_ci 74e41f4b71Sopenharmony_ci EXTERN_C_START 75e41f4b71Sopenharmony_ci static napi_value Init(napi_env env, napi_value exports) { 76e41f4b71Sopenharmony_ci napi_property_descriptor desc[] = { 77e41f4b71Sopenharmony_ci {"getDisplayRotation", nullptr, GetDefaultDisplayRotation, nullptr, nullptr, nullptr, napi_default, nullptr}, 78e41f4b71Sopenharmony_ci }; 79e41f4b71Sopenharmony_ci napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); 80e41f4b71Sopenharmony_ci return exports; 81e41f4b71Sopenharmony_ci } 82e41f4b71Sopenharmony_ci EXTERN_C_END 83e41f4b71Sopenharmony_ci ``` 84e41f4b71Sopenharmony_ci 85e41f4b71Sopenharmony_ci2. Call **OH_NativeDisplayManager_CreateDefaultDisplayCutoutInfo** to obtain the cutout information of the default display. Call **OH_NativeDisplayManager_DestroyDefaultDisplayCutoutInfo** to destroy the cutout information. 86e41f4b71Sopenharmony_ci 87e41f4b71Sopenharmony_ci ```c++ 88e41f4b71Sopenharmony_ci #include "napi/native_api.h" 89e41f4b71Sopenharmony_ci #include <window_manager/oh_display_info.h> 90e41f4b71Sopenharmony_ci #include <window_manager/oh_display_manager.h> 91e41f4b71Sopenharmony_ci #include <hilog/log.h> 92e41f4b71Sopenharmony_ci 93e41f4b71Sopenharmony_ci static napi_value CreateDefaultDisplayCutoutInfo(napi_env env, napi_callback_info info) 94e41f4b71Sopenharmony_ci { 95e41f4b71Sopenharmony_ci NativeDisplayManager_CutoutInfo *cutOutInfo = NULL; 96e41f4b71Sopenharmony_ci NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_CreateDefaultDisplayCutoutInfo(&cutOutInfo); 97e41f4b71Sopenharmony_ci OH_LOG_INFO(LOG_APP, "GetDefaultCutoutInfo errCode=%{public}d", errCode); 98e41f4b71Sopenharmony_ci if (errCode == NativeDisplayManager_ErrorCode::DISPLAY_MANAGER_OK) { 99e41f4b71Sopenharmony_ci if (cutOutInfo != NULL && cutOutInfo->boundingRectsLength != 0) { 100e41f4b71Sopenharmony_ci OH_LOG_INFO(LOG_APP, "GetDefaultCutoutInfo cutOutInfo length=%{public}d", cutOutInfo->boundingRectsLength); 101e41f4b71Sopenharmony_ci for (int i = 0; i < cutOutInfo->boundingRectsLength; i++) { 102e41f4b71Sopenharmony_ci OH_LOG_INFO(LOG_APP, "cutOutInfo[%{public}d]=[%{public}d %{public}d %{public}d %{public}d]", 103e41f4b71Sopenharmony_ci i, cutOutInfo->boundingRects[i].left, cutOutInfo->boundingRects[i].top, 104e41f4b71Sopenharmony_ci cutOutInfo->boundingRects[i].width, cutOutInfo->boundingRects[i].height); 105e41f4b71Sopenharmony_ci } 106e41f4b71Sopenharmony_ci OH_LOG_INFO(LOG_APP, "cutOutInfo waterfall left rect=[%{public}d %{public}d %{public}d %{public}d]", 107e41f4b71Sopenharmony_ci cutOutInfo->waterfallDisplayAreaRects.left.left, cutOutInfo->waterfallDisplayAreaRects.left.top, 108e41f4b71Sopenharmony_ci cutOutInfo->waterfallDisplayAreaRects.left.left, cutOutInfo->waterfallDisplayAreaRects.left.left); 109e41f4b71Sopenharmony_ci OH_LOG_INFO(LOG_APP, "cutOutInfo waterfall top rect=[%{public}d %{public}d %{public}d %{public}d]", 110e41f4b71Sopenharmony_ci cutOutInfo->waterfallDisplayAreaRects.top.left, cutOutInfo->waterfallDisplayAreaRects.top.top, 111e41f4b71Sopenharmony_ci cutOutInfo->waterfallDisplayAreaRects.top.left, cutOutInfo->waterfallDisplayAreaRects.top.left); 112e41f4b71Sopenharmony_ci OH_LOG_INFO(LOG_APP, "cutOutInfo waterfall right rect=[%{public}d %{public}d %{public}d %{public}d]", 113e41f4b71Sopenharmony_ci cutOutInfo->waterfallDisplayAreaRects.right.left, cutOutInfo->waterfallDisplayAreaRects.right.top, 114e41f4b71Sopenharmony_ci cutOutInfo->waterfallDisplayAreaRects.right.left, cutOutInfo->waterfallDisplayAreaRects.right.left); 115e41f4b71Sopenharmony_ci OH_LOG_INFO(LOG_APP, "cutOutInfo waterfall bottom rect=[%{public}d %{public}d %{public}d %{public}d]", 116e41f4b71Sopenharmony_ci cutOutInfo->waterfallDisplayAreaRects.bottom.left, cutOutInfo->waterfallDisplayAreaRects.bottom.top, 117e41f4b71Sopenharmony_ci cutOutInfo->waterfallDisplayAreaRects.bottom.left, cutOutInfo->waterfallDisplayAreaRects.bottom.left); 118e41f4b71Sopenharmony_ci } 119e41f4b71Sopenharmony_ci napi_value boundingRectsLength; 120e41f4b71Sopenharmony_ci napi_create_int32(env, cutOutInfo->boundingRectsLength, &boundingRectsLength); 121e41f4b71Sopenharmony_ci OH_NativeDisplayManager_DestroyDefaultDisplayCutoutInfo(cutOutInfo); 122e41f4b71Sopenharmony_ci return boundingRectsLength; 123e41f4b71Sopenharmony_ci } else { 124e41f4b71Sopenharmony_ci napi_value errorCode; 125e41f4b71Sopenharmony_ci napi_create_int32(env, errCode, &errorCode); 126e41f4b71Sopenharmony_ci return errorCode; 127e41f4b71Sopenharmony_ci } 128e41f4b71Sopenharmony_ci } 129e41f4b71Sopenharmony_ci 130e41f4b71Sopenharmony_ci EXTERN_C_START 131e41f4b71Sopenharmony_ci static napi_value Init(napi_env env, napi_value exports) { 132e41f4b71Sopenharmony_ci napi_property_descriptor desc[] = { 133e41f4b71Sopenharmony_ci {"getCutoutInfo", nullptr, CreateDefaultDisplayCutoutInfo, nullptr, nullptr, nullptr, napi_default, nullptr}, 134e41f4b71Sopenharmony_ci }; 135e41f4b71Sopenharmony_ci napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); 136e41f4b71Sopenharmony_ci return exports; 137e41f4b71Sopenharmony_ci } 138e41f4b71Sopenharmony_ci EXTERN_C_END 139e41f4b71Sopenharmony_ci ``` 140e41f4b71Sopenharmony_ci 141e41f4b71Sopenharmony_ci 142e41f4b71Sopenharmony_ci 143e41f4b71Sopenharmony_ci## Listening for Display Status Changes 144e41f4b71Sopenharmony_ci 145e41f4b71Sopenharmony_ciCall **OH_NativeDisplayManager_RegisterDisplayChangeListener** to register a listener for display status changes, including the rotation, resolution, refresh rate, and DPI changes. Call **OH_NativeDisplayManager_UnregisterDisplayChangeListener** to cancel the listening for the display status changes. 146e41f4b71Sopenharmony_ci 147e41f4b71Sopenharmony_ci```c++ 148e41f4b71Sopenharmony_ci#include "napi/native_api.h" 149e41f4b71Sopenharmony_ci#include <window_manager/oh_display_info.h> 150e41f4b71Sopenharmony_ci#include <window_manager/oh_display_manager.h> 151e41f4b71Sopenharmony_ci#include <hilog/log.h> 152e41f4b71Sopenharmony_ci 153e41f4b71Sopenharmony_civoid DisplayChangeCallback(uint64_t displayId) 154e41f4b71Sopenharmony_ci{ 155e41f4b71Sopenharmony_ci OH_LOG_INFO(LOG_APP, "DisplayChangeCallback displayId=%{public}lu.", displayId); 156e41f4b71Sopenharmony_ci} 157e41f4b71Sopenharmony_ci 158e41f4b71Sopenharmony_cistatic napi_value RegisterDisplayChangeListener(napi_env env, napi_callback_info info) 159e41f4b71Sopenharmony_ci{ 160e41f4b71Sopenharmony_ci uint32_t listenerIndex; 161e41f4b71Sopenharmony_ci NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_RegisterDisplayChangeListener( 162e41f4b71Sopenharmony_ci DisplayChangeCallback, &listenerIndex); 163e41f4b71Sopenharmony_ci OH_LOG_INFO(LOG_APP, "RegisterDisplayChangeListener listenerIndex =%{public}d errCode=%{public}d.", 164e41f4b71Sopenharmony_ci listenerIndex, errCode); 165e41f4b71Sopenharmony_ci if (errCode == NativeDisplayManager_ErrorCode::DISPLAY_MANAGER_OK) { 166e41f4b71Sopenharmony_ci napi_value registerIndex; 167e41f4b71Sopenharmony_ci napi_create_int32(env, listenerIndex, ®isterIndex); 168e41f4b71Sopenharmony_ci return registerIndex; 169e41f4b71Sopenharmony_ci } else { 170e41f4b71Sopenharmony_ci napi_value errorCode; 171e41f4b71Sopenharmony_ci napi_create_int32(env, errCode, &errorCode); 172e41f4b71Sopenharmony_ci return errorCode; 173e41f4b71Sopenharmony_ci } 174e41f4b71Sopenharmony_ci} 175e41f4b71Sopenharmony_ci 176e41f4b71Sopenharmony_cistatic napi_value UnregisterDisplayChangeListener(napi_env env, napi_callback_info info) 177e41f4b71Sopenharmony_ci{ 178e41f4b71Sopenharmony_ci size_t argc = 1; 179e41f4b71Sopenharmony_ci napi_value args[1] = { nullptr }; 180e41f4b71Sopenharmony_ci 181e41f4b71Sopenharmony_ci uint32_t listenerIndex; 182e41f4b71Sopenharmony_ci napi_get_cb_info(env, info, &argc, args , nullptr, nullptr); 183e41f4b71Sopenharmony_ci napi_get_value_uint32(env, args[0], &listenerIndex); 184e41f4b71Sopenharmony_ci OH_LOG_INFO(LOG_APP, "UnregisterDisplayChangeListener listenerIndex =%{public}d.", listenerIndex); 185e41f4b71Sopenharmony_ci NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_UnregisterDisplayChangeListener(listenerIndex); 186e41f4b71Sopenharmony_ci OH_LOG_INFO(LOG_APP, "UnregisterDisplayChangeListener errCode=%{public}d.", errCode); 187e41f4b71Sopenharmony_ci napi_value errorCode; 188e41f4b71Sopenharmony_ci napi_create_int32(env, errCode, &errorCode); 189e41f4b71Sopenharmony_ci return errorCode; 190e41f4b71Sopenharmony_ci} 191e41f4b71Sopenharmony_ci 192e41f4b71Sopenharmony_ciEXTERN_C_START 193e41f4b71Sopenharmony_cistatic napi_value Init(napi_env env, napi_value exports) { 194e41f4b71Sopenharmony_ci napi_property_descriptor desc[] = { 195e41f4b71Sopenharmony_ci {"registerDisplayChange", nullptr, RegisterDisplayChangeListener, nullptr, nullptr, nullptr, napi_default, nullptr}, 196e41f4b71Sopenharmony_ci {"unregisterDisplayChange", nullptr, UnregisterDisplayChangeListener, nullptr, nullptr, nullptr, 197e41f4b71Sopenharmony_ci napi_default, nullptr}, 198e41f4b71Sopenharmony_ci }; 199e41f4b71Sopenharmony_ci napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); 200e41f4b71Sopenharmony_ci return exports; 201e41f4b71Sopenharmony_ci} 202e41f4b71Sopenharmony_ciEXTERN_C_END 203e41f4b71Sopenharmony_ci 204e41f4b71Sopenharmony_ci``` 205e41f4b71Sopenharmony_ci 206e41f4b71Sopenharmony_ci## Listening for Folded/Unfolded State Changes 207e41f4b71Sopenharmony_ci 208e41f4b71Sopenharmony_ci1. Call **OH_NativeDisplayManager_IsFoldable** to check whether a device is foldable. 209e41f4b71Sopenharmony_ci 210e41f4b71Sopenharmony_ci ```c++ 211e41f4b71Sopenharmony_ci #include "napi/native_api.h" 212e41f4b71Sopenharmony_ci #include <window_manager/oh_display_info.h> 213e41f4b71Sopenharmony_ci #include <window_manager/oh_display_manager.h> 214e41f4b71Sopenharmony_ci #include <hilog/log.h> 215e41f4b71Sopenharmony_ci 216e41f4b71Sopenharmony_ci static napi_value IsFoldable(napi_env env, napi_callback_info info) 217e41f4b71Sopenharmony_ci { 218e41f4b71Sopenharmony_ci bool isFoldDevice = OH_NativeDisplayManager_IsFoldable(); 219e41f4b71Sopenharmony_ci OH_LOG_INFO(LOG_APP, "IsFoldable isFoldDevice =%{public}d.", isFoldDevice); 220e41f4b71Sopenharmony_ci napi_value isFold; 221e41f4b71Sopenharmony_ci napi_get_boolean(env, isFoldDevice, &isFold); 222e41f4b71Sopenharmony_ci return isFold; 223e41f4b71Sopenharmony_ci } 224e41f4b71Sopenharmony_ci 225e41f4b71Sopenharmony_ci EXTERN_C_START 226e41f4b71Sopenharmony_ci static napi_value Init(napi_env env, napi_value exports) { 227e41f4b71Sopenharmony_ci napi_property_descriptor desc[] = { 228e41f4b71Sopenharmony_ci {"checkIsFoldDevice", nullptr, IsFoldable, nullptr, nullptr, nullptr, napi_default, nullptr}, 229e41f4b71Sopenharmony_ci }; 230e41f4b71Sopenharmony_ci napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); 231e41f4b71Sopenharmony_ci return exports; 232e41f4b71Sopenharmony_ci } 233e41f4b71Sopenharmony_ci EXTERN_C_END 234e41f4b71Sopenharmony_ci ``` 235e41f4b71Sopenharmony_ci2. Call **OH_NativeDisplayManager_RegisterFoldDisplayModeChangeListener** to register a listener for folded/unfolded state changes of the display. Call **OH_NativeDisplayManager_UnregisterFoldDisplayModeChangeListener** to cancel the listening for the folded/unfolded state changes. 236e41f4b71Sopenharmony_ci 237e41f4b71Sopenharmony_ci ```c++ 238e41f4b71Sopenharmony_ci #include "napi/native_api.h" 239e41f4b71Sopenharmony_ci #include <window_manager/oh_display_info.h> 240e41f4b71Sopenharmony_ci #include <window_manager/oh_display_manager.h> 241e41f4b71Sopenharmony_ci #include <hilog/log.h> 242e41f4b71Sopenharmony_ci 243e41f4b71Sopenharmony_ci void FoldDisplayModeChangeCallback(NativeDisplayManager_FoldDisplayMode displayMode) 244e41f4b71Sopenharmony_ci { 245e41f4b71Sopenharmony_ci OH_LOG_INFO(LOG_APP, "displayMode=%{public}d.", displayMode); 246e41f4b71Sopenharmony_ci } 247e41f4b71Sopenharmony_ci 248e41f4b71Sopenharmony_ci static napi_value RegisterFoldDisplayModeChangeListener(napi_env env, napi_callback_info info) 249e41f4b71Sopenharmony_ci { 250e41f4b71Sopenharmony_ci uint32_t listenerIndex = 0; 251e41f4b71Sopenharmony_ci NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_RegisterFoldDisplayModeChangeListener( 252e41f4b71Sopenharmony_ci FoldDisplayModeChangeCallback, &listenerIndex); 253e41f4b71Sopenharmony_ci OH_LOG_INFO(LOG_APP, "listenerIndex =%{public}d errCode=%{public}d.", 254e41f4b71Sopenharmony_ci listenerIndex, errCode); 255e41f4b71Sopenharmony_ci if (errCode == NativeDisplayManager_ErrorCode::DISPLAY_MANAGER_OK) { 256e41f4b71Sopenharmony_ci napi_value registerIndex; 257e41f4b71Sopenharmony_ci napi_create_int32(env, listenerIndex, ®isterIndex); 258e41f4b71Sopenharmony_ci return registerIndex; 259e41f4b71Sopenharmony_ci } else { 260e41f4b71Sopenharmony_ci napi_value errorCode; 261e41f4b71Sopenharmony_ci napi_create_int32(env, errCode, &errorCode); 262e41f4b71Sopenharmony_ci return errorCode; 263e41f4b71Sopenharmony_ci } 264e41f4b71Sopenharmony_ci } 265e41f4b71Sopenharmony_ci 266e41f4b71Sopenharmony_ci static napi_value UnregisterFoldDisplayModeChangeListener(napi_env env, napi_callback_info info) 267e41f4b71Sopenharmony_ci { 268e41f4b71Sopenharmony_ci size_t argc = 1; 269e41f4b71Sopenharmony_ci napi_value args[1] = { nullptr }; 270e41f4b71Sopenharmony_ci uint32_t listenerIndex; 271e41f4b71Sopenharmony_ci napi_get_cb_info(env, info, &argc, args , nullptr, nullptr); 272e41f4b71Sopenharmony_ci napi_get_value_uint32(env, args[0], &listenerIndex); 273e41f4b71Sopenharmony_ci OH_LOG_INFO(LOG_APP, "listenerIndex =%{public}d.", listenerIndex); 274e41f4b71Sopenharmony_ci NativeDisplayManager_ErrorCode errCode = OH_NativeDisplayManager_UnregisterFoldDisplayModeChangeListener(listenerIndex); 275e41f4b71Sopenharmony_ci OH_LOG_INFO(LOG_APP, "errorCode=%{public}d", errCode); 276e41f4b71Sopenharmony_ci napi_value errorCode; 277e41f4b71Sopenharmony_ci napi_create_int32(env, errCode, &errorCode); 278e41f4b71Sopenharmony_ci return errorCode; 279e41f4b71Sopenharmony_ci } 280e41f4b71Sopenharmony_ci 281e41f4b71Sopenharmony_ci EXTERN_C_START 282e41f4b71Sopenharmony_ci static napi_value Init(napi_env env, napi_value exports) { 283e41f4b71Sopenharmony_ci napi_property_descriptor desc[] = { 284e41f4b71Sopenharmony_ci { "registerFoldDisplayModeChange", nullptr, RegisterFoldDisplayModeChangeListener, nullptr, nullptr, nullptr, 285e41f4b71Sopenharmony_ci napi_default, nullptr }, 286e41f4b71Sopenharmony_ci { "unregisterFoldDisplayModeChange", nullptr, UnregisterFoldDisplayModeChangeListener, nullptr, nullptr, 287e41f4b71Sopenharmony_ci nullptr, napi_default, nullptr }, 288e41f4b71Sopenharmony_ci }; 289e41f4b71Sopenharmony_ci napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); 290e41f4b71Sopenharmony_ci return exports; 291e41f4b71Sopenharmony_ci } 292e41f4b71Sopenharmony_ci EXTERN_C_END 293e41f4b71Sopenharmony_ci ``` 294