diff --git a/frameworks/js/napi/form_host/js_form_host.cpp b/frameworks/js/napi/form_host/js_form_host.cpp index c9bd93a30506080c274255cf38a0c783ba750892..f2106ab62cb0971fea2ba00d8322eb2272010154 100644 --- a/frameworks/js/napi/form_host/js_form_host.cpp +++ b/frameworks/js/napi/form_host/js_form_host.cpp @@ -279,6 +279,11 @@ public: GET_CB_INFO_AND_CALL(env, info, JsFormHost, OnRequestForm); } + static napi_value RequestFormWithParams(napi_env env, napi_callback_info info) + { + GET_CB_INFO_AND_CALL(env, info, JsFormHost, OnRequestFormWithParams); + } + static napi_value CastTempForm(napi_env env, napi_callback_info info) { GET_CB_INFO_AND_CALL(env, info, JsFormHost, OnCastTempForm); @@ -594,6 +599,54 @@ private: return result; } + napi_value OnRequestFormWithParams(napi_env env, size_t argc, napi_value* argv) + { + HILOG_DEBUG("%{public}s called.", __func__); + + if (argc > ARGS_TWO || argc < ARGS_ONE) { + HILOG_ERROR("%{public}s, wrong number of arguments.", __func__); + NapiFormUtil::ThrowParamNumError(env, std::to_string(argc), "1 or 2"); + return CreateJsUndefined(env); + } + + decltype(argc) convertArgc = 0; + int64_t formId = 0; + if (!ConvertFromId(env, argv[PARAM0], formId)) { + HILOG_ERROR("form id is invalid."); + NapiFormUtil::ThrowParamTypeError(env, "formId", "string"); + return CreateJsUndefined(env); + } + convertArgc++; + + if (argc == ARGS_TWO && !IsTypeForNapiValue(env, argv[PARAM1], napi_object)) { + HILOG_ERROR("second input param is invalid."); + NapiFormUtil::ThrowParamTypeError(env, "wantParams", "object"); + return CreateJsUndefined(env); + } + + Want want; + AAFwk::WantParams wantParams; + if (UnwrapWantParams(env, argv[PARAM1], wantParams)) { + want.SetParams(wantParams); + } + convertArgc++; + + NapiAsyncTask::CompleteCallback complete = [formId, want](napi_env env, NapiAsyncTask &task, int32_t status) { + auto ret = FormMgr::GetInstance().RequestForm(formId, FormHostClient::GetInstance(), want); + if (ret == ERR_OK) { + task.ResolveWithNoError(env, CreateJsUndefined(env)); + } else { + task.Reject(env, NapiFormUtil::CreateErrorByInternalErrorCode(env, ret)); + } + }; + + napi_value lastParam = (argc <= convertArgc) ? nullptr : argv[convertArgc]; + napi_value result = nullptr; + NapiAsyncTask::ScheduleWithDefaultQos("JsFormHost::OnRequestFormWithParams", + env, CreateAsyncTaskWithLastParam(env, lastParam, nullptr, std::move(complete), &result)); + return result; + } + napi_value OnCastTempForm(napi_env env, size_t argc, napi_value* argv) { HILOG_DEBUG("%{public}s called.", __func__); @@ -1704,6 +1757,7 @@ napi_value JsFormHostInit(napi_env env, napi_value exportObj) BindNativeFunction(env, exportObj, "deleteForm", moduleName, JsFormHost::DeleteForm); BindNativeFunction(env, exportObj, "releaseForm", moduleName, JsFormHost::ReleaseForm); BindNativeFunction(env, exportObj, "requestForm", moduleName, JsFormHost::RequestForm); + BindNativeFunction(env, exportObj, "requestFormWithParams", moduleName, JsFormHost::RequestFormWithParams); BindNativeFunction(env, exportObj, "castTempForm", moduleName, JsFormHost::CastTempForm); BindNativeFunction(env, exportObj, "castToNormalForm", moduleName, JsFormHost::CastTempForm); BindNativeFunction(env, exportObj, "notifyVisibleForms", moduleName, JsFormHost::NotifyVisibleForms); diff --git a/frameworks/js/napi/form_info/js_form_info.cpp b/frameworks/js/napi/form_info/js_form_info.cpp index 98719a5c43845fbafc891aaef405f4f89410d1cc..a8f5830c2f939e1feba42bf1f33a3347c58fe369 100644 --- a/frameworks/js/napi/form_info/js_form_info.cpp +++ b/frameworks/js/napi/form_info/js_form_info.cpp @@ -88,6 +88,8 @@ napi_value CreateJsFormParam(napi_env engine) "PARAM_FORM_CUSTOMIZE_KEY", CreateJsValue(engine, AppExecFwk::Constants::PARAM_FORM_CUSTOMIZE_KEY)); napi_set_named_property(engine, objValue, "FORM_RENDERING_MODE_KEY", CreateJsValue(engine, AppExecFwk::Constants::PARAM_FORM_RENDERINGMODE_KEY)); + napi_set_named_property(engine, objValue, + "HOST_BG_INVERSE_COLOR_KEY", CreateJsValue(engine, AppExecFwk::Constants::PARAM_HOST_BG_INVERSE_COLOR_KEY)); return objValue; } diff --git a/interfaces/inner_api/include/form_constants.h b/interfaces/inner_api/include/form_constants.h index 384d2bf6ba72ec8083a4862e12e66edb6c29f91c..a324b3d0f8605de07a10db7f5d68cf9d2bd0dfd6 100644 --- a/interfaces/inner_api/include/form_constants.h +++ b/interfaces/inner_api/include/form_constants.h @@ -76,6 +76,7 @@ namespace Constants { constexpr int32_t TYPE_STATIC_UPDATE = 2; constexpr int32_t TYPE_DYNAMIC_UPDATE = 3; const long ABS_REFRESH_MS = 2500; + constexpr const char* PARAM_HOST_BG_INVERSE_COLOR_KEY = "ohos.extra.param.key.host_bg_inverse_color"; constexpr int32_t UNKNOWN = 0; // The form events type which means that the form becomes visible. diff --git a/interfaces/kits/native/src/form_mgr.cpp b/interfaces/kits/native/src/form_mgr.cpp index 59bf84a956b16ba470bb321208080bab1ed274d3..da80ee7d0e089b4c3301797b0edd474667df3e71 100644 --- a/interfaces/kits/native/src/form_mgr.cpp +++ b/interfaces/kits/native/src/form_mgr.cpp @@ -264,7 +264,7 @@ int FormMgr::RequestForm(const int64_t formId, const sptr &caller } auto hostCaller = FormCallerMgr::GetInstance().GetFormHostCaller(formId); if (hostCaller != nullptr) { - HILOG_DEBUG("request form by host caller"); + HILOG_INFO("request form by host caller"); return hostCaller->RequestForm(formId, callerToken, want); } ErrCode resultCode = remoteProxy_->RequestForm(formId, callerToken, want); diff --git a/interfaces/kits/native/src/form_provider_client.cpp b/interfaces/kits/native/src/form_provider_client.cpp index c106f649ad141f7c7968229e867e2eafbeae4fbe..4da23f678fb18795183f14491f4ffe9cba128b33 100644 --- a/interfaces/kits/native/src/form_provider_client.cpp +++ b/interfaces/kits/native/src/form_provider_client.cpp @@ -175,7 +175,7 @@ int FormProviderClient::NotifyFormUpdate( } HILOG_INFO("Ability name is %{public}s.", ownerAbility->GetAbilityName().c_str()); - ownerAbility->OnUpdate(formId); + ownerAbility->OnUpdate(formId, want.GetParams()); } while (false); if (!want.HasParameter(Constants::FORM_CONNECT_ID)) { diff --git a/services/src/form_refresh_connection.cpp b/services/src/form_refresh_connection.cpp index 20cf3a2b802605eede5f58bd5747356c7132b7b3..b68e521a06deba048d4ff6f7d9c09d03e5eb5691 100644 --- a/services/src/form_refresh_connection.cpp +++ b/services/src/form_refresh_connection.cpp @@ -66,7 +66,7 @@ void FormRefreshConnection::OnAbilityConnectDone( cloneWant.SetParam(Constants::FORM_CONNECT_ID, this->GetConnectId()); FormTaskMgr::GetInstance().PostAcquireTask(GetFormId(), cloneWant, remoteObject); } else { - Want want; + Want want = Want(want_); want.SetParam(Constants::FORM_CONNECT_ID, this->GetConnectId()); FormTaskMgr::GetInstance().PostRefreshTask(GetFormId(), want, remoteObject); }