From 422db6149fd882ea6afb39a840f97f8c085d3e3b Mon Sep 17 00:00:00 2001 From: zhaolinglan Date: Thu, 24 Jul 2025 15:32:28 +0800 Subject: [PATCH] add getRecommendation Signed-off-by: zhaolinglan --- .../js_text_input_client_engine.cpp | 29 ++++++++++++++++++ .../js_text_input_client_engine.h | 6 ++++ .../include/input_method_ability.h | 2 ++ .../include/input_recommendation.h | 30 +++++++++++++++++++ .../src/input_method_ability.cpp | 8 +++++ 5 files changed, 75 insertions(+) create mode 100644 frameworks/native/inputmethod_ability/include/input_recommendation.h diff --git a/frameworks/js/napi/inputmethodability/js_text_input_client_engine.cpp b/frameworks/js/napi/inputmethodability/js_text_input_client_engine.cpp index f10a65a73..65709370a 100644 --- a/frameworks/js/napi/inputmethodability/js_text_input_client_engine.cpp +++ b/frameworks/js/napi/inputmethodability/js_text_input_client_engine.cpp @@ -81,6 +81,7 @@ napi_value JsTextInputClientEngine::Init(napi_env env, napi_value info) DECLARE_NAPI_FUNCTION("sendMessage", SendMessage), DECLARE_NAPI_FUNCTION("recvMessage", RecvMessage), DECLARE_NAPI_FUNCTION("getAttachOptions", GetAttachOptions), + DECLARE_NAPI_FUNCTION("getRecommendation", GetRecommendation), DECLARE_NAPI_FUNCTION("on", Subscribe), DECLARE_NAPI_FUNCTION("off", UnSubscribe) }; napi_value cons = nullptr; @@ -1233,6 +1234,15 @@ bool JsAttachOptions::Read(napi_env env, napi_value jsObject, AttachOptions &att return ret; } +napi_value JsInputRecommendation::Write(napi_env env, const InputRecommendation &inputRecommendation) +{ + napi_value jsObject = nullptr; + napi_create_object(env, &jsObject); + napi_value jsRecommendationObject = JsUtil::GetValue(env, inputRecommendation.recommendedWords); + bool ret = JsUtil::Object::WriteProperty(env, jsObject, "recommendedWords"); + return ret ? jsObject : JsUtil::Const::Null(env); +} + napi_value JsTextInputClientEngine::SendMessage(napi_env env, napi_callback_info info) { auto ctxt = std::make_shared(); @@ -1361,6 +1371,25 @@ napi_value JsTextInputClientEngine::GetAttachOptions(napi_env env, napi_callback return JsAttachOptions::Write(env, attachOptions); } +napi_value JsTextInputClientEngine::GetRecommendation(napi_env env, napi_callback_info info) +{ + size_t argc = 1; + napi_value argv[1] = { nullptr }; + NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr)); + std::vector keywords; + if (!JsUtil::GetValue(env, argv[0], keywords)) { + IMSA_HILOGE("failed to GetValue"); + return JsUtil::Const::Null(env); + } + InputRecommendation recommendation; + int32_t ret = InputMethodAbility::GetInstance().GetInputRecommendation(keywords, recommendation); + if (ret != ErrorCode::NO_ERROR) { + IMSA_HILOGE("GetInputRecommendation failed, ret: %{public}d", ret); + return JsUtil::Const::Null(env); + } + return JsInputRecommendation::Write(env, recommendation); +} + napi_value JsTextInputClientEngine::Subscribe(napi_env env, napi_callback_info info) { size_t argc = ARGC_TWO; diff --git a/frameworks/js/napi/inputmethodability/js_text_input_client_engine.h b/frameworks/js/napi/inputmethodability/js_text_input_client_engine.h index 2cbefdba6..5df3e8c17 100644 --- a/frameworks/js/napi/inputmethodability/js_text_input_client_engine.h +++ b/frameworks/js/napi/inputmethodability/js_text_input_client_engine.h @@ -31,6 +31,7 @@ #include "wm_common.h" #include "text_input_client_listener.h" #include "input_method_utils.h" +#include "input_recommendation.h" namespace OHOS { namespace MiscServices { @@ -68,6 +69,10 @@ struct JsAttachOptions { static bool Read(napi_env env, napi_value jsObject, AttachOptions &attachOptions); }; +struct JsInputRecommendation { + static napi_value Write(napi_env env, const InputRecommendation &inputRecommendation); +}; + struct SendKeyFunctionContext : public AsyncCall::Context { bool isSendKeyFunction = false; int32_t action = 0; @@ -408,6 +413,7 @@ public: static napi_value SendMessage(napi_env env, napi_callback_info info); static napi_value RecvMessage(napi_env env, napi_callback_info info); static napi_value GetAttachOptions(napi_env env, napi_callback_info info); + static napi_value GetRecommendation(napi_env env, napi_callback_info info); static napi_value Subscribe(napi_env env, napi_callback_info info); static napi_value UnSubscribe(napi_env env, napi_callback_info info); void OnAttachOptionsChanged(const AttachOptions &attachOptions) override; diff --git a/frameworks/native/inputmethod_ability/include/input_method_ability.h b/frameworks/native/inputmethod_ability/include/input_method_ability.h index a94f600ae..ad1cb44ac 100644 --- a/frameworks/native/inputmethod_ability/include/input_method_ability.h +++ b/frameworks/native/inputmethod_ability/include/input_method_ability.h @@ -42,6 +42,7 @@ #include "system_cmd_channel_proxy.h" #include "inputmethod_message_handler.h" #include "input_data_channel_proxy_wrap.h" +#include "input_recommendation.h" namespace OHOS { namespace MiscServices { @@ -111,6 +112,7 @@ public: int32_t OnResponse(uint64_t msgId, int32_t code, const ResponseData &data); int32_t IsCapacitySupport(int32_t capacity, bool &isSupport); AttachOptions GetAttachOptions(); + int32_t GetInputRecommendation(std::vector keywords, InputRecommendation &recommendation); public: /* called from TaskManager worker thread */ diff --git a/frameworks/native/inputmethod_ability/include/input_recommendation.h b/frameworks/native/inputmethod_ability/include/input_recommendation.h new file mode 100644 index 000000000..dc84bbce2 --- /dev/null +++ b/frameworks/native/inputmethod_ability/include/input_recommendation.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef IMF_INPUT_RECOMMENDATION_H +#define IMF_INPUT_RECOMMENDATION_H + +#include +#include + +namespace OHOS { +namespace MiscServices { +struct InputRecommendation { + std::vector recommendedWords; +}; +} // namespace MiscServices +} // namespace OHOS + +#endif // IMF_INPUT_RECOMMENDATION_H diff --git a/frameworks/native/inputmethod_ability/src/input_method_ability.cpp b/frameworks/native/inputmethod_ability/src/input_method_ability.cpp index 03339b1d0..ed7cbaaea 100644 --- a/frameworks/native/inputmethod_ability/src/input_method_ability.cpp +++ b/frameworks/native/inputmethod_ability/src/input_method_ability.cpp @@ -1884,5 +1884,13 @@ int32_t InputMethodAbility::IsCapacitySupport(int32_t capacity, bool &isSupport) return proxy->IsCapacitySupport(capacity, isSupport); } + +int32_t InputMethodAbility::GetInputRecommendation( + std::vector keywords, InputRecommendation &recommendation) +{ + int32_t ret = GetWords(keywords, recommendation.recommendedWords); + IMSA_HILOGI("GetWords ret: %{public}d", ret); + return ret; +} } // namespace MiscServices } // namespace OHOS \ No newline at end of file -- Gitee