mirror of
https://github.com/openharmony/miscservices_inputmethod.git
synced 2026-07-16 07:44:28 -04:00
@@ -35,6 +35,8 @@ namespace OHOS {
|
||||
std::mutex mtx_;
|
||||
NativeValue* OnRegisterCallback(NativeEngine& engine, NativeCallbackInfo& info);
|
||||
NativeValue* OnUnRegisterCallback(NativeEngine& engine, NativeCallbackInfo& info);
|
||||
std::shared_ptr<AppExecFwk::EventHandler> GetMainHandler();
|
||||
std::shared_ptr<AppExecFwk::EventHandler> mainHandler_ = nullptr;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,11 +23,15 @@
|
||||
#include <refbase.h>
|
||||
#include "native_engine/native_engine.h"
|
||||
#include "native_engine/native_value.h"
|
||||
#include "event_handler.h"
|
||||
#include "event_runner.h"
|
||||
namespace OHOS {
|
||||
namespace MiscServices {
|
||||
class JsInputMethodEngineListener : virtual public RefBase {
|
||||
public:
|
||||
explicit JsInputMethodEngineListener(NativeEngine* engine) : engine_(engine) {}
|
||||
JsInputMethodEngineListener(NativeEngine* engine, std::shared_ptr<AppExecFwk::EventHandler> &handler)
|
||||
: engine_(engine), mainHandler_(handler) {}
|
||||
virtual ~JsInputMethodEngineListener() = default;
|
||||
void RegisterListenerWithType(NativeEngine& engine, std::string type, NativeValue* value);
|
||||
void UnregisterListenerWithType(std::string type, NativeValue* value);
|
||||
@@ -43,6 +47,7 @@ namespace MiscServices {
|
||||
NativeEngine* engine_ = nullptr;
|
||||
std::mutex mMutex;
|
||||
std::map<std::string, std::vector<std::unique_ptr<NativeReference>>> jsCbMap_;
|
||||
std::shared_ptr<AppExecFwk::EventHandler> mainHandler_ = nullptr;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,8 @@ namespace MiscServices {
|
||||
JsInputMethodEngine::JsInputMethodEngine(NativeEngine* engine)
|
||||
{
|
||||
IMSA_HILOGI("JsInputMethodEngine::Constructor is called");
|
||||
imeListener_ = new JsInputMethodEngineListener(engine);
|
||||
auto mainHandler = GetMainHandler();
|
||||
imeListener_ = new JsInputMethodEngineListener(engine, mainHandler);
|
||||
InputMethodAbility::GetInstance()->setImeListener(imeListener_);
|
||||
}
|
||||
|
||||
@@ -39,6 +40,15 @@ namespace MiscServices {
|
||||
std::unique_ptr<JsInputMethodEngine>(static_cast<JsInputMethodEngine*>(data));
|
||||
}
|
||||
|
||||
std::shared_ptr<AppExecFwk::EventHandler> JsInputMethodEngine::GetMainHandler()
|
||||
{
|
||||
if (!mainHandler_) {
|
||||
mainHandler_ =
|
||||
std::make_shared<AppExecFwk::EventHandler>(AppExecFwk::EventRunner::GetMainEventRunner());
|
||||
}
|
||||
return mainHandler_;
|
||||
}
|
||||
|
||||
NativeValue* JsInputMethodEngine::RegisterCallback(NativeEngine* engine, NativeCallbackInfo* info)
|
||||
{
|
||||
JsInputMethodEngine* me = CheckParamsAndGetThis<JsInputMethodEngine>(engine, info);
|
||||
|
||||
@@ -133,32 +133,37 @@ namespace MiscServices {
|
||||
std::lock_guard<std::mutex> lock(mMutex);
|
||||
IMSA_HILOGI("JsInputMethodEngineListener::OnKeyboardStatus");
|
||||
|
||||
NativeValue* nativeValue = engine_->CreateObject();
|
||||
NativeObject* object = ConvertNativeValueTo<NativeObject>(nativeValue);
|
||||
if (object == nullptr) {
|
||||
IMSA_HILOGI("Failed to convert rect to jsObject");
|
||||
return;
|
||||
}
|
||||
NativeValue* argv[] = {nativeValue};
|
||||
std::string methodName;
|
||||
if (isShow) {
|
||||
methodName = "keyboardShow";
|
||||
} else {
|
||||
methodName = "keyboardHide";
|
||||
}
|
||||
CallJsMethod(methodName, argv, ArraySize(argv));
|
||||
auto task = [this, isShow] () {
|
||||
NativeValue* nativeValue = engine_->CreateObject();
|
||||
NativeObject* object = ConvertNativeValueTo < NativeObject >(nativeValue);
|
||||
if (object == nullptr) {
|
||||
IMSA_HILOGI("Failed to convert rect to jsObject");
|
||||
return;
|
||||
}
|
||||
NativeValue* argv[] = { nativeValue };
|
||||
std::string methodName;
|
||||
if (isShow) {
|
||||
methodName = "keyboardShow";
|
||||
} else {
|
||||
methodName = "keyboardHide";
|
||||
}
|
||||
CallJsMethod(methodName, argv, ArraySize(argv));
|
||||
};
|
||||
mainHandler_->PostTask(task);
|
||||
}
|
||||
|
||||
void JsInputMethodEngineListener::OnInputStart()
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mMutex);
|
||||
IMSA_HILOGI("JsInputMethodEngineListener::OnInputStart");
|
||||
|
||||
NativeValue *nativeValuekb = CreateKeyboardController(*engine_);
|
||||
NativeValue *nativeValuetx = CreateTextInputClient(*engine_);
|
||||
NativeValue* argv[] = {nativeValuekb, nativeValuetx};
|
||||
std::string methodName = "inputStart";
|
||||
CallJsMethod(methodName, argv, ArraySize(argv));
|
||||
auto task = [this] () {
|
||||
NativeValue *nativeValuekb = CreateKeyboardController(*engine_);
|
||||
NativeValue *nativeValuetx = CreateTextInputClient(*engine_);
|
||||
NativeValue* argv[] = {nativeValuekb, nativeValuetx};
|
||||
std::string methodName = "inputStart";
|
||||
CallJsMethod(methodName, argv, ArraySize(argv));
|
||||
};
|
||||
mainHandler_->PostTask(task);
|
||||
}
|
||||
|
||||
void JsInputMethodEngineListener::OnInputStop(std::string imeId)
|
||||
@@ -166,11 +171,14 @@ namespace MiscServices {
|
||||
std::lock_guard<std::mutex> lock(mMutex);
|
||||
IMSA_HILOGI("JsInputMethodEngineListener::OnInputStop");
|
||||
|
||||
NativeValue* nativeValue = CreateJsValue(*engine_, imeId);
|
||||
auto task = [this, imeId] () {
|
||||
NativeValue* nativeValue = CreateJsValue(*engine_, imeId);
|
||||
|
||||
NativeValue* argv[] = {nativeValue};
|
||||
std::string methodName = "inputStop";
|
||||
CallJsMethod(methodName, argv, ArraySize(argv));
|
||||
NativeValue* argv[] = { nativeValue };
|
||||
std::string methodName = "inputStop";
|
||||
CallJsMethod(methodName, argv, ArraySize(argv));
|
||||
};
|
||||
mainHandler_->PostTask(task);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user