1 /* 2 * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef OHOS_JS_WINDOW_UTILS_H 17 #define OHOS_JS_WINDOW_UTILS_H 18 #include <map> 19 #include "js_runtime_utils.h" 20 #include "native_engine/native_engine.h" 21 #include "native_engine/native_value.h" 22 #include "window.h" 23 #include "window_helper.h" 24 25 #ifndef WINDOW_PREVIEW 26 #include "window_manager.h" 27 #else 28 #include "mock/window_manager.h" 29 #endif 30 31 #include "window_option.h" 32 #include "window_visibility_info.h" 33 #include "wm_common.h" 34 namespace OHOS { 35 namespace Rosen { 36 constexpr int32_t RGB_LENGTH = 6; 37 constexpr int32_t RGBA_LENGTH = 8; 38 39 #define CHECK_NAPI_RETCODE(errCode, code, call) \ 40 do { \ 41 napi_status retCode = (call); \ 42 if (retCode != napi_ok) { \ 43 WLOGFE("napi call failed, return %{public}d", static_cast<int32_t>(retCode)); \ 44 errCode = code; \ 45 } \ 46 } while (0) 47 48 #define CHECK_NAPI_ENV_RETURN_IF_NULL(env) \ 49 do { \ 50 if ((env) == nullptr) { \ 51 TLOGE(WmsLogTag::DEFAULT, "env is invalid"); \ 52 return nullptr; \ 53 } \ 54 } while (0) 55 56 #define CHECK_NAPI_CREATE_OBJECT_RETURN_IF_NULL(env, objValue) \ 57 do { \ 58 napi_create_object((env), &(objValue)); \ 59 if ((objValue) == nullptr) { \ 60 TLOGE(WmsLogTag::DEFAULT, "Failed to get object"); \ 61 return nullptr; \ 62 } \ 63 } while (0) 64 65 enum class ApiWindowType : uint32_t { 66 TYPE_BASE, 67 TYPE_APP = TYPE_BASE, 68 TYPE_SYSTEM_ALERT, 69 TYPE_INPUT_METHOD, 70 TYPE_STATUS_BAR, 71 TYPE_PANEL, 72 TYPE_KEYGUARD, 73 TYPE_VOLUME_OVERLAY, 74 TYPE_NAVIGATION_BAR, 75 TYPE_FLOAT, 76 TYPE_WALLPAPER, 77 TYPE_DESKTOP, 78 TYPE_LAUNCHER_RECENT, 79 TYPE_LAUNCHER_DOCK, 80 TYPE_VOICE_INTERACTION, 81 TYPE_POINTER, 82 TYPE_FLOAT_CAMERA, 83 TYPE_DIALOG, 84 TYPE_SCREENSHOT, 85 TYPE_SYSTEM_TOAST, 86 TYPE_DIVIDER, 87 TYPE_GLOBAL_SEARCH, 88 TYPE_HANDWRITE, 89 TYPE_WALLET_SWIPE_CARD, 90 TYPE_SCREEN_CONTROL, 91 TYPE_FLOAT_NAVIGATION, 92 TYPE_END 93 }; 94 95 enum class LifeCycleEventType : uint32_t { 96 FOREGROUND = 1, 97 ACTIVE, 98 INACTIVE, 99 BACKGROUND, 100 RESUMED, 101 PAUSED, 102 DESTROYED, 103 }; 104 105 const std::map<WindowType, ApiWindowType> NATIVE_JS_TO_WINDOW_TYPE_MAP { 106 { WindowType::WINDOW_TYPE_APP_SUB_WINDOW, ApiWindowType::TYPE_APP }, 107 { WindowType::WINDOW_TYPE_DIALOG, ApiWindowType::TYPE_DIALOG }, 108 { WindowType::WINDOW_TYPE_SYSTEM_ALARM_WINDOW, ApiWindowType::TYPE_SYSTEM_ALERT }, 109 { WindowType::WINDOW_TYPE_INPUT_METHOD_FLOAT, ApiWindowType::TYPE_INPUT_METHOD }, 110 { WindowType::WINDOW_TYPE_STATUS_BAR, ApiWindowType::TYPE_STATUS_BAR }, 111 { WindowType::WINDOW_TYPE_PANEL, ApiWindowType::TYPE_PANEL }, 112 { WindowType::WINDOW_TYPE_KEYGUARD, ApiWindowType::TYPE_KEYGUARD }, 113 { WindowType::WINDOW_TYPE_VOLUME_OVERLAY, ApiWindowType::TYPE_VOLUME_OVERLAY }, 114 { WindowType::WINDOW_TYPE_NAVIGATION_BAR, ApiWindowType::TYPE_NAVIGATION_BAR }, 115 { WindowType::WINDOW_TYPE_FLOAT, ApiWindowType::TYPE_FLOAT }, 116 { WindowType::WINDOW_TYPE_FLOAT_CAMERA, ApiWindowType::TYPE_FLOAT_CAMERA }, 117 { WindowType::WINDOW_TYPE_WALLPAPER, ApiWindowType::TYPE_WALLPAPER }, 118 { WindowType::WINDOW_TYPE_DESKTOP, ApiWindowType::TYPE_DESKTOP }, 119 { WindowType::WINDOW_TYPE_LAUNCHER_RECENT, ApiWindowType::TYPE_LAUNCHER_RECENT }, 120 { WindowType::WINDOW_TYPE_LAUNCHER_DOCK, ApiWindowType::TYPE_LAUNCHER_DOCK }, 121 { WindowType::WINDOW_TYPE_VOICE_INTERACTION, ApiWindowType::TYPE_VOICE_INTERACTION }, 122 { WindowType::WINDOW_TYPE_POINTER, ApiWindowType::TYPE_POINTER }, 123 { WindowType::WINDOW_TYPE_SCREENSHOT, ApiWindowType::TYPE_SCREENSHOT }, 124 { WindowType::WINDOW_TYPE_SYSTEM_TOAST, ApiWindowType::TYPE_SYSTEM_TOAST }, 125 { WindowType::WINDOW_TYPE_DOCK_SLICE, ApiWindowType::TYPE_DIVIDER }, 126 { WindowType::WINDOW_TYPE_GLOBAL_SEARCH, ApiWindowType::TYPE_GLOBAL_SEARCH }, 127 { WindowType::WINDOW_TYPE_HANDWRITE, ApiWindowType::TYPE_HANDWRITE }, 128 { WindowType::WINDOW_TYPE_WALLET_SWIPE_CARD, ApiWindowType::TYPE_WALLET_SWIPE_CARD }, 129 { WindowType::WINDOW_TYPE_SCREEN_CONTROL, ApiWindowType::TYPE_SCREEN_CONTROL }, 130 { WindowType::WINDOW_TYPE_FLOAT_NAVIGATION, ApiWindowType::TYPE_FLOAT_NAVIGATION }, 131 }; 132 133 const std::map<ApiWindowType, WindowType> JS_TO_NATIVE_WINDOW_TYPE_MAP { 134 { ApiWindowType::TYPE_APP, WindowType::WINDOW_TYPE_APP_SUB_WINDOW }, 135 { ApiWindowType::TYPE_DIALOG, WindowType::WINDOW_TYPE_DIALOG }, 136 { ApiWindowType::TYPE_SYSTEM_ALERT, WindowType::WINDOW_TYPE_SYSTEM_ALARM_WINDOW }, 137 { ApiWindowType::TYPE_INPUT_METHOD, WindowType::WINDOW_TYPE_INPUT_METHOD_FLOAT }, 138 { ApiWindowType::TYPE_STATUS_BAR, WindowType::WINDOW_TYPE_STATUS_BAR }, 139 { ApiWindowType::TYPE_PANEL, WindowType::WINDOW_TYPE_PANEL }, 140 { ApiWindowType::TYPE_KEYGUARD, WindowType::WINDOW_TYPE_KEYGUARD }, 141 { ApiWindowType::TYPE_VOLUME_OVERLAY, WindowType::WINDOW_TYPE_VOLUME_OVERLAY }, 142 { ApiWindowType::TYPE_NAVIGATION_BAR, WindowType::WINDOW_TYPE_NAVIGATION_BAR }, 143 { ApiWindowType::TYPE_FLOAT, WindowType::WINDOW_TYPE_FLOAT }, 144 { ApiWindowType::TYPE_FLOAT_CAMERA, WindowType::WINDOW_TYPE_FLOAT_CAMERA }, 145 { ApiWindowType::TYPE_WALLPAPER, WindowType::WINDOW_TYPE_WALLPAPER }, 146 { ApiWindowType::TYPE_DESKTOP, WindowType::WINDOW_TYPE_DESKTOP }, 147 { ApiWindowType::TYPE_LAUNCHER_RECENT, WindowType::WINDOW_TYPE_LAUNCHER_RECENT }, 148 { ApiWindowType::TYPE_LAUNCHER_DOCK, WindowType::WINDOW_TYPE_LAUNCHER_DOCK }, 149 { ApiWindowType::TYPE_VOICE_INTERACTION, WindowType::WINDOW_TYPE_VOICE_INTERACTION }, 150 { ApiWindowType::TYPE_POINTER, WindowType::WINDOW_TYPE_POINTER }, 151 { ApiWindowType::TYPE_SCREENSHOT, WindowType::WINDOW_TYPE_SCREENSHOT }, 152 { ApiWindowType::TYPE_SYSTEM_TOAST, WindowType::WINDOW_TYPE_SYSTEM_TOAST }, 153 { ApiWindowType::TYPE_DIVIDER, WindowType::WINDOW_TYPE_DOCK_SLICE }, 154 { ApiWindowType::TYPE_GLOBAL_SEARCH, WindowType::WINDOW_TYPE_GLOBAL_SEARCH }, 155 { ApiWindowType::TYPE_HANDWRITE, WindowType::WINDOW_TYPE_HANDWRITE }, 156 { ApiWindowType::TYPE_WALLET_SWIPE_CARD, WindowType::WINDOW_TYPE_WALLET_SWIPE_CARD }, 157 { ApiWindowType::TYPE_SCREEN_CONTROL, WindowType::WINDOW_TYPE_SCREEN_CONTROL }, 158 { ApiWindowType::TYPE_FLOAT_NAVIGATION, WindowType::WINDOW_TYPE_FLOAT_NAVIGATION }, 159 }; 160 161 enum class ApiWindowMode : uint32_t { 162 UNDEFINED = 1, 163 FULLSCREEN, 164 PRIMARY, 165 SECONDARY, 166 FLOATING, 167 MODE_END = FLOATING 168 }; 169 170 const std::map<WindowMode, ApiWindowMode> NATIVE_TO_JS_WINDOW_MODE_MAP { 171 { WindowMode::WINDOW_MODE_UNDEFINED, ApiWindowMode::UNDEFINED }, 172 { WindowMode::WINDOW_MODE_FULLSCREEN, ApiWindowMode::FULLSCREEN }, 173 { WindowMode::WINDOW_MODE_SPLIT_PRIMARY, ApiWindowMode::PRIMARY }, 174 { WindowMode::WINDOW_MODE_SPLIT_SECONDARY, ApiWindowMode::SECONDARY }, 175 { WindowMode::WINDOW_MODE_FLOATING, ApiWindowMode::FLOATING }, 176 }; 177 178 const std::map<ApiWindowMode, WindowMode> JS_TO_NATIVE_WINDOW_MODE_MAP { 179 {ApiWindowMode::UNDEFINED, WindowMode::WINDOW_MODE_UNDEFINED }, 180 {ApiWindowMode::FULLSCREEN, WindowMode::WINDOW_MODE_FULLSCREEN }, 181 {ApiWindowMode::PRIMARY, WindowMode::WINDOW_MODE_SPLIT_PRIMARY }, 182 {ApiWindowMode::SECONDARY, WindowMode::WINDOW_MODE_SPLIT_SECONDARY }, 183 {ApiWindowMode::FLOATING, WindowMode::WINDOW_MODE_FLOATING }, 184 }; 185 186 enum class ApiOrientation : uint32_t { 187 BEGIN = 0, 188 UNSPECIFIED = BEGIN, 189 PORTRAIT = 1, 190 LANDSCAPE = 2, 191 PORTRAIT_INVERTED = 3, 192 LANDSCAPE_INVERTED = 4, 193 AUTO_ROTATION = 5, 194 AUTO_ROTATION_PORTRAIT = 6, 195 AUTO_ROTATION_LANDSCAPE = 7, 196 AUTO_ROTATION_RESTRICTED = 8, 197 AUTO_ROTATION_PORTRAIT_RESTRICTED = 9, 198 AUTO_ROTATION_LANDSCAPE_RESTRICTED = 10, 199 LOCKED = 11, 200 AUTO_ROTATION_UNSPECIFIED = 12, 201 USER_ROTATION_PORTRAIT = 13, 202 USER_ROTATION_LANDSCAPE = 14, 203 USER_ROTATION_PORTRAIT_INVERTED = 15, 204 USER_ROTATION_LANDSCAPE_INVERTED = 16, 205 FOLLOW_DESKTOP = 17, 206 END = FOLLOW_DESKTOP, 207 }; 208 209 const std::map<ApiOrientation, Orientation> JS_TO_NATIVE_ORIENTATION_MAP { 210 {ApiOrientation::UNSPECIFIED, Orientation::UNSPECIFIED }, 211 {ApiOrientation::PORTRAIT, Orientation::VERTICAL }, 212 {ApiOrientation::LANDSCAPE, Orientation::HORIZONTAL }, 213 {ApiOrientation::PORTRAIT_INVERTED, Orientation::REVERSE_VERTICAL }, 214 {ApiOrientation::LANDSCAPE_INVERTED, Orientation::REVERSE_HORIZONTAL }, 215 {ApiOrientation::AUTO_ROTATION, Orientation::SENSOR }, 216 {ApiOrientation::AUTO_ROTATION_PORTRAIT, Orientation::SENSOR_VERTICAL }, 217 {ApiOrientation::AUTO_ROTATION_LANDSCAPE, Orientation::SENSOR_HORIZONTAL }, 218 {ApiOrientation::AUTO_ROTATION_RESTRICTED, Orientation::AUTO_ROTATION_RESTRICTED }, 219 {ApiOrientation::AUTO_ROTATION_PORTRAIT_RESTRICTED, Orientation::AUTO_ROTATION_PORTRAIT_RESTRICTED }, 220 {ApiOrientation::AUTO_ROTATION_LANDSCAPE_RESTRICTED, Orientation::AUTO_ROTATION_LANDSCAPE_RESTRICTED }, 221 {ApiOrientation::LOCKED, Orientation::LOCKED }, 222 {ApiOrientation::AUTO_ROTATION_UNSPECIFIED, Orientation::AUTO_ROTATION_UNSPECIFIED }, 223 {ApiOrientation::USER_ROTATION_PORTRAIT, Orientation::USER_ROTATION_PORTRAIT }, 224 {ApiOrientation::USER_ROTATION_LANDSCAPE, Orientation::USER_ROTATION_LANDSCAPE }, 225 {ApiOrientation::USER_ROTATION_PORTRAIT_INVERTED, Orientation::USER_ROTATION_PORTRAIT_INVERTED }, 226 {ApiOrientation::USER_ROTATION_LANDSCAPE_INVERTED, Orientation::USER_ROTATION_LANDSCAPE_INVERTED }, 227 {ApiOrientation::FOLLOW_DESKTOP, Orientation::FOLLOW_DESKTOP }, 228 }; 229 230 const std::map<Orientation, ApiOrientation> NATIVE_TO_JS_ORIENTATION_MAP { 231 {Orientation::UNSPECIFIED, ApiOrientation::UNSPECIFIED }, 232 {Orientation::VERTICAL, ApiOrientation::PORTRAIT }, 233 {Orientation::HORIZONTAL, ApiOrientation::LANDSCAPE }, 234 {Orientation::REVERSE_VERTICAL, ApiOrientation::PORTRAIT_INVERTED }, 235 {Orientation::REVERSE_HORIZONTAL, ApiOrientation::LANDSCAPE_INVERTED }, 236 {Orientation::SENSOR, ApiOrientation::AUTO_ROTATION }, 237 {Orientation::SENSOR_VERTICAL, ApiOrientation::AUTO_ROTATION_PORTRAIT }, 238 {Orientation::SENSOR_HORIZONTAL, ApiOrientation::AUTO_ROTATION_LANDSCAPE }, 239 {Orientation::AUTO_ROTATION_RESTRICTED, ApiOrientation::AUTO_ROTATION_RESTRICTED }, 240 {Orientation::AUTO_ROTATION_PORTRAIT_RESTRICTED, ApiOrientation::AUTO_ROTATION_PORTRAIT_RESTRICTED }, 241 {Orientation::AUTO_ROTATION_LANDSCAPE_RESTRICTED, ApiOrientation::AUTO_ROTATION_LANDSCAPE_RESTRICTED }, 242 {Orientation::LOCKED, ApiOrientation::LOCKED }, 243 {Orientation::FOLLOW_RECENT, ApiOrientation::UNSPECIFIED }, 244 {Orientation::AUTO_ROTATION_UNSPECIFIED, ApiOrientation::AUTO_ROTATION_UNSPECIFIED }, 245 {Orientation::USER_ROTATION_PORTRAIT, ApiOrientation::USER_ROTATION_PORTRAIT }, 246 {Orientation::USER_ROTATION_LANDSCAPE, ApiOrientation::USER_ROTATION_LANDSCAPE }, 247 {Orientation::USER_ROTATION_PORTRAIT_INVERTED, ApiOrientation::USER_ROTATION_PORTRAIT_INVERTED }, 248 {Orientation::USER_ROTATION_LANDSCAPE_INVERTED, ApiOrientation::USER_ROTATION_LANDSCAPE_INVERTED }, 249 {Orientation::FOLLOW_DESKTOP, ApiOrientation::FOLLOW_DESKTOP }, 250 }; 251 252 enum class RectChangeReason : uint32_t { 253 UNDEFINED = 0, 254 MAXIMIZE, 255 RECOVER, 256 MOVE, 257 DRAG, 258 DRAG_START, 259 DRAG_END, 260 }; 261 262 const std::map<WindowSizeChangeReason, RectChangeReason> JS_SIZE_CHANGE_REASON { 263 { WindowSizeChangeReason::UNDEFINED, RectChangeReason::UNDEFINED }, 264 { WindowSizeChangeReason::MAXIMIZE, RectChangeReason::MAXIMIZE }, 265 { WindowSizeChangeReason::RECOVER, RectChangeReason::RECOVER }, 266 { WindowSizeChangeReason::ROTATION, RectChangeReason::UNDEFINED }, 267 { WindowSizeChangeReason::DRAG, RectChangeReason::DRAG }, 268 { WindowSizeChangeReason::DRAG_START, RectChangeReason::DRAG_START }, 269 { WindowSizeChangeReason::DRAG_MOVE, RectChangeReason::MOVE }, 270 { WindowSizeChangeReason::DRAG_END, RectChangeReason::DRAG_END }, 271 { WindowSizeChangeReason::RESIZE, RectChangeReason::UNDEFINED }, 272 { WindowSizeChangeReason::MOVE, RectChangeReason::MOVE }, 273 { WindowSizeChangeReason::HIDE, RectChangeReason::UNDEFINED }, 274 { WindowSizeChangeReason::TRANSFORM, RectChangeReason::UNDEFINED }, 275 { WindowSizeChangeReason::CUSTOM_ANIMATION_SHOW, RectChangeReason::UNDEFINED }, 276 { WindowSizeChangeReason::FULL_TO_SPLIT, RectChangeReason::UNDEFINED }, 277 { WindowSizeChangeReason::SPLIT_TO_FULL, RectChangeReason::UNDEFINED }, 278 { WindowSizeChangeReason::FULL_TO_FLOATING, RectChangeReason::UNDEFINED }, 279 { WindowSizeChangeReason::FLOATING_TO_FULL, RectChangeReason::UNDEFINED }, 280 { WindowSizeChangeReason::END, RectChangeReason::UNDEFINED }, 281 }; 282 283 enum class ApiModalityType : uint32_t { 284 BEGIN = 0, 285 WINDOW_MODALITY = BEGIN, 286 APPLICATION_MODALITY, 287 END = APPLICATION_MODALITY, 288 }; 289 290 inline const std::map<ApiModalityType, ModalityType> JS_TO_NATIVE_MODALITY_TYPE_MAP { 291 { ApiModalityType::WINDOW_MODALITY, ModalityType::WINDOW_MODALITY }, 292 { ApiModalityType::APPLICATION_MODALITY, ModalityType::APPLICATION_MODALITY }, 293 }; 294 295 using AsyncCallbackFunc_ = std::function<void(napi_env env, size_t argc, napi_value* argv)>; 296 297 class AsyncCallback : virtual public RefBase { 298 public: 299 AsyncCallbackFunc_ resolvedCallback_ = nullptr; 300 AsyncCallbackFunc_ rejectedCallback_ = nullptr; AsyncCallback(AsyncCallbackFunc_ resolvedCallback,AsyncCallbackFunc_ rejectedCallback)301 AsyncCallback(AsyncCallbackFunc_ resolvedCallback, AsyncCallbackFunc_ rejectedCallback) 302 : resolvedCallback_(resolvedCallback), rejectedCallback_(rejectedCallback) {} 303 }; 304 305 /* 306 * Promise 307 */ 308 bool CheckPromise(napi_env env, napi_value promiseObj); 309 napi_value ResolvedCallback(napi_env env, napi_callback_info info); 310 napi_value RejectedCallback(napi_env env, napi_callback_info info); 311 bool CallPromise(napi_env env, napi_value promiseObj, AsyncCallback* asyncCallback); 312 313 napi_value CreateJsWindowLayoutInfoArrayObject(napi_env env, const std::vector<sptr<WindowLayoutInfo>>& infos); 314 napi_value CreateJsWindowLayoutInfoObject(napi_env env, const sptr<WindowLayoutInfo>& info); 315 napi_value CreateJsWindowInfoArrayObject(napi_env env, const std::vector<sptr<WindowVisibilityInfo>>& infos); 316 napi_value CreateJsWindowInfoObject(napi_env env, const sptr<WindowVisibilityInfo>& window); 317 napi_value GetRectAndConvertToJsValue(napi_env env, const Rect& rect); 318 napi_value CreateJsWindowPropertiesObject(napi_env env, sptr<Window>& window, const Rect& drawableRect); 319 napi_value CreateJsSystemBarPropertiesObject(napi_env env, sptr<Window>& window); 320 bool GetSystemBarPropertiesFromJs(napi_env env, napi_value jsObject, 321 std::map<WindowType, SystemBarProperty>& properties, 322 std::map<WindowType, SystemBarPropertyFlag>& propertyFlags); 323 bool SetWindowStatusBarContentColor(napi_env env, napi_value jsObject, 324 std::map<WindowType, SystemBarProperty>& properties, 325 std::map<WindowType, SystemBarPropertyFlag>& propertyFlags); 326 bool SetWindowNavigationBarContentColor(napi_env env, napi_value jsObject, 327 std::map<WindowType, SystemBarProperty>& properties, 328 std::map<WindowType, SystemBarPropertyFlag>& propertyFlags); 329 bool GetSystemBarStatus(napi_env env, napi_callback_info info, 330 std::map<WindowType, SystemBarProperty>& systemBarProperties, 331 std::map<WindowType, SystemBarPropertyFlag>& systemBarpropertyFlags); 332 bool ParseAndCheckRect(napi_env env, napi_value jsObject, const Rect& windowRect, Rect& touchableRect); 333 WmErrorCode ParseTouchableAreas(napi_env env, napi_callback_info info, const Rect& windowRect, 334 std::vector<Rect>& touchableAreas); 335 bool GetSpecificBarStatus(napi_env env, napi_callback_info info, 336 bool& systemBarEnable, bool& systemBarEnableAnimation); 337 napi_value CreateJsSystemBarRegionTintArrayObject(napi_env env, 338 const SystemBarRegionTints& tints); 339 napi_value ConvertAvoidAreaToJsValue(napi_env env, const AvoidArea& avoidArea, AvoidAreaType type); 340 bool CheckCallingPermission(std::string permission); 341 bool ParseSystemWindowTypeForApiWindowType(int32_t apiWindowType, WindowType& windowType); 342 napi_value WindowTypeInit(napi_env env); 343 napi_value AvoidAreaTypeInit(napi_env env); 344 napi_value WindowModeInit(napi_env env); 345 napi_value ColorSpaceInit(napi_env env); 346 napi_value OrientationInit(napi_env env); 347 napi_value WindowStageEventTypeInit(napi_env env); 348 napi_value WindowEventTypeInit(napi_env env); 349 napi_value WindowLayoutModeInit(napi_env env); 350 napi_value BlurStyleInit(napi_env env); 351 napi_value MaximizePresentationInit(napi_env env); 352 napi_value WindowErrorCodeInit(napi_env env); 353 napi_value WindowErrorInit(napi_env env); 354 napi_value WindowStatusTypeInit(napi_env env); 355 napi_value RectChangeReasonInit(napi_env env); 356 napi_value GetWindowLimitsAndConvertToJsValue(napi_env env, const WindowLimits& windowLimits); 357 napi_value ConvertTitleButtonAreaToJsValue(napi_env env, const TitleButtonRect& titleButtonRect); 358 napi_value ModalityTypeInit(napi_env env); 359 napi_value ConvertWindowDensityInfoToJsValue(napi_env env, const WindowDensityInfo& windowDensityInfo); 360 napi_value ExtensionWindowAttributeInit(napi_env env); 361 bool GetAPI7Ability(napi_env env, AppExecFwk::Ability* &ability); 362 bool GetWindowMaskFromJsValue(napi_env env, napi_value jsObject, std::vector<std::vector<uint32_t>>& windowMask); 363 bool GetMoveConfigurationFromJsValue(napi_env env, napi_value jsObject, MoveConfiguration& moveConfiguration); 364 void ConvertJSSystemBarStyleToSystemBarProperties(napi_env env, napi_value jsObject, 365 std::map<WindowType, SystemBarProperty>& properties, 366 std::map<WindowType, SystemBarPropertyFlag>& propertyFlags); 367 std::unique_ptr<AbilityRuntime::NapiAsyncTask> CreateAsyncTask(napi_env env, napi_value lastParam, 368 std::unique_ptr<AbilityRuntime::NapiAsyncTask::ExecuteCallback>&& execute, 369 std::unique_ptr<AbilityRuntime::NapiAsyncTask::CompleteCallback>&& complete, napi_value* result); 370 std::unique_ptr<AbilityRuntime::NapiAsyncTask> CreateEmptyAsyncTask( 371 napi_env env, napi_value lastParam, napi_value* result); 372 bool ParseSubWindowOptions(napi_env env, napi_value jsObject, const sptr<WindowOption>& windowOption); 373 template<class T> ParseJsValue(napi_value jsObject,napi_env env,const std::string & name,T & data)374 bool ParseJsValue(napi_value jsObject, napi_env env, const std::string& name, T& data) 375 { 376 napi_value value = nullptr; 377 napi_get_named_property(env, jsObject, name.c_str(), &value); 378 napi_valuetype type = napi_undefined; 379 napi_typeof(env, value, &type); 380 if (type != napi_undefined) { 381 if (!AbilityRuntime::ConvertFromJsValue(env, value, data)) { 382 return false; 383 } 384 } else { 385 return false; 386 } 387 return true; 388 } 389 template<class T> ConvertNativeValueToVector(napi_env env,napi_value nativeArray,std::vector<T> & out)390 inline bool ConvertNativeValueToVector(napi_env env, napi_value nativeArray, std::vector<T>& out) 391 { 392 if (nativeArray == nullptr) { 393 return false; 394 } 395 T value; 396 uint32_t size = 0; 397 napi_get_array_length(env, nativeArray, &size); 398 for (uint32_t i = 0; i < size; i++) { 399 napi_value getElementValue = nullptr; 400 napi_get_element(env, nativeArray, i, &getElementValue); 401 if (!AbilityRuntime::ConvertFromJsValue(env, getElementValue, value)) { 402 return false; 403 } 404 out.emplace_back(value); 405 } 406 return true; 407 } 408 } 409 } 410 #endif