mirror of
https://github.com/openharmony/accessibility.git
synced 2026-08-25 11:51:38 -04:00
!347 回合pr318:onKeyEvent入参格式不正确问题对应
Merge pull request !347 from null/OpenHarmony-3.2-Beta2
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
|
||||
import accessibility from './@ohos.accessibility'
|
||||
import AccessibilityExtensionContext, { AccessibilityElement } from './application/AccessibilityExtensionContext'
|
||||
import inputEventClient from './@ohos.multimodalInput.inputEventClient'
|
||||
import { KeyEvent } from './@ohos.multimodalInput.keyEvent'
|
||||
|
||||
/**
|
||||
* class of accessibility extension ability.
|
||||
@@ -49,7 +49,7 @@ export default class AccessibilityExtensionAbility {
|
||||
* Called when a physical key is pressed, such as when the user presses the volume button .
|
||||
* @param keyEvent Indicates the physical key event.
|
||||
*/
|
||||
onKeyEvent(keyEvent: inputEventClient.KeyEvent): boolean;
|
||||
onKeyEvent(keyEvent: KeyEvent): boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -44,6 +44,13 @@ constexpr int32_t PARAM2 = 2;
|
||||
constexpr int32_t CODE_SUCCESS = 0;
|
||||
constexpr int32_t CODE_FAILED = -1;
|
||||
constexpr int32_t CHAE_BUFFER_MAX = 1024;
|
||||
// key action
|
||||
enum KeyAction : int32_t {
|
||||
CANCEL = 0,
|
||||
DOWN = 1,
|
||||
UP = 2,
|
||||
UNKNOWN = 0xff,
|
||||
};
|
||||
|
||||
std::string GetStringFromNAPI(napi_env env, napi_value value);
|
||||
bool ParseBool(napi_env env, bool& param, napi_value args);
|
||||
@@ -66,6 +73,10 @@ OHOS::AccessibilityConfig::DALTONIZATION_TYPE ConvertStringToDaltonizationTypes(
|
||||
void ConvertActionArgsJSToNAPI(
|
||||
napi_env env, napi_value object, std::map<std::string, std::string>& args, OHOS::Accessibility::ActionType action);
|
||||
|
||||
KeyAction TransformKeyActionValue(int32_t keyAction);
|
||||
bool HasKeyCode(const std::vector<int32_t>& pressedKeys, int32_t keyCode);
|
||||
void GetKeyValue(napi_env env, napi_value keyObject, const OHOS::MMI::KeyEvent::KeyItem* keyItem);
|
||||
void SetInputEventProperty(napi_env env, napi_value result, const std::shared_ptr<OHOS::MMI::KeyEvent> &keyEvent);
|
||||
void ConvertKeyEventToJS(napi_env env, napi_value result, const std::shared_ptr<OHOS::MMI::KeyEvent> &keyEvent);
|
||||
void ConvertCaptionPropertyToJS(napi_env env, napi_value& result,
|
||||
OHOS::AccessibilityConfig::CaptionProperty captionProperty);
|
||||
|
||||
@@ -1143,44 +1143,185 @@ void ConvertGesturePathsJSToNAPI(napi_env env, napi_value object,
|
||||
}
|
||||
}
|
||||
|
||||
KeyAction TransformKeyActionValue(int32_t keyAction)
|
||||
{
|
||||
HILOG_DEBUG("keyAction:%{public}d", keyAction);
|
||||
|
||||
KeyAction action = KeyAction::UNKNOWN;
|
||||
if (keyAction == OHOS::MMI::KeyEvent::KEY_ACTION_DOWN) {
|
||||
action = KeyAction::DOWN;
|
||||
} else if (keyAction == OHOS::MMI::KeyEvent::KEY_ACTION_UP) {
|
||||
action = KeyAction::UP;
|
||||
} else if (keyAction == OHOS::MMI::KeyEvent::KEY_ACTION_CANCEL) {
|
||||
action = KeyAction::CANCEL;
|
||||
} else {
|
||||
HILOG_DEBUG("key action is invalid");
|
||||
}
|
||||
return action;
|
||||
}
|
||||
|
||||
bool HasKeyCode(const std::vector<int32_t>& pressedKeys, int32_t keyCode)
|
||||
{
|
||||
HILOG_DEBUG();
|
||||
|
||||
return std::find(pressedKeys.begin(), pressedKeys.end(), keyCode) != pressedKeys.end();
|
||||
}
|
||||
|
||||
void GetKeyValue(napi_env env, napi_value keyObject, const OHOS::MMI::KeyEvent::KeyItem* keyItem)
|
||||
{
|
||||
HILOG_DEBUG();
|
||||
|
||||
if (!keyItem) {
|
||||
HILOG_WARN("keyItem is null.");
|
||||
return;
|
||||
}
|
||||
|
||||
napi_value keyCodeValue = nullptr;
|
||||
int32_t keyCode = keyItem->GetKeyCode();
|
||||
NAPI_CALL_RETURN_VOID(env, napi_create_int32(env, keyCode, &keyCodeValue));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, keyObject, "code", keyCodeValue));
|
||||
|
||||
napi_value timeValue = nullptr;
|
||||
int64_t pressedTime = keyItem->GetDownTime();
|
||||
NAPI_CALL_RETURN_VOID(env, napi_create_int64(env, pressedTime, &timeValue));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, keyObject, "pressedTime", timeValue));
|
||||
|
||||
napi_value deviceIdValue = nullptr;
|
||||
int32_t deviceId = keyItem->GetDeviceId();
|
||||
NAPI_CALL_RETURN_VOID(env, napi_create_int32(env, deviceId, &deviceIdValue));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, keyObject, "deviceId", deviceIdValue));
|
||||
}
|
||||
|
||||
void SetInputEventProperty(napi_env env, napi_value result, const std::shared_ptr<OHOS::MMI::KeyEvent> &keyEvent)
|
||||
{
|
||||
HILOG_DEBUG();
|
||||
|
||||
// set id
|
||||
napi_value idValue = nullptr;
|
||||
int32_t id = keyEvent->GetId();
|
||||
NAPI_CALL_RETURN_VOID(env, napi_create_int32(env, id, &idValue));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "id", idValue));
|
||||
|
||||
// set deviceId
|
||||
napi_value deviceIdValue = nullptr;
|
||||
int32_t deviceId = keyEvent->GetDeviceId();
|
||||
NAPI_CALL_RETURN_VOID(env, napi_create_int32(env, deviceId, &deviceIdValue));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "deviceId", deviceIdValue));
|
||||
|
||||
// set actionTime
|
||||
napi_value actionTimeValue = nullptr;
|
||||
int64_t actionTime = keyEvent->GetActionTime();
|
||||
NAPI_CALL_RETURN_VOID(env, napi_create_int64(env, actionTime, &actionTimeValue));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "actionTime", actionTimeValue));
|
||||
|
||||
// set screenId
|
||||
napi_value screenIdValue = nullptr;
|
||||
int32_t screenId = keyEvent->GetTargetDisplayId();
|
||||
NAPI_CALL_RETURN_VOID(env, napi_create_int32(env, screenId, &screenIdValue));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "screenId", screenIdValue));
|
||||
|
||||
// set windowId
|
||||
napi_value windowIdValue = nullptr;
|
||||
int32_t windowId = keyEvent->GetTargetWindowId();
|
||||
NAPI_CALL_RETURN_VOID(env, napi_create_int32(env, windowId, &windowIdValue));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "windowId", windowIdValue));
|
||||
}
|
||||
|
||||
void ConvertKeyEventToJS(napi_env env, napi_value result, const std::shared_ptr<OHOS::MMI::KeyEvent> &keyEvent)
|
||||
{
|
||||
napi_value keyCode;
|
||||
NAPI_CALL_RETURN_VOID(env, napi_create_int32(env, keyEvent->GetKeyCode(), &keyCode));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "keyCode", keyCode));
|
||||
HILOG_DEBUG();
|
||||
|
||||
napi_value keyAction;
|
||||
NAPI_CALL_RETURN_VOID(env, napi_create_int32(env, keyEvent->GetKeyAction(), &keyAction));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "keyAction", keyAction));
|
||||
|
||||
napi_value keys;
|
||||
uint32_t idx = 0;
|
||||
std::vector<OHOS::MMI::KeyEvent::KeyItem> keyItems = keyEvent->GetKeyItems();
|
||||
NAPI_CALL_RETURN_VOID(env, napi_create_array(env, &keys));
|
||||
for (auto &key : keyItems) {
|
||||
napi_value keyItem = nullptr;
|
||||
NAPI_CALL_RETURN_VOID(env, napi_create_object(env, &keyItem));
|
||||
|
||||
napi_value pressed;
|
||||
NAPI_CALL_RETURN_VOID(env, napi_get_boolean(env, key.IsPressed(), &pressed));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, keyItem, "pressed", pressed));
|
||||
|
||||
napi_value downTime;
|
||||
NAPI_CALL_RETURN_VOID(env, napi_get_boolean(env, key.GetDownTime(), &downTime));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, keyItem, "downTime", downTime));
|
||||
|
||||
napi_value deviceId;
|
||||
NAPI_CALL_RETURN_VOID(env, napi_get_boolean(env, key.GetDeviceId(), &deviceId));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, keyItem, "deviceId", deviceId));
|
||||
|
||||
napi_value itemKeyCode;
|
||||
NAPI_CALL_RETURN_VOID(env, napi_get_boolean(env, key.GetKeyCode(), &itemKeyCode));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, keyItem, "keyCode", itemKeyCode));
|
||||
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_element(env, keys, idx, keyItem));
|
||||
idx++;
|
||||
if (!keyEvent) {
|
||||
HILOG_ERROR("keyEvent is null.");
|
||||
return;
|
||||
}
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "keys", keys));
|
||||
|
||||
// set inputEvent
|
||||
SetInputEventProperty(env, result, keyEvent);
|
||||
|
||||
// set action
|
||||
napi_value keyActionValue = nullptr;
|
||||
KeyAction keyAction = TransformKeyActionValue(keyEvent->GetKeyAction());
|
||||
if (keyAction != KeyAction::UNKNOWN) {
|
||||
NAPI_CALL_RETURN_VOID(env, napi_create_int32(env, keyAction, &keyActionValue));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "action", keyActionValue));
|
||||
}
|
||||
|
||||
// set key
|
||||
napi_value keyObject = nullptr;
|
||||
NAPI_CALL_RETURN_VOID(env, napi_create_object(env, &keyObject));
|
||||
const OHOS::MMI::KeyEvent::KeyItem* keyItem = keyEvent->GetKeyItem();
|
||||
GetKeyValue(env, keyObject, keyItem);
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "key", keyObject));
|
||||
|
||||
// set unicodeChar
|
||||
napi_value unicodeCharValue = nullptr;
|
||||
NAPI_CALL_RETURN_VOID(env, napi_create_int32(env, 0, &unicodeCharValue));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "unicodeChar", unicodeCharValue));
|
||||
|
||||
// set keys
|
||||
napi_value keysAarry = nullptr;
|
||||
NAPI_CALL_RETURN_VOID(env, napi_create_array(env, &keysAarry));
|
||||
uint32_t index = 0;
|
||||
std::vector<int32_t> pressedKeys = keyEvent->GetPressedKeys();
|
||||
for (const auto &pressedKeyCode : pressedKeys) {
|
||||
napi_value element = nullptr;
|
||||
NAPI_CALL_RETURN_VOID(env, napi_create_object(env, &element));
|
||||
const OHOS::MMI::KeyEvent::KeyItem* pressedKeyItem = keyEvent->GetKeyItem(pressedKeyCode);
|
||||
GetKeyValue(env, element, pressedKeyItem);
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_element(env, keysAarry, index, element));
|
||||
++index;
|
||||
}
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "keys", keysAarry));
|
||||
|
||||
// set ctrlKey
|
||||
bool isPressed = HasKeyCode(pressedKeys, OHOS::MMI::KeyEvent::KEYCODE_CTRL_LEFT)
|
||||
|| HasKeyCode(pressedKeys, OHOS::MMI::KeyEvent::KEYCODE_CTRL_RIGHT);
|
||||
napi_value ctrlKeyValue = nullptr;
|
||||
NAPI_CALL_RETURN_VOID(env, napi_get_boolean(env, isPressed, &ctrlKeyValue));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "ctrlKey", ctrlKeyValue));
|
||||
|
||||
// set altKey
|
||||
isPressed = HasKeyCode(pressedKeys, OHOS::MMI::KeyEvent::KEYCODE_ALT_LEFT)
|
||||
|| HasKeyCode(pressedKeys, OHOS::MMI::KeyEvent::KEYCODE_ALT_RIGHT);
|
||||
napi_value altKeyValue = nullptr;
|
||||
NAPI_CALL_RETURN_VOID(env, napi_get_boolean(env, isPressed, &altKeyValue));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "altKey", altKeyValue));
|
||||
|
||||
// set shiftKey
|
||||
isPressed = HasKeyCode(pressedKeys, OHOS::MMI::KeyEvent::KEYCODE_SHIFT_LEFT)
|
||||
|| HasKeyCode(pressedKeys, OHOS::MMI::KeyEvent::KEYCODE_SHIFT_RIGHT);
|
||||
napi_value shiftKeyValue = nullptr;
|
||||
NAPI_CALL_RETURN_VOID(env, napi_get_boolean(env, isPressed, &shiftKeyValue));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "shiftKey", shiftKeyValue));
|
||||
|
||||
// set logoKey
|
||||
isPressed = HasKeyCode(pressedKeys, OHOS::MMI::KeyEvent::KEYCODE_META_LEFT)
|
||||
|| HasKeyCode(pressedKeys, OHOS::MMI::KeyEvent::KEYCODE_META_RIGHT);
|
||||
napi_value logoKeyValue = nullptr;
|
||||
NAPI_CALL_RETURN_VOID(env, napi_get_boolean(env, isPressed, &logoKeyValue));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "logoKey", logoKeyValue));
|
||||
|
||||
// set fnKey
|
||||
isPressed = HasKeyCode(pressedKeys, OHOS::MMI::KeyEvent::KEYCODE_FN);
|
||||
napi_value fnKeyValue = nullptr;
|
||||
NAPI_CALL_RETURN_VOID(env, napi_get_boolean(env, isPressed, &fnKeyValue));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "fnKey", fnKeyValue));
|
||||
|
||||
// set capsLock
|
||||
napi_value capsLockValue = nullptr;
|
||||
NAPI_CALL_RETURN_VOID(env, napi_get_boolean(env, false, &capsLockValue));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "capsLock", capsLockValue));
|
||||
|
||||
// set numLock
|
||||
napi_value numLockValue = nullptr;
|
||||
NAPI_CALL_RETURN_VOID(env, napi_get_boolean(env, false, &numLockValue));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "numLock", numLockValue));
|
||||
|
||||
// set scrollLock
|
||||
napi_value scrollLockValue = nullptr;
|
||||
NAPI_CALL_RETURN_VOID(env, napi_get_boolean(env, false, &scrollLockValue));
|
||||
NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "scrollLock", scrollLockValue));
|
||||
}
|
||||
|
||||
void ConvertCaptionPropertyToJS(
|
||||
|
||||
Reference in New Issue
Block a user