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_FORM_FWK_NAPI_FORM_HOST_H 17 #define OHOS_FORM_FWK_NAPI_FORM_HOST_H 18 19 #include "ability.h" 20 #include "js_runtime_utils.h" 21 #include "napi/native_api.h" 22 #include "napi/native_common.h" 23 #include "napi/native_node_api.h" 24 #include "nlohmann/json.hpp" 25 26 namespace OHOS { 27 namespace AbilityRuntime { 28 29 struct AsyncNotifyVisibleFormsCallbackInfo { 30 napi_env env; 31 napi_async_work asyncWork; 32 napi_deferred deferred; 33 napi_ref callback; 34 std::vector<int64_t> formIds; 35 int result; 36 }; 37 38 struct AsyncNotifyInvisibleFormsCallbackInfo { 39 napi_env env; 40 napi_async_work asyncWork; 41 napi_deferred deferred; 42 napi_ref callback; 43 std::vector<int64_t> formIds; 44 int result; 45 }; 46 47 struct AsyncDeleteInvalidFormsCallbackInfo { 48 napi_env env; 49 napi_async_work asyncWork = nullptr; 50 napi_deferred deferred = nullptr; 51 napi_ref callback = nullptr; 52 std::vector<int64_t> formIds; 53 int numFormsDeleted = 0; 54 int result = OHOS::ERR_OK; 55 }; 56 57 struct AsyncAcquireFormStateCallbackInfo { 58 napi_env env; 59 napi_async_work asyncWork; 60 napi_deferred deferred; 61 napi_ref callback; 62 OHOS::AAFwk::Want want; 63 OHOS::AppExecFwk::FormStateInfo stateInfo; 64 int32_t callbackType = 0; 65 int result; 66 }; 67 68 struct AsyncNotifyFormsVisibleCallbackInfo { 69 napi_env env; 70 napi_async_work asyncWork; 71 napi_deferred deferred; 72 napi_ref callback; 73 std::vector<int64_t> formIds; 74 bool isVisible; 75 int result; 76 }; 77 78 struct AsyncNotifyFormsEnableUpdateCallbackInfo { 79 napi_env env; 80 napi_async_work asyncWork; 81 napi_deferred deferred; 82 napi_ref callback; 83 std::vector<int64_t> formIds; 84 bool isEnableUpdate; 85 int result; 86 }; 87 88 napi_value NAPI_NotifyVisibleForms(napi_env env, napi_callback_info info); 89 napi_value NAPI_NotifyInvisibleForms(napi_env env, napi_callback_info info); 90 napi_value NAPI_DeleteInvalidForms(napi_env env, napi_callback_info info); 91 napi_value NAPI_AcquireFormState(napi_env env, napi_callback_info info); 92 napi_value NAPI_RegisterFormUninstallObserver(napi_env env, napi_callback_info info); 93 napi_value NAPI_UnregisterFormUninstallObserver(napi_env env, napi_callback_info info); 94 napi_value NAPI_NotifyFormsVisible(napi_env env, napi_callback_info info); 95 napi_value NAPI_NotifyFormsEnableUpdate(napi_env env, napi_callback_info info); 96 97 using ShareFormTask = std::function<void(int32_t)>; 98 class NapiFormHost { 99 public: 100 NapiFormHost() = default; 101 ~NapiFormHost() = default; 102 103 static void Finalizer(NativeEngine* engine, void* data, void* hint); 104 static NativeValue* ShareForm(NativeEngine* engine, NativeCallbackInfo* info); 105 static NativeValue* DisableFormsUpdate(NativeEngine *engine, NativeCallbackInfo *info); 106 static NativeValue* IsSystemReady(NativeEngine *engine, NativeCallbackInfo *info); 107 static NativeValue* DeleteForm(NativeEngine *engine, NativeCallbackInfo *info); 108 static NativeValue* ReleaseForm(NativeEngine *engine, NativeCallbackInfo *info); 109 static NativeValue* RequestForm(NativeEngine *engine, NativeCallbackInfo *info); 110 static NativeValue* CastTempForm(NativeEngine *engine, NativeCallbackInfo *info); 111 static NativeValue* GetAllFormsInfo(NativeEngine *engine, NativeCallbackInfo *info); 112 static NativeValue* GetFormsInfo(NativeEngine *engine, NativeCallbackInfo *info); 113 static NativeValue* EnableFormsUpdate(NativeEngine *engine, NativeCallbackInfo *info); 114 static NativeValue* NotifyFormsPrivacyProtected(NativeEngine *engine, NativeCallbackInfo *info); 115 private: 116 NativeValue* OnDisableFormsUpdate(NativeEngine &engine, NativeCallbackInfo &info); 117 NativeValue* OnIsSystemReady(NativeEngine &engine, const NativeCallbackInfo &info); 118 NativeValue* OnDeleteForm(NativeEngine &engine, NativeCallbackInfo &info); 119 NativeValue* OnReleaseForm(NativeEngine &engine, NativeCallbackInfo &info); 120 NativeValue* OnRequestForm(NativeEngine &engine, NativeCallbackInfo &info); 121 NativeValue* OnCastTempForm(NativeEngine &engine, NativeCallbackInfo &info); 122 NativeValue* OnGetAllFormsInfo(NativeEngine &engine, const NativeCallbackInfo &info); 123 NativeValue* OnGetFormsInfo(NativeEngine &engine, NativeCallbackInfo &info); 124 NativeValue* OnEnableFormsUpdate(NativeEngine &engine, NativeCallbackInfo &info); 125 NativeValue* OnShareForm(NativeEngine &engine, NativeCallbackInfo &info); 126 NativeValue* OnNotifyFormsPrivacyProtected(NativeEngine &engine, NativeCallbackInfo &info); 127 void InnerShareForm(NativeEngine &engine, const std::shared_ptr<OHOS::AbilityRuntime::AsyncTask> &asyncTask, 128 ShareFormTask &&task, int64_t formId, const std::string &remoteDeviceId); 129 bool GetStringsValue(NativeEngine &engine, NativeValue *object, std::vector<std::string> &strList); 130 static bool UnwrapGetFormsInfoParams(NativeEngine &engine, NativeCallbackInfo &info, std::string &moduleName, 131 bool &bParam); 132 }; 133 } // namespace AbilityRuntime 134 } // namespace OHOS 135 #endif /* OHOS_FORM_FWK_NAPI_FORM_HOST_H */ 136