From 25174a2c4457824f0d93f3c0ec3ea323016fb73e Mon Sep 17 00:00:00 2001 From: yuanxinying Date: Fri, 14 Apr 2023 16:43:46 +0800 Subject: [PATCH] add input device monitor for mmi Signed-off-by: houchengyu2022 --- .../napi/input_device/include/js_util.h | 2 +- .../napi/input_device/src/js_event_target.cpp | 62 ++++++++++--------- 2 files changed, 35 insertions(+), 29 deletions(-) diff --git a/frameworks/napi/input_device/include/js_util.h b/frameworks/napi/input_device/include/js_util.h index ad2e2cb463..997ed60f56 100644 --- a/frameworks/napi/input_device/include/js_util.h +++ b/frameworks/napi/input_device/include/js_util.h @@ -37,7 +37,7 @@ public: std::vector ids; std::shared_ptr device { nullptr }; std::vector keystrokeAbility; - int32_t deviceId { 0 }; + std::vector deviceIds; int32_t keyboardType { 0 }; }; struct CallbackInfo : RefBase { diff --git a/frameworks/napi/input_device/src/js_event_target.cpp b/frameworks/napi/input_device/src/js_event_target.cpp index 5c83cbf439..313bef61d4 100644 --- a/frameworks/napi/input_device/src/js_event_target.cpp +++ b/frameworks/napi/input_device/src/js_event_target.cpp @@ -66,20 +66,23 @@ void JsEventTarget::EmitAddedDeviceEvent(uv_work_t *work, int32_t status) } napi_value eventType = nullptr; CHKRV_SCOPE(item->env, napi_create_string_utf8(item->env, ADD_EVENT.c_str(), NAPI_AUTO_LENGTH, &eventType), - CREATE_STRING_UTF8, scope); - napi_value deviceId = nullptr; - CHKRV_SCOPE(item->env, napi_create_int32(item->env, item->data.deviceId, &deviceId), CREATE_INT32, scope); + CREATE_STRING_UTF8, scope); napi_value object = nullptr; CHKRV_SCOPE(item->env, napi_create_object(item->env, &object), CREATE_OBJECT, scope); CHKRV_SCOPE(item->env, napi_set_named_property(item->env, object, "type", eventType), - SET_NAMED_PROPERTY, scope); - CHKRV_SCOPE(item->env, napi_set_named_property(item->env, object, "deviceId", deviceId), - SET_NAMED_PROPERTY, scope); + SET_NAMED_PROPERTY, scope); napi_value handler = nullptr; CHKRV_SCOPE(item->env, napi_get_reference_value(item->env, item->ref, &handler), GET_REFERENCE_VALUE, scope); - napi_value ret = nullptr; - CHKRV_SCOPE(item->env, napi_call_function(item->env, nullptr, handler, 1, &object, &ret), + for (const auto &devId : item->data.deviceIds) { + napi_value deviceId = nullptr; + CHKRV_SCOPE(item->env, napi_create_int32(item->env, devId, &deviceId), CREATE_INT32, scope); + CHKRV_SCOPE(item->env, napi_set_named_property(item->env, object, "deviceId", deviceId), + SET_NAMED_PROPERTY, scope); + napi_value ret = nullptr; + CHKRV_SCOPE(item->env, napi_call_function(item->env, nullptr, handler, 1, &object, &ret), CALL_FUNCTION, scope); + } + item->data.deviceIds.clear(); napi_close_handle_scope(item->env, scope); } } @@ -113,28 +116,31 @@ void JsEventTarget::EmitRemoveDeviceEvent(uv_work_t *work, int32_t status) MMI_HILOGE("scope is nullptr"); return; } - napi_value eventType = nullptr; - CHKRV_SCOPE(item->env, napi_create_string_utf8(item->env, REMOVE_EVENT.c_str(), NAPI_AUTO_LENGTH, - &eventType), - CREATE_STRING_UTF8, scope); + for (const auto &devId : item->data.deviceIds) { + napi_value eventType = nullptr; + CHKRV_SCOPE(item->env, napi_create_string_utf8(item->env, REMOVE_EVENT.c_str(), NAPI_AUTO_LENGTH, + &eventType), + CREATE_STRING_UTF8, scope); - napi_value deviceId = nullptr; - CHKRV_SCOPE(item->env, napi_create_int32(item->env, item->data.deviceId, &deviceId), - CREATE_INT32, scope); + napi_value deviceId = nullptr; + CHKRV_SCOPE(item->env, napi_create_int32(item->env, devId, &deviceId), + CREATE_INT32, scope); - napi_value object = nullptr; - CHKRV_SCOPE(item->env, napi_create_object(item->env, &object), CREATE_OBJECT, scope); - CHKRV_SCOPE(item->env, napi_set_named_property(item->env, object, "type", eventType), - SET_NAMED_PROPERTY, scope); - CHKRV_SCOPE(item->env, napi_set_named_property(item->env, object, "deviceId", deviceId), - SET_NAMED_PROPERTY, scope); + napi_value object = nullptr; + CHKRV_SCOPE(item->env, napi_create_object(item->env, &object), CREATE_OBJECT, scope); + CHKRV_SCOPE(item->env, napi_set_named_property(item->env, object, "type", eventType), + SET_NAMED_PROPERTY, scope); + CHKRV_SCOPE(item->env, napi_set_named_property(item->env, object, "deviceId", deviceId), + SET_NAMED_PROPERTY, scope); - napi_value handler = nullptr; - CHKRV_SCOPE(item->env, napi_get_reference_value(item->env, item->ref, &handler), GET_REFERENCE_VALUE, scope); + napi_value handler = nullptr; + CHKRV_SCOPE(item->env, napi_get_reference_value(item->env, item->ref, &handler), GET_REFERENCE_VALUE, scope); - napi_value ret = nullptr; - CHKRV_SCOPE(item->env, napi_call_function(item->env, nullptr, handler, 1, &object, &ret), - CALL_FUNCTION, scope); + napi_value ret = nullptr; + CHKRV_SCOPE(item->env, napi_call_function(item->env, nullptr, handler, 1, &object, &ret), + CALL_FUNCTION, scope); + } + item->data.deviceIds.clear(); napi_close_handle_scope(item->env, scope); } } @@ -156,7 +162,7 @@ void JsEventTarget::OnDeviceAdded(int32_t deviceId, const std::string &type) CHKRV(napi_get_uv_event_loop(item->env, &loop), GET_UV_EVENT_LOOP); uv_work_t *work = new (std::nothrow) uv_work_t; CHKPV(work); - item->data.deviceId = deviceId; + item->data.deviceIds.push_back(deviceId); work->data = static_cast(&item); int32_t ret = uv_queue_work(loop, work, [](uv_work_t *work) {}, EmitAddedDeviceEvent); if (ret != 0) { @@ -183,7 +189,7 @@ void JsEventTarget::OnDeviceRemoved(int32_t deviceId, const std::string &type) CHKRV(napi_get_uv_event_loop(item->env, &loop), GET_UV_EVENT_LOOP); uv_work_t *work = new (std::nothrow) uv_work_t; CHKPV(work); - item->data.deviceId = deviceId; + item->data.deviceIds.push_back(deviceId); work->data = static_cast(&item); int32_t ret = uv_queue_work(loop, work, [](uv_work_t *work) {}, EmitRemoveDeviceEvent); if (ret != 0) { -- Gitee