1885b47fbSopenharmony_ci/* 2885b47fbSopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd. 3885b47fbSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4885b47fbSopenharmony_ci * you may not use this file except in compliance with the License. 5885b47fbSopenharmony_ci * You may obtain a copy of the License at 6885b47fbSopenharmony_ci * 7885b47fbSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8885b47fbSopenharmony_ci * 9885b47fbSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10885b47fbSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11885b47fbSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12885b47fbSopenharmony_ci * See the License for the specific language governing permissions and 13885b47fbSopenharmony_ci * limitations under the License. 14885b47fbSopenharmony_ci */ 15885b47fbSopenharmony_ci 16885b47fbSopenharmony_ci#include "accessibility_mouse_key.h" 17885b47fbSopenharmony_ci#include "hilog_wrapper.h" 18885b47fbSopenharmony_ci#include "utils.h" 19885b47fbSopenharmony_ci 20885b47fbSopenharmony_cinamespace OHOS { 21885b47fbSopenharmony_cinamespace Accessibility { 22885b47fbSopenharmony_cistruct MouseMoveOffset { 23885b47fbSopenharmony_ci int32_t offsetX = 0; 24885b47fbSopenharmony_ci int32_t offsetY = 0; 25885b47fbSopenharmony_ci}; 26885b47fbSopenharmony_cinamespace { 27885b47fbSopenharmony_ci // item count 28885b47fbSopenharmony_ci constexpr size_t ITEM_COUNT_1 = 1; 29885b47fbSopenharmony_ci constexpr size_t ITEM_COUNT_2 = 2; 30885b47fbSopenharmony_ci constexpr size_t ITEM_COUNT_3 = 3; 31885b47fbSopenharmony_ci // move offset 32885b47fbSopenharmony_ci constexpr int32_t MOVE_LEFT_STEP = -5; 33885b47fbSopenharmony_ci constexpr int32_t MOVE_RIGHT_STEP = 5; 34885b47fbSopenharmony_ci constexpr int32_t MOVE_UP_STEP = -5; 35885b47fbSopenharmony_ci constexpr int32_t MOVE_DOWN_STEP = 5; 36885b47fbSopenharmony_ci // speed multiple 37885b47fbSopenharmony_ci constexpr float SPEED_UP_MULTIPLE = 5.0f; 38885b47fbSopenharmony_ci constexpr float SLOW_DOWN_MULTIPLE = 0.5f; 39885b47fbSopenharmony_ci // result of parsing meta key 40885b47fbSopenharmony_ci constexpr int32_t INVALID_KEY = -1; 41885b47fbSopenharmony_ci constexpr int32_t NONE_KEY = 0; 42885b47fbSopenharmony_ci constexpr int32_t CTRL_KEY = 1; 43885b47fbSopenharmony_ci constexpr int32_t SHIFT_KEY = 2; 44885b47fbSopenharmony_ci constexpr int32_t CTRL_SHIFT_KEY = 3; 45885b47fbSopenharmony_ci // array(PRESSED_METAKEYS_TBL)'s length 46885b47fbSopenharmony_ci constexpr int32_t ROW_COUNT = 21; 47885b47fbSopenharmony_ci constexpr int32_t COLUMN_COUNT = 3; 48885b47fbSopenharmony_ci const std::vector<int32_t> MOUSE_KEYCODE_V = { 49885b47fbSopenharmony_ci MMI::KeyEvent::KEYCODE_NUMPAD_1, MMI::KeyEvent::KEYCODE_NUMPAD_2, MMI::KeyEvent::KEYCODE_NUMPAD_3, 50885b47fbSopenharmony_ci MMI::KeyEvent::KEYCODE_NUMPAD_4, MMI::KeyEvent::KEYCODE_NUMPAD_5, MMI::KeyEvent::KEYCODE_NUMPAD_6, 51885b47fbSopenharmony_ci MMI::KeyEvent::KEYCODE_NUMPAD_7, MMI::KeyEvent::KEYCODE_NUMPAD_8, MMI::KeyEvent::KEYCODE_NUMPAD_9, 52885b47fbSopenharmony_ci MMI::KeyEvent::KEYCODE_NUMPAD_DIVIDE, MMI::KeyEvent::KEYCODE_NUMPAD_MULTIPLY, 53885b47fbSopenharmony_ci MMI::KeyEvent::KEYCODE_NUMPAD_SUBTRACT, MMI::KeyEvent::KEYCODE_NUMPAD_ADD}; 54885b47fbSopenharmony_ci const std::vector<int32_t> MOUSE_MOVE_KEYCODE_V = { 55885b47fbSopenharmony_ci MMI::KeyEvent::KEYCODE_NUMPAD_1, MMI::KeyEvent::KEYCODE_NUMPAD_2, MMI::KeyEvent::KEYCODE_NUMPAD_3, 56885b47fbSopenharmony_ci MMI::KeyEvent::KEYCODE_NUMPAD_4, MMI::KeyEvent::KEYCODE_NUMPAD_6, MMI::KeyEvent::KEYCODE_NUMPAD_7, 57885b47fbSopenharmony_ci MMI::KeyEvent::KEYCODE_NUMPAD_8, MMI::KeyEvent::KEYCODE_NUMPAD_9}; 58885b47fbSopenharmony_ci const std::vector<int32_t> CTRL_SHIFT_KEYCODE_V = { 59885b47fbSopenharmony_ci MMI::KeyEvent::KEYCODE_CTRL_LEFT, MMI::KeyEvent::KEYCODE_CTRL_RIGHT, 60885b47fbSopenharmony_ci MMI::KeyEvent::KEYCODE_SHIFT_LEFT, MMI::KeyEvent::KEYCODE_SHIFT_RIGHT}; 61885b47fbSopenharmony_ci const std::map<int32_t, MouseMoveOffset> MOUSE_MOVE_OFFSET_M = { 62885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_NUMPAD_1, {MOVE_LEFT_STEP, MOVE_DOWN_STEP}}, 63885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_NUMPAD_2, {0, MOVE_DOWN_STEP}}, 64885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_NUMPAD_3, {MOVE_RIGHT_STEP, MOVE_DOWN_STEP}}, 65885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_NUMPAD_4, {MOVE_LEFT_STEP, 0}}, 66885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_NUMPAD_6, {MOVE_RIGHT_STEP, 0}}, 67885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_NUMPAD_7, {MOVE_LEFT_STEP, MOVE_UP_STEP}}, 68885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_NUMPAD_8, {0, MOVE_UP_STEP}}, 69885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_NUMPAD_9, {MOVE_RIGHT_STEP, MOVE_UP_STEP}}}; 70885b47fbSopenharmony_ci const int32_t PRESSED_METAKEYS_TBL[ROW_COUNT][COLUMN_COUNT] = { 71885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_UNKNOWN, MMI::KeyEvent::KEYCODE_UNKNOWN, NONE_KEY}, 72885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_UNKNOWN, MMI::KeyEvent::KEYCODE_CTRL_LEFT, CTRL_KEY}, 73885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_UNKNOWN, MMI::KeyEvent::KEYCODE_CTRL_RIGHT, CTRL_KEY}, 74885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_UNKNOWN, MMI::KeyEvent::KEYCODE_SHIFT_LEFT, SHIFT_KEY}, 75885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_UNKNOWN, MMI::KeyEvent::KEYCODE_SHIFT_RIGHT, SHIFT_KEY}, 76885b47fbSopenharmony_ci 77885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_CTRL_LEFT, MMI::KeyEvent::KEYCODE_UNKNOWN, CTRL_KEY}, 78885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_CTRL_LEFT, MMI::KeyEvent::KEYCODE_CTRL_RIGHT, CTRL_KEY}, 79885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_CTRL_LEFT, MMI::KeyEvent::KEYCODE_SHIFT_LEFT, CTRL_SHIFT_KEY}, 80885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_CTRL_LEFT, MMI::KeyEvent::KEYCODE_SHIFT_RIGHT, CTRL_SHIFT_KEY}, 81885b47fbSopenharmony_ci 82885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_CTRL_RIGHT, MMI::KeyEvent::KEYCODE_UNKNOWN, CTRL_KEY}, 83885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_CTRL_RIGHT, MMI::KeyEvent::KEYCODE_CTRL_LEFT, CTRL_KEY}, 84885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_CTRL_RIGHT, MMI::KeyEvent::KEYCODE_SHIFT_LEFT, CTRL_SHIFT_KEY}, 85885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_CTRL_RIGHT, MMI::KeyEvent::KEYCODE_SHIFT_RIGHT, CTRL_SHIFT_KEY}, 86885b47fbSopenharmony_ci 87885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_SHIFT_LEFT, MMI::KeyEvent::KEYCODE_UNKNOWN, SHIFT_KEY}, 88885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_SHIFT_LEFT, MMI::KeyEvent::KEYCODE_CTRL_LEFT, CTRL_SHIFT_KEY}, 89885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_SHIFT_LEFT, MMI::KeyEvent::KEYCODE_CTRL_RIGHT, CTRL_SHIFT_KEY}, 90885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_SHIFT_LEFT, MMI::KeyEvent::KEYCODE_SHIFT_RIGHT, SHIFT_KEY}, 91885b47fbSopenharmony_ci 92885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_SHIFT_RIGHT, MMI::KeyEvent::KEYCODE_UNKNOWN, SHIFT_KEY}, 93885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_SHIFT_RIGHT, MMI::KeyEvent::KEYCODE_CTRL_LEFT, CTRL_SHIFT_KEY}, 94885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_SHIFT_RIGHT, MMI::KeyEvent::KEYCODE_CTRL_RIGHT, CTRL_SHIFT_KEY}, 95885b47fbSopenharmony_ci {MMI::KeyEvent::KEYCODE_SHIFT_RIGHT, MMI::KeyEvent::KEYCODE_SHIFT_LEFT, SHIFT_KEY}, 96885b47fbSopenharmony_ci }; 97885b47fbSopenharmony_ci} // namespace 98885b47fbSopenharmony_ci 99885b47fbSopenharmony_cibool AccessibilityMouseKey::OnPointerEvent(MMI::PointerEvent &event) 100885b47fbSopenharmony_ci{ 101885b47fbSopenharmony_ci HILOG_DEBUG(); 102885b47fbSopenharmony_ci 103885b47fbSopenharmony_ci int32_t sourceType = event.GetSourceType(); 104885b47fbSopenharmony_ci int32_t action = event.GetPointerAction(); 105885b47fbSopenharmony_ci std::vector<int32_t> pointers = event.GetPointerIds(); 106885b47fbSopenharmony_ci size_t pointerCount = pointers.size(); 107885b47fbSopenharmony_ci if ((sourceType == MMI::PointerEvent::SOURCE_TYPE_MOUSE) && 108885b47fbSopenharmony_ci (action == MMI::PointerEvent::POINTER_ACTION_MOVE) && 109885b47fbSopenharmony_ci (pointerCount == ITEM_COUNT_1)) { 110885b47fbSopenharmony_ci UpdateLastMouseEvent(event); 111885b47fbSopenharmony_ci } 112885b47fbSopenharmony_ci return false; 113885b47fbSopenharmony_ci} 114885b47fbSopenharmony_ci 115885b47fbSopenharmony_cibool AccessibilityMouseKey::OnKeyEvent(MMI::KeyEvent &event) 116885b47fbSopenharmony_ci{ 117885b47fbSopenharmony_ci HILOG_DEBUG(); 118885b47fbSopenharmony_ci 119885b47fbSopenharmony_ci int32_t actionKey = MMI::KeyEvent::KEYCODE_UNKNOWN; 120885b47fbSopenharmony_ci int32_t metaKey1 = MMI::KeyEvent::KEYCODE_UNKNOWN; 121885b47fbSopenharmony_ci int32_t metaKey2 = MMI::KeyEvent::KEYCODE_UNKNOWN; 122885b47fbSopenharmony_ci std::vector<int32_t> pressedKeys = event.GetPressedKeys(); 123885b47fbSopenharmony_ci if (IsMouseKey(pressedKeys, actionKey, metaKey1, metaKey2)) { 124885b47fbSopenharmony_ci return ExecuteMouseKey(actionKey, metaKey1, metaKey2); 125885b47fbSopenharmony_ci } 126885b47fbSopenharmony_ci return false; 127885b47fbSopenharmony_ci} 128885b47fbSopenharmony_ci 129885b47fbSopenharmony_civoid AccessibilityMouseKey::UpdateLastMouseEvent(const MMI::PointerEvent &event) 130885b47fbSopenharmony_ci{ 131885b47fbSopenharmony_ci HILOG_DEBUG(); 132885b47fbSopenharmony_ci 133885b47fbSopenharmony_ci lastMouseMoveEvent_ = std::make_shared<MMI::PointerEvent>(event); 134885b47fbSopenharmony_ci} 135885b47fbSopenharmony_ci 136885b47fbSopenharmony_cibool AccessibilityMouseKey::IsMouseKey(const std::vector<int32_t> &pressedKeys, int32_t &actionKey, 137885b47fbSopenharmony_ci int32_t &metaKey1, int32_t &metaKey2) const 138885b47fbSopenharmony_ci{ 139885b47fbSopenharmony_ci HILOG_DEBUG(); 140885b47fbSopenharmony_ci 141885b47fbSopenharmony_ci size_t pressedKeyCount = pressedKeys.size(); 142885b47fbSopenharmony_ci if (pressedKeyCount == ITEM_COUNT_1) { 143885b47fbSopenharmony_ci if (std::find(MOUSE_KEYCODE_V.begin(), MOUSE_KEYCODE_V.end(), pressedKeys[0]) != MOUSE_KEYCODE_V.end()) { 144885b47fbSopenharmony_ci actionKey = pressedKeys[0]; 145885b47fbSopenharmony_ci return true; 146885b47fbSopenharmony_ci } 147885b47fbSopenharmony_ci } else if (pressedKeyCount == ITEM_COUNT_2) { 148885b47fbSopenharmony_ci for (size_t i = 0; i < ITEM_COUNT_2; i++) { 149885b47fbSopenharmony_ci if (std::find(MOUSE_MOVE_KEYCODE_V.begin(), MOUSE_MOVE_KEYCODE_V.end(), pressedKeys[i]) == 150885b47fbSopenharmony_ci MOUSE_MOVE_KEYCODE_V.end()) { 151885b47fbSopenharmony_ci continue; 152885b47fbSopenharmony_ci } 153885b47fbSopenharmony_ci actionKey = pressedKeys[i]; 154885b47fbSopenharmony_ci size_t Index = (i + 1) % ITEM_COUNT_2; 155885b47fbSopenharmony_ci if (std::find(CTRL_SHIFT_KEYCODE_V.begin(), CTRL_SHIFT_KEYCODE_V.end(), pressedKeys[Index]) != 156885b47fbSopenharmony_ci CTRL_SHIFT_KEYCODE_V.end()) { 157885b47fbSopenharmony_ci metaKey1 = pressedKeys[Index]; 158885b47fbSopenharmony_ci return true; 159885b47fbSopenharmony_ci } 160885b47fbSopenharmony_ci } 161885b47fbSopenharmony_ci } else if (pressedKeyCount == ITEM_COUNT_3) { 162885b47fbSopenharmony_ci for (size_t i = 0; i < ITEM_COUNT_3; i++) { 163885b47fbSopenharmony_ci if (std::find(MOUSE_MOVE_KEYCODE_V.begin(), MOUSE_MOVE_KEYCODE_V.end(), pressedKeys[i]) == 164885b47fbSopenharmony_ci MOUSE_MOVE_KEYCODE_V.end()) { 165885b47fbSopenharmony_ci continue; 166885b47fbSopenharmony_ci } 167885b47fbSopenharmony_ci actionKey = pressedKeys[i]; 168885b47fbSopenharmony_ci size_t Index1 = (i + 1) % ITEM_COUNT_3; 169885b47fbSopenharmony_ci size_t Index2 = (i + 2) % ITEM_COUNT_3; 170885b47fbSopenharmony_ci if ((std::find(CTRL_SHIFT_KEYCODE_V.begin(), CTRL_SHIFT_KEYCODE_V.end(), pressedKeys[Index1]) != 171885b47fbSopenharmony_ci CTRL_SHIFT_KEYCODE_V.end()) && 172885b47fbSopenharmony_ci (std::find(CTRL_SHIFT_KEYCODE_V.begin(), CTRL_SHIFT_KEYCODE_V.end(), pressedKeys[Index2]) != 173885b47fbSopenharmony_ci CTRL_SHIFT_KEYCODE_V.end())) { 174885b47fbSopenharmony_ci metaKey1 = pressedKeys[Index1]; 175885b47fbSopenharmony_ci metaKey2 = pressedKeys[Index2]; 176885b47fbSopenharmony_ci return true; 177885b47fbSopenharmony_ci } 178885b47fbSopenharmony_ci } 179885b47fbSopenharmony_ci } 180885b47fbSopenharmony_ci return false; 181885b47fbSopenharmony_ci} 182885b47fbSopenharmony_ci 183885b47fbSopenharmony_ciint32_t AccessibilityMouseKey::ParseMetaKey(int32_t metaKey1, int32_t metaKey2) const 184885b47fbSopenharmony_ci{ 185885b47fbSopenharmony_ci HILOG_DEBUG(); 186885b47fbSopenharmony_ci for (int32_t i = 0; i < ROW_COUNT; i++) { 187885b47fbSopenharmony_ci if ((metaKey1 == PRESSED_METAKEYS_TBL[i][0]) && (metaKey2 == PRESSED_METAKEYS_TBL[i][1])) { 188885b47fbSopenharmony_ci return PRESSED_METAKEYS_TBL[i][COLUMN_COUNT - 1]; 189885b47fbSopenharmony_ci } 190885b47fbSopenharmony_ci } 191885b47fbSopenharmony_ci return INVALID_KEY; 192885b47fbSopenharmony_ci} 193885b47fbSopenharmony_ci 194885b47fbSopenharmony_cibool AccessibilityMouseKey::ExecuteMouseKey(int32_t actionKey, int32_t metaKey1, int32_t metaKey2) 195885b47fbSopenharmony_ci{ 196885b47fbSopenharmony_ci HILOG_DEBUG("actionKey:%{public}d, metaKey1:%{public}d, metaKey2:%{public}d", actionKey, metaKey1, metaKey2); 197885b47fbSopenharmony_ci 198885b47fbSopenharmony_ci if ((actionKey == MMI::KeyEvent::KEYCODE_NUMPAD_1) || 199885b47fbSopenharmony_ci (actionKey == MMI::KeyEvent::KEYCODE_NUMPAD_2) || 200885b47fbSopenharmony_ci (actionKey == MMI::KeyEvent::KEYCODE_NUMPAD_3) || 201885b47fbSopenharmony_ci (actionKey == MMI::KeyEvent::KEYCODE_NUMPAD_4) || 202885b47fbSopenharmony_ci (actionKey == MMI::KeyEvent::KEYCODE_NUMPAD_6) || 203885b47fbSopenharmony_ci (actionKey == MMI::KeyEvent::KEYCODE_NUMPAD_7) || 204885b47fbSopenharmony_ci (actionKey == MMI::KeyEvent::KEYCODE_NUMPAD_8) || 205885b47fbSopenharmony_ci (actionKey == MMI::KeyEvent::KEYCODE_NUMPAD_9)) { 206885b47fbSopenharmony_ci auto iter = MOUSE_MOVE_OFFSET_M.find(actionKey); 207885b47fbSopenharmony_ci if (iter != MOUSE_MOVE_OFFSET_M.end()) { 208885b47fbSopenharmony_ci int32_t offsetX = iter->second.offsetX; 209885b47fbSopenharmony_ci int32_t offsetY = iter->second.offsetY; 210885b47fbSopenharmony_ci int32_t result = ParseMetaKey(metaKey1, metaKey2); 211885b47fbSopenharmony_ci if ((result == INVALID_KEY) || (result == CTRL_SHIFT_KEY)) { 212885b47fbSopenharmony_ci return false; 213885b47fbSopenharmony_ci } 214885b47fbSopenharmony_ci if (result == CTRL_KEY) { 215885b47fbSopenharmony_ci offsetX = static_cast<int32_t>(iter->second.offsetX * SPEED_UP_MULTIPLE); 216885b47fbSopenharmony_ci offsetY = static_cast<int32_t>(iter->second.offsetY * SPEED_UP_MULTIPLE); 217885b47fbSopenharmony_ci } else if (result == SHIFT_KEY) { 218885b47fbSopenharmony_ci offsetX = static_cast<int32_t>(iter->second.offsetX * SLOW_DOWN_MULTIPLE); 219885b47fbSopenharmony_ci offsetY = static_cast<int32_t>(iter->second.offsetY * SLOW_DOWN_MULTIPLE); 220885b47fbSopenharmony_ci } 221885b47fbSopenharmony_ci MoveMousePointer(offsetX, offsetY); 222885b47fbSopenharmony_ci } 223885b47fbSopenharmony_ci } else if (actionKey == MMI::KeyEvent::KEYCODE_NUMPAD_5) { 224885b47fbSopenharmony_ci SendMouseClickEvent(SINGLE_CLICK); 225885b47fbSopenharmony_ci } else if (actionKey == MMI::KeyEvent::KEYCODE_NUMPAD_DIVIDE) { 226885b47fbSopenharmony_ci selectedKeyType_ = LEFT_KEY; 227885b47fbSopenharmony_ci } else if (actionKey == MMI::KeyEvent::KEYCODE_NUMPAD_MULTIPLY) { 228885b47fbSopenharmony_ci selectedKeyType_ = BOOTH_KEY; 229885b47fbSopenharmony_ci } else if (actionKey == MMI::KeyEvent::KEYCODE_NUMPAD_SUBTRACT) { 230885b47fbSopenharmony_ci selectedKeyType_ = RIGHT_KEY; 231885b47fbSopenharmony_ci } else if (actionKey == MMI::KeyEvent::KEYCODE_NUMPAD_ADD) { 232885b47fbSopenharmony_ci SendMouseClickEvent(DOUBLE_CLICK); 233885b47fbSopenharmony_ci } 234885b47fbSopenharmony_ci return true; 235885b47fbSopenharmony_ci} 236885b47fbSopenharmony_ci 237885b47fbSopenharmony_civoid AccessibilityMouseKey::MoveMousePointer(int32_t offsetX, int32_t offsetY) 238885b47fbSopenharmony_ci{ 239885b47fbSopenharmony_ci HILOG_DEBUG("offsetX:%{public}d, offsetY:%{public}d", offsetX, offsetY); 240885b47fbSopenharmony_ci 241885b47fbSopenharmony_ci EventTransmission::OnMoveMouse(offsetX, offsetY); 242885b47fbSopenharmony_ci} 243885b47fbSopenharmony_ci 244885b47fbSopenharmony_civoid AccessibilityMouseKey::SendMouseClickEvent(CLICK_TYPE clickType) 245885b47fbSopenharmony_ci{ 246885b47fbSopenharmony_ci HILOG_DEBUG(); 247885b47fbSopenharmony_ci 248885b47fbSopenharmony_ci if (!lastMouseMoveEvent_) { 249885b47fbSopenharmony_ci HILOG_DEBUG("No mouse event to be sent."); 250885b47fbSopenharmony_ci return; 251885b47fbSopenharmony_ci } 252885b47fbSopenharmony_ci 253885b47fbSopenharmony_ci int64_t nowTime = GetSystemTime(); 254885b47fbSopenharmony_ci // Update event information. 255885b47fbSopenharmony_ci lastMouseMoveEvent_->SetActionTime(nowTime); 256885b47fbSopenharmony_ci lastMouseMoveEvent_->SetActionStartTime(nowTime); 257885b47fbSopenharmony_ci 258885b47fbSopenharmony_ci // Update pointer item information. 259885b47fbSopenharmony_ci int32_t pointerId = lastMouseMoveEvent_->GetPointerId(); 260885b47fbSopenharmony_ci MMI::PointerEvent::PointerItem item; 261885b47fbSopenharmony_ci lastMouseMoveEvent_->GetPointerItem(pointerId, item); 262885b47fbSopenharmony_ci item.SetDownTime(nowTime); 263885b47fbSopenharmony_ci item.SetPressed(true); 264885b47fbSopenharmony_ci lastMouseMoveEvent_->UpdatePointerItem(pointerId, item); 265885b47fbSopenharmony_ci 266885b47fbSopenharmony_ci for (uint32_t clickCount = 0; clickCount < clickType; clickCount ++) { 267885b47fbSopenharmony_ci HILOG_DEBUG("selectedKeyType:%{public}u", selectedKeyType_); 268885b47fbSopenharmony_ci if (selectedKeyType_ == LEFT_KEY) { 269885b47fbSopenharmony_ci PerformMouseAction(MMI::PointerEvent::MOUSE_BUTTON_LEFT, MMI::PointerEvent::POINTER_ACTION_BUTTON_DOWN); 270885b47fbSopenharmony_ci PerformMouseAction(MMI::PointerEvent::MOUSE_BUTTON_LEFT, MMI::PointerEvent::POINTER_ACTION_BUTTON_UP); 271885b47fbSopenharmony_ci } else if (selectedKeyType_ == RIGHT_KEY) { 272885b47fbSopenharmony_ci PerformMouseAction(MMI::PointerEvent::MOUSE_BUTTON_RIGHT, MMI::PointerEvent::POINTER_ACTION_BUTTON_DOWN); 273885b47fbSopenharmony_ci PerformMouseAction(MMI::PointerEvent::MOUSE_BUTTON_RIGHT, MMI::PointerEvent::POINTER_ACTION_BUTTON_UP); 274885b47fbSopenharmony_ci } else if (selectedKeyType_ == BOOTH_KEY) { 275885b47fbSopenharmony_ci PerformMouseAction(MMI::PointerEvent::MOUSE_BUTTON_LEFT, MMI::PointerEvent::POINTER_ACTION_BUTTON_DOWN); 276885b47fbSopenharmony_ci PerformMouseAction(MMI::PointerEvent::MOUSE_BUTTON_RIGHT, MMI::PointerEvent::POINTER_ACTION_BUTTON_DOWN); 277885b47fbSopenharmony_ci 278885b47fbSopenharmony_ci PerformMouseAction(MMI::PointerEvent::MOUSE_BUTTON_LEFT, MMI::PointerEvent::POINTER_ACTION_BUTTON_UP); 279885b47fbSopenharmony_ci PerformMouseAction(MMI::PointerEvent::MOUSE_BUTTON_RIGHT, MMI::PointerEvent::POINTER_ACTION_BUTTON_UP); 280885b47fbSopenharmony_ci } 281885b47fbSopenharmony_ci } 282885b47fbSopenharmony_ci} 283885b47fbSopenharmony_ci 284885b47fbSopenharmony_civoid AccessibilityMouseKey::PerformMouseAction(int32_t buttonId, int32_t actionType) 285885b47fbSopenharmony_ci{ 286885b47fbSopenharmony_ci HILOG_DEBUG(); 287885b47fbSopenharmony_ci 288885b47fbSopenharmony_ci if (!lastMouseMoveEvent_) { 289885b47fbSopenharmony_ci HILOG_DEBUG("No mouse event to be sent."); 290885b47fbSopenharmony_ci return; 291885b47fbSopenharmony_ci } 292885b47fbSopenharmony_ci lastMouseMoveEvent_->SetButtonId(buttonId); 293885b47fbSopenharmony_ci lastMouseMoveEvent_->SetButtonPressed(buttonId); 294885b47fbSopenharmony_ci lastMouseMoveEvent_->SetPointerAction(actionType); 295885b47fbSopenharmony_ci EventTransmission::OnPointerEvent(*lastMouseMoveEvent_); 296885b47fbSopenharmony_ci} 297885b47fbSopenharmony_ci 298885b47fbSopenharmony_ciint64_t AccessibilityMouseKey::GetSystemTime() const 299885b47fbSopenharmony_ci{ 300885b47fbSopenharmony_ci HILOG_DEBUG(); 301885b47fbSopenharmony_ci 302885b47fbSopenharmony_ci int64_t microsecond = Utils::GetSystemTime() * 1000; 303885b47fbSopenharmony_ci return microsecond; 304885b47fbSopenharmony_ci} 305885b47fbSopenharmony_ci} // namespace Accessibility 306885b47fbSopenharmony_ci} // namespace OHOS