1c29fa5a6Sopenharmony_ci/* 2c29fa5a6Sopenharmony_ci * Copyright (c) 2021-2023 Huawei Device Co., Ltd. 3c29fa5a6Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4c29fa5a6Sopenharmony_ci * you may not use this file except in compliance with the License. 5c29fa5a6Sopenharmony_ci * You may obtain a copy of the License at 6c29fa5a6Sopenharmony_ci * 7c29fa5a6Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8c29fa5a6Sopenharmony_ci * 9c29fa5a6Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10c29fa5a6Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11c29fa5a6Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12c29fa5a6Sopenharmony_ci * See the License for the specific language governing permissions and 13c29fa5a6Sopenharmony_ci * limitations under the License. 14c29fa5a6Sopenharmony_ci */ 15c29fa5a6Sopenharmony_ci 16c29fa5a6Sopenharmony_ci#include "mmi_service.h" 17c29fa5a6Sopenharmony_ci 18c29fa5a6Sopenharmony_ci#include <parameters.h> 19c29fa5a6Sopenharmony_ci#include <sys/signalfd.h> 20c29fa5a6Sopenharmony_ci 21c29fa5a6Sopenharmony_ci#include <cinttypes> 22c29fa5a6Sopenharmony_ci#include <csignal> 23c29fa5a6Sopenharmony_ci#include <cstdlib> 24c29fa5a6Sopenharmony_ci#include "string_ex.h" 25c29fa5a6Sopenharmony_ci#ifdef OHOS_RSS_CLIENT 26c29fa5a6Sopenharmony_ci#include <unordered_map> 27c29fa5a6Sopenharmony_ci#endif // OHOS_RSS_CLIENT 28c29fa5a6Sopenharmony_ci 29c29fa5a6Sopenharmony_ci#include "ability_manager_client.h" 30c29fa5a6Sopenharmony_ci#include "anr_manager.h" 31c29fa5a6Sopenharmony_ci#include "app_debug_listener.h" 32c29fa5a6Sopenharmony_ci#include "app_state_observer.h" 33c29fa5a6Sopenharmony_ci#include "device_event_monitor.h" 34c29fa5a6Sopenharmony_ci#include "dfx_define.h" 35c29fa5a6Sopenharmony_ci#include "dfx_dump_catcher.h" 36c29fa5a6Sopenharmony_ci#include "dfx_hisysevent.h" 37c29fa5a6Sopenharmony_ci#include "dfx_json_formatter.h" 38c29fa5a6Sopenharmony_ci 39c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_KEYBOARD 40c29fa5a6Sopenharmony_ci#include "display_event_monitor.h" 41c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD 42c29fa5a6Sopenharmony_ci#include "event_dump.h" 43c29fa5a6Sopenharmony_ci#include "event_statistic.h" 44c29fa5a6Sopenharmony_ci#include "event_log_helper.h" 45c29fa5a6Sopenharmony_ci#include "ffrt.h" 46c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_FINGERSENSE_WRAPPER 47c29fa5a6Sopenharmony_ci#include "fingersense_wrapper.h" 48c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_FINGERSENSE_WRAPPER 49c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_GESTURESENSE_WRAPPER 50c29fa5a6Sopenharmony_ci#include "gesturesense_wrapper.h" 51c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_GESTURESENSE_WRAPPER 52c29fa5a6Sopenharmony_ci#include "infrared_emitter_controller.h" 53c29fa5a6Sopenharmony_ci#include "input_device_manager.h" 54c29fa5a6Sopenharmony_ci#include "ipc_skeleton.h" 55c29fa5a6Sopenharmony_ci#include "i_input_windows_manager.h" 56c29fa5a6Sopenharmony_ci#include "i_pointer_drawing_manager.h" 57c29fa5a6Sopenharmony_ci#include "i_preference_manager.h" 58c29fa5a6Sopenharmony_ci#include "key_auto_repeat.h" 59c29fa5a6Sopenharmony_ci#include "key_command_handler.h" 60c29fa5a6Sopenharmony_ci#include "key_map_manager.h" 61c29fa5a6Sopenharmony_ci#ifdef SHORTCUT_KEY_MANAGER_ENABLED 62c29fa5a6Sopenharmony_ci#include "key_shortcut_manager.h" 63c29fa5a6Sopenharmony_ci#endif // SHORTCUT_KEY_MANAGER_ENABLED 64c29fa5a6Sopenharmony_ci#include "mmi_log.h" 65c29fa5a6Sopenharmony_ci#include "multimodal_input_connect_def_parcel.h" 66c29fa5a6Sopenharmony_ci#include "permission_helper.h" 67c29fa5a6Sopenharmony_ci#include "timer_manager.h" 68c29fa5a6Sopenharmony_ci#include "tokenid_kit.h" 69c29fa5a6Sopenharmony_ci#include "touch_event_normalize.h" 70c29fa5a6Sopenharmony_ci#include "touch_gesture_adapter.h" 71c29fa5a6Sopenharmony_ci#include "util.h" 72c29fa5a6Sopenharmony_ci#include "util_ex.h" 73c29fa5a6Sopenharmony_ci#include "watchdog_task.h" 74c29fa5a6Sopenharmony_ci#include "xcollie/watchdog.h" 75c29fa5a6Sopenharmony_ci#include "xcollie/xcollie.h" 76c29fa5a6Sopenharmony_ci#include "xcollie/xcollie_define.h" 77c29fa5a6Sopenharmony_ci 78c29fa5a6Sopenharmony_ci#ifdef OHOS_RSS_CLIENT 79c29fa5a6Sopenharmony_ci#include "res_sched_client.h" 80c29fa5a6Sopenharmony_ci#include "res_type.h" 81c29fa5a6Sopenharmony_ci#include "system_ability_definition.h" 82c29fa5a6Sopenharmony_ci#endif // OHOS_RSS_CLIENT 83c29fa5a6Sopenharmony_ci#include "setting_datashare.h" 84c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_ANCO 85c29fa5a6Sopenharmony_ci#include "app_mgr_client.h" 86c29fa5a6Sopenharmony_ci#include "running_process_info.h" 87c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_ANCO 88c29fa5a6Sopenharmony_ci 89c29fa5a6Sopenharmony_ci#ifdef PLAYER_FRAMEWORK_EXISTS 90c29fa5a6Sopenharmony_ci#include "input_screen_capture_agent.h" 91c29fa5a6Sopenharmony_ci#endif // PLAYER_FRAMEWORK_EXISTS 92c29fa5a6Sopenharmony_ci 93c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_VKEYBOARD 94c29fa5a6Sopenharmony_ci#include "vkeyboard.h" 95c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_VKEYBOARD 96c29fa5a6Sopenharmony_ci 97c29fa5a6Sopenharmony_ci#undef MMI_LOG_TAG 98c29fa5a6Sopenharmony_ci#define MMI_LOG_TAG "MMIService" 99c29fa5a6Sopenharmony_ci#undef MMI_LOG_DOMAIN 100c29fa5a6Sopenharmony_ci#define MMI_LOG_DOMAIN MMI_LOG_SERVER 101c29fa5a6Sopenharmony_ci 102c29fa5a6Sopenharmony_cinamespace OHOS { 103c29fa5a6Sopenharmony_cinamespace MMI { 104c29fa5a6Sopenharmony_cinamespace { 105c29fa5a6Sopenharmony_cistd::mutex g_instanceMutex; 106c29fa5a6Sopenharmony_ciMMIService* g_MMIService; 107c29fa5a6Sopenharmony_ciconst std::string DEF_INPUT_SEAT { "seat0" }; 108c29fa5a6Sopenharmony_ciconst std::string THREAD_NAME { "mmi-service" }; 109c29fa5a6Sopenharmony_ciconstexpr int32_t WATCHDOG_INTERVAL_TIME { 30000 }; 110c29fa5a6Sopenharmony_ci[[ maybe_unused ]] constexpr int32_t WATCHDOG_DELAY_TIME { 40000 }; 111c29fa5a6Sopenharmony_ciconstexpr int32_t RELOAD_DEVICE_TIME { 2000 }; 112c29fa5a6Sopenharmony_ci[[ maybe_unused ]] constexpr int32_t WATCHDOG_WARNTIME { 6000 }; 113c29fa5a6Sopenharmony_ci[[ maybe_unused ]] constexpr int32_t WATCHDOG_BLOCKTIME { 3000 }; 114c29fa5a6Sopenharmony_ciconstexpr int32_t REMOVE_OBSERVER { -2 }; 115c29fa5a6Sopenharmony_ciconstexpr int32_t REPEAT_COUNT { 2 }; 116c29fa5a6Sopenharmony_ciconstexpr int32_t UNSUBSCRIBED { -1 }; 117c29fa5a6Sopenharmony_ciconstexpr int32_t UNOBSERVED { -1 }; 118c29fa5a6Sopenharmony_ciconstexpr int32_t SUBSCRIBED { 1 }; 119c29fa5a6Sopenharmony_ci[[ maybe_unused ]] constexpr int32_t DISTRIBUTE_TIME { 1000 }; // 1000ms 120c29fa5a6Sopenharmony_ciconstexpr int32_t COMMON_PARAMETER_ERROR { 401 }; 121c29fa5a6Sopenharmony_ciconstexpr size_t MAX_FRAME_NUMS { 100 }; 122c29fa5a6Sopenharmony_ciconstexpr int32_t THREAD_BLOCK_TIMER_SPAN_S { 3 }; 123c29fa5a6Sopenharmony_ciconstexpr int32_t PRINT_INTERVAL_TIME { 30000 }; 124c29fa5a6Sopenharmony_ciconst std::set<int32_t> g_keyCodeValueSet = { 125c29fa5a6Sopenharmony_ci KeyEvent::KEYCODE_FN, KeyEvent::KEYCODE_DPAD_UP, KeyEvent::KEYCODE_DPAD_DOWN, KeyEvent::KEYCODE_DPAD_LEFT, 126c29fa5a6Sopenharmony_ci KeyEvent::KEYCODE_DPAD_RIGHT, KeyEvent::KEYCODE_ALT_LEFT, KeyEvent::KEYCODE_ALT_RIGHT, 127c29fa5a6Sopenharmony_ci KeyEvent::KEYCODE_SHIFT_LEFT, KeyEvent::KEYCODE_SHIFT_RIGHT, KeyEvent::KEYCODE_TAB, KeyEvent::KEYCODE_ENTER, 128c29fa5a6Sopenharmony_ci KeyEvent::KEYCODE_DEL, KeyEvent::KEYCODE_MENU, KeyEvent::KEYCODE_PAGE_UP, KeyEvent::KEYCODE_PAGE_DOWN, 129c29fa5a6Sopenharmony_ci KeyEvent::KEYCODE_ESCAPE, KeyEvent::KEYCODE_FORWARD_DEL, KeyEvent::KEYCODE_CTRL_LEFT, KeyEvent::KEYCODE_CTRL_RIGHT, 130c29fa5a6Sopenharmony_ci KeyEvent::KEYCODE_CAPS_LOCK, KeyEvent::KEYCODE_SCROLL_LOCK, KeyEvent::KEYCODE_META_LEFT, 131c29fa5a6Sopenharmony_ci KeyEvent::KEYCODE_META_RIGHT, KeyEvent::KEYCODE_SYSRQ, KeyEvent::KEYCODE_BREAK, KeyEvent::KEYCODE_MOVE_HOME, 132c29fa5a6Sopenharmony_ci KeyEvent::KEYCODE_MOVE_END, KeyEvent::KEYCODE_INSERT, KeyEvent::KEYCODE_F1, KeyEvent::KEYCODE_F2, 133c29fa5a6Sopenharmony_ci KeyEvent::KEYCODE_F3, KeyEvent::KEYCODE_F4, KeyEvent::KEYCODE_F5, KeyEvent::KEYCODE_F6, KeyEvent::KEYCODE_F7, 134c29fa5a6Sopenharmony_ci KeyEvent::KEYCODE_F8, KeyEvent::KEYCODE_F9, KeyEvent::KEYCODE_F10, KeyEvent::KEYCODE_F11, KeyEvent::KEYCODE_F12, 135c29fa5a6Sopenharmony_ci KeyEvent::KEYCODE_NUM_LOCK 136c29fa5a6Sopenharmony_ci}; 137c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_ANCO 138c29fa5a6Sopenharmony_ciconstexpr int32_t DEFAULT_USER_ID { 100 }; 139c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_ANCO 140c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_VKEYBOARD 141c29fa5a6Sopenharmony_ciconst std::string DEVICE_TYPE_HPR { "HPR" }; 142c29fa5a6Sopenharmony_ciconst std::string PRODUCT_TYPE = OHOS::system::GetParameter("const.build.product", "HYM"); 143c29fa5a6Sopenharmony_ci// Define vkeyboard functions from vendor 144c29fa5a6Sopenharmony_ciconst std::string VKEYBOARD_PATH { "libvkeyboard.z.so" }; 145c29fa5a6Sopenharmony_civoid* g_VKeyboardHandle = nullptr; 146c29fa5a6Sopenharmony_citypedef void (*ALGORITHM_KEYDOWN_TYPE)( 147c29fa5a6Sopenharmony_ci double screenX, double screenY, int touchId, bool tipDown, string buttonName); 148c29fa5a6Sopenharmony_ciALGORITHM_KEYDOWN_TYPE algorithm_keydown_ = nullptr; 149c29fa5a6Sopenharmony_citypedef void (*ALGORITHM_KEYUP_TYPE)( 150c29fa5a6Sopenharmony_ci double screenX, double screenY, int touchId, bool tipDown, string buttonName); 151c29fa5a6Sopenharmony_ciALGORITHM_KEYUP_TYPE algorithm_keyup_ = nullptr; 152c29fa5a6Sopenharmony_citypedef int32_t (*GAUSSIANKEYBOARD_GETKEYCODEBYKEYNAME_TYPE)(string keyName); 153c29fa5a6Sopenharmony_ciGAUSSIANKEYBOARD_GETKEYCODEBYKEYNAME_TYPE gaussiankeyboard_getKeyCodeByKeyName_ = nullptr; 154c29fa5a6Sopenharmony_citypedef int32_t (*GAUSSIANKEYBOARD_GETKEYCODEBYKEYNAMEANDSHIFT_TYPE)(string keyName, bool& useShift); 155c29fa5a6Sopenharmony_ciGAUSSIANKEYBOARD_GETKEYCODEBYKEYNAMEANDSHIFT_TYPE gaussiankeyboard_getKeyCodeByKeyNameAndShift_ = nullptr; 156c29fa5a6Sopenharmony_citypedef void (*GAUSSIANKEYBOARD_UPDATEMOTIONSPACE_TYPE)( 157c29fa5a6Sopenharmony_ci string keyName, bool useShift, std::vector<int32_t>& pattern); 158c29fa5a6Sopenharmony_ciGAUSSIANKEYBOARD_UPDATEMOTIONSPACE_TYPE gaussiankeyboard_updateMotionSpace_ = nullptr; 159c29fa5a6Sopenharmony_citypedef void (*GAUSSIANKEYBOARD_SETVKEYBOARDAREA_TYPE)( 160c29fa5a6Sopenharmony_ci double topLeftX, double topLeftY, double bottomRightX, double bottomRightY); 161c29fa5a6Sopenharmony_ciGAUSSIANKEYBOARD_SETVKEYBOARDAREA_TYPE gaussiankeyboard_setVKeyboardArea_ = nullptr; 162c29fa5a6Sopenharmony_citypedef void (*BAYESIANENGINE_MAPTOUCHTOBUTTON_TYPE)( 163c29fa5a6Sopenharmony_ci double screenX, double screenY, int touchId, bool tipDown, string& buttonName, 164c29fa5a6Sopenharmony_ci long long timestamp, bool updateDynamicGaussian, vector<pair<string, double>>& sortedNegLogProb); 165c29fa5a6Sopenharmony_ciBAYESIANENGINE_MAPTOUCHTOBUTTON_TYPE bayesianengine_mapTouchToButton_ = nullptr; 166c29fa5a6Sopenharmony_ci// Return message type. 167c29fa5a6Sopenharmony_citypedef int32_t (*STATEMACINEMESSAGQUEUE_GETMESSAGE_TYPE)( 168c29fa5a6Sopenharmony_ci string& buttonName, string& toggleButtonName, int& buttonMode, string& RestList); 169c29fa5a6Sopenharmony_ciSTATEMACINEMESSAGQUEUE_GETMESSAGE_TYPE statemachineMessageQueue_getMessage_ = nullptr; 170c29fa5a6Sopenharmony_citypedef void (*STATEMACINEMESSAGQUEUE_CLEARMESSAGE_TYPE)(); 171c29fa5a6Sopenharmony_ciSTATEMACINEMESSAGQUEUE_CLEARMESSAGE_TYPE statemachineMessageQueue_clearMessage_ = nullptr; 172c29fa5a6Sopenharmony_citypedef bool (*GAUSSIANKEYBOARD_ISINSIDEVKEYBOARDAREA_TYPE)(double x, double y); 173c29fa5a6Sopenharmony_ciGAUSSIANKEYBOARD_ISINSIDEVKEYBOARDAREA_TYPE gaussiankeyboard_isInsideVKeyboardArea_ = nullptr; 174c29fa5a6Sopenharmony_citypedef bool (*GAUSSIANKEYBOARD_ISVKEYBOARDVISIBLE_TYPE)(); 175c29fa5a6Sopenharmony_ciGAUSSIANKEYBOARD_ISVKEYBOARDVISIBLE_TYPE gaussiankeyboard_isVKeyboardVisible_ = nullptr; 176c29fa5a6Sopenharmony_citypedef bool (*ALGORITHM_ISKEYDOWNINKEYBOARD_TYPE)(int touchId); 177c29fa5a6Sopenharmony_ciALGORITHM_ISKEYDOWNINKEYBOARD_TYPE algorithm_isKeyDownInKeyboard_ = nullptr; 178c29fa5a6Sopenharmony_cistd::vector<int32_t> g_VKeyDownSet; 179c29fa5a6Sopenharmony_cistd::unordered_set<int32_t> g_VKeyModifiersDownSet; 180c29fa5a6Sopenharmony_ci// Shared key event for key injection for printing. 181c29fa5a6Sopenharmony_cistd::shared_ptr<KeyEvent> g_VKeySharedKeyEvent { nullptr }; 182c29fa5a6Sopenharmony_ci// Shared key event for UI rendering. 183c29fa5a6Sopenharmony_cistd::shared_ptr<KeyEvent> g_VKeySharedUIKeyEvent { nullptr }; 184c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_VKEYBOARD 185c29fa5a6Sopenharmony_ci} // namespace 186c29fa5a6Sopenharmony_ci 187c29fa5a6Sopenharmony_ciconst bool REGISTER_RESULT = SystemAbility::MakeAndRegisterAbility(MMIService::GetInstance()); 188c29fa5a6Sopenharmony_ci 189c29fa5a6Sopenharmony_citemplate <class... Ts> void CheckDefineOutput(const char *fmt, Ts... args) 190c29fa5a6Sopenharmony_ci{ 191c29fa5a6Sopenharmony_ci CHKPV(fmt); 192c29fa5a6Sopenharmony_ci char buf[MAX_PACKET_BUF_SIZE] = {}; 193c29fa5a6Sopenharmony_ci int32_t ret = snprintf_s(buf, MAX_PACKET_BUF_SIZE, MAX_PACKET_BUF_SIZE - 1, fmt, args...); 194c29fa5a6Sopenharmony_ci if (ret == -1) { 195c29fa5a6Sopenharmony_ci KMSG_LOGE("Call snprintf_s failed.ret = %d", ret); 196c29fa5a6Sopenharmony_ci return; 197c29fa5a6Sopenharmony_ci } 198c29fa5a6Sopenharmony_ci KMSG_LOGI("%s", buf); 199c29fa5a6Sopenharmony_ci MMI_HILOGI("%{public}s", buf); 200c29fa5a6Sopenharmony_ci} 201c29fa5a6Sopenharmony_ci 202c29fa5a6Sopenharmony_cistatic void CheckDefine() 203c29fa5a6Sopenharmony_ci{ 204c29fa5a6Sopenharmony_ci CheckDefineOutput("ChkDefs:"); 205c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER_DRAWING 206c29fa5a6Sopenharmony_ci CheckDefineOutput("%-40s", "OHOS_BUILD_ENABLE_POINTER_DRAWING"); 207c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER_DRAWING 208c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_INTERCEPTOR 209c29fa5a6Sopenharmony_ci CheckDefineOutput("%-40s", "OHOS_BUILD_ENABLE_INTERCEPTOR"); 210c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_INTERCEPTOR 211c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_KEYBOARD 212c29fa5a6Sopenharmony_ci CheckDefineOutput("%-40s", "OHOS_BUILD_ENABLE_KEYBOARD"); 213c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD 214c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 215c29fa5a6Sopenharmony_ci CheckDefineOutput("%-40s", "OHOS_BUILD_ENABLE_POINTER"); 216c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 217c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_TOUCH 218c29fa5a6Sopenharmony_ci CheckDefineOutput("%-40s", "OHOS_BUILD_ENABLE_TOUCH"); 219c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_TOUCH 220c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_MONITOR 221c29fa5a6Sopenharmony_ci CheckDefineOutput("%-40s", "OHOS_BUILD_ENABLE_MONITOR"); 222c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_MONITOR 223c29fa5a6Sopenharmony_ci} 224c29fa5a6Sopenharmony_ci 225c29fa5a6Sopenharmony_ciMMIService::MMIService() : SystemAbility(MULTIMODAL_INPUT_CONNECT_SERVICE_ID, true) {} 226c29fa5a6Sopenharmony_ci 227c29fa5a6Sopenharmony_ciMMIService::~MMIService() 228c29fa5a6Sopenharmony_ci{ 229c29fa5a6Sopenharmony_ci if (g_MMIService != nullptr) { 230c29fa5a6Sopenharmony_ci g_MMIService = nullptr; 231c29fa5a6Sopenharmony_ci } 232c29fa5a6Sopenharmony_ci MMI_HILOGI("~MMIService"); 233c29fa5a6Sopenharmony_ci} 234c29fa5a6Sopenharmony_ci 235c29fa5a6Sopenharmony_ciMMIService* MMIService::GetInstance() 236c29fa5a6Sopenharmony_ci{ 237c29fa5a6Sopenharmony_ci if (g_MMIService == nullptr) { 238c29fa5a6Sopenharmony_ci std::lock_guard<std::mutex> lock(g_instanceMutex); 239c29fa5a6Sopenharmony_ci if (g_MMIService == nullptr) { 240c29fa5a6Sopenharmony_ci MMI_HILOGI("New MMIService"); 241c29fa5a6Sopenharmony_ci g_MMIService = new MMIService(); 242c29fa5a6Sopenharmony_ci } 243c29fa5a6Sopenharmony_ci } 244c29fa5a6Sopenharmony_ci return g_MMIService; 245c29fa5a6Sopenharmony_ci} 246c29fa5a6Sopenharmony_ci 247c29fa5a6Sopenharmony_ciint32_t MMIService::AddEpoll(EpollEventType type, int32_t fd) 248c29fa5a6Sopenharmony_ci{ 249c29fa5a6Sopenharmony_ci if (type < EPOLL_EVENT_BEGIN || type >= EPOLL_EVENT_END) { 250c29fa5a6Sopenharmony_ci MMI_HILOGE("Invalid param type"); 251c29fa5a6Sopenharmony_ci return RET_ERR; 252c29fa5a6Sopenharmony_ci } 253c29fa5a6Sopenharmony_ci if (fd < 0) { 254c29fa5a6Sopenharmony_ci MMI_HILOGE("Invalid param fd_"); 255c29fa5a6Sopenharmony_ci return RET_ERR; 256c29fa5a6Sopenharmony_ci } 257c29fa5a6Sopenharmony_ci if (mmiFd_ < 0) { 258c29fa5a6Sopenharmony_ci MMI_HILOGE("Invalid param mmiFd_"); 259c29fa5a6Sopenharmony_ci return RET_ERR; 260c29fa5a6Sopenharmony_ci } 261c29fa5a6Sopenharmony_ci auto eventData = std::make_shared<mmi_epoll_event>(); 262c29fa5a6Sopenharmony_ci eventData->fd = fd; 263c29fa5a6Sopenharmony_ci eventData->event_type = type; 264c29fa5a6Sopenharmony_ci MMI_HILOGI("userdata:[fd:%{public}d, type:%{public}d]", eventData->fd, eventData->event_type); 265c29fa5a6Sopenharmony_ci 266c29fa5a6Sopenharmony_ci struct epoll_event ev = {}; 267c29fa5a6Sopenharmony_ci ev.events = EPOLLIN; 268c29fa5a6Sopenharmony_ci ev.data.fd = fd; 269c29fa5a6Sopenharmony_ci auto ret = EpollCtl(fd, EPOLL_CTL_ADD, ev, mmiFd_); 270c29fa5a6Sopenharmony_ci if (ret < 0) { 271c29fa5a6Sopenharmony_ci eventData = nullptr; 272c29fa5a6Sopenharmony_ci ev.data.ptr = nullptr; 273c29fa5a6Sopenharmony_ci return ret; 274c29fa5a6Sopenharmony_ci } 275c29fa5a6Sopenharmony_ci AddEpollEvent(fd, eventData); 276c29fa5a6Sopenharmony_ci return RET_OK; 277c29fa5a6Sopenharmony_ci} 278c29fa5a6Sopenharmony_ci 279c29fa5a6Sopenharmony_ciint32_t MMIService::DelEpoll(EpollEventType type, int32_t fd) 280c29fa5a6Sopenharmony_ci{ 281c29fa5a6Sopenharmony_ci if (type < EPOLL_EVENT_BEGIN || type >= EPOLL_EVENT_END) { 282c29fa5a6Sopenharmony_ci MMI_HILOGE("Invalid param type"); 283c29fa5a6Sopenharmony_ci return RET_ERR; 284c29fa5a6Sopenharmony_ci } 285c29fa5a6Sopenharmony_ci if (fd < 0) { 286c29fa5a6Sopenharmony_ci MMI_HILOGE("Invalid param fd_"); 287c29fa5a6Sopenharmony_ci return RET_ERR; 288c29fa5a6Sopenharmony_ci } 289c29fa5a6Sopenharmony_ci if (mmiFd_ < 0) { 290c29fa5a6Sopenharmony_ci MMI_HILOGE("Invalid param mmiFd_"); 291c29fa5a6Sopenharmony_ci return RET_ERR; 292c29fa5a6Sopenharmony_ci } 293c29fa5a6Sopenharmony_ci struct epoll_event ev = {}; 294c29fa5a6Sopenharmony_ci auto ret = EpollCtl(fd, EPOLL_CTL_DEL, ev, mmiFd_); 295c29fa5a6Sopenharmony_ci if (ret < 0) { 296c29fa5a6Sopenharmony_ci MMI_HILOGE("DelEpoll failed"); 297c29fa5a6Sopenharmony_ci return ret; 298c29fa5a6Sopenharmony_ci } 299c29fa5a6Sopenharmony_ci return RET_OK; 300c29fa5a6Sopenharmony_ci} 301c29fa5a6Sopenharmony_ci 302c29fa5a6Sopenharmony_cibool MMIService::IsRunning() const 303c29fa5a6Sopenharmony_ci{ 304c29fa5a6Sopenharmony_ci return (state_ == ServiceRunningState::STATE_RUNNING); 305c29fa5a6Sopenharmony_ci} 306c29fa5a6Sopenharmony_ci 307c29fa5a6Sopenharmony_cibool MMIService::InitLibinputService() 308c29fa5a6Sopenharmony_ci{ 309c29fa5a6Sopenharmony_ci if (!(libinputAdapter_.Init([] (void *event, int64_t frameTime) { 310c29fa5a6Sopenharmony_ci ::OHOS::DelayedSingleton<InputEventHandler>::GetInstance()->OnEvent(event, frameTime); 311c29fa5a6Sopenharmony_ci } 312c29fa5a6Sopenharmony_ci ))) { 313c29fa5a6Sopenharmony_ci MMI_HILOGE("Libinput init, bind failed"); 314c29fa5a6Sopenharmony_ci return false; 315c29fa5a6Sopenharmony_ci } 316c29fa5a6Sopenharmony_ci auto inputFds = libinputAdapter_.GetInputFds(); 317c29fa5a6Sopenharmony_ci for (auto fd : inputFds) { 318c29fa5a6Sopenharmony_ci auto ret = AddEpoll(EPOLL_EVENT_INPUT, fd); 319c29fa5a6Sopenharmony_ci if (ret < 0) { 320c29fa5a6Sopenharmony_ci MMI_HILOGE("AddEpoll error ret:%{public}d", ret); 321c29fa5a6Sopenharmony_ci EpollClose(); 322c29fa5a6Sopenharmony_ci return false; 323c29fa5a6Sopenharmony_ci } 324c29fa5a6Sopenharmony_ci MMI_HILOGD("AddEpoll, epollfd:%{public}d, fd:%{public}d", mmiFd_, fd); 325c29fa5a6Sopenharmony_ci } 326c29fa5a6Sopenharmony_ci return true; 327c29fa5a6Sopenharmony_ci} 328c29fa5a6Sopenharmony_ci 329c29fa5a6Sopenharmony_cibool MMIService::InitService() 330c29fa5a6Sopenharmony_ci{ 331c29fa5a6Sopenharmony_ci MMI_HILOGD("Server msg handler Init"); 332c29fa5a6Sopenharmony_ci sMsgHandler_.Init(*this); 333c29fa5a6Sopenharmony_ci if (state_ != ServiceRunningState::STATE_NOT_START) { 334c29fa5a6Sopenharmony_ci MMI_HILOGE("Service running status is not enabled"); 335c29fa5a6Sopenharmony_ci return false; 336c29fa5a6Sopenharmony_ci } 337c29fa5a6Sopenharmony_ci if (EpollCreate(MAX_EVENT_SIZE) < 0) { 338c29fa5a6Sopenharmony_ci MMI_HILOGE("Create epoll failed"); 339c29fa5a6Sopenharmony_ci return false; 340c29fa5a6Sopenharmony_ci } 341c29fa5a6Sopenharmony_ci auto ret = AddEpoll(EPOLL_EVENT_SOCKET, epollFd_); 342c29fa5a6Sopenharmony_ci if (ret < 0) { 343c29fa5a6Sopenharmony_ci MMI_HILOGE("AddEpoll error ret:%{public}d", ret); 344c29fa5a6Sopenharmony_ci EpollClose(); 345c29fa5a6Sopenharmony_ci return false; 346c29fa5a6Sopenharmony_ci } 347c29fa5a6Sopenharmony_ci state_ = ServiceRunningState::STATE_RUNNING; 348c29fa5a6Sopenharmony_ci if (!(Publish(this))) { 349c29fa5a6Sopenharmony_ci state_ = ServiceRunningState::STATE_NOT_START; 350c29fa5a6Sopenharmony_ci MMI_HILOGE("Service initialization failed"); 351c29fa5a6Sopenharmony_ci EpollClose(); 352c29fa5a6Sopenharmony_ci return false; 353c29fa5a6Sopenharmony_ci } 354c29fa5a6Sopenharmony_ci MMI_HILOGI("AddEpoll, epollfd:%{public}d, fd:%{public}d", mmiFd_, epollFd_); 355c29fa5a6Sopenharmony_ci return true; 356c29fa5a6Sopenharmony_ci} 357c29fa5a6Sopenharmony_ci 358c29fa5a6Sopenharmony_cibool MMIService::InitDelegateTasks() 359c29fa5a6Sopenharmony_ci{ 360c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 361c29fa5a6Sopenharmony_ci if (!delegateTasks_.Init()) { 362c29fa5a6Sopenharmony_ci MMI_HILOGE("The delegate task init failed"); 363c29fa5a6Sopenharmony_ci return false; 364c29fa5a6Sopenharmony_ci } 365c29fa5a6Sopenharmony_ci auto ret = AddEpoll(EPOLL_EVENT_ETASK, delegateTasks_.GetReadFd()); 366c29fa5a6Sopenharmony_ci if (ret < 0) { 367c29fa5a6Sopenharmony_ci MMI_HILOGE("AddEpoll error ret:%{public}d", ret); 368c29fa5a6Sopenharmony_ci EpollClose(); 369c29fa5a6Sopenharmony_ci return false; 370c29fa5a6Sopenharmony_ci } 371c29fa5a6Sopenharmony_ci std::function<int32_t(DTaskCallback)> fun = [this](DTaskCallback cb) -> int32_t { 372c29fa5a6Sopenharmony_ci return delegateTasks_.PostSyncTask(cb); 373c29fa5a6Sopenharmony_ci }; 374c29fa5a6Sopenharmony_ci delegateInterface_ = std::make_shared<DelegateInterface>(fun); 375c29fa5a6Sopenharmony_ci delegateInterface_->Init(); 376c29fa5a6Sopenharmony_ci MMI_HILOGI("AddEpoll, epollfd:%{public}d, fd:%{public}d", mmiFd_, delegateTasks_.GetReadFd()); 377c29fa5a6Sopenharmony_ci return true; 378c29fa5a6Sopenharmony_ci} 379c29fa5a6Sopenharmony_ci__attribute__((no_sanitize("cfi"))) 380c29fa5a6Sopenharmony_ciint32_t MMIService::Init() 381c29fa5a6Sopenharmony_ci{ 382c29fa5a6Sopenharmony_ci CheckDefine(); 383c29fa5a6Sopenharmony_ci MMI_HILOGD("WindowsManager Init"); 384c29fa5a6Sopenharmony_ci WIN_MGR->Init(*this); 385c29fa5a6Sopenharmony_ci MMI_HILOGD("NapProcess Init"); 386c29fa5a6Sopenharmony_ci NapProcess::GetInstance()->Init(*this); 387c29fa5a6Sopenharmony_ci MMI_HILOGD("ANRManager Init"); 388c29fa5a6Sopenharmony_ci ANRMgr->Init(*this); 389c29fa5a6Sopenharmony_ci MMI_HILOGI("PointerDrawingManager Init"); 390c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 391c29fa5a6Sopenharmony_ci if (!IPointerDrawingManager::GetInstance()->Init()) { 392c29fa5a6Sopenharmony_ci MMI_HILOGE("Pointer draw init failed"); 393c29fa5a6Sopenharmony_ci return POINTER_DRAW_INIT_FAIL; 394c29fa5a6Sopenharmony_ci } 395c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 396c29fa5a6Sopenharmony_ci mmiFd_ = EpollCreate(MAX_EVENT_SIZE); 397c29fa5a6Sopenharmony_ci if (mmiFd_ < 0) { 398c29fa5a6Sopenharmony_ci MMI_HILOGE("Create epoll failed"); 399c29fa5a6Sopenharmony_ci return EPOLL_CREATE_FAIL; 400c29fa5a6Sopenharmony_ci } 401c29fa5a6Sopenharmony_ci MMI_HILOGD("Input msg handler init"); 402c29fa5a6Sopenharmony_ci InputHandler->Init(*this); 403c29fa5a6Sopenharmony_ci MMI_HILOGD("Libinput service init"); 404c29fa5a6Sopenharmony_ci if (!InitLibinputService()) { 405c29fa5a6Sopenharmony_ci MMI_HILOGE("Libinput init failed"); 406c29fa5a6Sopenharmony_ci return LIBINPUT_INIT_FAIL; 407c29fa5a6Sopenharmony_ci } 408c29fa5a6Sopenharmony_ci MMI_HILOGD("Init DelegateTasks init"); 409c29fa5a6Sopenharmony_ci if (!InitDelegateTasks()) { 410c29fa5a6Sopenharmony_ci MMI_HILOGE("Delegate tasks init failed"); 411c29fa5a6Sopenharmony_ci return ETASKS_INIT_FAIL; 412c29fa5a6Sopenharmony_ci } 413c29fa5a6Sopenharmony_ci SetRecvFun([this] (SessionPtr sess, NetPacket& pkt) {sMsgHandler_.OnMsgHandler(sess, pkt);}); 414c29fa5a6Sopenharmony_ci KeyMapMgr->GetConfigKeyValue("default_keymap", KeyMapMgr->GetDefaultKeyId()); 415c29fa5a6Sopenharmony_ci OHOS::system::SetParameter(INPUT_POINTER_DEVICES, "false"); 416c29fa5a6Sopenharmony_ci if (!InitService()) { 417c29fa5a6Sopenharmony_ci MMI_HILOGE("Saservice init failed"); 418c29fa5a6Sopenharmony_ci return SASERVICE_INIT_FAIL; 419c29fa5a6Sopenharmony_ci } 420c29fa5a6Sopenharmony_ci MMI_HILOGI("Set para input.pointer.device false"); 421c29fa5a6Sopenharmony_ci return RET_OK; 422c29fa5a6Sopenharmony_ci} 423c29fa5a6Sopenharmony_ci 424c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_VKEYBOARD 425c29fa5a6Sopenharmony_cibool IsEightFingersDown(int32_t pointerId, int32_t pointerAction) 426c29fa5a6Sopenharmony_ci{ 427c29fa5a6Sopenharmony_ci if (pointerAction == MMI::PointerEvent::POINTER_ACTION_UP) { 428c29fa5a6Sopenharmony_ci std::vector<int32_t>::iterator ite = std::find(g_VKeyDownSet.begin(), g_VKeyDownSet.end(), pointerId); 429c29fa5a6Sopenharmony_ci if (ite != g_VKeyDownSet.end()) { 430c29fa5a6Sopenharmony_ci g_VKeyDownSet.erase(ite); 431c29fa5a6Sopenharmony_ci } 432c29fa5a6Sopenharmony_ci } else if (pointerAction == MMI::PointerEvent::POINTER_ACTION_DOWN) { 433c29fa5a6Sopenharmony_ci if (std::find(g_VKeyDownSet.begin(), g_VKeyDownSet.end(), pointerId) == g_VKeyDownSet.end()) { 434c29fa5a6Sopenharmony_ci g_VKeyDownSet.push_back(pointerId); 435c29fa5a6Sopenharmony_ci } 436c29fa5a6Sopenharmony_ci } 437c29fa5a6Sopenharmony_ci const int32_t totalFingerNum = 8; 438c29fa5a6Sopenharmony_ci return g_VKeyDownSet.size() == totalFingerNum; 439c29fa5a6Sopenharmony_ci} 440c29fa5a6Sopenharmony_ci 441c29fa5a6Sopenharmony_civoid HandleKeyActionHelper(int32_t action, int32_t keyCode, OHOS::MMI::KeyEvent::KeyItem &item) 442c29fa5a6Sopenharmony_ci{ 443c29fa5a6Sopenharmony_ci if (action == OHOS::MMI::KeyEvent::KEY_ACTION_DOWN) { 444c29fa5a6Sopenharmony_ci g_VKeySharedKeyEvent->AddPressedKeyItems(item); 445c29fa5a6Sopenharmony_ci } 446c29fa5a6Sopenharmony_ci if (action == OHOS::MMI::KeyEvent::KEY_ACTION_UP) { 447c29fa5a6Sopenharmony_ci std::optional<OHOS::MMI::KeyEvent::KeyItem> pressedKeyItem = g_VKeySharedKeyEvent->GetKeyItem(keyCode); 448c29fa5a6Sopenharmony_ci if (pressedKeyItem) { 449c29fa5a6Sopenharmony_ci item.SetDownTime(pressedKeyItem->GetDownTime()); 450c29fa5a6Sopenharmony_ci } else { 451c29fa5a6Sopenharmony_ci MMI_HILOGW("VKeyboard find pressed key failed"); 452c29fa5a6Sopenharmony_ci } 453c29fa5a6Sopenharmony_ci g_VKeySharedKeyEvent->RemoveReleasedKeyItems(item); 454c29fa5a6Sopenharmony_ci g_VKeySharedKeyEvent->AddPressedKeyItems(item); 455c29fa5a6Sopenharmony_ci } 456c29fa5a6Sopenharmony_ci} 457c29fa5a6Sopenharmony_ci 458c29fa5a6Sopenharmony_ci// Ref: oh_input_manager. 459c29fa5a6Sopenharmony_ci// Receive: action and keyCode. 460c29fa5a6Sopenharmony_ci// send out modified global g_VKeySharedKeyEvent to the event normalizer. 461c29fa5a6Sopenharmony_ciint32_t HandleKeyInjectEventHelper(std::shared_ptr<EventNormalizeHandler> eventNormalizeHandler, 462c29fa5a6Sopenharmony_ci int32_t action, int32_t keyCode) 463c29fa5a6Sopenharmony_ci{ 464c29fa5a6Sopenharmony_ci MMI_HILOGI("VKeyboard HandleKeyInjectEventHelper, injectEvent"); 465c29fa5a6Sopenharmony_ci if (keyCode < 0) { 466c29fa5a6Sopenharmony_ci MMI_HILOGE("VKeyboard keyCode is less 0, can not process"); 467c29fa5a6Sopenharmony_ci return COMMON_PARAMETER_ERROR; 468c29fa5a6Sopenharmony_ci } 469c29fa5a6Sopenharmony_ci CHKPR(g_VKeySharedKeyEvent, ERROR_NULL_POINTER); 470c29fa5a6Sopenharmony_ci g_VKeySharedKeyEvent->ClearFlag(); 471c29fa5a6Sopenharmony_ci if (g_VKeySharedKeyEvent->GetAction() == OHOS::MMI::KeyEvent::KEY_ACTION_UP) { 472c29fa5a6Sopenharmony_ci std::optional<OHOS::MMI::KeyEvent::KeyItem> preUpKeyItem = g_VKeySharedKeyEvent->GetKeyItem(); 473c29fa5a6Sopenharmony_ci if (preUpKeyItem) { 474c29fa5a6Sopenharmony_ci g_VKeySharedKeyEvent->RemoveReleasedKeyItems(*preUpKeyItem); 475c29fa5a6Sopenharmony_ci } else { 476c29fa5a6Sopenharmony_ci MMI_HILOGE("VKeyboard the preUpKeyItem is nullopt"); 477c29fa5a6Sopenharmony_ci } 478c29fa5a6Sopenharmony_ci } 479c29fa5a6Sopenharmony_ci int64_t time = OHOS::MMI::GetSysClockTime(); 480c29fa5a6Sopenharmony_ci g_VKeySharedKeyEvent->SetActionTime(time); 481c29fa5a6Sopenharmony_ci g_VKeySharedKeyEvent->SetRepeat(true); 482c29fa5a6Sopenharmony_ci g_VKeySharedKeyEvent->SetKeyCode(keyCode); 483c29fa5a6Sopenharmony_ci bool isKeyPressed = false; 484c29fa5a6Sopenharmony_ci if (action == OHOS::MMI::KeyEvent::KEY_ACTION_DOWN) { 485c29fa5a6Sopenharmony_ci g_VKeySharedKeyEvent->SetAction(OHOS::MMI::KeyEvent::KEY_ACTION_DOWN); 486c29fa5a6Sopenharmony_ci g_VKeySharedKeyEvent->SetKeyAction(OHOS::MMI::KeyEvent::KEY_ACTION_DOWN); 487c29fa5a6Sopenharmony_ci isKeyPressed = true; 488c29fa5a6Sopenharmony_ci } else if (action == OHOS::MMI::KeyEvent::KEY_ACTION_UP) { 489c29fa5a6Sopenharmony_ci g_VKeySharedKeyEvent->SetAction(OHOS::MMI::KeyEvent::KEY_ACTION_UP); 490c29fa5a6Sopenharmony_ci g_VKeySharedKeyEvent->SetKeyAction(OHOS::MMI::KeyEvent::KEY_ACTION_UP); 491c29fa5a6Sopenharmony_ci isKeyPressed = false; 492c29fa5a6Sopenharmony_ci } 493c29fa5a6Sopenharmony_ci OHOS::MMI::KeyEvent::KeyItem item; 494c29fa5a6Sopenharmony_ci item.SetDownTime(time); 495c29fa5a6Sopenharmony_ci item.SetKeyCode(keyCode); 496c29fa5a6Sopenharmony_ci item.SetPressed(isKeyPressed); 497c29fa5a6Sopenharmony_ci HandleKeyActionHelper(action, keyCode, item); 498c29fa5a6Sopenharmony_ci g_VKeySharedKeyEvent->AddFlag(OHOS::MMI::InputEvent::EVENT_FLAG_SIMULATE); 499c29fa5a6Sopenharmony_ci 500c29fa5a6Sopenharmony_ci eventNormalizeHandler->HandleKeyEvent(g_VKeySharedKeyEvent); 501c29fa5a6Sopenharmony_ci return RET_OK; 502c29fa5a6Sopenharmony_ci} 503c29fa5a6Sopenharmony_ci 504c29fa5a6Sopenharmony_ci// @brief Send out combination key press. 505c29fa5a6Sopenharmony_ci// Note that toggleBtn may contain more than one modifiers, like Ctrl+Shift. 506c29fa5a6Sopenharmony_ciint32_t SendCombinationKeyPress(std::vector<int32_t>& toggleKeyCodes, int32_t triggerKeyCode) 507c29fa5a6Sopenharmony_ci{ 508c29fa5a6Sopenharmony_ci std::shared_ptr<EventNormalizeHandler> eventNormalizeHandler = InputHandler->GetEventNormalizeHandler(); 509c29fa5a6Sopenharmony_ci CHKPR(eventNormalizeHandler, ERROR_NULL_POINTER); 510c29fa5a6Sopenharmony_ci // Trigger all modifier(s), if not done already. 511c29fa5a6Sopenharmony_ci for (auto& toggleCode: toggleKeyCodes) { 512c29fa5a6Sopenharmony_ci if (g_VKeyModifiersDownSet.count(toggleCode) == 0) { 513c29fa5a6Sopenharmony_ci // Not exist, then trigger the modifier. 514c29fa5a6Sopenharmony_ci HandleKeyInjectEventHelper(eventNormalizeHandler, OHOS::MMI::KeyEvent::KEY_ACTION_DOWN, 515c29fa5a6Sopenharmony_ci toggleCode); 516c29fa5a6Sopenharmony_ci g_VKeyModifiersDownSet.insert(toggleCode); 517c29fa5a6Sopenharmony_ci } 518c29fa5a6Sopenharmony_ci } 519c29fa5a6Sopenharmony_ci // Trigger key. 520c29fa5a6Sopenharmony_ci HandleKeyInjectEventHelper(eventNormalizeHandler, OHOS::MMI::KeyEvent::KEY_ACTION_DOWN, 521c29fa5a6Sopenharmony_ci triggerKeyCode); 522c29fa5a6Sopenharmony_ci // Release key. 523c29fa5a6Sopenharmony_ci HandleKeyInjectEventHelper(eventNormalizeHandler, OHOS::MMI::KeyEvent::KEY_ACTION_UP, 524c29fa5a6Sopenharmony_ci triggerKeyCode); 525c29fa5a6Sopenharmony_ci return RET_OK; 526c29fa5a6Sopenharmony_ci} 527c29fa5a6Sopenharmony_ci 528c29fa5a6Sopenharmony_ci// @brief Release (remove from key event handler) and reset visual state on UI. 529c29fa5a6Sopenharmony_ciint32_t SendKeyRelease(int32_t keyCode) 530c29fa5a6Sopenharmony_ci{ 531c29fa5a6Sopenharmony_ci std::shared_ptr<EventNormalizeHandler> eventNormalizeHandler = InputHandler->GetEventNormalizeHandler(); 532c29fa5a6Sopenharmony_ci CHKPR(eventNormalizeHandler, ERROR_NULL_POINTER); 533c29fa5a6Sopenharmony_ci // Release key. 534c29fa5a6Sopenharmony_ci HandleKeyInjectEventHelper(eventNormalizeHandler, OHOS::MMI::KeyEvent::KEY_ACTION_UP, 535c29fa5a6Sopenharmony_ci keyCode); 536c29fa5a6Sopenharmony_ci g_VKeyModifiersDownSet.erase(keyCode); 537c29fa5a6Sopenharmony_ci return RET_OK; 538c29fa5a6Sopenharmony_ci} 539c29fa5a6Sopenharmony_ci 540c29fa5a6Sopenharmony_ci// @brief Print (inject key code) and reset visual state on UI. 541c29fa5a6Sopenharmony_ciint32_t SendKeyPress(int32_t keyCode) 542c29fa5a6Sopenharmony_ci{ 543c29fa5a6Sopenharmony_ci std::shared_ptr<EventNormalizeHandler> eventNormalizeHandler = InputHandler->GetEventNormalizeHandler(); 544c29fa5a6Sopenharmony_ci CHKPR(eventNormalizeHandler, ERROR_NULL_POINTER); 545c29fa5a6Sopenharmony_ci // Trigger key. 546c29fa5a6Sopenharmony_ci HandleKeyInjectEventHelper(eventNormalizeHandler, OHOS::MMI::KeyEvent::KEY_ACTION_DOWN, 547c29fa5a6Sopenharmony_ci keyCode); 548c29fa5a6Sopenharmony_ci // Release key. 549c29fa5a6Sopenharmony_ci HandleKeyInjectEventHelper(eventNormalizeHandler, OHOS::MMI::KeyEvent::KEY_ACTION_UP, 550c29fa5a6Sopenharmony_ci keyCode); 551c29fa5a6Sopenharmony_ci g_VKeyModifiersDownSet.erase(keyCode); 552c29fa5a6Sopenharmony_ci return RET_OK; 553c29fa5a6Sopenharmony_ci} 554c29fa5a6Sopenharmony_ci 555c29fa5a6Sopenharmony_ci// @brief Only toggle visual state on UI without changing key event handler. 556c29fa5a6Sopenharmony_ciint32_t ToggleKeyVisualState(std::string& keyName, int32_t keyCode, bool visualPressed) 557c29fa5a6Sopenharmony_ci{ 558c29fa5a6Sopenharmony_ci std::shared_ptr<EventNormalizeHandler> eventNormalizeHandler = InputHandler->GetEventNormalizeHandler(); 559c29fa5a6Sopenharmony_ci CHKPR(eventNormalizeHandler, ERROR_NULL_POINTER); 560c29fa5a6Sopenharmony_ci g_VKeySharedUIKeyEvent->SetKeyAction(KeyEvent::KEY_ACTION_UNKNOWN); 561c29fa5a6Sopenharmony_ci // If this shared event's previous action is up, it means 562c29fa5a6Sopenharmony_ci // there is a key up event left in the pressed seq. remove it now. 563c29fa5a6Sopenharmony_ci if (g_VKeySharedUIKeyEvent->GetVKeyboardAction() == KeyEvent::VKeyboardAction::VKEY_UP) { 564c29fa5a6Sopenharmony_ci std::optional<OHOS::MMI::KeyEvent::KeyItem> preUpKeyItem = g_VKeySharedUIKeyEvent->GetKeyItem(); 565c29fa5a6Sopenharmony_ci if (preUpKeyItem) { 566c29fa5a6Sopenharmony_ci g_VKeySharedUIKeyEvent->RemoveReleasedKeyItems(*preUpKeyItem); 567c29fa5a6Sopenharmony_ci } else { 568c29fa5a6Sopenharmony_ci MMI_HILOGE("VKeyboard the preUpKeyItem is nullopt"); 569c29fa5a6Sopenharmony_ci } 570c29fa5a6Sopenharmony_ci } 571c29fa5a6Sopenharmony_ci int64_t time = OHOS::MMI::GetSysClockTime(); 572c29fa5a6Sopenharmony_ci g_VKeySharedUIKeyEvent->SetActionTime(time); 573c29fa5a6Sopenharmony_ci 574c29fa5a6Sopenharmony_ci KeyEvent::KeyItem keyItem; 575c29fa5a6Sopenharmony_ci keyItem.SetDownTime(time); 576c29fa5a6Sopenharmony_ci keyItem.SetKeyCode(keyCode); 577c29fa5a6Sopenharmony_ci keyItem.SetPressed(visualPressed); 578c29fa5a6Sopenharmony_ci 579c29fa5a6Sopenharmony_ci g_VKeySharedUIKeyEvent->SetKeyCode(keyCode); 580c29fa5a6Sopenharmony_ci g_VKeySharedUIKeyEvent->SetKeyName(keyName); 581c29fa5a6Sopenharmony_ci 582c29fa5a6Sopenharmony_ci if (visualPressed) { 583c29fa5a6Sopenharmony_ci g_VKeySharedUIKeyEvent->SetVKeyboardAction(KeyEvent::VKeyboardAction::VKEY_DOWN); 584c29fa5a6Sopenharmony_ci g_VKeySharedUIKeyEvent->AddPressedKeyItems(keyItem); 585c29fa5a6Sopenharmony_ci } else { 586c29fa5a6Sopenharmony_ci g_VKeySharedUIKeyEvent->SetVKeyboardAction(KeyEvent::VKeyboardAction::VKEY_UP); 587c29fa5a6Sopenharmony_ci // Get the correct down time from pressed keys (when it is down) 588c29fa5a6Sopenharmony_ci std::optional<OHOS::MMI::KeyEvent::KeyItem> pressedKeyItem = g_VKeySharedUIKeyEvent->GetKeyItem(keyCode); 589c29fa5a6Sopenharmony_ci if (pressedKeyItem) { 590c29fa5a6Sopenharmony_ci keyItem.SetDownTime(pressedKeyItem->GetDownTime()); 591c29fa5a6Sopenharmony_ci } else { 592c29fa5a6Sopenharmony_ci MMI_HILOGW("VKeyboard find pressed key failed"); 593c29fa5a6Sopenharmony_ci } 594c29fa5a6Sopenharmony_ci // Remove the old ones (down key item) and add the new one (up key item) 595c29fa5a6Sopenharmony_ci g_VKeySharedUIKeyEvent->RemoveReleasedKeyItems(keyItem); 596c29fa5a6Sopenharmony_ci g_VKeySharedUIKeyEvent->AddPressedKeyItems(keyItem); 597c29fa5a6Sopenharmony_ci } 598c29fa5a6Sopenharmony_ci eventNormalizeHandler->HandleKeyEvent(g_VKeySharedUIKeyEvent); 599c29fa5a6Sopenharmony_ci return RET_OK; 600c29fa5a6Sopenharmony_ci} 601c29fa5a6Sopenharmony_ci 602c29fa5a6Sopenharmony_ci// Use temporary events for vk-UI related communications. 603c29fa5a6Sopenharmony_ciint32_t SendKeyboardAction(KeyEvent::VKeyboardAction action) 604c29fa5a6Sopenharmony_ci{ 605c29fa5a6Sopenharmony_ci std::shared_ptr<EventNormalizeHandler> eventNormalizeHandler = InputHandler->GetEventNormalizeHandler(); 606c29fa5a6Sopenharmony_ci CHKPR(eventNormalizeHandler, ERROR_NULL_POINTER); 607c29fa5a6Sopenharmony_ci std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create(); 608c29fa5a6Sopenharmony_ci CHKPR(keyEvent, ERROR_NULL_POINTER); 609c29fa5a6Sopenharmony_ci int32_t keyEventId = 1234; 610c29fa5a6Sopenharmony_ci int32_t keyEventDeviceId = 99; 611c29fa5a6Sopenharmony_ci keyEvent->SetId(keyEventId); 612c29fa5a6Sopenharmony_ci keyEvent->SetDeviceId(keyEventDeviceId); 613c29fa5a6Sopenharmony_ci keyEvent->SetKeyAction(KeyEvent::KEY_ACTION_UNKNOWN); 614c29fa5a6Sopenharmony_ci keyEvent->SetVKeyboardAction(action); 615c29fa5a6Sopenharmony_ci KeyEvent::KeyItem keyItem; 616c29fa5a6Sopenharmony_ci keyEvent->AddKeyItem(keyItem); 617c29fa5a6Sopenharmony_ci eventNormalizeHandler->HandleKeyEvent(keyEvent); 618c29fa5a6Sopenharmony_ci return RET_OK; 619c29fa5a6Sopenharmony_ci} 620c29fa5a6Sopenharmony_ci 621c29fa5a6Sopenharmony_ciint32_t PointerEventHandler(std::shared_ptr<PointerEvent> pointerEvent) 622c29fa5a6Sopenharmony_ci{ 623c29fa5a6Sopenharmony_ci int32_t pointerAction = pointerEvent->GetPointerAction(); 624c29fa5a6Sopenharmony_ci if (pointerAction != MMI::PointerEvent::POINTER_ACTION_UP && 625c29fa5a6Sopenharmony_ci pointerAction != MMI::PointerEvent::POINTER_ACTION_DOWN && 626c29fa5a6Sopenharmony_ci pointerAction != MMI::PointerEvent::POINTER_ACTION_MOVE) { 627c29fa5a6Sopenharmony_ci return 0; 628c29fa5a6Sopenharmony_ci } 629c29fa5a6Sopenharmony_ci // Set touch point 630c29fa5a6Sopenharmony_ci int32_t pointerId = pointerEvent->GetPointerId(); 631c29fa5a6Sopenharmony_ci PointerEvent::PointerItem pointerItem; 632c29fa5a6Sopenharmony_ci if (!pointerEvent->GetPointerItem(pointerId, pointerItem)) { 633c29fa5a6Sopenharmony_ci MMI_HILOGE("VKeyboard can't find pointer item"); 634c29fa5a6Sopenharmony_ci return RET_ERR; 635c29fa5a6Sopenharmony_ci } 636c29fa5a6Sopenharmony_ci // Note: make sure this logic happens before the range-checking logic. 637c29fa5a6Sopenharmony_ci // Check if pointer action is not POINTER_ACTION_MOVE and 8 fingers down 638c29fa5a6Sopenharmony_ci if (pointerAction != MMI::PointerEvent::POINTER_ACTION_MOVE && IsEightFingersDown(pointerId, pointerAction)) { 639c29fa5a6Sopenharmony_ci SendKeyboardAction(KeyEvent::VKeyboardAction::ACTIVATE_KEYBOARD); 640c29fa5a6Sopenharmony_ci return RET_OK; 641c29fa5a6Sopenharmony_ci } 642c29fa5a6Sopenharmony_ci double physicalX = pointerItem.GetDisplayXPos(); 643c29fa5a6Sopenharmony_ci double physicalY = pointerItem.GetDisplayYPos(); 644c29fa5a6Sopenharmony_ci // Note: 645c29fa5a6Sopenharmony_ci // for delete gestures, it must begin from the backspace key, but stops when the finger moves out of range. 646c29fa5a6Sopenharmony_ci // for pinch gestures, we allow out-of-range gestures (e.g., for floating -> full, 647c29fa5a6Sopenharmony_ci // it's okay if the fingers are moving out of the boundary during the gestures since the kbd is very small) 648c29fa5a6Sopenharmony_ci bool insideVKeyboardArea = gaussiankeyboard_isInsideVKeyboardArea_(physicalX, physicalY); 649c29fa5a6Sopenharmony_ci bool isVkeyboardVisible = gaussiankeyboard_isVKeyboardVisible_(); 650c29fa5a6Sopenharmony_ci bool isTouchInVKeyboard = algorithm_isKeyDownInKeyboard_(pointerId); 651c29fa5a6Sopenharmony_ci // Note: during layout switch, it's possible that a continuous movement 652c29fa5a6Sopenharmony_ci // happens outside of keyboard (e.g., keyboard already switched) 653c29fa5a6Sopenharmony_ci // or happens when kbd is not visible (e.g., when the prev layout dismissed but new one hasn't shown yet). 654c29fa5a6Sopenharmony_ci // if (!isTouchInVKeyboard && (!isVkeyboardVisible || (!insideVKeyboardArea && !insideVTrackpadArea))) 655c29fa5a6Sopenharmony_ci if (!isTouchInVKeyboard && (!isVkeyboardVisible || !insideVKeyboardArea)) { 656c29fa5a6Sopenharmony_ci // no unhanded touch points AND (kbd not visible) OR (kbd visible and out of range). 657c29fa5a6Sopenharmony_ci // i.e., we still want to process the touch move outside of 658c29fa5a6Sopenharmony_ci // kbd range if at least one point is already on the kbd. 659c29fa5a6Sopenharmony_ci return RET_OK; 660c29fa5a6Sopenharmony_ci } 661c29fa5a6Sopenharmony_ci 662c29fa5a6Sopenharmony_ci TOUCHPOINT tp; 663c29fa5a6Sopenharmony_ci tp.InKeyboard = insideVKeyboardArea; 664c29fa5a6Sopenharmony_ci // When track pad is integrated the tp should be set as tp.InTrackpad = insideVTrackPadArea; 665c29fa5a6Sopenharmony_ci tp.ScreenX = physicalX; 666c29fa5a6Sopenharmony_ci tp.ScreenY = physicalY; 667c29fa5a6Sopenharmony_ci tp.TouchId = pointerId; 668c29fa5a6Sopenharmony_ci // Note: Down & Move treated as down. 669c29fa5a6Sopenharmony_ci tp.TipDown = (pointerAction != MMI::PointerEvent::POINTER_ACTION_UP); 670c29fa5a6Sopenharmony_ci 671c29fa5a6Sopenharmony_ci std::vector<pair<string, double>> sortedNegLogProb; 672c29fa5a6Sopenharmony_ci string buttonName = ""; 673c29fa5a6Sopenharmony_ci // Note: only Down will update dynamic gaussian. 674c29fa5a6Sopenharmony_ci bool updateDynamicGaussian = (pointerAction == MMI::PointerEvent::POINTER_ACTION_DOWN); 675c29fa5a6Sopenharmony_ci 676c29fa5a6Sopenharmony_ci // NOTE: we don't run MapTouchToButton for all touchpoints -- only if the touchpoints fall within the kbd range. 677c29fa5a6Sopenharmony_ci // for out-of-range points, we still continue to process potential out-of-range 678c29fa5a6Sopenharmony_ci // gestures (e.g., fingers move out of range during pinch or move up/down gesture) 679c29fa5a6Sopenharmony_ci // in such case, isTouchInVKeyboard == true means it origins from inside kbd so a cache has been found. 680c29fa5a6Sopenharmony_ci if (insideVKeyboardArea || isTouchInVKeyboard) { 681c29fa5a6Sopenharmony_ci // Need to add valid time here. 682c29fa5a6Sopenharmony_ci bayesianengine_mapTouchToButton_(tp.ScreenX, tp.ScreenY, tp.TouchId, tp.TipDown, buttonName, 683c29fa5a6Sopenharmony_ci 0, updateDynamicGaussian, sortedNegLogProb); 684c29fa5a6Sopenharmony_ci tp.ButtonName = buttonName; 685c29fa5a6Sopenharmony_ci if (!tp.ButtonName.empty()) { 686c29fa5a6Sopenharmony_ci MMI_HILOGI("VKeyboard touch name %{private}s", buttonName.c_str()); 687c29fa5a6Sopenharmony_ci } else { 688c29fa5a6Sopenharmony_ci MMI_HILOGE("VKeyboard button name null"); 689c29fa5a6Sopenharmony_ci return RET_ERR; 690c29fa5a6Sopenharmony_ci } 691c29fa5a6Sopenharmony_ci } 692c29fa5a6Sopenharmony_ci if (pointerAction == MMI::PointerEvent::POINTER_ACTION_DOWN) { 693c29fa5a6Sopenharmony_ci algorithm_keydown_(tp.ScreenX, tp.ScreenY, tp.TouchId, tp.TipDown, tp.ButtonName); 694c29fa5a6Sopenharmony_ci if (insideVKeyboardArea) { 695c29fa5a6Sopenharmony_ci int32_t keyCode = gaussiankeyboard_getKeyCodeByKeyName_(buttonName); 696c29fa5a6Sopenharmony_ci if (keyCode >= 0) { 697c29fa5a6Sopenharmony_ci ToggleKeyVisualState(buttonName, keyCode, true); 698c29fa5a6Sopenharmony_ci } else { 699c29fa5a6Sopenharmony_ci MMI_HILOGW("VKeyboard PointerEventHandler, key code not found for %{private}s", buttonName.c_str()); 700c29fa5a6Sopenharmony_ci } 701c29fa5a6Sopenharmony_ci } 702c29fa5a6Sopenharmony_ci } else if (pointerAction == MMI::PointerEvent::POINTER_ACTION_UP) { 703c29fa5a6Sopenharmony_ci algorithm_keyup_(tp.ScreenX, tp.ScreenY, tp.TouchId, tp.TipDown, tp.ButtonName); 704c29fa5a6Sopenharmony_ci int32_t keyCode = gaussiankeyboard_getKeyCodeByKeyName_(buttonName); 705c29fa5a6Sopenharmony_ci if (keyCode >= 0) { 706c29fa5a6Sopenharmony_ci SendKeyRelease(keyCode); 707c29fa5a6Sopenharmony_ci ToggleKeyVisualState(buttonName, keyCode, false); 708c29fa5a6Sopenharmony_ci } else { 709c29fa5a6Sopenharmony_ci MMI_HILOGW("VKeyboard PointerEventHandler, key code not found for %{private}s", buttonName.c_str()); 710c29fa5a6Sopenharmony_ci } 711c29fa5a6Sopenharmony_ci } else { 712c29fa5a6Sopenharmony_ci // New touch move logic: turn to touch down to support gestures. 713c29fa5a6Sopenharmony_ci algorithm_keydown_(tp.ScreenX, tp.ScreenY, tp.TouchId, tp.TipDown, tp.ButtonName); 714c29fa5a6Sopenharmony_ci } 715c29fa5a6Sopenharmony_ci 716c29fa5a6Sopenharmony_ci std::vector<int32_t> toggleKeyCodes; 717c29fa5a6Sopenharmony_ci 718c29fa5a6Sopenharmony_ci while (true) { 719c29fa5a6Sopenharmony_ci string buttonName; 720c29fa5a6Sopenharmony_ci string toggleButtonName; 721c29fa5a6Sopenharmony_ci int buttonMode; 722c29fa5a6Sopenharmony_ci string restList; 723c29fa5a6Sopenharmony_ci StateMachineMessageType type = (StateMachineMessageType)statemachineMessageQueue_getMessage_( 724c29fa5a6Sopenharmony_ci buttonName, toggleButtonName, buttonMode, restList); 725c29fa5a6Sopenharmony_ci if (type == StateMachineMessageType::NoMessage) { 726c29fa5a6Sopenharmony_ci break; 727c29fa5a6Sopenharmony_ci } 728c29fa5a6Sopenharmony_ci switch (type) { 729c29fa5a6Sopenharmony_ci case StateMachineMessageType::KeyPressed: { 730c29fa5a6Sopenharmony_ci // See if this key can be directly printed or not. 731c29fa5a6Sopenharmony_ci bool useShift = false; 732c29fa5a6Sopenharmony_ci int32_t code = gaussiankeyboard_getKeyCodeByKeyNameAndShift_(buttonName, useShift); 733c29fa5a6Sopenharmony_ci if (code >= 0) { 734c29fa5a6Sopenharmony_ci if (!useShift) { 735c29fa5a6Sopenharmony_ci SendKeyPress(code); 736c29fa5a6Sopenharmony_ci } else { 737c29fa5a6Sopenharmony_ci toggleKeyCodes.clear(); 738c29fa5a6Sopenharmony_ci toggleKeyCodes.push_back(KeyEvent::KEYCODE_SHIFT_LEFT); 739c29fa5a6Sopenharmony_ci SendCombinationKeyPress(toggleKeyCodes, code); 740c29fa5a6Sopenharmony_ci // If this key is triggered with use shift ON, then it shall be resumed after use. 741c29fa5a6Sopenharmony_ci SendKeyRelease(KeyEvent::KEYCODE_SHIFT_LEFT); 742c29fa5a6Sopenharmony_ci } 743c29fa5a6Sopenharmony_ci } else { 744c29fa5a6Sopenharmony_ci MMI_HILOGW("VKeyboard key code not found."); 745c29fa5a6Sopenharmony_ci } 746c29fa5a6Sopenharmony_ci break; 747c29fa5a6Sopenharmony_ci } 748c29fa5a6Sopenharmony_ci case StateMachineMessageType::ButtonSound: { 749c29fa5a6Sopenharmony_ci break; 750c29fa5a6Sopenharmony_ci } 751c29fa5a6Sopenharmony_ci case StateMachineMessageType::ResetButtonColor: { 752c29fa5a6Sopenharmony_ci SendKeyboardAction(KeyEvent::VKeyboardAction::RESET_BUTTON_COLOR); 753c29fa5a6Sopenharmony_ci break; 754c29fa5a6Sopenharmony_ci } 755c29fa5a6Sopenharmony_ci case StateMachineMessageType::CombinationKeyPressed: { 756c29fa5a6Sopenharmony_ci toggleKeyCodes.clear(); 757c29fa5a6Sopenharmony_ci std::string remainStr = toggleButtonName; 758c29fa5a6Sopenharmony_ci int32_t toggleCode(-1), triggerCode(-1); 759c29fa5a6Sopenharmony_ci while (remainStr.find(';') != std::string::npos) { 760c29fa5a6Sopenharmony_ci // still has more than one 761c29fa5a6Sopenharmony_ci size_t pos = remainStr.find(';'); 762c29fa5a6Sopenharmony_ci toggleCode = gaussiankeyboard_getKeyCodeByKeyName_(remainStr.substr(0, pos)); 763c29fa5a6Sopenharmony_ci if (toggleCode >= 0) { 764c29fa5a6Sopenharmony_ci toggleKeyCodes.push_back(toggleCode); 765c29fa5a6Sopenharmony_ci } 766c29fa5a6Sopenharmony_ci remainStr = remainStr.substr(pos + 1); 767c29fa5a6Sopenharmony_ci } 768c29fa5a6Sopenharmony_ci // Add the last piece. 769c29fa5a6Sopenharmony_ci toggleCode = gaussiankeyboard_getKeyCodeByKeyName_(remainStr); 770c29fa5a6Sopenharmony_ci if (toggleCode >= 0) { 771c29fa5a6Sopenharmony_ci toggleKeyCodes.push_back(toggleCode); 772c29fa5a6Sopenharmony_ci } 773c29fa5a6Sopenharmony_ci // Trigger code: 774c29fa5a6Sopenharmony_ci triggerCode = gaussiankeyboard_getKeyCodeByKeyName_(buttonName); 775c29fa5a6Sopenharmony_ci if (toggleKeyCodes.size() > 0 && triggerCode >= 0) { 776c29fa5a6Sopenharmony_ci // valid toggle key code(s) and trigger key code 777c29fa5a6Sopenharmony_ci SendCombinationKeyPress(toggleKeyCodes, triggerCode); 778c29fa5a6Sopenharmony_ci } else { 779c29fa5a6Sopenharmony_ci MMI_HILOGW("VKeyboard combination keycodes not found for %{private}s + %{private}s", 780c29fa5a6Sopenharmony_ci toggleButtonName.c_str(), buttonName.c_str()); 781c29fa5a6Sopenharmony_ci } 782c29fa5a6Sopenharmony_ci break; 783c29fa5a6Sopenharmony_ci } 784c29fa5a6Sopenharmony_ci case StateMachineMessageType::BackSwipeLeft: { 785c29fa5a6Sopenharmony_ci // Send Shift+Left. 786c29fa5a6Sopenharmony_ci toggleKeyCodes.clear(); 787c29fa5a6Sopenharmony_ci toggleKeyCodes.push_back(KeyEvent::KEYCODE_SHIFT_LEFT); 788c29fa5a6Sopenharmony_ci SendCombinationKeyPress(toggleKeyCodes, KeyEvent::KEYCODE_DPAD_LEFT); 789c29fa5a6Sopenharmony_ci break; 790c29fa5a6Sopenharmony_ci } 791c29fa5a6Sopenharmony_ci case StateMachineMessageType::BackSwipeRight: { 792c29fa5a6Sopenharmony_ci // Send Shift+Right 793c29fa5a6Sopenharmony_ci toggleKeyCodes.clear(); 794c29fa5a6Sopenharmony_ci toggleKeyCodes.push_back(KeyEvent::KEYCODE_SHIFT_LEFT); 795c29fa5a6Sopenharmony_ci SendCombinationKeyPress(toggleKeyCodes, KeyEvent::KEYCODE_DPAD_RIGHT); 796c29fa5a6Sopenharmony_ci break; 797c29fa5a6Sopenharmony_ci } 798c29fa5a6Sopenharmony_ci case StateMachineMessageType::BackspaceSwipeRelease: { 799c29fa5a6Sopenharmony_ci SendKeyRelease(KeyEvent::KEYCODE_SHIFT_LEFT); 800c29fa5a6Sopenharmony_ci int swipeCharCounter(buttonMode); 801c29fa5a6Sopenharmony_ci if (swipeCharCounter < 0) { 802c29fa5a6Sopenharmony_ci // Backspace character 803c29fa5a6Sopenharmony_ci SendKeyPress(KeyEvent::KEYCODE_DEL); 804c29fa5a6Sopenharmony_ci } else if (swipeCharCounter > 0) { 805c29fa5a6Sopenharmony_ci // del character. (note: actually there is no difference when the text is selected) 806c29fa5a6Sopenharmony_ci SendKeyPress(KeyEvent::KEYCODE_FORWARD_DEL); 807c29fa5a6Sopenharmony_ci } else { 808c29fa5a6Sopenharmony_ci // No char deleted. just release the shift if it was pressed down before. 809c29fa5a6Sopenharmony_ci MMI_HILOGI("VKeyboard SendSwipeDeleteMsg, swipeCharCounter = %{private}d. Release Shift.", 810c29fa5a6Sopenharmony_ci swipeCharCounter); 811c29fa5a6Sopenharmony_ci } 812c29fa5a6Sopenharmony_ci break; 813c29fa5a6Sopenharmony_ci } 814c29fa5a6Sopenharmony_ci case StateMachineMessageType::SwitchLayout: { 815c29fa5a6Sopenharmony_ci int gestureId = buttonMode; 816c29fa5a6Sopenharmony_ci auto gestureType = static_cast<VGestureMode>(gestureId); 817c29fa5a6Sopenharmony_ci // Note: this LayoutAction is used within backend algorithm, 818c29fa5a6Sopenharmony_ci // which may be different from the protocol with front end (VKeyboardAction) 819c29fa5a6Sopenharmony_ci switch (gestureType) { 820c29fa5a6Sopenharmony_ci case VGestureMode::TWO_HANDS_UP: { 821c29fa5a6Sopenharmony_ci MMI_HILOGI("VKeyboard 8-finger move up to enable trackpad (not linked yet)."); 822c29fa5a6Sopenharmony_ci // If we are sure that only full keyboard is kept, then we no longer need this move up/down gesture. 823c29fa5a6Sopenharmony_ci break; 824c29fa5a6Sopenharmony_ci } 825c29fa5a6Sopenharmony_ci case VGestureMode::TWO_HANDS_DOWN: { 826c29fa5a6Sopenharmony_ci MMI_HILOGI("VKeyboard 8-finger move down to disable trackpad (not linked yet)."); 827c29fa5a6Sopenharmony_ci // If we are sure that only full keyboard is kept, then we no longer need this move up/down gesture. 828c29fa5a6Sopenharmony_ci break; 829c29fa5a6Sopenharmony_ci } 830c29fa5a6Sopenharmony_ci case VGestureMode::TWO_HANDS_INWARDS: { 831c29fa5a6Sopenharmony_ci MMI_HILOGI("VKeyboard 2-finger move inwards to switch to floating kbd."); 832c29fa5a6Sopenharmony_ci SendKeyboardAction(KeyEvent::VKeyboardAction::TWO_FINGERS_IN); 833c29fa5a6Sopenharmony_ci break; 834c29fa5a6Sopenharmony_ci } 835c29fa5a6Sopenharmony_ci case VGestureMode::TWO_HANDS_OUTWARDS: { 836c29fa5a6Sopenharmony_ci MMI_HILOGI("VKeyboard 2-finger move outwards to switch to standard/full kbd."); 837c29fa5a6Sopenharmony_ci // Note: if we have both standard and full kdb, then the front 838c29fa5a6Sopenharmony_ci // end shall track and resume user's previous choice of layout. 839c29fa5a6Sopenharmony_ci SendKeyboardAction(KeyEvent::VKeyboardAction::TWO_FINGERS_OUT); 840c29fa5a6Sopenharmony_ci break; 841c29fa5a6Sopenharmony_ci } 842c29fa5a6Sopenharmony_ci default: { 843c29fa5a6Sopenharmony_ci // other gestures not implemented/supported yet. 844c29fa5a6Sopenharmony_ci MMI_HILOGW("VKeyboard gesture not implemented or supported, gestureId: %{private}d", gestureId); 845c29fa5a6Sopenharmony_ci } 846c29fa5a6Sopenharmony_ci } 847c29fa5a6Sopenharmony_ci SendKeyboardAction(KeyEvent::VKeyboardAction::RESET_BUTTON_COLOR); 848c29fa5a6Sopenharmony_ci break; 849c29fa5a6Sopenharmony_ci } 850c29fa5a6Sopenharmony_ci default: 851c29fa5a6Sopenharmony_ci break; 852c29fa5a6Sopenharmony_ci } 853c29fa5a6Sopenharmony_ci } 854c29fa5a6Sopenharmony_ci return RET_OK; 855c29fa5a6Sopenharmony_ci} 856c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_VKEYBOARD 857c29fa5a6Sopenharmony_ci 858c29fa5a6Sopenharmony_civoid MMIService::OnStart() 859c29fa5a6Sopenharmony_ci{ 860c29fa5a6Sopenharmony_ci CHK_PID_AND_TID(); 861c29fa5a6Sopenharmony_ci int32_t ret = Init(); 862c29fa5a6Sopenharmony_ci CHKNOKRV(ret, "Init mmi_service failed"); 863c29fa5a6Sopenharmony_ci MMI_HILOGD("Started successfully"); 864c29fa5a6Sopenharmony_ci AddReloadDeviceTimer(); 865c29fa5a6Sopenharmony_ci t_ = std::thread([this] {this->OnThread();}); 866c29fa5a6Sopenharmony_ci pthread_setname_np(t_.native_handle(), THREAD_NAME.c_str()); 867c29fa5a6Sopenharmony_ci eventMonitorThread_ = std::thread(&EventStatistic::WriteEventFile); 868c29fa5a6Sopenharmony_ci pthread_setname_np(eventMonitorThread_.native_handle(), "event-monitor"); 869c29fa5a6Sopenharmony_ci#ifdef OHOS_RSS_CLIENT 870c29fa5a6Sopenharmony_ci MMI_HILOGI("Add system ability listener start"); 871c29fa5a6Sopenharmony_ci AddSystemAbilityListener(RES_SCHED_SYS_ABILITY_ID); 872c29fa5a6Sopenharmony_ci MMI_HILOGI("Add system ability listener success"); 873c29fa5a6Sopenharmony_ci#endif // OHOS_RSS_CLIENT 874c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_FINGERSENSE_WRAPPER) && defined(OHOS_BUILD_ENABLE_KEYBOARD) 875c29fa5a6Sopenharmony_ci FINGERSENSE_WRAPPER->InitFingerSenseWrapper(); 876c29fa5a6Sopenharmony_ci MMI_HILOGI("Add system ability listener start"); 877c29fa5a6Sopenharmony_ci AddSystemAbilityListener(COMMON_EVENT_SERVICE_ID); 878c29fa5a6Sopenharmony_ci MMI_HILOGI("Add system ability listener success"); 879c29fa5a6Sopenharmony_ci AddSystemAbilityListener(RENDER_SERVICE); 880c29fa5a6Sopenharmony_ci DISPLAY_MONITOR->InitCommonEventSubscriber(); 881c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_FINGERSENSE_WRAPPER && OHOS_BUILD_ENABLE_KEYBOARD 882c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_GESTURESENSE_WRAPPER 883c29fa5a6Sopenharmony_ci GESTURESENSE_WRAPPER->InitGestureSenseWrapper(); 884c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_GESTURESENSE_WRAPPER 885c29fa5a6Sopenharmony_ci MMI_HILOGI("Add app manager service listener start"); 886c29fa5a6Sopenharmony_ci AddSystemAbilityListener(APP_MGR_SERVICE_ID); 887c29fa5a6Sopenharmony_ci APP_OBSERVER_MGR->InitAppStateObserver(); 888c29fa5a6Sopenharmony_ci MMI_HILOGI("Add app manager service listener end"); 889c29fa5a6Sopenharmony_ci AddAppDebugListener(); 890c29fa5a6Sopenharmony_ci AddSystemAbilityListener(DISPLAY_MANAGER_SERVICE_SA_ID); 891c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_ANCO 892c29fa5a6Sopenharmony_ci InitAncoUds(); 893c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_ANCO 894c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_VKEYBOARD 895c29fa5a6Sopenharmony_ci isHPR_ = PRODUCT_TYPE == DEVICE_TYPE_HPR; 896c29fa5a6Sopenharmony_ci if (isHPR_) { 897c29fa5a6Sopenharmony_ci DelegateInterface::HandlerSummary summary = {}; 898c29fa5a6Sopenharmony_ci summary.handlerName = "VKeyboard"; 899c29fa5a6Sopenharmony_ci summary.eventType = HANDLE_EVENT_TYPE_POINTER; 900c29fa5a6Sopenharmony_ci summary.mode = HandlerMode::SYNC; 901c29fa5a6Sopenharmony_ci summary.priority = 0; 902c29fa5a6Sopenharmony_ci summary.deviceTags = 0; 903c29fa5a6Sopenharmony_ci summary.cb = PointerEventHandler; 904c29fa5a6Sopenharmony_ci delegateInterface_->AddHandler(InputHandlerType::MONITOR, summary); 905c29fa5a6Sopenharmony_ci 906c29fa5a6Sopenharmony_ci // Initialize vkeyboard handler 907c29fa5a6Sopenharmony_ci g_VKeyboardHandle = dlopen(VKEYBOARD_PATH.c_str(), RTLD_NOW); 908c29fa5a6Sopenharmony_ci if (g_VKeyboardHandle != nullptr) { 909c29fa5a6Sopenharmony_ci algorithm_keydown_ = (ALGORITHM_KEYDOWN_TYPE)dlsym(g_VKeyboardHandle, "AlgorithmKeyDown"); 910c29fa5a6Sopenharmony_ci algorithm_keyup_ = (ALGORITHM_KEYUP_TYPE)dlsym(g_VKeyboardHandle, "AlgorithmKeyUp"); 911c29fa5a6Sopenharmony_ci gaussiankeyboard_getKeyCodeByKeyName_ = (GAUSSIANKEYBOARD_GETKEYCODEBYKEYNAME_TYPE)dlsym( 912c29fa5a6Sopenharmony_ci g_VKeyboardHandle, "GaussianKeyboardGetKeyCodeByKeyName"); 913c29fa5a6Sopenharmony_ci gaussiankeyboard_getKeyCodeByKeyNameAndShift_ = (GAUSSIANKEYBOARD_GETKEYCODEBYKEYNAMEANDSHIFT_TYPE)dlsym( 914c29fa5a6Sopenharmony_ci g_VKeyboardHandle, "GaussianKeyboardGetKeyCodeByKeyNameAndShift"); 915c29fa5a6Sopenharmony_ci gaussiankeyboard_updateMotionSpace_ = (GAUSSIANKEYBOARD_UPDATEMOTIONSPACE_TYPE)dlsym( 916c29fa5a6Sopenharmony_ci g_VKeyboardHandle, "GaussianKeyboardUpdateMotionSpace"); 917c29fa5a6Sopenharmony_ci gaussiankeyboard_setVKeyboardArea_ = (GAUSSIANKEYBOARD_SETVKEYBOARDAREA_TYPE)dlsym( 918c29fa5a6Sopenharmony_ci g_VKeyboardHandle, "GaussianKeyboardSetVKeyboardArea"); 919c29fa5a6Sopenharmony_ci bayesianengine_mapTouchToButton_ = (BAYESIANENGINE_MAPTOUCHTOBUTTON_TYPE)dlsym( 920c29fa5a6Sopenharmony_ci g_VKeyboardHandle, "BayesianEngineMapTouchToButton"); 921c29fa5a6Sopenharmony_ci statemachineMessageQueue_getMessage_ = (STATEMACINEMESSAGQUEUE_GETMESSAGE_TYPE)dlsym( 922c29fa5a6Sopenharmony_ci g_VKeyboardHandle, "StateMachineMessageQueueGetMessage"); 923c29fa5a6Sopenharmony_ci gaussiankeyboard_isInsideVKeyboardArea_ = (GAUSSIANKEYBOARD_ISINSIDEVKEYBOARDAREA_TYPE)dlsym( 924c29fa5a6Sopenharmony_ci g_VKeyboardHandle, "GaussianKeyboardIsInsideVKeyboardArea"); 925c29fa5a6Sopenharmony_ci gaussiankeyboard_isVKeyboardVisible_ = (GAUSSIANKEYBOARD_ISVKEYBOARDVISIBLE_TYPE)dlsym( 926c29fa5a6Sopenharmony_ci g_VKeyboardHandle, "GaussianKeyboardIsVKeyboardVisible"); 927c29fa5a6Sopenharmony_ci algorithm_isKeyDownInKeyboard_ = (ALGORITHM_ISKEYDOWNINKEYBOARD_TYPE)dlsym( 928c29fa5a6Sopenharmony_ci g_VKeyboardHandle, "AlgorithmIsKeyDownInKeyboard"); 929c29fa5a6Sopenharmony_ci } 930c29fa5a6Sopenharmony_ci } 931c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_VKEYBOARD 932c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) 933c29fa5a6Sopenharmony_ci IPointerDrawingManager::GetInstance()->InitPointerObserver(); 934c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING 935c29fa5a6Sopenharmony_ci InitPreferences(); 936c29fa5a6Sopenharmony_ci TimerMgr->AddTimer(WATCHDOG_INTERVAL_TIME, -1, [this]() { 937c29fa5a6Sopenharmony_ci MMI_HILOGI("Set thread status flag to true"); 938c29fa5a6Sopenharmony_ci threadStatusFlag_ = true; 939c29fa5a6Sopenharmony_ci }); 940c29fa5a6Sopenharmony_ci [[ maybe_unused ]] auto taskFunc = [this]() { 941c29fa5a6Sopenharmony_ci if (threadStatusFlag_) { 942c29fa5a6Sopenharmony_ci MMI_HILOGI("Set thread status flag to false"); 943c29fa5a6Sopenharmony_ci threadStatusFlag_ = false; 944c29fa5a6Sopenharmony_ci } else { 945c29fa5a6Sopenharmony_ci MMI_HILOGI("Mmi-server Timeout"); 946c29fa5a6Sopenharmony_ci } 947c29fa5a6Sopenharmony_ci }; 948c29fa5a6Sopenharmony_ci MMI_HILOGI("Run periodical task success"); 949c29fa5a6Sopenharmony_ci InitPrintClientInfo(); 950c29fa5a6Sopenharmony_ci} 951c29fa5a6Sopenharmony_ci 952c29fa5a6Sopenharmony_civoid MMIService::OnStop() 953c29fa5a6Sopenharmony_ci{ 954c29fa5a6Sopenharmony_ci CHK_PID_AND_TID(); 955c29fa5a6Sopenharmony_ci UdsStop(); 956c29fa5a6Sopenharmony_ci libinputAdapter_.Stop(); 957c29fa5a6Sopenharmony_ci state_ = ServiceRunningState::STATE_NOT_START; 958c29fa5a6Sopenharmony_ci#ifdef OHOS_RSS_CLIENT 959c29fa5a6Sopenharmony_ci MMI_HILOGI("Remove system ability listener start"); 960c29fa5a6Sopenharmony_ci RemoveSystemAbilityListener(RES_SCHED_SYS_ABILITY_ID); 961c29fa5a6Sopenharmony_ci MMI_HILOGI("Remove system ability listener success"); 962c29fa5a6Sopenharmony_ci#endif // OHOS_RSS_CLIENT 963c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_FINGERSENSE_WRAPPER 964c29fa5a6Sopenharmony_ci RemoveSystemAbilityListener(COMMON_EVENT_SERVICE_ID); 965c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_FINGERSENSE_WRAPPER 966c29fa5a6Sopenharmony_ci RemoveSystemAbilityListener(APP_MGR_SERVICE_ID); 967c29fa5a6Sopenharmony_ci RemoveSystemAbilityListener(RENDER_SERVICE); 968c29fa5a6Sopenharmony_ci RemoveAppDebugListener(); 969c29fa5a6Sopenharmony_ci RemoveSystemAbilityListener(DISPLAY_MANAGER_SERVICE_SA_ID); 970c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_ANCO 971c29fa5a6Sopenharmony_ci StopAncoUds(); 972c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_ANCO 973c29fa5a6Sopenharmony_ci} 974c29fa5a6Sopenharmony_ci 975c29fa5a6Sopenharmony_civoid MMIService::AddAppDebugListener() 976c29fa5a6Sopenharmony_ci{ 977c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 978c29fa5a6Sopenharmony_ci appDebugListener_ = AppDebugListener::GetInstance(); 979c29fa5a6Sopenharmony_ci auto errCode = 980c29fa5a6Sopenharmony_ci AAFwk::AbilityManagerClient::GetInstance()->RegisterAppDebugListener(appDebugListener_); 981c29fa5a6Sopenharmony_ci if (errCode != RET_OK) { 982c29fa5a6Sopenharmony_ci MMI_HILOGE("Call RegisterAppDebugListener failed, errCode:%{public}d", errCode); 983c29fa5a6Sopenharmony_ci } 984c29fa5a6Sopenharmony_ci} 985c29fa5a6Sopenharmony_ci 986c29fa5a6Sopenharmony_civoid MMIService::RemoveAppDebugListener() 987c29fa5a6Sopenharmony_ci{ 988c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 989c29fa5a6Sopenharmony_ci CHKPV(appDebugListener_); 990c29fa5a6Sopenharmony_ci auto errCode = 991c29fa5a6Sopenharmony_ci AAFwk::AbilityManagerClient::GetInstance()->UnregisterAppDebugListener(appDebugListener_); 992c29fa5a6Sopenharmony_ci if (errCode != RET_OK) { 993c29fa5a6Sopenharmony_ci MMI_HILOGE("Call UnregisterAppDebugListener failed, errCode:%{public}d", errCode); 994c29fa5a6Sopenharmony_ci } 995c29fa5a6Sopenharmony_ci} 996c29fa5a6Sopenharmony_ci 997c29fa5a6Sopenharmony_ciint32_t MMIService::AllocSocketFd(const std::string &programName, const int32_t moduleType, int32_t &toReturnClientFd, 998c29fa5a6Sopenharmony_ci int32_t &tokenType) 999c29fa5a6Sopenharmony_ci{ 1000c29fa5a6Sopenharmony_ci toReturnClientFd = IMultimodalInputConnect::INVALID_SOCKET_FD; 1001c29fa5a6Sopenharmony_ci int32_t serverFd = IMultimodalInputConnect::INVALID_SOCKET_FD; 1002c29fa5a6Sopenharmony_ci int32_t pid = GetCallingPid(); 1003c29fa5a6Sopenharmony_ci int32_t uid = GetCallingUid(); 1004c29fa5a6Sopenharmony_ci MMI_HILOGI("Enter, programName:%{public}s, moduleType:%{public}d, pid:%{public}d", 1005c29fa5a6Sopenharmony_ci programName.c_str(), moduleType, pid); 1006c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1007c29fa5a6Sopenharmony_ci [this, &programName, moduleType, uid, pid, &serverFd, &toReturnClientFd, &tokenType] { 1008c29fa5a6Sopenharmony_ci return this->AddSocketPairInfo(programName, moduleType, uid, pid, serverFd, toReturnClientFd, tokenType); 1009c29fa5a6Sopenharmony_ci } 1010c29fa5a6Sopenharmony_ci ); 1011c29fa5a6Sopenharmony_ci DfxHisysevent::ClientConnectData data = { 1012c29fa5a6Sopenharmony_ci .pid = pid, 1013c29fa5a6Sopenharmony_ci .uid = uid, 1014c29fa5a6Sopenharmony_ci .moduleType = moduleType, 1015c29fa5a6Sopenharmony_ci .programName = programName, 1016c29fa5a6Sopenharmony_ci .serverFd = serverFd 1017c29fa5a6Sopenharmony_ci }; 1018c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1019c29fa5a6Sopenharmony_ci MMI_HILOGE("Call AddSocketPairInfo failed, return:%{public}d", ret); 1020c29fa5a6Sopenharmony_ci DfxHisysevent::OnClientConnect(data, OHOS::HiviewDFX::HiSysEvent::EventType::FAULT); 1021c29fa5a6Sopenharmony_ci return ret; 1022c29fa5a6Sopenharmony_ci } 1023c29fa5a6Sopenharmony_ci MMI_HILOGIK("Leave, programName:%{public}s, moduleType:%{public}d, alloc success", programName.c_str(), 1024c29fa5a6Sopenharmony_ci moduleType); 1025c29fa5a6Sopenharmony_ci DfxHisysevent::OnClientConnect(data, OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR); 1026c29fa5a6Sopenharmony_ci return RET_OK; 1027c29fa5a6Sopenharmony_ci} 1028c29fa5a6Sopenharmony_ci 1029c29fa5a6Sopenharmony_ciint32_t MMIService::AddInputEventFilter(sptr<IEventFilter> filter, int32_t filterId, int32_t priority, 1030c29fa5a6Sopenharmony_ci uint32_t deviceTags) 1031c29fa5a6Sopenharmony_ci{ 1032c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1033c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) || defined(OHOS_BUILD_ENABLE_TOUCH) || defined(OHOS_BUILD_ENABLE_KEYBOARD) 1034c29fa5a6Sopenharmony_ci CHKPR(filter, ERROR_NULL_POINTER); 1035c29fa5a6Sopenharmony_ci int32_t clientPid = GetCallingPid(); 1036c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1037c29fa5a6Sopenharmony_ci [this, filter, filterId, priority, deviceTags, clientPid] { 1038c29fa5a6Sopenharmony_ci return sMsgHandler_.AddInputEventFilter(filter, filterId, priority, deviceTags, clientPid); 1039c29fa5a6Sopenharmony_ci } 1040c29fa5a6Sopenharmony_ci ); 1041c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1042c29fa5a6Sopenharmony_ci MMI_HILOGE("Add event filter failed, return:%{public}d", ret); 1043c29fa5a6Sopenharmony_ci return ret; 1044c29fa5a6Sopenharmony_ci } 1045c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER || OHOS_BUILD_ENABLE_TOUCH || OHOS_BUILD_ENABLE_KEYBOARD 1046c29fa5a6Sopenharmony_ci return RET_OK; 1047c29fa5a6Sopenharmony_ci} 1048c29fa5a6Sopenharmony_ci 1049c29fa5a6Sopenharmony_ciint32_t MMIService::RemoveInputEventFilter(int32_t filterId) 1050c29fa5a6Sopenharmony_ci{ 1051c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1052c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) || defined(OHOS_BUILD_ENABLE_TOUCH) || defined(OHOS_BUILD_ENABLE_KEYBOARD) 1053c29fa5a6Sopenharmony_ci int32_t clientPid = GetCallingPid(); 1054c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1055c29fa5a6Sopenharmony_ci [this, filterId, clientPid] { 1056c29fa5a6Sopenharmony_ci return sMsgHandler_.RemoveInputEventFilter(filterId, clientPid); 1057c29fa5a6Sopenharmony_ci } 1058c29fa5a6Sopenharmony_ci ); 1059c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1060c29fa5a6Sopenharmony_ci MMI_HILOGE("Remove event filter failed, return:%{public}d", ret); 1061c29fa5a6Sopenharmony_ci return ret; 1062c29fa5a6Sopenharmony_ci } 1063c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER || OHOS_BUILD_ENABLE_TOUCH || OHOS_BUILD_ENABLE_KEYBOARD 1064c29fa5a6Sopenharmony_ci return RET_OK; 1065c29fa5a6Sopenharmony_ci} 1066c29fa5a6Sopenharmony_ci 1067c29fa5a6Sopenharmony_civoid MMIService::OnConnected(SessionPtr s) 1068c29fa5a6Sopenharmony_ci{ 1069c29fa5a6Sopenharmony_ci CHKPV(s); 1070c29fa5a6Sopenharmony_ci MMI_HILOGI("fd:%{public}d", s->GetFd()); 1071c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_ANCO 1072c29fa5a6Sopenharmony_ci if (s->GetProgramName() != SHELL_ASSISTANT) { 1073c29fa5a6Sopenharmony_ci return; 1074c29fa5a6Sopenharmony_ci } 1075c29fa5a6Sopenharmony_ci auto appMgrClient = DelayedSingleton<AppExecFwk::AppMgrClient>::GetInstance(); 1076c29fa5a6Sopenharmony_ci if (appMgrClient == nullptr) { 1077c29fa5a6Sopenharmony_ci return; 1078c29fa5a6Sopenharmony_ci } 1079c29fa5a6Sopenharmony_ci int32_t userid = WIN_MGR->GetCurrentUserId(); 1080c29fa5a6Sopenharmony_ci if (userid < 0) { 1081c29fa5a6Sopenharmony_ci userid = DEFAULT_USER_ID; 1082c29fa5a6Sopenharmony_ci } 1083c29fa5a6Sopenharmony_ci std::vector<AppExecFwk::RunningProcessInfo> info; 1084c29fa5a6Sopenharmony_ci appMgrClient->GetProcessRunningInfosByUserId(info, userid); 1085c29fa5a6Sopenharmony_ci for (auto &item : info) { 1086c29fa5a6Sopenharmony_ci if (item.bundleNames.empty()) { 1087c29fa5a6Sopenharmony_ci continue; 1088c29fa5a6Sopenharmony_ci } 1089c29fa5a6Sopenharmony_ci if (SHELL_ASSISTANT == item.bundleNames[0].c_str()) { 1090c29fa5a6Sopenharmony_ci MMI_HILOGW("Record client processes pid %{public}d", item.pid_); 1091c29fa5a6Sopenharmony_ci shellAssitentPid_ = item.pid_; 1092c29fa5a6Sopenharmony_ci } 1093c29fa5a6Sopenharmony_ci } 1094c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_ANCO 1095c29fa5a6Sopenharmony_ci} 1096c29fa5a6Sopenharmony_ci 1097c29fa5a6Sopenharmony_civoid MMIService::OnDisconnected(SessionPtr s) 1098c29fa5a6Sopenharmony_ci{ 1099c29fa5a6Sopenharmony_ci CHKPV(s); 1100c29fa5a6Sopenharmony_ci MMI_HILOGW("Enter, session desc:%{public}s, fd:%{public}d", s->GetDescript().c_str(), s->GetFd()); 1101c29fa5a6Sopenharmony_ci auto ret = RemoveInputEventFilter(-1); 1102c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1103c29fa5a6Sopenharmony_ci MMI_HILOGF("Remove all filter failed, ret:%{public}d", ret); 1104c29fa5a6Sopenharmony_ci } 1105c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_ANCO 1106c29fa5a6Sopenharmony_ci if (s->GetProgramName() == SHELL_ASSISTANT && shellAssitentPid_ == s->GetPid()) { 1107c29fa5a6Sopenharmony_ci MMI_HILOGW("Clean all shell windows pid: %{public}d", s->GetPid()); 1108c29fa5a6Sopenharmony_ci shellAssitentPid_ = -1; 1109c29fa5a6Sopenharmony_ci IInputWindowsManager::GetInstance()->CleanShellWindowIds(); 1110c29fa5a6Sopenharmony_ci } 1111c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_ANCO 1112c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 1113c29fa5a6Sopenharmony_ci IPointerDrawingManager::GetInstance()->DeletePointerVisible(s->GetPid()); 1114c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 1115c29fa5a6Sopenharmony_ci} 1116c29fa5a6Sopenharmony_ci 1117c29fa5a6Sopenharmony_ciint32_t MMIService::SetMouseScrollRows(int32_t rows) 1118c29fa5a6Sopenharmony_ci{ 1119c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1120c29fa5a6Sopenharmony_ci#if defined OHOS_BUILD_ENABLE_POINTER 1121c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1122c29fa5a6Sopenharmony_ci [rows] { 1123c29fa5a6Sopenharmony_ci return ::OHOS::DelayedSingleton<MouseEventNormalize>::GetInstance()->SetMouseScrollRows(rows); 1124c29fa5a6Sopenharmony_ci } 1125c29fa5a6Sopenharmony_ci ); 1126c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1127c29fa5a6Sopenharmony_ci MMI_HILOGE("Set the number of mouse scrolling rows failed, return:%{public}d", ret); 1128c29fa5a6Sopenharmony_ci return ret; 1129c29fa5a6Sopenharmony_ci } 1130c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 1131c29fa5a6Sopenharmony_ci return RET_OK; 1132c29fa5a6Sopenharmony_ci} 1133c29fa5a6Sopenharmony_ci 1134c29fa5a6Sopenharmony_ciint32_t MMIService::SetCustomCursor(int32_t pid, int32_t windowId, int32_t focusX, int32_t focusY, void* pixelMap) 1135c29fa5a6Sopenharmony_ci{ 1136c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1137c29fa5a6Sopenharmony_ci#if defined OHOS_BUILD_ENABLE_POINTER 1138c29fa5a6Sopenharmony_ci int32_t ret = CheckPidPermission(pid); 1139c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1140c29fa5a6Sopenharmony_ci MMI_HILOGE("Check pid permission failed"); 1141c29fa5a6Sopenharmony_ci return ret; 1142c29fa5a6Sopenharmony_ci } 1143c29fa5a6Sopenharmony_ci ret = delegateTasks_.PostSyncTask(std::bind( 1144c29fa5a6Sopenharmony_ci [pixelMap, pid, windowId, focusX, focusY] { 1145c29fa5a6Sopenharmony_ci return IPointerDrawingManager::GetInstance()->SetCustomCursor(pixelMap, pid, windowId, focusX, focusY); 1146c29fa5a6Sopenharmony_ci } 1147c29fa5a6Sopenharmony_ci )); 1148c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1149c29fa5a6Sopenharmony_ci MMI_HILOGE("Set the custom cursor failed, ret:%{public}d", ret); 1150c29fa5a6Sopenharmony_ci return ret; 1151c29fa5a6Sopenharmony_ci } 1152c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 1153c29fa5a6Sopenharmony_ci return RET_OK; 1154c29fa5a6Sopenharmony_ci} 1155c29fa5a6Sopenharmony_ci 1156c29fa5a6Sopenharmony_ciint32_t MMIService::SetMouseIcon(int32_t windowId, void* pixelMap) 1157c29fa5a6Sopenharmony_ci{ 1158c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1159c29fa5a6Sopenharmony_ci#if defined OHOS_BUILD_ENABLE_POINTER 1160c29fa5a6Sopenharmony_ci int32_t pid = GetCallingPid(); 1161c29fa5a6Sopenharmony_ci int32_t ret = CheckPidPermission(pid); 1162c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1163c29fa5a6Sopenharmony_ci MMI_HILOGE("Check pid permission failed"); 1164c29fa5a6Sopenharmony_ci return ret; 1165c29fa5a6Sopenharmony_ci } 1166c29fa5a6Sopenharmony_ci ret = delegateTasks_.PostSyncTask(std::bind( 1167c29fa5a6Sopenharmony_ci [pid, windowId, pixelMap] { 1168c29fa5a6Sopenharmony_ci return IPointerDrawingManager::GetInstance()->SetMouseIcon(pid, windowId, pixelMap); 1169c29fa5a6Sopenharmony_ci } 1170c29fa5a6Sopenharmony_ci )); 1171c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1172c29fa5a6Sopenharmony_ci MMI_HILOGE("Set the mouse icon failed, return:%{public}d", ret); 1173c29fa5a6Sopenharmony_ci return ret; 1174c29fa5a6Sopenharmony_ci } 1175c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 1176c29fa5a6Sopenharmony_ci return RET_OK; 1177c29fa5a6Sopenharmony_ci} 1178c29fa5a6Sopenharmony_ci 1179c29fa5a6Sopenharmony_ciint32_t MMIService::SetMouseHotSpot(int32_t pid, int32_t windowId, int32_t hotSpotX, int32_t hotSpotY) 1180c29fa5a6Sopenharmony_ci{ 1181c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1182c29fa5a6Sopenharmony_ci#if defined OHOS_BUILD_ENABLE_POINTER 1183c29fa5a6Sopenharmony_ci int32_t ret = CheckPidPermission(pid); 1184c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1185c29fa5a6Sopenharmony_ci MMI_HILOGE("Check pid permission failed"); 1186c29fa5a6Sopenharmony_ci return ret; 1187c29fa5a6Sopenharmony_ci } 1188c29fa5a6Sopenharmony_ci ret = delegateTasks_.PostSyncTask( 1189c29fa5a6Sopenharmony_ci [pid, windowId, hotSpotX, hotSpotY] { 1190c29fa5a6Sopenharmony_ci return IPointerDrawingManager::GetInstance()->SetMouseHotSpot(pid, windowId, hotSpotX, hotSpotY); 1191c29fa5a6Sopenharmony_ci } 1192c29fa5a6Sopenharmony_ci ); 1193c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1194c29fa5a6Sopenharmony_ci MMI_HILOGE("Set the mouse hot spot failed, return:%{public}d", ret); 1195c29fa5a6Sopenharmony_ci return ret; 1196c29fa5a6Sopenharmony_ci } 1197c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 1198c29fa5a6Sopenharmony_ci return RET_OK; 1199c29fa5a6Sopenharmony_ci} 1200c29fa5a6Sopenharmony_ci 1201c29fa5a6Sopenharmony_ciint32_t MMIService::SetNapStatus(int32_t pid, int32_t uid, std::string bundleName, int32_t napStatus) 1202c29fa5a6Sopenharmony_ci{ 1203c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1204c29fa5a6Sopenharmony_ci int32_t ret = CheckPidPermission(pid); 1205c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1206c29fa5a6Sopenharmony_ci MMI_HILOGE("Check pid permission failed"); 1207c29fa5a6Sopenharmony_ci return ret; 1208c29fa5a6Sopenharmony_ci } 1209c29fa5a6Sopenharmony_ci NapProcess::GetInstance()->SetNapStatus(pid, uid, bundleName, napStatus); 1210c29fa5a6Sopenharmony_ci return RET_OK; 1211c29fa5a6Sopenharmony_ci} 1212c29fa5a6Sopenharmony_ci 1213c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 1214c29fa5a6Sopenharmony_ciint32_t MMIService::ReadMouseScrollRows(int32_t &rows) 1215c29fa5a6Sopenharmony_ci{ 1216c29fa5a6Sopenharmony_ci rows = MouseEventHdr->GetMouseScrollRows(); 1217c29fa5a6Sopenharmony_ci return RET_OK; 1218c29fa5a6Sopenharmony_ci} 1219c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 1220c29fa5a6Sopenharmony_ci 1221c29fa5a6Sopenharmony_ciint32_t MMIService::GetMouseScrollRows(int32_t &rows) 1222c29fa5a6Sopenharmony_ci{ 1223c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1224c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 1225c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1226c29fa5a6Sopenharmony_ci [this, &rows] { 1227c29fa5a6Sopenharmony_ci return this->ReadMouseScrollRows(rows); 1228c29fa5a6Sopenharmony_ci } 1229c29fa5a6Sopenharmony_ci ); 1230c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1231c29fa5a6Sopenharmony_ci MMI_HILOGE("Get the number of mouse scrolling rows failed, ret:%{public}d", ret); 1232c29fa5a6Sopenharmony_ci return ret; 1233c29fa5a6Sopenharmony_ci } 1234c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 1235c29fa5a6Sopenharmony_ci return RET_OK; 1236c29fa5a6Sopenharmony_ci} 1237c29fa5a6Sopenharmony_ci 1238c29fa5a6Sopenharmony_ciint32_t MMIService::SetPointerSize(int32_t size) 1239c29fa5a6Sopenharmony_ci{ 1240c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1241c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) 1242c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1243c29fa5a6Sopenharmony_ci [size] { 1244c29fa5a6Sopenharmony_ci return IPointerDrawingManager::GetInstance()->SetPointerSize(size); 1245c29fa5a6Sopenharmony_ci } 1246c29fa5a6Sopenharmony_ci ); 1247c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1248c29fa5a6Sopenharmony_ci MMI_HILOGE("Set pointer size failed, return:%{public}d", ret); 1249c29fa5a6Sopenharmony_ci return ret; 1250c29fa5a6Sopenharmony_ci } 1251c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING 1252c29fa5a6Sopenharmony_ci return RET_OK; 1253c29fa5a6Sopenharmony_ci} 1254c29fa5a6Sopenharmony_ci 1255c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) 1256c29fa5a6Sopenharmony_ciint32_t MMIService::ReadPointerSize(int32_t &size) 1257c29fa5a6Sopenharmony_ci{ 1258c29fa5a6Sopenharmony_ci size = IPointerDrawingManager::GetInstance()->GetPointerSize(); 1259c29fa5a6Sopenharmony_ci return RET_OK; 1260c29fa5a6Sopenharmony_ci} 1261c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING 1262c29fa5a6Sopenharmony_ci 1263c29fa5a6Sopenharmony_ciint32_t MMIService::GetPointerSize(int32_t &size) 1264c29fa5a6Sopenharmony_ci{ 1265c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1266c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) 1267c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1268c29fa5a6Sopenharmony_ci [this, &size] { 1269c29fa5a6Sopenharmony_ci return this->ReadPointerSize(size); 1270c29fa5a6Sopenharmony_ci } 1271c29fa5a6Sopenharmony_ci ); 1272c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1273c29fa5a6Sopenharmony_ci MMI_HILOGE("Get pointer size failed, return:%{public}d", ret); 1274c29fa5a6Sopenharmony_ci return ret; 1275c29fa5a6Sopenharmony_ci } 1276c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING 1277c29fa5a6Sopenharmony_ci return RET_OK; 1278c29fa5a6Sopenharmony_ci} 1279c29fa5a6Sopenharmony_ci 1280c29fa5a6Sopenharmony_ciint32_t MMIService::SetMousePrimaryButton(int32_t primaryButton) 1281c29fa5a6Sopenharmony_ci{ 1282c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1283c29fa5a6Sopenharmony_ci#if defined OHOS_BUILD_ENABLE_POINTER 1284c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1285c29fa5a6Sopenharmony_ci [primaryButton] { 1286c29fa5a6Sopenharmony_ci return ::OHOS::DelayedSingleton<MouseEventNormalize>::GetInstance()->SetMousePrimaryButton(primaryButton); 1287c29fa5a6Sopenharmony_ci } 1288c29fa5a6Sopenharmony_ci ); 1289c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1290c29fa5a6Sopenharmony_ci MMI_HILOGE("Set mouse primary button failed, return:%{public}d", ret); 1291c29fa5a6Sopenharmony_ci return ret; 1292c29fa5a6Sopenharmony_ci } 1293c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 1294c29fa5a6Sopenharmony_ci return RET_OK; 1295c29fa5a6Sopenharmony_ci} 1296c29fa5a6Sopenharmony_ci 1297c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 1298c29fa5a6Sopenharmony_ciint32_t MMIService::ReadMousePrimaryButton(int32_t &primaryButton) 1299c29fa5a6Sopenharmony_ci{ 1300c29fa5a6Sopenharmony_ci primaryButton = MouseEventHdr->GetMousePrimaryButton(); 1301c29fa5a6Sopenharmony_ci return RET_OK; 1302c29fa5a6Sopenharmony_ci} 1303c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 1304c29fa5a6Sopenharmony_ci 1305c29fa5a6Sopenharmony_ciint32_t MMIService::GetMousePrimaryButton(int32_t &primaryButton) 1306c29fa5a6Sopenharmony_ci{ 1307c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1308c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 1309c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1310c29fa5a6Sopenharmony_ci [this, &primaryButton] { 1311c29fa5a6Sopenharmony_ci return this->ReadMousePrimaryButton(primaryButton); 1312c29fa5a6Sopenharmony_ci } 1313c29fa5a6Sopenharmony_ci ); 1314c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1315c29fa5a6Sopenharmony_ci MMI_HILOGE("Get mouse primary button failed, return:%{public}d", ret); 1316c29fa5a6Sopenharmony_ci return ret; 1317c29fa5a6Sopenharmony_ci } 1318c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 1319c29fa5a6Sopenharmony_ci return RET_OK; 1320c29fa5a6Sopenharmony_ci} 1321c29fa5a6Sopenharmony_ci 1322c29fa5a6Sopenharmony_ciint32_t MMIService::SetPointerVisible(bool visible, int32_t priority) 1323c29fa5a6Sopenharmony_ci{ 1324c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1325c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) 1326c29fa5a6Sopenharmony_ci auto tokenId = IPCSkeleton::GetCallingTokenID(); 1327c29fa5a6Sopenharmony_ci auto tokenType = OHOS::Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(tokenId); 1328c29fa5a6Sopenharmony_ci bool isHap = false; 1329c29fa5a6Sopenharmony_ci if (tokenType == OHOS::Security::AccessToken::TOKEN_HAP) { 1330c29fa5a6Sopenharmony_ci isHap = true; 1331c29fa5a6Sopenharmony_ci } 1332c29fa5a6Sopenharmony_ci int32_t clientPid = GetCallingPid(); 1333c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1334c29fa5a6Sopenharmony_ci [clientPid, visible, priority, isHap] { 1335c29fa5a6Sopenharmony_ci return IPointerDrawingManager::GetInstance()->SetPointerVisible(clientPid, visible, priority, isHap); 1336c29fa5a6Sopenharmony_ci } 1337c29fa5a6Sopenharmony_ci ); 1338c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1339c29fa5a6Sopenharmony_ci MMI_HILOGE("Set pointer visible failed, return:%{public}d", ret); 1340c29fa5a6Sopenharmony_ci return ret; 1341c29fa5a6Sopenharmony_ci } 1342c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING 1343c29fa5a6Sopenharmony_ci return RET_OK; 1344c29fa5a6Sopenharmony_ci} 1345c29fa5a6Sopenharmony_ci 1346c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) 1347c29fa5a6Sopenharmony_ciint32_t MMIService::CheckPointerVisible(bool &visible) 1348c29fa5a6Sopenharmony_ci{ 1349c29fa5a6Sopenharmony_ci visible = IPointerDrawingManager::GetInstance()->IsPointerVisible(); 1350c29fa5a6Sopenharmony_ci return RET_OK; 1351c29fa5a6Sopenharmony_ci} 1352c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING 1353c29fa5a6Sopenharmony_ci 1354c29fa5a6Sopenharmony_ciint32_t MMIService::IsPointerVisible(bool &visible) 1355c29fa5a6Sopenharmony_ci{ 1356c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 1357c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) 1358c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1359c29fa5a6Sopenharmony_ci [this, &visible] { 1360c29fa5a6Sopenharmony_ci return this->CheckPointerVisible(visible); 1361c29fa5a6Sopenharmony_ci } 1362c29fa5a6Sopenharmony_ci ); 1363c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1364c29fa5a6Sopenharmony_ci MMI_HILOGE("Is pointer visible failed, return:%{public}d", ret); 1365c29fa5a6Sopenharmony_ci return ret; 1366c29fa5a6Sopenharmony_ci } 1367c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING 1368c29fa5a6Sopenharmony_ci return RET_OK; 1369c29fa5a6Sopenharmony_ci} 1370c29fa5a6Sopenharmony_ci 1371c29fa5a6Sopenharmony_ciint32_t MMIService::MarkProcessed(int32_t eventType, int32_t eventId) 1372c29fa5a6Sopenharmony_ci{ 1373c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 1374c29fa5a6Sopenharmony_ci CHKPR(ANRMgr, RET_ERR); 1375c29fa5a6Sopenharmony_ci int32_t clientPid = GetCallingPid(); 1376c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1377c29fa5a6Sopenharmony_ci [clientPid, eventType, eventId] { 1378c29fa5a6Sopenharmony_ci return ::OHOS::DelayedSingleton<ANRManager>::GetInstance()->MarkProcessed(clientPid, eventType, eventId); 1379c29fa5a6Sopenharmony_ci } 1380c29fa5a6Sopenharmony_ci ); 1381c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1382c29fa5a6Sopenharmony_ci MMI_HILOGD("Mark event processed failed, ret:%{public}d", ret); 1383c29fa5a6Sopenharmony_ci return ret; 1384c29fa5a6Sopenharmony_ci } 1385c29fa5a6Sopenharmony_ci return RET_OK; 1386c29fa5a6Sopenharmony_ci} 1387c29fa5a6Sopenharmony_ci 1388c29fa5a6Sopenharmony_ciint32_t MMIService::SetPointerColor(int32_t color) 1389c29fa5a6Sopenharmony_ci{ 1390c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1391c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) 1392c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1393c29fa5a6Sopenharmony_ci [color] { 1394c29fa5a6Sopenharmony_ci return IPointerDrawingManager::GetInstance()->SetPointerColor(color); 1395c29fa5a6Sopenharmony_ci } 1396c29fa5a6Sopenharmony_ci ); 1397c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1398c29fa5a6Sopenharmony_ci MMI_HILOGE("Set pointer color failed, return:%{public}d", ret); 1399c29fa5a6Sopenharmony_ci return ret; 1400c29fa5a6Sopenharmony_ci } 1401c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING 1402c29fa5a6Sopenharmony_ci return RET_OK; 1403c29fa5a6Sopenharmony_ci} 1404c29fa5a6Sopenharmony_ci 1405c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) 1406c29fa5a6Sopenharmony_ciint32_t MMIService::ReadPointerColor(int32_t &color) 1407c29fa5a6Sopenharmony_ci{ 1408c29fa5a6Sopenharmony_ci color = IPointerDrawingManager::GetInstance()->GetPointerColor(); 1409c29fa5a6Sopenharmony_ci return RET_OK; 1410c29fa5a6Sopenharmony_ci} 1411c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING 1412c29fa5a6Sopenharmony_ci 1413c29fa5a6Sopenharmony_ciint32_t MMIService::GetPointerColor(int32_t &color) 1414c29fa5a6Sopenharmony_ci{ 1415c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1416c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) 1417c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1418c29fa5a6Sopenharmony_ci [this, &color] { 1419c29fa5a6Sopenharmony_ci return this->ReadPointerColor(color); 1420c29fa5a6Sopenharmony_ci } 1421c29fa5a6Sopenharmony_ci ); 1422c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1423c29fa5a6Sopenharmony_ci MMI_HILOGE("Get pointer color failed, return:%{public}d", ret); 1424c29fa5a6Sopenharmony_ci return ret; 1425c29fa5a6Sopenharmony_ci } 1426c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING 1427c29fa5a6Sopenharmony_ci return RET_OK; 1428c29fa5a6Sopenharmony_ci} 1429c29fa5a6Sopenharmony_ci 1430c29fa5a6Sopenharmony_ciint32_t MMIService::SetPointerSpeed(int32_t speed) 1431c29fa5a6Sopenharmony_ci{ 1432c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1433c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 1434c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1435c29fa5a6Sopenharmony_ci [speed] { 1436c29fa5a6Sopenharmony_ci return ::OHOS::DelayedSingleton<MouseEventNormalize>::GetInstance()->SetPointerSpeed(speed); 1437c29fa5a6Sopenharmony_ci } 1438c29fa5a6Sopenharmony_ci ); 1439c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1440c29fa5a6Sopenharmony_ci MMI_HILOGE("Set pointer speed failed, return:%{public}d", ret); 1441c29fa5a6Sopenharmony_ci return ret; 1442c29fa5a6Sopenharmony_ci } 1443c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 1444c29fa5a6Sopenharmony_ci return RET_OK; 1445c29fa5a6Sopenharmony_ci} 1446c29fa5a6Sopenharmony_ci 1447c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 1448c29fa5a6Sopenharmony_ciint32_t MMIService::ReadPointerSpeed(int32_t &speed) 1449c29fa5a6Sopenharmony_ci{ 1450c29fa5a6Sopenharmony_ci speed = MouseEventHdr->GetPointerSpeed(); 1451c29fa5a6Sopenharmony_ci return RET_OK; 1452c29fa5a6Sopenharmony_ci} 1453c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 1454c29fa5a6Sopenharmony_ci 1455c29fa5a6Sopenharmony_ciint32_t MMIService::GetPointerSpeed(int32_t &speed) 1456c29fa5a6Sopenharmony_ci{ 1457c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1458c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 1459c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1460c29fa5a6Sopenharmony_ci [this, &speed] { 1461c29fa5a6Sopenharmony_ci return this->ReadPointerSpeed(speed); 1462c29fa5a6Sopenharmony_ci } 1463c29fa5a6Sopenharmony_ci ); 1464c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1465c29fa5a6Sopenharmony_ci MMI_HILOGE("Get pointer speed failed, return:%{public}d", ret); 1466c29fa5a6Sopenharmony_ci return ret; 1467c29fa5a6Sopenharmony_ci } 1468c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 1469c29fa5a6Sopenharmony_ci return RET_OK; 1470c29fa5a6Sopenharmony_ci} 1471c29fa5a6Sopenharmony_ci 1472c29fa5a6Sopenharmony_ciint32_t MMIService::NotifyNapOnline() 1473c29fa5a6Sopenharmony_ci{ 1474c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 1475c29fa5a6Sopenharmony_ci NapProcess::GetInstance()->NotifyNapOnline(); 1476c29fa5a6Sopenharmony_ci return RET_OK; 1477c29fa5a6Sopenharmony_ci} 1478c29fa5a6Sopenharmony_ci 1479c29fa5a6Sopenharmony_ciint32_t MMIService::RemoveInputEventObserver() 1480c29fa5a6Sopenharmony_ci{ 1481c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 1482c29fa5a6Sopenharmony_ci NapProcess::GetInstance()->RemoveInputEventObserver(); 1483c29fa5a6Sopenharmony_ci return RET_OK; 1484c29fa5a6Sopenharmony_ci} 1485c29fa5a6Sopenharmony_ci 1486c29fa5a6Sopenharmony_ciint32_t MMIService::SetPointerStyle(int32_t windowId, PointerStyle pointerStyle, bool isUiExtension) 1487c29fa5a6Sopenharmony_ci{ 1488c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1489c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 1490c29fa5a6Sopenharmony_ci int32_t clientPid = GetCallingPid(); 1491c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1492c29fa5a6Sopenharmony_ci [clientPid, windowId, pointerStyle, isUiExtension] { 1493c29fa5a6Sopenharmony_ci return IPointerDrawingManager::GetInstance()->SetPointerStyle( 1494c29fa5a6Sopenharmony_ci clientPid, windowId, pointerStyle, isUiExtension); 1495c29fa5a6Sopenharmony_ci } 1496c29fa5a6Sopenharmony_ci ); 1497c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1498c29fa5a6Sopenharmony_ci MMI_HILOGE("Set pointer style failed, return:%{public}d", ret); 1499c29fa5a6Sopenharmony_ci return ret; 1500c29fa5a6Sopenharmony_ci } 1501c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 1502c29fa5a6Sopenharmony_ci return RET_OK; 1503c29fa5a6Sopenharmony_ci} 1504c29fa5a6Sopenharmony_ci 1505c29fa5a6Sopenharmony_ciint32_t MMIService::ClearWindowPointerStyle(int32_t pid, int32_t windowId) 1506c29fa5a6Sopenharmony_ci{ 1507c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 1508c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 1509c29fa5a6Sopenharmony_ci int32_t ret = CheckPidPermission(pid); 1510c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1511c29fa5a6Sopenharmony_ci MMI_HILOGE("Check pid permission failed"); 1512c29fa5a6Sopenharmony_ci return ret; 1513c29fa5a6Sopenharmony_ci } 1514c29fa5a6Sopenharmony_ci ret = delegateTasks_.PostSyncTask( 1515c29fa5a6Sopenharmony_ci [pid, windowId] { 1516c29fa5a6Sopenharmony_ci return IPointerDrawingManager::GetInstance()->ClearWindowPointerStyle(pid, windowId); 1517c29fa5a6Sopenharmony_ci } 1518c29fa5a6Sopenharmony_ci ); 1519c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1520c29fa5a6Sopenharmony_ci MMI_HILOGE("Set pointer style failed, return:%{public}d", ret); 1521c29fa5a6Sopenharmony_ci return ret; 1522c29fa5a6Sopenharmony_ci } 1523c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 1524c29fa5a6Sopenharmony_ci return RET_OK; 1525c29fa5a6Sopenharmony_ci} 1526c29fa5a6Sopenharmony_ci 1527c29fa5a6Sopenharmony_ciint32_t MMIService::GetPointerStyle(int32_t windowId, PointerStyle &pointerStyle, bool isUiExtension) 1528c29fa5a6Sopenharmony_ci{ 1529c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 1530c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 1531c29fa5a6Sopenharmony_ci int32_t clientPid = GetCallingPid(); 1532c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1533c29fa5a6Sopenharmony_ci [clientPid, windowId, &pointerStyle, isUiExtension] { 1534c29fa5a6Sopenharmony_ci return IPointerDrawingManager::GetInstance()->GetPointerStyle( 1535c29fa5a6Sopenharmony_ci clientPid, windowId, pointerStyle, isUiExtension); 1536c29fa5a6Sopenharmony_ci } 1537c29fa5a6Sopenharmony_ci ); 1538c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1539c29fa5a6Sopenharmony_ci MMI_HILOGE("Get pointer style failed, return:%{public}d", ret); 1540c29fa5a6Sopenharmony_ci return ret; 1541c29fa5a6Sopenharmony_ci } 1542c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 1543c29fa5a6Sopenharmony_ci return RET_OK; 1544c29fa5a6Sopenharmony_ci} 1545c29fa5a6Sopenharmony_ci 1546c29fa5a6Sopenharmony_ciint32_t MMIService::SetHoverScrollState(bool state) 1547c29fa5a6Sopenharmony_ci{ 1548c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1549c29fa5a6Sopenharmony_ci#if defined OHOS_BUILD_ENABLE_POINTER 1550c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1551c29fa5a6Sopenharmony_ci [state] { 1552c29fa5a6Sopenharmony_ci return ::OHOS::MMI::IInputWindowsManager::GetInstance()->SetHoverScrollState(state); 1553c29fa5a6Sopenharmony_ci } 1554c29fa5a6Sopenharmony_ci ); 1555c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1556c29fa5a6Sopenharmony_ci MMI_HILOGE("Set mouse hover scroll state failed, return:%{public}d", ret); 1557c29fa5a6Sopenharmony_ci return ret; 1558c29fa5a6Sopenharmony_ci } 1559c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 1560c29fa5a6Sopenharmony_ci return RET_OK; 1561c29fa5a6Sopenharmony_ci} 1562c29fa5a6Sopenharmony_ci 1563c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 1564c29fa5a6Sopenharmony_ciint32_t MMIService::ReadHoverScrollState(bool &state) 1565c29fa5a6Sopenharmony_ci{ 1566c29fa5a6Sopenharmony_ci state = WIN_MGR->GetHoverScrollState(); 1567c29fa5a6Sopenharmony_ci return RET_OK; 1568c29fa5a6Sopenharmony_ci} 1569c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 1570c29fa5a6Sopenharmony_ci 1571c29fa5a6Sopenharmony_ciint32_t MMIService::GetHoverScrollState(bool &state) 1572c29fa5a6Sopenharmony_ci{ 1573c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1574c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 1575c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1576c29fa5a6Sopenharmony_ci [this, &state] { 1577c29fa5a6Sopenharmony_ci return this->ReadHoverScrollState(state); 1578c29fa5a6Sopenharmony_ci } 1579c29fa5a6Sopenharmony_ci ); 1580c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1581c29fa5a6Sopenharmony_ci MMI_HILOGE("Get mouse hover scroll state, return:%{public}d", ret); 1582c29fa5a6Sopenharmony_ci return ret; 1583c29fa5a6Sopenharmony_ci } 1584c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 1585c29fa5a6Sopenharmony_ci return RET_OK; 1586c29fa5a6Sopenharmony_ci} 1587c29fa5a6Sopenharmony_ci 1588c29fa5a6Sopenharmony_ciint32_t MMIService::OnSupportKeys(int32_t deviceId, std::vector<int32_t> &keys, std::vector<bool> &keystroke) 1589c29fa5a6Sopenharmony_ci{ 1590c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 1591c29fa5a6Sopenharmony_ci int32_t ret = INPUT_DEV_MGR->SupportKeys(deviceId, keys, keystroke); 1592c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1593c29fa5a6Sopenharmony_ci MMI_HILOGE("Device id not support"); 1594c29fa5a6Sopenharmony_ci return ret; 1595c29fa5a6Sopenharmony_ci } 1596c29fa5a6Sopenharmony_ci if (keystroke.size() > MAX_SUPPORT_KEY) { 1597c29fa5a6Sopenharmony_ci MMI_HILOGE("Device exceeds the max range"); 1598c29fa5a6Sopenharmony_ci return RET_ERR; 1599c29fa5a6Sopenharmony_ci } 1600c29fa5a6Sopenharmony_ci return RET_OK; 1601c29fa5a6Sopenharmony_ci} 1602c29fa5a6Sopenharmony_ci 1603c29fa5a6Sopenharmony_ciint32_t MMIService::SupportKeys(int32_t deviceId, std::vector<int32_t> &keys, std::vector<bool> &keystroke) 1604c29fa5a6Sopenharmony_ci{ 1605c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 1606c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1607c29fa5a6Sopenharmony_ci [this, deviceId, &keys, &keystroke] { 1608c29fa5a6Sopenharmony_ci return this->OnSupportKeys(deviceId, keys, keystroke); 1609c29fa5a6Sopenharmony_ci } 1610c29fa5a6Sopenharmony_ci ); 1611c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1612c29fa5a6Sopenharmony_ci MMI_HILOGE("Support keys info process failed, ret:%{public}d", ret); 1613c29fa5a6Sopenharmony_ci return ret; 1614c29fa5a6Sopenharmony_ci } 1615c29fa5a6Sopenharmony_ci return RET_OK; 1616c29fa5a6Sopenharmony_ci} 1617c29fa5a6Sopenharmony_ci 1618c29fa5a6Sopenharmony_ciint32_t MMIService::OnGetDeviceIds(std::vector<int32_t> &ids) 1619c29fa5a6Sopenharmony_ci{ 1620c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 1621c29fa5a6Sopenharmony_ci ids = INPUT_DEV_MGR->GetInputDeviceIds(); 1622c29fa5a6Sopenharmony_ci return RET_OK; 1623c29fa5a6Sopenharmony_ci} 1624c29fa5a6Sopenharmony_ci 1625c29fa5a6Sopenharmony_ciint32_t MMIService::GetDeviceIds(std::vector<int32_t> &ids) 1626c29fa5a6Sopenharmony_ci{ 1627c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 1628c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1629c29fa5a6Sopenharmony_ci [this, &ids] { 1630c29fa5a6Sopenharmony_ci return this->OnGetDeviceIds(ids); 1631c29fa5a6Sopenharmony_ci } 1632c29fa5a6Sopenharmony_ci ); 1633c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1634c29fa5a6Sopenharmony_ci MMI_HILOGE("Get deviceids failed, ret:%{public}d", ret); 1635c29fa5a6Sopenharmony_ci return ret; 1636c29fa5a6Sopenharmony_ci } 1637c29fa5a6Sopenharmony_ci return RET_OK; 1638c29fa5a6Sopenharmony_ci} 1639c29fa5a6Sopenharmony_ci 1640c29fa5a6Sopenharmony_ciint32_t MMIService::OnGetDevice(int32_t deviceId, std::shared_ptr<InputDevice> &inputDevice) 1641c29fa5a6Sopenharmony_ci{ 1642c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 1643c29fa5a6Sopenharmony_ci if (INPUT_DEV_MGR->GetInputDevice(deviceId) == nullptr) { 1644c29fa5a6Sopenharmony_ci MMI_HILOGE("Input device not found"); 1645c29fa5a6Sopenharmony_ci return COMMON_PARAMETER_ERROR; 1646c29fa5a6Sopenharmony_ci } 1647c29fa5a6Sopenharmony_ci inputDevice = INPUT_DEV_MGR->GetInputDevice(deviceId); 1648c29fa5a6Sopenharmony_ci return RET_OK; 1649c29fa5a6Sopenharmony_ci} 1650c29fa5a6Sopenharmony_ci 1651c29fa5a6Sopenharmony_ciint32_t MMIService::GetDevice(int32_t deviceId, std::shared_ptr<InputDevice> &inputDevice) 1652c29fa5a6Sopenharmony_ci{ 1653c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 1654c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1655c29fa5a6Sopenharmony_ci [this, deviceId, &inputDevice] { 1656c29fa5a6Sopenharmony_ci return this->OnGetDevice(deviceId, inputDevice); 1657c29fa5a6Sopenharmony_ci } 1658c29fa5a6Sopenharmony_ci ); 1659c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1660c29fa5a6Sopenharmony_ci MMI_HILOGE("Get input device info failed, ret:%{public}d", ret); 1661c29fa5a6Sopenharmony_ci return ret; 1662c29fa5a6Sopenharmony_ci } 1663c29fa5a6Sopenharmony_ci return RET_OK; 1664c29fa5a6Sopenharmony_ci} 1665c29fa5a6Sopenharmony_ci 1666c29fa5a6Sopenharmony_ciint32_t MMIService::OnRegisterDevListener(int32_t pid) 1667c29fa5a6Sopenharmony_ci{ 1668c29fa5a6Sopenharmony_ci auto sess = GetSession(GetClientFd(pid)); 1669c29fa5a6Sopenharmony_ci CHKPR(sess, RET_ERR); 1670c29fa5a6Sopenharmony_ci INPUT_DEV_MGR->AddDevListener(sess); 1671c29fa5a6Sopenharmony_ci return RET_OK; 1672c29fa5a6Sopenharmony_ci} 1673c29fa5a6Sopenharmony_ci 1674c29fa5a6Sopenharmony_ciint32_t MMIService::RegisterDevListener() 1675c29fa5a6Sopenharmony_ci{ 1676c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 1677c29fa5a6Sopenharmony_ci int32_t pid = GetCallingPid(); 1678c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1679c29fa5a6Sopenharmony_ci [this, pid] { 1680c29fa5a6Sopenharmony_ci return this->OnRegisterDevListener(pid); 1681c29fa5a6Sopenharmony_ci } 1682c29fa5a6Sopenharmony_ci ); 1683c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1684c29fa5a6Sopenharmony_ci MMI_HILOGE("Register device listener failed, ret:%{public}d", ret); 1685c29fa5a6Sopenharmony_ci return ret; 1686c29fa5a6Sopenharmony_ci } 1687c29fa5a6Sopenharmony_ci return RET_OK; 1688c29fa5a6Sopenharmony_ci} 1689c29fa5a6Sopenharmony_ci 1690c29fa5a6Sopenharmony_ciint32_t MMIService::OnUnregisterDevListener(int32_t pid) 1691c29fa5a6Sopenharmony_ci{ 1692c29fa5a6Sopenharmony_ci auto sess = GetSession(GetClientFd(pid)); 1693c29fa5a6Sopenharmony_ci INPUT_DEV_MGR->RemoveDevListener(sess); 1694c29fa5a6Sopenharmony_ci return RET_OK; 1695c29fa5a6Sopenharmony_ci} 1696c29fa5a6Sopenharmony_ci 1697c29fa5a6Sopenharmony_ciint32_t MMIService::UnregisterDevListener() 1698c29fa5a6Sopenharmony_ci{ 1699c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 1700c29fa5a6Sopenharmony_ci int32_t pid = GetCallingPid(); 1701c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1702c29fa5a6Sopenharmony_ci [this, pid] { 1703c29fa5a6Sopenharmony_ci return this->OnUnregisterDevListener(pid); 1704c29fa5a6Sopenharmony_ci } 1705c29fa5a6Sopenharmony_ci ); 1706c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1707c29fa5a6Sopenharmony_ci MMI_HILOGE("Unregister device listener failed failed, ret:%{public}d", ret); 1708c29fa5a6Sopenharmony_ci return ret; 1709c29fa5a6Sopenharmony_ci } 1710c29fa5a6Sopenharmony_ci return RET_OK; 1711c29fa5a6Sopenharmony_ci} 1712c29fa5a6Sopenharmony_ci 1713c29fa5a6Sopenharmony_ciint32_t MMIService::OnGetKeyboardType(int32_t deviceId, int32_t &keyboardType) 1714c29fa5a6Sopenharmony_ci{ 1715c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 1716c29fa5a6Sopenharmony_ci int32_t ret = INPUT_DEV_MGR->GetKeyboardType(deviceId, keyboardType); 1717c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1718c29fa5a6Sopenharmony_ci MMI_HILOGD("GetKeyboardType call failed"); 1719c29fa5a6Sopenharmony_ci return ret; 1720c29fa5a6Sopenharmony_ci } 1721c29fa5a6Sopenharmony_ci return RET_OK; 1722c29fa5a6Sopenharmony_ci} 1723c29fa5a6Sopenharmony_ci 1724c29fa5a6Sopenharmony_ciint32_t MMIService::GetKeyboardType(int32_t deviceId, int32_t &keyboardType) 1725c29fa5a6Sopenharmony_ci{ 1726c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 1727c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1728c29fa5a6Sopenharmony_ci [this, deviceId, &keyboardType] { 1729c29fa5a6Sopenharmony_ci return this->OnGetKeyboardType(deviceId, keyboardType); 1730c29fa5a6Sopenharmony_ci } 1731c29fa5a6Sopenharmony_ci ); 1732c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1733c29fa5a6Sopenharmony_ci MMI_HILOGD("Get keyboard type failed, ret:%{public}d", ret); 1734c29fa5a6Sopenharmony_ci return ret; 1735c29fa5a6Sopenharmony_ci } 1736c29fa5a6Sopenharmony_ci return ret; 1737c29fa5a6Sopenharmony_ci} 1738c29fa5a6Sopenharmony_ci 1739c29fa5a6Sopenharmony_ciint32_t MMIService::SetKeyboardRepeatDelay(int32_t delay) 1740c29fa5a6Sopenharmony_ci{ 1741c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1742c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_KEYBOARD 1743c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1744c29fa5a6Sopenharmony_ci [delay] { 1745c29fa5a6Sopenharmony_ci return ::OHOS::DelayedSingleton<KeyAutoRepeat>::GetInstance()->SetKeyboardRepeatDelay(delay); 1746c29fa5a6Sopenharmony_ci } 1747c29fa5a6Sopenharmony_ci ); 1748c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1749c29fa5a6Sopenharmony_ci MMI_HILOGE("Set keyboard repeat delay failed, ret:%{public}d", ret); 1750c29fa5a6Sopenharmony_ci return ret; 1751c29fa5a6Sopenharmony_ci } 1752c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD 1753c29fa5a6Sopenharmony_ci return RET_OK; 1754c29fa5a6Sopenharmony_ci} 1755c29fa5a6Sopenharmony_ci 1756c29fa5a6Sopenharmony_ciint32_t MMIService::SetKeyboardRepeatRate(int32_t rate) 1757c29fa5a6Sopenharmony_ci{ 1758c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1759c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_KEYBOARD 1760c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1761c29fa5a6Sopenharmony_ci [rate] { 1762c29fa5a6Sopenharmony_ci return ::OHOS::DelayedSingleton<KeyAutoRepeat>::GetInstance()->SetKeyboardRepeatRate(rate); 1763c29fa5a6Sopenharmony_ci } 1764c29fa5a6Sopenharmony_ci ); 1765c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1766c29fa5a6Sopenharmony_ci MMI_HILOGE("Set keyboard repeat rate failed, ret:%{public}d", ret); 1767c29fa5a6Sopenharmony_ci return ret; 1768c29fa5a6Sopenharmony_ci } 1769c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD 1770c29fa5a6Sopenharmony_ci return RET_OK; 1771c29fa5a6Sopenharmony_ci} 1772c29fa5a6Sopenharmony_ci 1773c29fa5a6Sopenharmony_ciint32_t MMIService::GetKeyboardRepeatDelay(int32_t &delay) 1774c29fa5a6Sopenharmony_ci{ 1775c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1776c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_KEYBOARD 1777c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1778c29fa5a6Sopenharmony_ci [&delay] { 1779c29fa5a6Sopenharmony_ci return ::OHOS::DelayedSingleton<KeyAutoRepeat>::GetInstance()->GetKeyboardRepeatDelay(delay); 1780c29fa5a6Sopenharmony_ci } 1781c29fa5a6Sopenharmony_ci ); 1782c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1783c29fa5a6Sopenharmony_ci MMI_HILOGE("Get keyboard repeat delay failed, ret:%{public}d", ret); 1784c29fa5a6Sopenharmony_ci return ret; 1785c29fa5a6Sopenharmony_ci } 1786c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD 1787c29fa5a6Sopenharmony_ci return RET_OK; 1788c29fa5a6Sopenharmony_ci} 1789c29fa5a6Sopenharmony_ci 1790c29fa5a6Sopenharmony_ciint32_t MMIService::GetKeyboardRepeatRate(int32_t &rate) 1791c29fa5a6Sopenharmony_ci{ 1792c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1793c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_KEYBOARD 1794c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1795c29fa5a6Sopenharmony_ci [&rate] { 1796c29fa5a6Sopenharmony_ci return ::OHOS::DelayedSingleton<KeyAutoRepeat>::GetInstance()->GetKeyboardRepeatRate(rate); 1797c29fa5a6Sopenharmony_ci } 1798c29fa5a6Sopenharmony_ci ); 1799c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1800c29fa5a6Sopenharmony_ci MMI_HILOGE("Get keyboard repeat rate failed, ret:%{public}d", ret); 1801c29fa5a6Sopenharmony_ci return ret; 1802c29fa5a6Sopenharmony_ci } 1803c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD 1804c29fa5a6Sopenharmony_ci return RET_OK; 1805c29fa5a6Sopenharmony_ci} 1806c29fa5a6Sopenharmony_ci 1807c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_INTERCEPTOR) || defined(OHOS_BUILD_ENABLE_MONITOR) 1808c29fa5a6Sopenharmony_ciint32_t MMIService::CheckAddInput(int32_t pid, InputHandlerType handlerType, HandleEventType eventType, 1809c29fa5a6Sopenharmony_ci int32_t priority, uint32_t deviceTags) 1810c29fa5a6Sopenharmony_ci{ 1811c29fa5a6Sopenharmony_ci auto sess = GetSessionByPid(pid); 1812c29fa5a6Sopenharmony_ci CHKPR(sess, ERROR_NULL_POINTER); 1813c29fa5a6Sopenharmony_ci return sMsgHandler_.OnAddInputHandler(sess, handlerType, eventType, priority, deviceTags); 1814c29fa5a6Sopenharmony_ci} 1815c29fa5a6Sopenharmony_ci 1816c29fa5a6Sopenharmony_ciint32_t MMIService::CheckAddInput(int32_t pid, InputHandlerType handlerType, std::vector<int32_t> actionsType) 1817c29fa5a6Sopenharmony_ci{ 1818c29fa5a6Sopenharmony_ci auto sess = GetSessionByPid(pid); 1819c29fa5a6Sopenharmony_ci CHKPR(sess, ERROR_NULL_POINTER); 1820c29fa5a6Sopenharmony_ci return sMsgHandler_.OnAddInputHandler(sess, handlerType, actionsType); 1821c29fa5a6Sopenharmony_ci} 1822c29fa5a6Sopenharmony_ci 1823c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_INTERCEPTOR || OHOS_BUILD_ENABLE_MONITOR 1824c29fa5a6Sopenharmony_ci 1825c29fa5a6Sopenharmony_ciint32_t MMIService::AddInputHandler(InputHandlerType handlerType, HandleEventType eventType, int32_t priority, 1826c29fa5a6Sopenharmony_ci uint32_t deviceTags, std::vector<int32_t> actionsType) 1827c29fa5a6Sopenharmony_ci{ 1828c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1829c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_MONITOR) && defined(PLAYER_FRAMEWORK_EXISTS) 1830c29fa5a6Sopenharmony_ci bool isRegisterCaptureCb = false; 1831c29fa5a6Sopenharmony_ci if (!PER_HELPER->VerifySystemApp() && handlerType == InputHandlerType::MONITOR) { 1832c29fa5a6Sopenharmony_ci isRegisterCaptureCb = true; 1833c29fa5a6Sopenharmony_ci } 1834c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_MONITOR && PLAYER_FRAMEWORK_EXISTS 1835c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_INTERCEPTOR) || defined(OHOS_BUILD_ENABLE_MONITOR) 1836c29fa5a6Sopenharmony_ci int32_t pid = GetCallingPid(); 1837c29fa5a6Sopenharmony_ci int32_t ret = RET_ERR; 1838c29fa5a6Sopenharmony_ci if (actionsType.empty()) { 1839c29fa5a6Sopenharmony_ci ret = delegateTasks_.PostSyncTask( 1840c29fa5a6Sopenharmony_ci [this, pid, handlerType, eventType, priority, deviceTags, isRegisterCaptureCb] { 1841c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_MONITOR) && defined(PLAYER_FRAMEWORK_EXISTS) 1842c29fa5a6Sopenharmony_ci if (isRegisterCaptureCb) { 1843c29fa5a6Sopenharmony_ci RegisterScreenCaptureCallback(); 1844c29fa5a6Sopenharmony_ci } 1845c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_MONITOR && PLAYER_FRAMEWORK_EXISTS 1846c29fa5a6Sopenharmony_ci return this->CheckAddInput(pid, handlerType, eventType, priority, deviceTags); 1847c29fa5a6Sopenharmony_ci } 1848c29fa5a6Sopenharmony_ci ); 1849c29fa5a6Sopenharmony_ci } else { 1850c29fa5a6Sopenharmony_ci ret = delegateTasks_.PostSyncTask( 1851c29fa5a6Sopenharmony_ci [this, pid, handlerType, actionsType, isRegisterCaptureCb] { 1852c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_MONITOR) && defined(PLAYER_FRAMEWORK_EXISTS) 1853c29fa5a6Sopenharmony_ci if (isRegisterCaptureCb) { 1854c29fa5a6Sopenharmony_ci RegisterScreenCaptureCallback(); 1855c29fa5a6Sopenharmony_ci } 1856c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_MONITOR && PLAYER_FRAMEWORK_EXISTS 1857c29fa5a6Sopenharmony_ci return this->CheckAddInput(pid, handlerType, actionsType); 1858c29fa5a6Sopenharmony_ci } 1859c29fa5a6Sopenharmony_ci ); 1860c29fa5a6Sopenharmony_ci } 1861c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1862c29fa5a6Sopenharmony_ci MMI_HILOGE("Add input handler failed, ret:%{public}d", ret); 1863c29fa5a6Sopenharmony_ci return ret; 1864c29fa5a6Sopenharmony_ci } 1865c29fa5a6Sopenharmony_ci ret = ObserverAddInputHandler(pid); 1866c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1867c29fa5a6Sopenharmony_ci MMI_HILOGE("AddInputHandler info to observer failed, ret:%{public}d", ret); 1868c29fa5a6Sopenharmony_ci return ret; 1869c29fa5a6Sopenharmony_ci } 1870c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_INTERCEPTOR || OHOS_BUILD_ENABLE_MONITOR 1871c29fa5a6Sopenharmony_ci return RET_OK; 1872c29fa5a6Sopenharmony_ci} 1873c29fa5a6Sopenharmony_ci 1874c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_INTERCEPTOR) || defined(OHOS_BUILD_ENABLE_MONITOR) 1875c29fa5a6Sopenharmony_ciint32_t MMIService::CheckRemoveInput(int32_t pid, InputHandlerType handlerType, HandleEventType eventType, 1876c29fa5a6Sopenharmony_ci int32_t priority, uint32_t deviceTags) 1877c29fa5a6Sopenharmony_ci{ 1878c29fa5a6Sopenharmony_ci auto sess = GetSessionByPid(pid); 1879c29fa5a6Sopenharmony_ci CHKPR(sess, ERROR_NULL_POINTER); 1880c29fa5a6Sopenharmony_ci return sMsgHandler_.OnRemoveInputHandler(sess, handlerType, eventType, priority, deviceTags); 1881c29fa5a6Sopenharmony_ci} 1882c29fa5a6Sopenharmony_ci 1883c29fa5a6Sopenharmony_ciint32_t MMIService::CheckRemoveInput(int32_t pid, InputHandlerType handlerType, std::vector<int32_t> actionsType) 1884c29fa5a6Sopenharmony_ci{ 1885c29fa5a6Sopenharmony_ci auto sess = GetSessionByPid(pid); 1886c29fa5a6Sopenharmony_ci CHKPR(sess, ERROR_NULL_POINTER); 1887c29fa5a6Sopenharmony_ci return sMsgHandler_.OnRemoveInputHandler(sess, handlerType, actionsType); 1888c29fa5a6Sopenharmony_ci} 1889c29fa5a6Sopenharmony_ci 1890c29fa5a6Sopenharmony_ciint32_t MMIService::ObserverAddInputHandler(int32_t pid) 1891c29fa5a6Sopenharmony_ci{ 1892c29fa5a6Sopenharmony_ci if (NapProcess::GetInstance()->GetNapClientPid() != REMOVE_OBSERVER) { 1893c29fa5a6Sopenharmony_ci OHOS::MMI::NapProcess::NapStatusData napData; 1894c29fa5a6Sopenharmony_ci napData.pid = GetCallingPid(); 1895c29fa5a6Sopenharmony_ci napData.uid = GetCallingUid(); 1896c29fa5a6Sopenharmony_ci auto sess = GetSessionByPid(pid); 1897c29fa5a6Sopenharmony_ci CHKPR(sess, ERROR_NULL_POINTER); 1898c29fa5a6Sopenharmony_ci napData.bundleName = sess->GetProgramName(); 1899c29fa5a6Sopenharmony_ci int32_t syncState = SUBSCRIBED; 1900c29fa5a6Sopenharmony_ci MMI_HILOGD("AddInputHandler info to observer : pid:%{public}d, uid:%d, bundleName:%{public}s", 1901c29fa5a6Sopenharmony_ci napData.pid, napData.uid, napData.bundleName.c_str()); 1902c29fa5a6Sopenharmony_ci NapProcess::GetInstance()->AddMmiSubscribedEventData(napData, syncState); 1903c29fa5a6Sopenharmony_ci if (NapProcess::GetInstance()->GetNapClientPid() != UNOBSERVED) { 1904c29fa5a6Sopenharmony_ci NapProcess::GetInstance()->NotifyBundleName(napData, syncState); 1905c29fa5a6Sopenharmony_ci } 1906c29fa5a6Sopenharmony_ci } 1907c29fa5a6Sopenharmony_ci return RET_OK; 1908c29fa5a6Sopenharmony_ci} 1909c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_INTERCEPTOR || OHOS_BUILD_ENABLE_MONITOR 1910c29fa5a6Sopenharmony_ci 1911c29fa5a6Sopenharmony_ciint32_t MMIService::RemoveInputHandler(InputHandlerType handlerType, HandleEventType eventType, int32_t priority, 1912c29fa5a6Sopenharmony_ci uint32_t deviceTags, std::vector<int32_t> actionsType) 1913c29fa5a6Sopenharmony_ci{ 1914c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1915c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_INTERCEPTOR) || defined(OHOS_BUILD_ENABLE_MONITOR) 1916c29fa5a6Sopenharmony_ci int32_t pid = GetCallingPid(); 1917c29fa5a6Sopenharmony_ci int32_t ret = RET_ERR; 1918c29fa5a6Sopenharmony_ci if (actionsType.empty()) { 1919c29fa5a6Sopenharmony_ci ret = delegateTasks_.PostSyncTask( 1920c29fa5a6Sopenharmony_ci [this, pid, handlerType, eventType, priority, deviceTags] { 1921c29fa5a6Sopenharmony_ci return this->CheckRemoveInput(pid, handlerType, eventType, priority, deviceTags); 1922c29fa5a6Sopenharmony_ci } 1923c29fa5a6Sopenharmony_ci ); 1924c29fa5a6Sopenharmony_ci } else { 1925c29fa5a6Sopenharmony_ci ret = delegateTasks_.PostSyncTask( 1926c29fa5a6Sopenharmony_ci [this, pid, handlerType, actionsType] { 1927c29fa5a6Sopenharmony_ci return this->CheckRemoveInput(pid, handlerType, actionsType); 1928c29fa5a6Sopenharmony_ci } 1929c29fa5a6Sopenharmony_ci ); 1930c29fa5a6Sopenharmony_ci } 1931c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1932c29fa5a6Sopenharmony_ci MMI_HILOGE("Remove input handler failed, ret:%{public}d", ret); 1933c29fa5a6Sopenharmony_ci return ret; 1934c29fa5a6Sopenharmony_ci } 1935c29fa5a6Sopenharmony_ci if (NapProcess::GetInstance()->GetNapClientPid() != REMOVE_OBSERVER) { 1936c29fa5a6Sopenharmony_ci OHOS::MMI::NapProcess::NapStatusData napData; 1937c29fa5a6Sopenharmony_ci napData.pid = GetCallingPid(); 1938c29fa5a6Sopenharmony_ci napData.uid = GetCallingUid(); 1939c29fa5a6Sopenharmony_ci auto sess = GetSessionByPid(pid); 1940c29fa5a6Sopenharmony_ci CHKPR(sess, ERROR_NULL_POINTER); 1941c29fa5a6Sopenharmony_ci napData.bundleName = sess->GetProgramName(); 1942c29fa5a6Sopenharmony_ci int32_t syncState = UNSUBSCRIBED; 1943c29fa5a6Sopenharmony_ci MMI_HILOGD("RemoveInputHandler info to observer : pid:%{public}d, uid:%{public}d, bundleName:%{public}s", 1944c29fa5a6Sopenharmony_ci napData.pid, napData.uid, napData.bundleName.c_str()); 1945c29fa5a6Sopenharmony_ci NapProcess::GetInstance()->AddMmiSubscribedEventData(napData, syncState); 1946c29fa5a6Sopenharmony_ci if (NapProcess::GetInstance()->GetNapClientPid() != UNOBSERVED) { 1947c29fa5a6Sopenharmony_ci NapProcess::GetInstance()->NotifyBundleName(napData, syncState); 1948c29fa5a6Sopenharmony_ci } 1949c29fa5a6Sopenharmony_ci } 1950c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_INTERCEPTOR || OHOS_BUILD_ENABLE_MONITOR 1951c29fa5a6Sopenharmony_ci return RET_OK; 1952c29fa5a6Sopenharmony_ci} 1953c29fa5a6Sopenharmony_ci 1954c29fa5a6Sopenharmony_ciint32_t MMIService::AddGestureMonitor(InputHandlerType handlerType, 1955c29fa5a6Sopenharmony_ci HandleEventType eventType, TouchGestureType gestureType, int32_t fingers) 1956c29fa5a6Sopenharmony_ci{ 1957c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 1958c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_TOUCH) && defined(OHOS_BUILD_ENABLE_MONITOR) 1959c29fa5a6Sopenharmony_ci int32_t pid = GetCallingPid(); 1960c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 1961c29fa5a6Sopenharmony_ci [this, pid, handlerType, eventType, gestureType, fingers]() -> int32_t { 1962c29fa5a6Sopenharmony_ci if (((eventType & HANDLE_EVENT_TYPE_TOUCH_GESTURE) != HANDLE_EVENT_TYPE_TOUCH_GESTURE)) { 1963c29fa5a6Sopenharmony_ci MMI_HILOGE("Illegal type:%{public}d", eventType); 1964c29fa5a6Sopenharmony_ci return RET_ERR; 1965c29fa5a6Sopenharmony_ci } 1966c29fa5a6Sopenharmony_ci if (!GestureMonitorHandler::CheckMonitorValid(gestureType, fingers)) { 1967c29fa5a6Sopenharmony_ci MMI_HILOGE("Wrong number of fingers:%{public}d", fingers); 1968c29fa5a6Sopenharmony_ci return RET_ERR; 1969c29fa5a6Sopenharmony_ci } 1970c29fa5a6Sopenharmony_ci if (touchGestureAdapter_ == nullptr) { 1971c29fa5a6Sopenharmony_ci touchGestureAdapter_ = TouchGestureAdapter::GetGestureFactory(); 1972c29fa5a6Sopenharmony_ci } 1973c29fa5a6Sopenharmony_ci if (touchGestureAdapter_ != nullptr) { 1974c29fa5a6Sopenharmony_ci touchGestureAdapter_->SetGestureCondition(true, gestureType, fingers); 1975c29fa5a6Sopenharmony_ci } 1976c29fa5a6Sopenharmony_ci if (delegateInterface_ != nullptr && !delegateInterface_->HasHandler("touchGesture")) { 1977c29fa5a6Sopenharmony_ci auto fun = [this](std::shared_ptr<PointerEvent> event) -> int32_t { 1978c29fa5a6Sopenharmony_ci CHKPR(touchGestureAdapter_, ERROR_NULL_POINTER); 1979c29fa5a6Sopenharmony_ci touchGestureAdapter_->process(event); 1980c29fa5a6Sopenharmony_ci return RET_OK; 1981c29fa5a6Sopenharmony_ci }; 1982c29fa5a6Sopenharmony_ci int32_t ret = delegateInterface_->AddHandler(InputHandlerType::MONITOR, 1983c29fa5a6Sopenharmony_ci {"touchGesture", HANDLE_EVENT_TYPE_POINTER, HandlerMode::SYNC, 0, 0, fun}); 1984c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1985c29fa5a6Sopenharmony_ci MMI_HILOGE("Failed to add gesture recognizer, ret:%{public}d", ret); 1986c29fa5a6Sopenharmony_ci return ret; 1987c29fa5a6Sopenharmony_ci } 1988c29fa5a6Sopenharmony_ci } 1989c29fa5a6Sopenharmony_ci auto sess = GetSessionByPid(pid); 1990c29fa5a6Sopenharmony_ci CHKPR(sess, ERROR_NULL_POINTER); 1991c29fa5a6Sopenharmony_ci return sMsgHandler_.OnAddGestureMonitor(sess, handlerType, eventType, gestureType, fingers); 1992c29fa5a6Sopenharmony_ci }); 1993c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 1994c29fa5a6Sopenharmony_ci MMI_HILOGE("Add gesture handler failed, ret:%{public}d", ret); 1995c29fa5a6Sopenharmony_ci return ret; 1996c29fa5a6Sopenharmony_ci } 1997c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_TOUCH && OHOS_BUILD_ENABLE_MONITOR 1998c29fa5a6Sopenharmony_ci return RET_OK; 1999c29fa5a6Sopenharmony_ci} 2000c29fa5a6Sopenharmony_ci 2001c29fa5a6Sopenharmony_ciint32_t MMIService::RemoveGestureMonitor(InputHandlerType handlerType, 2002c29fa5a6Sopenharmony_ci HandleEventType eventType, TouchGestureType gestureType, int32_t fingers) 2003c29fa5a6Sopenharmony_ci{ 2004c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2005c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_TOUCH) && defined(OHOS_BUILD_ENABLE_MONITOR) 2006c29fa5a6Sopenharmony_ci int32_t pid = GetCallingPid(); 2007c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2008c29fa5a6Sopenharmony_ci [this, pid, handlerType, eventType, gestureType, fingers]() -> int32_t { 2009c29fa5a6Sopenharmony_ci auto sess = GetSessionByPid(pid); 2010c29fa5a6Sopenharmony_ci CHKPR(sess, ERROR_NULL_POINTER); 2011c29fa5a6Sopenharmony_ci int32_t ret = sMsgHandler_.OnRemoveGestureMonitor(sess, handlerType, eventType, gestureType, fingers); 2012c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2013c29fa5a6Sopenharmony_ci MMI_HILOGE("Failed to remove gesture recognizer, ret:%{public}d", ret); 2014c29fa5a6Sopenharmony_ci return ret; 2015c29fa5a6Sopenharmony_ci } 2016c29fa5a6Sopenharmony_ci auto monitorHandler = InputHandler->GetMonitorHandler(); 2017c29fa5a6Sopenharmony_ci if (monitorHandler && !monitorHandler->CheckHasInputHandler(HANDLE_EVENT_TYPE_TOUCH_GESTURE)) { 2018c29fa5a6Sopenharmony_ci if (delegateInterface_ && delegateInterface_->HasHandler("touchGesture")) { 2019c29fa5a6Sopenharmony_ci delegateInterface_->RemoveHandler(InputHandlerType::MONITOR, "touchGesture"); 2020c29fa5a6Sopenharmony_ci } 2021c29fa5a6Sopenharmony_ci } 2022c29fa5a6Sopenharmony_ci if (touchGestureAdapter_) { 2023c29fa5a6Sopenharmony_ci touchGestureAdapter_->SetGestureCondition(false, gestureType, fingers); 2024c29fa5a6Sopenharmony_ci } 2025c29fa5a6Sopenharmony_ci return RET_OK; 2026c29fa5a6Sopenharmony_ci }); 2027c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2028c29fa5a6Sopenharmony_ci MMI_HILOGE("Remove gesture handler failed, ret:%{public}d", ret); 2029c29fa5a6Sopenharmony_ci return ret; 2030c29fa5a6Sopenharmony_ci } 2031c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_TOUCH && OHOS_BUILD_ENABLE_MONITOR 2032c29fa5a6Sopenharmony_ci return RET_OK; 2033c29fa5a6Sopenharmony_ci} 2034c29fa5a6Sopenharmony_ci 2035c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_MONITOR 2036c29fa5a6Sopenharmony_ciint32_t MMIService::CheckMarkConsumed(int32_t pid, int32_t eventId) 2037c29fa5a6Sopenharmony_ci{ 2038c29fa5a6Sopenharmony_ci auto sess = GetSessionByPid(pid); 2039c29fa5a6Sopenharmony_ci CHKPR(sess, ERROR_NULL_POINTER); 2040c29fa5a6Sopenharmony_ci return sMsgHandler_.OnMarkConsumed(sess, eventId); 2041c29fa5a6Sopenharmony_ci} 2042c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_MONITOR 2043c29fa5a6Sopenharmony_ci 2044c29fa5a6Sopenharmony_ciint32_t MMIService::MarkEventConsumed(int32_t eventId) 2045c29fa5a6Sopenharmony_ci{ 2046c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 2047c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_MONITOR 2048c29fa5a6Sopenharmony_ci int32_t pid = GetCallingPid(); 2049c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2050c29fa5a6Sopenharmony_ci [this, pid, eventId] { 2051c29fa5a6Sopenharmony_ci return this->CheckMarkConsumed(pid, eventId); 2052c29fa5a6Sopenharmony_ci } 2053c29fa5a6Sopenharmony_ci ); 2054c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2055c29fa5a6Sopenharmony_ci MMI_HILOGE("Mark event consumed failed, ret:%{public}d", ret); 2056c29fa5a6Sopenharmony_ci return ret; 2057c29fa5a6Sopenharmony_ci } 2058c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_MONITOR 2059c29fa5a6Sopenharmony_ci return RET_OK; 2060c29fa5a6Sopenharmony_ci} 2061c29fa5a6Sopenharmony_ci 2062c29fa5a6Sopenharmony_ciint32_t MMIService::MoveMouseEvent(int32_t offsetX, int32_t offsetY) 2063c29fa5a6Sopenharmony_ci{ 2064c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 2065c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) 2066c29fa5a6Sopenharmony_ci int32_t ret = 2067c29fa5a6Sopenharmony_ci delegateTasks_.PostSyncTask( 2068c29fa5a6Sopenharmony_ci [this, offsetX, offsetY] { 2069c29fa5a6Sopenharmony_ci return sMsgHandler_.OnMoveMouse(offsetX, offsetY); 2070c29fa5a6Sopenharmony_ci } 2071c29fa5a6Sopenharmony_ci ); 2072c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2073c29fa5a6Sopenharmony_ci MMI_HILOGE("The movemouse event processed failed, ret:%{public}d", ret); 2074c29fa5a6Sopenharmony_ci return ret; 2075c29fa5a6Sopenharmony_ci } 2076c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING 2077c29fa5a6Sopenharmony_ci return RET_OK; 2078c29fa5a6Sopenharmony_ci} 2079c29fa5a6Sopenharmony_ci 2080c29fa5a6Sopenharmony_ciint32_t MMIService::InjectKeyEvent(const std::shared_ptr<KeyEvent> keyEvent, bool isNativeInject) 2081c29fa5a6Sopenharmony_ci{ 2082c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 2083c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_KEYBOARD 2084c29fa5a6Sopenharmony_ci int32_t ret; 2085c29fa5a6Sopenharmony_ci int32_t pid = GetCallingPid(); 2086c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_ANCO 2087c29fa5a6Sopenharmony_ci ret = InjectKeyEventExt(keyEvent, pid, isNativeInject); 2088c29fa5a6Sopenharmony_ci#else 2089c29fa5a6Sopenharmony_ci ret = delegateTasks_.PostSyncTask( 2090c29fa5a6Sopenharmony_ci [this, keyEvent, pid, isNativeInject] { 2091c29fa5a6Sopenharmony_ci return this->CheckInjectKeyEvent(keyEvent, pid, isNativeInject); 2092c29fa5a6Sopenharmony_ci } 2093c29fa5a6Sopenharmony_ci ); 2094c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_ANCO 2095c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2096c29fa5a6Sopenharmony_ci MMI_HILOGE("Inject key event failed, ret:%{public}d", ret); 2097c29fa5a6Sopenharmony_ci return ret; 2098c29fa5a6Sopenharmony_ci } 2099c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD 2100c29fa5a6Sopenharmony_ci return RET_OK; 2101c29fa5a6Sopenharmony_ci} 2102c29fa5a6Sopenharmony_ci 2103c29fa5a6Sopenharmony_ciint32_t MMIService::CheckInjectKeyEvent(const std::shared_ptr<KeyEvent> keyEvent, int32_t pid, bool isNativeInject) 2104c29fa5a6Sopenharmony_ci{ 2105c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_KEYBOARD 2106c29fa5a6Sopenharmony_ci CHKPR(keyEvent, ERROR_NULL_POINTER); 2107c29fa5a6Sopenharmony_ci LogTracer lt(keyEvent->GetId(), keyEvent->GetEventType(), keyEvent->GetKeyAction()); 2108c29fa5a6Sopenharmony_ci return sMsgHandler_.OnInjectKeyEvent(keyEvent, pid, isNativeInject); 2109c29fa5a6Sopenharmony_ci#else 2110c29fa5a6Sopenharmony_ci return RET_OK; 2111c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD 2112c29fa5a6Sopenharmony_ci} 2113c29fa5a6Sopenharmony_ci 2114c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_KEYBOARD 2115c29fa5a6Sopenharmony_ciint32_t MMIService::OnGetKeyState(std::vector<int32_t> &pressedKeys, std::map<int32_t, int32_t> &specialKeysState) 2116c29fa5a6Sopenharmony_ci{ 2117c29fa5a6Sopenharmony_ci auto keyEvent = KeyEventHdr->GetKeyEvent(); 2118c29fa5a6Sopenharmony_ci CHKPR(keyEvent, ERROR_NULL_POINTER); 2119c29fa5a6Sopenharmony_ci pressedKeys = keyEvent->GetPressedKeys(); 2120c29fa5a6Sopenharmony_ci for (auto iter = pressedKeys.begin(); iter != pressedKeys.end();) { 2121c29fa5a6Sopenharmony_ci if (g_keyCodeValueSet.find(*iter) == g_keyCodeValueSet.end()) { 2122c29fa5a6Sopenharmony_ci iter = pressedKeys.erase(iter); 2123c29fa5a6Sopenharmony_ci continue; 2124c29fa5a6Sopenharmony_ci } 2125c29fa5a6Sopenharmony_ci ++iter; 2126c29fa5a6Sopenharmony_ci } 2127c29fa5a6Sopenharmony_ci specialKeysState[KeyEvent::KEYCODE_CAPS_LOCK] = 2128c29fa5a6Sopenharmony_ci static_cast<int32_t>(keyEvent->GetFunctionKey(KeyEvent::CAPS_LOCK_FUNCTION_KEY)); 2129c29fa5a6Sopenharmony_ci specialKeysState[KeyEvent::KEYCODE_SCROLL_LOCK] = 2130c29fa5a6Sopenharmony_ci static_cast<int32_t>(keyEvent->GetFunctionKey(KeyEvent::SCROLL_LOCK_FUNCTION_KEY)); 2131c29fa5a6Sopenharmony_ci specialKeysState[KeyEvent::KEYCODE_NUM_LOCK] = 2132c29fa5a6Sopenharmony_ci static_cast<int32_t>(keyEvent->GetFunctionKey(KeyEvent::NUM_LOCK_FUNCTION_KEY)); 2133c29fa5a6Sopenharmony_ci return RET_OK; 2134c29fa5a6Sopenharmony_ci} 2135c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD 2136c29fa5a6Sopenharmony_ci 2137c29fa5a6Sopenharmony_ciint32_t MMIService::CheckInjectPointerEvent(const std::shared_ptr<PointerEvent> pointerEvent, 2138c29fa5a6Sopenharmony_ci int32_t pid, bool isNativeInject, bool isShell) 2139c29fa5a6Sopenharmony_ci{ 2140c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) || defined(OHOS_BUILD_ENABLE_TOUCH) 2141c29fa5a6Sopenharmony_ci CHKPR(pointerEvent, ERROR_NULL_POINTER); 2142c29fa5a6Sopenharmony_ci LogTracer lt(pointerEvent->GetId(), pointerEvent->GetEventType(), pointerEvent->GetPointerAction()); 2143c29fa5a6Sopenharmony_ci return sMsgHandler_.OnInjectPointerEvent(pointerEvent, pid, isNativeInject, isShell); 2144c29fa5a6Sopenharmony_ci#else 2145c29fa5a6Sopenharmony_ci return RET_OK; 2146c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER || OHOS_BUILD_ENABLE_TOUCH 2147c29fa5a6Sopenharmony_ci} 2148c29fa5a6Sopenharmony_ci 2149c29fa5a6Sopenharmony_ciint32_t MMIService::InjectPointerEvent(const std::shared_ptr<PointerEvent> pointerEvent, bool isNativeInject) 2150c29fa5a6Sopenharmony_ci{ 2151c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 2152c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) || defined(OHOS_BUILD_ENABLE_TOUCH) 2153c29fa5a6Sopenharmony_ci int32_t ret; 2154c29fa5a6Sopenharmony_ci int32_t pid = GetCallingPid(); 2155c29fa5a6Sopenharmony_ci bool isShell = PER_HELPER->RequestFromShell(); 2156c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_ANCO 2157c29fa5a6Sopenharmony_ci ret = InjectPointerEventExt(pointerEvent, pid, isNativeInject, isShell); 2158c29fa5a6Sopenharmony_ci#else 2159c29fa5a6Sopenharmony_ci ret = delegateTasks_.PostSyncTask( 2160c29fa5a6Sopenharmony_ci [this, pointerEvent, pid, isNativeInject, isShell] { 2161c29fa5a6Sopenharmony_ci return this->CheckInjectPointerEvent(pointerEvent, pid, isNativeInject, isShell); 2162c29fa5a6Sopenharmony_ci } 2163c29fa5a6Sopenharmony_ci ); 2164c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_ANCO 2165c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2166c29fa5a6Sopenharmony_ci MMI_HILOGE("Inject pointer event failed, ret:%{public}d", ret); 2167c29fa5a6Sopenharmony_ci return ret; 2168c29fa5a6Sopenharmony_ci } 2169c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER || OHOS_BUILD_ENABLE_TOUCH 2170c29fa5a6Sopenharmony_ci return RET_OK; 2171c29fa5a6Sopenharmony_ci} 2172c29fa5a6Sopenharmony_ci 2173c29fa5a6Sopenharmony_ci#ifdef OHOS_RSS_CLIENT 2174c29fa5a6Sopenharmony_civoid MMIService::OnAddResSchedSystemAbility(int32_t systemAbilityId, const std::string &deviceId) 2175c29fa5a6Sopenharmony_ci{ 2176c29fa5a6Sopenharmony_ci int sleepSeconds = 1; 2177c29fa5a6Sopenharmony_ci sleep(sleepSeconds); 2178c29fa5a6Sopenharmony_ci uint64_t tid = tid_.load(); 2179c29fa5a6Sopenharmony_ci int32_t userInteraction = 2; 2180c29fa5a6Sopenharmony_ci std::unordered_map<std::string, std::string> payload; 2181c29fa5a6Sopenharmony_ci payload["uid"] = std::to_string(getuid()); 2182c29fa5a6Sopenharmony_ci payload["pid"] = std::to_string(getpid()); 2183c29fa5a6Sopenharmony_ci payload["extType"] = "10002"; 2184c29fa5a6Sopenharmony_ci payload["tid"] = std::to_string(tid); 2185c29fa5a6Sopenharmony_ci payload["isSa"] = "1"; 2186c29fa5a6Sopenharmony_ci payload["cgroupPrio"] = "1"; 2187c29fa5a6Sopenharmony_ci payload["threadName"] = "mmi_service"; 2188c29fa5a6Sopenharmony_ci ResourceSchedule::ResSchedClient::GetInstance().ReportData( 2189c29fa5a6Sopenharmony_ci ResourceSchedule::ResType::RES_TYPE_KEY_PERF_SCENE, userInteraction, payload); 2190c29fa5a6Sopenharmony_ci} 2191c29fa5a6Sopenharmony_ci#endif // OHOS_RSS_CLIENT 2192c29fa5a6Sopenharmony_ci 2193c29fa5a6Sopenharmony_civoid MMIService::OnAddSystemAbility(int32_t systemAbilityId, const std::string &deviceId) 2194c29fa5a6Sopenharmony_ci{ 2195c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2196c29fa5a6Sopenharmony_ci MMI_HILOGI("systemAbilityId is %{public}d", systemAbilityId); 2197c29fa5a6Sopenharmony_ci#ifdef OHOS_RSS_CLIENT 2198c29fa5a6Sopenharmony_ci if (systemAbilityId == RES_SCHED_SYS_ABILITY_ID) { 2199c29fa5a6Sopenharmony_ci OnAddResSchedSystemAbility(systemAbilityId, deviceId); 2200c29fa5a6Sopenharmony_ci } 2201c29fa5a6Sopenharmony_ci#endif // OHOS_RSS_CLIENT 2202c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_FINGERSENSE_WRAPPER 2203c29fa5a6Sopenharmony_ci if (systemAbilityId == COMMON_EVENT_SERVICE_ID) { 2204c29fa5a6Sopenharmony_ci isCesStart_ = true; 2205c29fa5a6Sopenharmony_ci } 2206c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_FINGERSENSE_WRAPPER 2207c29fa5a6Sopenharmony_ci if (systemAbilityId == APP_MGR_SERVICE_ID) { 2208c29fa5a6Sopenharmony_ci APP_OBSERVER_MGR->InitAppStateObserver(); 2209c29fa5a6Sopenharmony_ci } 2210c29fa5a6Sopenharmony_ci if (systemAbilityId == COMMON_EVENT_SERVICE_ID) { 2211c29fa5a6Sopenharmony_ci DEVICE_MONITOR->InitCommonEventSubscriber(); 2212c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_KEYBOARD) && defined(OHOS_BUILD_ENABLE_FINGERSENSE_WRAPPER) 2213c29fa5a6Sopenharmony_ci DISPLAY_MONITOR->InitCommonEventSubscriber(); 2214c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD && OHOS_BUILD_ENABLE_FINGERSENSE_WRAPPER 2215c29fa5a6Sopenharmony_ci } 2216c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) 2217c29fa5a6Sopenharmony_ci if (systemAbilityId == RENDER_SERVICE) { 2218c29fa5a6Sopenharmony_ci IPointerDrawingManager::GetInstance()->InitPointerCallback(); 2219c29fa5a6Sopenharmony_ci } 2220c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING 2221c29fa5a6Sopenharmony_ci if (systemAbilityId == DISPLAY_MANAGER_SERVICE_SA_ID) { 2222c29fa5a6Sopenharmony_ci WIN_MGR->SetFoldState(); 2223c29fa5a6Sopenharmony_ci } 2224c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) 2225c29fa5a6Sopenharmony_ci if (systemAbilityId == DISTRIBUTED_KV_DATA_SERVICE_ABILITY_ID) { 2226c29fa5a6Sopenharmony_ci if (SettingDataShare::GetInstance(DISTRIBUTED_KV_DATA_SERVICE_ABILITY_ID).CheckIfSettingsDataReady()) { 2227c29fa5a6Sopenharmony_ci IPointerDrawingManager::GetInstance()->InitPointerObserver(); 2228c29fa5a6Sopenharmony_ci auto keyHandler = InputHandler->GetKeyCommandHandler(); 2229c29fa5a6Sopenharmony_ci if (keyHandler != nullptr) { 2230c29fa5a6Sopenharmony_ci keyHandler->InitKeyObserver(); 2231c29fa5a6Sopenharmony_ci } 2232c29fa5a6Sopenharmony_ci } 2233c29fa5a6Sopenharmony_ci } 2234c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING 2235c29fa5a6Sopenharmony_ci} 2236c29fa5a6Sopenharmony_ci 2237c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_MONITOR) && defined(PLAYER_FRAMEWORK_EXISTS) 2238c29fa5a6Sopenharmony_civoid MMIService::ScreenCaptureCallback(int32_t pid, bool isStart) 2239c29fa5a6Sopenharmony_ci{ 2240c29fa5a6Sopenharmony_ci auto service = MMIService::GetInstance(); 2241c29fa5a6Sopenharmony_ci CHKPV(service); 2242c29fa5a6Sopenharmony_ci int32_t ret = service->delegateTasks_.PostSyncTask( 2243c29fa5a6Sopenharmony_ci [pid, isStart] { 2244c29fa5a6Sopenharmony_ci auto monitorHandler = InputHandler->GetMonitorHandler(); 2245c29fa5a6Sopenharmony_ci CHKPR(monitorHandler, RET_ERR); 2246c29fa5a6Sopenharmony_ci monitorHandler->ProcessScreenCapture(pid, isStart); 2247c29fa5a6Sopenharmony_ci return RET_OK; 2248c29fa5a6Sopenharmony_ci }); 2249c29fa5a6Sopenharmony_ci} 2250c29fa5a6Sopenharmony_ci 2251c29fa5a6Sopenharmony_civoid MMIService::RegisterScreenCaptureCallback() 2252c29fa5a6Sopenharmony_ci{ 2253c29fa5a6Sopenharmony_ci if (hasRegisterListener_) { 2254c29fa5a6Sopenharmony_ci return; 2255c29fa5a6Sopenharmony_ci } 2256c29fa5a6Sopenharmony_ci InputScreenCaptureAgent::GetInstance().RegisterListener(ScreenCaptureCallback); 2257c29fa5a6Sopenharmony_ci hasRegisterListener_ = true; 2258c29fa5a6Sopenharmony_ci} 2259c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_MONITOR && PLAYER_FRAMEWORK_EXISTS 2260c29fa5a6Sopenharmony_ci 2261c29fa5a6Sopenharmony_ciint32_t MMIService::SubscribeKeyEvent(int32_t subscribeId, const std::shared_ptr<KeyOption> option) 2262c29fa5a6Sopenharmony_ci{ 2263c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 2264c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_KEYBOARD 2265c29fa5a6Sopenharmony_ci int32_t pid = GetCallingPid(); 2266c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2267c29fa5a6Sopenharmony_ci [this, pid, subscribeId, option] { 2268c29fa5a6Sopenharmony_ci return sMsgHandler_.OnSubscribeKeyEvent(this, pid, subscribeId, option); 2269c29fa5a6Sopenharmony_ci }); 2270c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2271c29fa5a6Sopenharmony_ci MMI_HILOGE("The subscribe key event processed failed, ret:%{public}d", ret); 2272c29fa5a6Sopenharmony_ci return ret; 2273c29fa5a6Sopenharmony_ci } 2274c29fa5a6Sopenharmony_ci if (NapProcess::GetInstance()->GetNapClientPid() != REMOVE_OBSERVER) { 2275c29fa5a6Sopenharmony_ci OHOS::MMI::NapProcess::NapStatusData napData; 2276c29fa5a6Sopenharmony_ci napData.pid = GetCallingPid(); 2277c29fa5a6Sopenharmony_ci napData.uid = GetCallingUid(); 2278c29fa5a6Sopenharmony_ci auto sess = GetSessionByPid(pid); 2279c29fa5a6Sopenharmony_ci CHKPR(sess, ERROR_NULL_POINTER); 2280c29fa5a6Sopenharmony_ci napData.bundleName = sess->GetProgramName(); 2281c29fa5a6Sopenharmony_ci int32_t syncState = SUBSCRIBED; 2282c29fa5a6Sopenharmony_ci MMI_HILOGD("SubscribeKeyEvent info to observer : pid:%{public}d, uid:%{public}d, bundleName:%{public}s", 2283c29fa5a6Sopenharmony_ci napData.pid, napData.uid, napData.bundleName.c_str()); 2284c29fa5a6Sopenharmony_ci NapProcess::GetInstance()->AddMmiSubscribedEventData(napData, syncState); 2285c29fa5a6Sopenharmony_ci if (NapProcess::GetInstance()->GetNapClientPid() != UNOBSERVED) { 2286c29fa5a6Sopenharmony_ci NapProcess::GetInstance()->NotifyBundleName(napData, syncState); 2287c29fa5a6Sopenharmony_ci } 2288c29fa5a6Sopenharmony_ci } 2289c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD 2290c29fa5a6Sopenharmony_ci return RET_OK; 2291c29fa5a6Sopenharmony_ci} 2292c29fa5a6Sopenharmony_ci 2293c29fa5a6Sopenharmony_ciint32_t MMIService::UnsubscribeKeyEvent(int32_t subscribeId) 2294c29fa5a6Sopenharmony_ci{ 2295c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2296c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_KEYBOARD 2297c29fa5a6Sopenharmony_ci int32_t pid = GetCallingPid(); 2298c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2299c29fa5a6Sopenharmony_ci [this, pid, subscribeId] { 2300c29fa5a6Sopenharmony_ci return sMsgHandler_.OnUnsubscribeKeyEvent(this, pid, subscribeId); 2301c29fa5a6Sopenharmony_ci }); 2302c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2303c29fa5a6Sopenharmony_ci MMI_HILOGE("The unsubscribe key event processed failed, ret:%{public}d", ret); 2304c29fa5a6Sopenharmony_ci return ret; 2305c29fa5a6Sopenharmony_ci } 2306c29fa5a6Sopenharmony_ci if (NapProcess::GetInstance()->GetNapClientPid() != REMOVE_OBSERVER) { 2307c29fa5a6Sopenharmony_ci OHOS::MMI::NapProcess::NapStatusData napData; 2308c29fa5a6Sopenharmony_ci napData.pid = GetCallingPid(); 2309c29fa5a6Sopenharmony_ci napData.uid = GetCallingUid(); 2310c29fa5a6Sopenharmony_ci auto sess = GetSessionByPid(pid); 2311c29fa5a6Sopenharmony_ci CHKPR(sess, ERROR_NULL_POINTER); 2312c29fa5a6Sopenharmony_ci napData.bundleName = sess->GetProgramName(); 2313c29fa5a6Sopenharmony_ci int32_t syncState = UNSUBSCRIBED; 2314c29fa5a6Sopenharmony_ci MMI_HILOGD("UnsubscribeKeyEvent info to observer : pid:%{public}d, uid:%{public}d, bundleName:%{public}s", 2315c29fa5a6Sopenharmony_ci napData.pid, napData.uid, napData.bundleName.c_str()); 2316c29fa5a6Sopenharmony_ci NapProcess::GetInstance()->AddMmiSubscribedEventData(napData, syncState); 2317c29fa5a6Sopenharmony_ci if (NapProcess::GetInstance()->GetNapClientPid() != UNOBSERVED) { 2318c29fa5a6Sopenharmony_ci NapProcess::GetInstance()->NotifyBundleName(napData, syncState); 2319c29fa5a6Sopenharmony_ci } 2320c29fa5a6Sopenharmony_ci } 2321c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD 2322c29fa5a6Sopenharmony_ci return RET_OK; 2323c29fa5a6Sopenharmony_ci} 2324c29fa5a6Sopenharmony_ci 2325c29fa5a6Sopenharmony_ciint32_t MMIService::SubscribeHotkey(int32_t subscribeId, const std::shared_ptr<KeyOption> option) 2326c29fa5a6Sopenharmony_ci{ 2327c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 2328c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_KEYBOARD 2329c29fa5a6Sopenharmony_ci int32_t pid = GetCallingPid(); 2330c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2331c29fa5a6Sopenharmony_ci [this, pid, subscribeId, option] { 2332c29fa5a6Sopenharmony_ci return sMsgHandler_.OnSubscribeHotkey(this, pid, subscribeId, option); 2333c29fa5a6Sopenharmony_ci }); 2334c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2335c29fa5a6Sopenharmony_ci MMI_HILOGE("ServerMsgHandler::OnSubscribeHotkey fail, error:%{public}d", ret); 2336c29fa5a6Sopenharmony_ci return ret; 2337c29fa5a6Sopenharmony_ci } 2338c29fa5a6Sopenharmony_ci if (NapProcess::GetInstance()->GetNapClientPid() != REMOVE_OBSERVER) { 2339c29fa5a6Sopenharmony_ci OHOS::MMI::NapProcess::NapStatusData napData; 2340c29fa5a6Sopenharmony_ci napData.pid = GetCallingPid(); 2341c29fa5a6Sopenharmony_ci napData.uid = GetCallingUid(); 2342c29fa5a6Sopenharmony_ci auto sess = GetSessionByPid(pid); 2343c29fa5a6Sopenharmony_ci CHKPR(sess, ERROR_NULL_POINTER); 2344c29fa5a6Sopenharmony_ci napData.bundleName = sess->GetProgramName(); 2345c29fa5a6Sopenharmony_ci int32_t syncState = SUBSCRIBED; 2346c29fa5a6Sopenharmony_ci MMI_HILOGD("SubscribeHotkey info to observer : pid:%{public}d, bundleName:%{public}s", 2347c29fa5a6Sopenharmony_ci napData.pid, napData.bundleName.c_str()); 2348c29fa5a6Sopenharmony_ci NapProcess::GetInstance()->AddMmiSubscribedEventData(napData, syncState); 2349c29fa5a6Sopenharmony_ci if (NapProcess::GetInstance()->GetNapClientPid() != UNOBSERVED) { 2350c29fa5a6Sopenharmony_ci NapProcess::GetInstance()->NotifyBundleName(napData, syncState); 2351c29fa5a6Sopenharmony_ci } 2352c29fa5a6Sopenharmony_ci } 2353c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD 2354c29fa5a6Sopenharmony_ci return RET_OK; 2355c29fa5a6Sopenharmony_ci} 2356c29fa5a6Sopenharmony_ci 2357c29fa5a6Sopenharmony_ciint32_t MMIService::UnsubscribeHotkey(int32_t subscribeId) 2358c29fa5a6Sopenharmony_ci{ 2359c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2360c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_KEYBOARD 2361c29fa5a6Sopenharmony_ci int32_t pid = GetCallingPid(); 2362c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2363c29fa5a6Sopenharmony_ci [this, pid, subscribeId] { 2364c29fa5a6Sopenharmony_ci return sMsgHandler_.OnUnsubscribeHotkey(this, pid, subscribeId); 2365c29fa5a6Sopenharmony_ci }); 2366c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2367c29fa5a6Sopenharmony_ci MMI_HILOGE("ServerMsgHandler::OnUnsubscribeHotkey fail, error:%{public}d", ret); 2368c29fa5a6Sopenharmony_ci return ret; 2369c29fa5a6Sopenharmony_ci } 2370c29fa5a6Sopenharmony_ci if (NapProcess::GetInstance()->GetNapClientPid() != REMOVE_OBSERVER) { 2371c29fa5a6Sopenharmony_ci OHOS::MMI::NapProcess::NapStatusData napData; 2372c29fa5a6Sopenharmony_ci napData.pid = GetCallingPid(); 2373c29fa5a6Sopenharmony_ci napData.uid = GetCallingUid(); 2374c29fa5a6Sopenharmony_ci auto sess = GetSessionByPid(pid); 2375c29fa5a6Sopenharmony_ci CHKPR(sess, ERROR_NULL_POINTER); 2376c29fa5a6Sopenharmony_ci napData.bundleName = sess->GetProgramName(); 2377c29fa5a6Sopenharmony_ci int32_t syncState = UNSUBSCRIBED; 2378c29fa5a6Sopenharmony_ci MMI_HILOGD("UnsubscribeHotkey info to observer : pid:%{public}d, bundleName:%{public}s", 2379c29fa5a6Sopenharmony_ci napData.pid, napData.bundleName.c_str()); 2380c29fa5a6Sopenharmony_ci NapProcess::GetInstance()->AddMmiSubscribedEventData(napData, syncState); 2381c29fa5a6Sopenharmony_ci if (NapProcess::GetInstance()->GetNapClientPid() != UNOBSERVED) { 2382c29fa5a6Sopenharmony_ci NapProcess::GetInstance()->NotifyBundleName(napData, syncState); 2383c29fa5a6Sopenharmony_ci } 2384c29fa5a6Sopenharmony_ci } 2385c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD 2386c29fa5a6Sopenharmony_ci return RET_OK; 2387c29fa5a6Sopenharmony_ci} 2388c29fa5a6Sopenharmony_ci 2389c29fa5a6Sopenharmony_ciint32_t MMIService::SubscribeSwitchEvent(int32_t subscribeId, int32_t switchType) 2390c29fa5a6Sopenharmony_ci{ 2391c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2392c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_SWITCH 2393c29fa5a6Sopenharmony_ci int32_t pid = GetCallingPid(); 2394c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2395c29fa5a6Sopenharmony_ci [this, pid, subscribeId, switchType] { 2396c29fa5a6Sopenharmony_ci return sMsgHandler_.OnSubscribeSwitchEvent(this, pid, subscribeId, switchType); 2397c29fa5a6Sopenharmony_ci } 2398c29fa5a6Sopenharmony_ci ); 2399c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2400c29fa5a6Sopenharmony_ci MMI_HILOGE("The subscribe switch event processed failed, ret:%{public}d", ret); 2401c29fa5a6Sopenharmony_ci return ret; 2402c29fa5a6Sopenharmony_ci } 2403c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_SWITCH 2404c29fa5a6Sopenharmony_ci return RET_OK; 2405c29fa5a6Sopenharmony_ci} 2406c29fa5a6Sopenharmony_ci 2407c29fa5a6Sopenharmony_ciint32_t MMIService::UnsubscribeSwitchEvent(int32_t subscribeId) 2408c29fa5a6Sopenharmony_ci{ 2409c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2410c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_SWITCH 2411c29fa5a6Sopenharmony_ci int32_t pid = GetCallingPid(); 2412c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2413c29fa5a6Sopenharmony_ci [this, pid, subscribeId] { 2414c29fa5a6Sopenharmony_ci return sMsgHandler_.OnUnsubscribeSwitchEvent(this, pid, subscribeId); 2415c29fa5a6Sopenharmony_ci } 2416c29fa5a6Sopenharmony_ci ); 2417c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2418c29fa5a6Sopenharmony_ci MMI_HILOGE("The unsubscribe switch event processed failed, ret:%{public}d", ret); 2419c29fa5a6Sopenharmony_ci return ret; 2420c29fa5a6Sopenharmony_ci } 2421c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_SWITCH 2422c29fa5a6Sopenharmony_ci return RET_OK; 2423c29fa5a6Sopenharmony_ci} 2424c29fa5a6Sopenharmony_ci 2425c29fa5a6Sopenharmony_ciint32_t MMIService::SetAnrObserver() 2426c29fa5a6Sopenharmony_ci{ 2427c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2428c29fa5a6Sopenharmony_ci int32_t pid = GetCallingPid(); 2429c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2430c29fa5a6Sopenharmony_ci [pid] { 2431c29fa5a6Sopenharmony_ci return ::OHOS::DelayedSingleton<ANRManager>::GetInstance()->SetANRNoticedPid(pid); 2432c29fa5a6Sopenharmony_ci } 2433c29fa5a6Sopenharmony_ci ); 2434c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2435c29fa5a6Sopenharmony_ci MMI_HILOGE("Set ANRNoticed pid failed, ret:%{public}d", ret); 2436c29fa5a6Sopenharmony_ci return ret; 2437c29fa5a6Sopenharmony_ci } 2438c29fa5a6Sopenharmony_ci return RET_OK; 2439c29fa5a6Sopenharmony_ci} 2440c29fa5a6Sopenharmony_ci 2441c29fa5a6Sopenharmony_ciint32_t MMIService::GetDisplayBindInfo(DisplayBindInfos &infos) 2442c29fa5a6Sopenharmony_ci{ 2443c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2444c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2445c29fa5a6Sopenharmony_ci [&infos] { 2446c29fa5a6Sopenharmony_ci return ::OHOS::MMI::IInputWindowsManager::GetInstance()->GetDisplayBindInfo(infos); 2447c29fa5a6Sopenharmony_ci } 2448c29fa5a6Sopenharmony_ci ); 2449c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2450c29fa5a6Sopenharmony_ci MMI_HILOGE("GetDisplayBindInfo pid failed, ret:%{public}d", ret); 2451c29fa5a6Sopenharmony_ci return ret; 2452c29fa5a6Sopenharmony_ci } 2453c29fa5a6Sopenharmony_ci return RET_OK; 2454c29fa5a6Sopenharmony_ci} 2455c29fa5a6Sopenharmony_ci 2456c29fa5a6Sopenharmony_ciint32_t MMIService::GetAllMmiSubscribedEvents(std::map<std::tuple<int32_t, int32_t, std::string>, int32_t> &datas) 2457c29fa5a6Sopenharmony_ci{ 2458c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2459c29fa5a6Sopenharmony_ci NapProcess::GetInstance()->GetAllMmiSubscribedEvents(datas); 2460c29fa5a6Sopenharmony_ci return RET_OK; 2461c29fa5a6Sopenharmony_ci} 2462c29fa5a6Sopenharmony_ci 2463c29fa5a6Sopenharmony_ciint32_t MMIService::SetDisplayBind(int32_t deviceId, int32_t displayId, std::string &msg) 2464c29fa5a6Sopenharmony_ci{ 2465c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2466c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2467c29fa5a6Sopenharmony_ci [deviceId, displayId, &msg] { 2468c29fa5a6Sopenharmony_ci return ::OHOS::MMI::IInputWindowsManager::GetInstance()->SetDisplayBind(deviceId, displayId, msg); 2469c29fa5a6Sopenharmony_ci } 2470c29fa5a6Sopenharmony_ci ); 2471c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2472c29fa5a6Sopenharmony_ci MMI_HILOGE("SetDisplayBind pid failed, ret:%{public}d", ret); 2473c29fa5a6Sopenharmony_ci return ret; 2474c29fa5a6Sopenharmony_ci } 2475c29fa5a6Sopenharmony_ci return RET_OK; 2476c29fa5a6Sopenharmony_ci} 2477c29fa5a6Sopenharmony_ci 2478c29fa5a6Sopenharmony_ciint32_t MMIService::GetFunctionKeyState(int32_t funcKey, bool &state) 2479c29fa5a6Sopenharmony_ci{ 2480c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2481c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_KEYBOARD 2482c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2483c29fa5a6Sopenharmony_ci [this, funcKey, &state] { 2484c29fa5a6Sopenharmony_ci return sMsgHandler_.OnGetFunctionKeyState(funcKey, state); 2485c29fa5a6Sopenharmony_ci } 2486c29fa5a6Sopenharmony_ci ); 2487c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2488c29fa5a6Sopenharmony_ci MMI_HILOGE("Failed to get the keyboard status, ret:%{public}d", ret); 2489c29fa5a6Sopenharmony_ci return ret; 2490c29fa5a6Sopenharmony_ci } 2491c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD 2492c29fa5a6Sopenharmony_ci return RET_OK; 2493c29fa5a6Sopenharmony_ci} 2494c29fa5a6Sopenharmony_ci 2495c29fa5a6Sopenharmony_ciint32_t MMIService::SetFunctionKeyState(int32_t funcKey, bool enable) 2496c29fa5a6Sopenharmony_ci{ 2497c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2498c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_KEYBOARD 2499c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2500c29fa5a6Sopenharmony_ci [this, funcKey, enable] { 2501c29fa5a6Sopenharmony_ci return sMsgHandler_.OnSetFunctionKeyState(funcKey, enable); 2502c29fa5a6Sopenharmony_ci } 2503c29fa5a6Sopenharmony_ci ); 2504c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2505c29fa5a6Sopenharmony_ci MMI_HILOGE("Failed to update the keyboard status, ret:%{public}d", ret); 2506c29fa5a6Sopenharmony_ci return ret; 2507c29fa5a6Sopenharmony_ci } 2508c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD 2509c29fa5a6Sopenharmony_ci return RET_OK; 2510c29fa5a6Sopenharmony_ci} 2511c29fa5a6Sopenharmony_ci 2512c29fa5a6Sopenharmony_ciint32_t MMIService::SetPointerLocation(int32_t x, int32_t y) 2513c29fa5a6Sopenharmony_ci{ 2514c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2515c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) 2516c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2517c29fa5a6Sopenharmony_ci [x, y] { 2518c29fa5a6Sopenharmony_ci return ::OHOS::DelayedSingleton<MouseEventNormalize>::GetInstance()->SetPointerLocation(x, y); 2519c29fa5a6Sopenharmony_ci } 2520c29fa5a6Sopenharmony_ci ); 2521c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2522c29fa5a6Sopenharmony_ci MMI_HILOGE("Set pointer location failed, ret:%{public}d", ret); 2523c29fa5a6Sopenharmony_ci return ret; 2524c29fa5a6Sopenharmony_ci } 2525c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING 2526c29fa5a6Sopenharmony_ci return RET_OK; 2527c29fa5a6Sopenharmony_ci} 2528c29fa5a6Sopenharmony_ci 2529c29fa5a6Sopenharmony_civoid MMIService::OnDelegateTask(epoll_event &ev) 2530c29fa5a6Sopenharmony_ci{ 2531c29fa5a6Sopenharmony_ci if ((ev.events & EPOLLIN) == 0) { 2532c29fa5a6Sopenharmony_ci MMI_HILOGW("Not epollin"); 2533c29fa5a6Sopenharmony_ci return; 2534c29fa5a6Sopenharmony_ci } 2535c29fa5a6Sopenharmony_ci DelegateTasks::TaskData data = {}; 2536c29fa5a6Sopenharmony_ci auto res = read(delegateTasks_.GetReadFd(), &data, sizeof(data)); 2537c29fa5a6Sopenharmony_ci if (res == -1) { 2538c29fa5a6Sopenharmony_ci MMI_HILOGW("Read failed erron:%{public}d", errno); 2539c29fa5a6Sopenharmony_ci } 2540c29fa5a6Sopenharmony_ci MMI_HILOGD("RemoteRequest notify td:%{public}" PRId64 ",std:%{public}" PRId64 "" 2541c29fa5a6Sopenharmony_ci ",taskId:%{public}d", 2542c29fa5a6Sopenharmony_ci GetThisThreadId(), data.tid, data.taskId); 2543c29fa5a6Sopenharmony_ci delegateTasks_.ProcessTasks(); 2544c29fa5a6Sopenharmony_ci} 2545c29fa5a6Sopenharmony_ci 2546c29fa5a6Sopenharmony_civoid MMIService::OnThread() 2547c29fa5a6Sopenharmony_ci{ 2548c29fa5a6Sopenharmony_ci SetThreadName(std::string("mmi_service")); 2549c29fa5a6Sopenharmony_ci uint64_t tid = GetThisThreadId(); 2550c29fa5a6Sopenharmony_ci delegateTasks_.SetWorkerThreadId(tid); 2551c29fa5a6Sopenharmony_ci MMI_HILOGI("Main worker thread start. tid:%{public}" PRId64 "", tid); 2552c29fa5a6Sopenharmony_ci#ifdef OHOS_RSS_CLIENT 2553c29fa5a6Sopenharmony_ci tid_.store(tid); 2554c29fa5a6Sopenharmony_ci#endif // OHOS_RSS_CLIENT 2555c29fa5a6Sopenharmony_ci libinputAdapter_.ProcessPendingEvents(); 2556c29fa5a6Sopenharmony_ci while (state_ == ServiceRunningState::STATE_RUNNING) { 2557c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_FINGERSENSE_WRAPPER) && defined(OHOS_BUILD_ENABLE_KEYBOARD) 2558c29fa5a6Sopenharmony_ci if (isCesStart_ && !DISPLAY_MONITOR->IsCommonEventSubscriberInit()) { 2559c29fa5a6Sopenharmony_ci DISPLAY_MONITOR->InitCommonEventSubscriber(); 2560c29fa5a6Sopenharmony_ci } 2561c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_FINGERSENSE_WRAPPER && OHOS_BUILD_ENABLE_KEYBOARD 2562c29fa5a6Sopenharmony_ci epoll_event ev[MAX_EVENT_SIZE] = {}; 2563c29fa5a6Sopenharmony_ci int32_t timeout = TimerMgr->CalcNextDelay(); 2564c29fa5a6Sopenharmony_ci MMI_HILOGD("timeout:%{public}d", timeout); 2565c29fa5a6Sopenharmony_ci int32_t count = EpollWait(ev[0], MAX_EVENT_SIZE, timeout, mmiFd_); 2566c29fa5a6Sopenharmony_ci for (int32_t i = 0; i < count && state_ == ServiceRunningState::STATE_RUNNING; i++) { 2567c29fa5a6Sopenharmony_ci auto mmiEdIter = epollEventMap_.find(ev[i].data.fd); 2568c29fa5a6Sopenharmony_ci if (mmiEdIter == epollEventMap_.end()) { 2569c29fa5a6Sopenharmony_ci MMI_HILOGW("Invalid event %{public}d %{public}d", ev[i].data.fd, count); 2570c29fa5a6Sopenharmony_ci continue; 2571c29fa5a6Sopenharmony_ci } 2572c29fa5a6Sopenharmony_ci std::shared_ptr<mmi_epoll_event> mmiEd = mmiEdIter->second; 2573c29fa5a6Sopenharmony_ci CHKPC(mmiEd); 2574c29fa5a6Sopenharmony_ci epoll_event event = ev[i]; 2575c29fa5a6Sopenharmony_ci if (mmiEd->event_type == EPOLL_EVENT_INPUT) { 2576c29fa5a6Sopenharmony_ci CalculateFuntionRunningTime([this, &mmiEd] () { libinputAdapter_.EventDispatch(mmiEd->fd); }, 2577c29fa5a6Sopenharmony_ci "EPOLL_EVENT_INPUT"); 2578c29fa5a6Sopenharmony_ci } else if (mmiEd->event_type == EPOLL_EVENT_SOCKET) { 2579c29fa5a6Sopenharmony_ci CalculateFuntionRunningTime([this, &event]() { this->OnEpollEvent(event); }, "MMI:EPOLL_EVENT_SOCKET"); 2580c29fa5a6Sopenharmony_ci } else if (mmiEd->event_type == EPOLL_EVENT_SIGNAL) { 2581c29fa5a6Sopenharmony_ci OnSignalEvent(mmiEd->fd); 2582c29fa5a6Sopenharmony_ci } else if (mmiEd->event_type == EPOLL_EVENT_ETASK) { 2583c29fa5a6Sopenharmony_ci CalculateFuntionRunningTime([this, &event]() { this->OnDelegateTask(event); }, "MMI:EPOLL_EVENT_ETASK"); 2584c29fa5a6Sopenharmony_ci } else { 2585c29fa5a6Sopenharmony_ci MMI_HILOGW("Unknown epoll event type:%{public}d", mmiEd->event_type); 2586c29fa5a6Sopenharmony_ci } 2587c29fa5a6Sopenharmony_ci } 2588c29fa5a6Sopenharmony_ci TimerMgr->ProcessTimers(); 2589c29fa5a6Sopenharmony_ci if (state_ != ServiceRunningState::STATE_RUNNING) { 2590c29fa5a6Sopenharmony_ci break; 2591c29fa5a6Sopenharmony_ci } 2592c29fa5a6Sopenharmony_ci } 2593c29fa5a6Sopenharmony_ci MMI_HILOGI("Main worker thread stop. tid:%{public}" PRId64 "", tid); 2594c29fa5a6Sopenharmony_ci} 2595c29fa5a6Sopenharmony_ci 2596c29fa5a6Sopenharmony_cibool MMIService::InitSignalHandler() 2597c29fa5a6Sopenharmony_ci{ 2598c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 2599c29fa5a6Sopenharmony_ci sigset_t mask = { 0 }; 2600c29fa5a6Sopenharmony_ci int32_t retCode = sigfillset(&mask); 2601c29fa5a6Sopenharmony_ci if (retCode < 0) { 2602c29fa5a6Sopenharmony_ci MMI_HILOGE("Fill signal set failed:%{public}d", errno); 2603c29fa5a6Sopenharmony_ci return false; 2604c29fa5a6Sopenharmony_ci } 2605c29fa5a6Sopenharmony_ci 2606c29fa5a6Sopenharmony_ci retCode = sigprocmask(SIG_SETMASK, &mask, nullptr); 2607c29fa5a6Sopenharmony_ci if (retCode < 0) { 2608c29fa5a6Sopenharmony_ci MMI_HILOGE("Sigprocmask failed:%{public}d", errno); 2609c29fa5a6Sopenharmony_ci return false; 2610c29fa5a6Sopenharmony_ci } 2611c29fa5a6Sopenharmony_ci 2612c29fa5a6Sopenharmony_ci int32_t fdSignal = signalfd(-1, &mask, SFD_NONBLOCK | SFD_CLOEXEC); 2613c29fa5a6Sopenharmony_ci if (fdSignal < 0) { 2614c29fa5a6Sopenharmony_ci MMI_HILOGE("Signal fd failed:%{public}d", errno); 2615c29fa5a6Sopenharmony_ci return false; 2616c29fa5a6Sopenharmony_ci } 2617c29fa5a6Sopenharmony_ci 2618c29fa5a6Sopenharmony_ci retCode = AddEpoll(EPOLL_EVENT_SIGNAL, fdSignal); 2619c29fa5a6Sopenharmony_ci if (retCode < 0) { 2620c29fa5a6Sopenharmony_ci MMI_HILOGE("AddEpoll signalFd failed:%{public}d", retCode); 2621c29fa5a6Sopenharmony_ci close(fdSignal); 2622c29fa5a6Sopenharmony_ci return false; 2623c29fa5a6Sopenharmony_ci } 2624c29fa5a6Sopenharmony_ci return true; 2625c29fa5a6Sopenharmony_ci} 2626c29fa5a6Sopenharmony_ci 2627c29fa5a6Sopenharmony_civoid MMIService::OnSignalEvent(int32_t signalFd) 2628c29fa5a6Sopenharmony_ci{ 2629c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 2630c29fa5a6Sopenharmony_ci signalfd_siginfo sigInfo; 2631c29fa5a6Sopenharmony_ci int32_t size = ::read(signalFd, &sigInfo, sizeof(signalfd_siginfo)); 2632c29fa5a6Sopenharmony_ci if (size != static_cast<int32_t>(sizeof(signalfd_siginfo))) { 2633c29fa5a6Sopenharmony_ci MMI_HILOGE("Read signal info failed, invalid size:%{public}d, errno:%{public}d", size, errno); 2634c29fa5a6Sopenharmony_ci return; 2635c29fa5a6Sopenharmony_ci } 2636c29fa5a6Sopenharmony_ci int32_t signo = static_cast<int32_t>(sigInfo.ssi_signo); 2637c29fa5a6Sopenharmony_ci MMI_HILOGD("Receive signal:%{public}d", signo); 2638c29fa5a6Sopenharmony_ci switch (signo) { 2639c29fa5a6Sopenharmony_ci case SIGINT: 2640c29fa5a6Sopenharmony_ci case SIGQUIT: 2641c29fa5a6Sopenharmony_ci case SIGILL: 2642c29fa5a6Sopenharmony_ci case SIGABRT: 2643c29fa5a6Sopenharmony_ci case SIGBUS: 2644c29fa5a6Sopenharmony_ci case SIGFPE: 2645c29fa5a6Sopenharmony_ci case SIGKILL: 2646c29fa5a6Sopenharmony_ci case SIGSEGV: 2647c29fa5a6Sopenharmony_ci case SIGTERM: { 2648c29fa5a6Sopenharmony_ci state_ = ServiceRunningState::STATE_EXIT; 2649c29fa5a6Sopenharmony_ci break; 2650c29fa5a6Sopenharmony_ci } 2651c29fa5a6Sopenharmony_ci default: { 2652c29fa5a6Sopenharmony_ci break; 2653c29fa5a6Sopenharmony_ci } 2654c29fa5a6Sopenharmony_ci } 2655c29fa5a6Sopenharmony_ci} 2656c29fa5a6Sopenharmony_ci 2657c29fa5a6Sopenharmony_civoid MMIService::AddReloadDeviceTimer() 2658c29fa5a6Sopenharmony_ci{ 2659c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 2660c29fa5a6Sopenharmony_ci TimerMgr->AddTimer(RELOAD_DEVICE_TIME, REPEAT_COUNT, [this]() { 2661c29fa5a6Sopenharmony_ci auto deviceIds = INPUT_DEV_MGR->GetInputDeviceIds(); 2662c29fa5a6Sopenharmony_ci if (deviceIds.empty()) { 2663c29fa5a6Sopenharmony_ci libinputAdapter_.ReloadDevice(); 2664c29fa5a6Sopenharmony_ci } 2665c29fa5a6Sopenharmony_ci }); 2666c29fa5a6Sopenharmony_ci} 2667c29fa5a6Sopenharmony_ci 2668c29fa5a6Sopenharmony_ciint32_t MMIService::Dump(int32_t fd, const std::vector<std::u16string> &args) 2669c29fa5a6Sopenharmony_ci{ 2670c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 2671c29fa5a6Sopenharmony_ci if (fd < 0) { 2672c29fa5a6Sopenharmony_ci MMI_HILOGE("The fd is invalid"); 2673c29fa5a6Sopenharmony_ci return DUMP_PARAM_ERR; 2674c29fa5a6Sopenharmony_ci } 2675c29fa5a6Sopenharmony_ci if (args.empty()) { 2676c29fa5a6Sopenharmony_ci MMI_HILOGE("The args cannot be empty"); 2677c29fa5a6Sopenharmony_ci mprintf(fd, "args cannot be empty\n"); 2678c29fa5a6Sopenharmony_ci MMIEventDump->DumpHelp(fd); 2679c29fa5a6Sopenharmony_ci return DUMP_PARAM_ERR; 2680c29fa5a6Sopenharmony_ci } 2681c29fa5a6Sopenharmony_ci std::vector<std::string> argList = { "" }; 2682c29fa5a6Sopenharmony_ci std::transform(args.begin(), args.end(), std::back_inserter(argList), 2683c29fa5a6Sopenharmony_ci [](const std::u16string &arg) { return Str16ToStr8(arg); }); 2684c29fa5a6Sopenharmony_ci MMIEventDump->ParseCommand(fd, argList); 2685c29fa5a6Sopenharmony_ci return RET_OK; 2686c29fa5a6Sopenharmony_ci} 2687c29fa5a6Sopenharmony_ci 2688c29fa5a6Sopenharmony_ciint32_t MMIService::SetMouseCaptureMode(int32_t windowId, bool isCaptureMode) 2689c29fa5a6Sopenharmony_ci{ 2690c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2691c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2692c29fa5a6Sopenharmony_ci [windowId, isCaptureMode] { 2693c29fa5a6Sopenharmony_ci return ::OHOS::MMI::IInputWindowsManager::GetInstance()->SetMouseCaptureMode(windowId, isCaptureMode); 2694c29fa5a6Sopenharmony_ci } 2695c29fa5a6Sopenharmony_ci ); 2696c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2697c29fa5a6Sopenharmony_ci MMI_HILOGE("Set capture failed, return:%{public}d", ret); 2698c29fa5a6Sopenharmony_ci return ret; 2699c29fa5a6Sopenharmony_ci } 2700c29fa5a6Sopenharmony_ci return RET_OK; 2701c29fa5a6Sopenharmony_ci} 2702c29fa5a6Sopenharmony_ci 2703c29fa5a6Sopenharmony_ciint32_t MMIService::OnGetWindowPid(int32_t windowId, int32_t &windowPid) 2704c29fa5a6Sopenharmony_ci{ 2705c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 2706c29fa5a6Sopenharmony_ci windowPid = WIN_MGR->GetWindowPid(windowId); 2707c29fa5a6Sopenharmony_ci if (windowPid == RET_ERR) { 2708c29fa5a6Sopenharmony_ci MMI_HILOGE("Get window pid failed"); 2709c29fa5a6Sopenharmony_ci return RET_ERR; 2710c29fa5a6Sopenharmony_ci } 2711c29fa5a6Sopenharmony_ci MMI_HILOGD("windowpid is %{public}d", windowPid); 2712c29fa5a6Sopenharmony_ci return RET_OK; 2713c29fa5a6Sopenharmony_ci} 2714c29fa5a6Sopenharmony_ci 2715c29fa5a6Sopenharmony_ciint32_t MMIService::GetWindowPid(int32_t windowId) 2716c29fa5a6Sopenharmony_ci{ 2717c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2718c29fa5a6Sopenharmony_ci int32_t windowPid = INVALID_PID; 2719c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2720c29fa5a6Sopenharmony_ci [this, windowId, &windowPid] { 2721c29fa5a6Sopenharmony_ci return this->OnGetWindowPid(windowId, windowPid); 2722c29fa5a6Sopenharmony_ci } 2723c29fa5a6Sopenharmony_ci ); 2724c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2725c29fa5a6Sopenharmony_ci MMI_HILOGE("OnGetWindowPid failed, ret:%{public}d", ret); 2726c29fa5a6Sopenharmony_ci return ret; 2727c29fa5a6Sopenharmony_ci } 2728c29fa5a6Sopenharmony_ci MMI_HILOGD("windowpid is %{public}d", windowPid); 2729c29fa5a6Sopenharmony_ci return windowPid; 2730c29fa5a6Sopenharmony_ci} 2731c29fa5a6Sopenharmony_ci 2732c29fa5a6Sopenharmony_ciint32_t MMIService::AppendExtraData(const ExtraData &extraData) 2733c29fa5a6Sopenharmony_ci{ 2734c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 2735c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2736c29fa5a6Sopenharmony_ci [extraData] { 2737c29fa5a6Sopenharmony_ci return ::OHOS::MMI::IInputWindowsManager::GetInstance()->AppendExtraData(extraData); 2738c29fa5a6Sopenharmony_ci } 2739c29fa5a6Sopenharmony_ci ); 2740c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2741c29fa5a6Sopenharmony_ci MMI_HILOGE("Append extra data failed:%{public}d", ret); 2742c29fa5a6Sopenharmony_ci } 2743c29fa5a6Sopenharmony_ci return ret; 2744c29fa5a6Sopenharmony_ci} 2745c29fa5a6Sopenharmony_ci 2746c29fa5a6Sopenharmony_ciint32_t MMIService::EnableInputDevice(bool enable) 2747c29fa5a6Sopenharmony_ci{ 2748c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 2749c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2750c29fa5a6Sopenharmony_ci [enable] { 2751c29fa5a6Sopenharmony_ci return ::OHOS::MMI::InputDeviceManager::GetInstance()->OnEnableInputDevice(enable); 2752c29fa5a6Sopenharmony_ci } 2753c29fa5a6Sopenharmony_ci ); 2754c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2755c29fa5a6Sopenharmony_ci MMI_HILOGE("OnEnableInputDevice failed:%{public}d", ret); 2756c29fa5a6Sopenharmony_ci } 2757c29fa5a6Sopenharmony_ci return ret; 2758c29fa5a6Sopenharmony_ci} 2759c29fa5a6Sopenharmony_ci 2760c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_KEYBOARD) && defined(OHOS_BUILD_ENABLE_COMBINATION_KEY) 2761c29fa5a6Sopenharmony_ciint32_t MMIService::UpdateCombineKeyState(bool enable) 2762c29fa5a6Sopenharmony_ci{ 2763c29fa5a6Sopenharmony_ci auto eventSubscriberHandler = InputHandler->GetSubscriberHandler(); 2764c29fa5a6Sopenharmony_ci CHKPR(eventSubscriberHandler, RET_ERR); 2765c29fa5a6Sopenharmony_ci int32_t ret = eventSubscriberHandler->EnableCombineKey(enable); 2766c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2767c29fa5a6Sopenharmony_ci MMI_HILOGE("EnableCombineKey is failed in key command:%{public}d", ret); 2768c29fa5a6Sopenharmony_ci } 2769c29fa5a6Sopenharmony_ci 2770c29fa5a6Sopenharmony_ci auto eventKeyCommandHandler = InputHandler->GetKeyCommandHandler(); 2771c29fa5a6Sopenharmony_ci CHKPR(eventKeyCommandHandler, RET_ERR); 2772c29fa5a6Sopenharmony_ci ret = eventKeyCommandHandler->EnableCombineKey(enable); 2773c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2774c29fa5a6Sopenharmony_ci MMI_HILOGE("EnableCombineKey is failed in key command:%{public}d", ret); 2775c29fa5a6Sopenharmony_ci } 2776c29fa5a6Sopenharmony_ci return ret; 2777c29fa5a6Sopenharmony_ci} 2778c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD && OHOS_BUILD_ENABLE_COMBINATION_KEY 2779c29fa5a6Sopenharmony_ci 2780c29fa5a6Sopenharmony_ciint32_t MMIService::CheckPidPermission(int32_t pid) 2781c29fa5a6Sopenharmony_ci{ 2782c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 2783c29fa5a6Sopenharmony_ci int32_t checkingPid = GetCallingPid(); 2784c29fa5a6Sopenharmony_ci if (checkingPid != pid) { 2785c29fa5a6Sopenharmony_ci MMI_HILOGE("check pid failed, input pid:%{public}d, but checking pid:%{public}d", pid, checkingPid); 2786c29fa5a6Sopenharmony_ci return RET_ERR; 2787c29fa5a6Sopenharmony_ci } 2788c29fa5a6Sopenharmony_ci return RET_OK; 2789c29fa5a6Sopenharmony_ci} 2790c29fa5a6Sopenharmony_ci 2791c29fa5a6Sopenharmony_ciint32_t MMIService::EnableCombineKey(bool enable) 2792c29fa5a6Sopenharmony_ci{ 2793c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 2794c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_KEYBOARD) && defined(OHOS_BUILD_ENABLE_COMBINATION_KEY) 2795c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2796c29fa5a6Sopenharmony_ci [this, enable] { 2797c29fa5a6Sopenharmony_ci return this->UpdateCombineKeyState(enable); 2798c29fa5a6Sopenharmony_ci } 2799c29fa5a6Sopenharmony_ci ); 2800c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2801c29fa5a6Sopenharmony_ci MMI_HILOGE("Set key down duration failed:%{public}d", ret); 2802c29fa5a6Sopenharmony_ci return ret; 2803c29fa5a6Sopenharmony_ci } 2804c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD && OHOS_BUILD_ENABLE_COMBINATION_KEY 2805c29fa5a6Sopenharmony_ci return RET_OK; 2806c29fa5a6Sopenharmony_ci} 2807c29fa5a6Sopenharmony_ci 2808c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_KEYBOARD) && defined(OHOS_BUILD_ENABLE_COMBINATION_KEY) 2809c29fa5a6Sopenharmony_ciint32_t MMIService::UpdateSettingsXml(const std::string &businessId, int32_t delay) 2810c29fa5a6Sopenharmony_ci{ 2811c29fa5a6Sopenharmony_ci std::shared_ptr<KeyCommandHandler> eventKeyCommandHandler = InputHandler->GetKeyCommandHandler(); 2812c29fa5a6Sopenharmony_ci CHKPR(eventKeyCommandHandler, RET_ERR); 2813c29fa5a6Sopenharmony_ci return eventKeyCommandHandler->UpdateSettingsXml(businessId, delay); 2814c29fa5a6Sopenharmony_ci} 2815c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD && OHOS_BUILD_ENABLE_COMBINATION_KEY 2816c29fa5a6Sopenharmony_ci 2817c29fa5a6Sopenharmony_ciint32_t MMIService::SetKeyDownDuration(const std::string &businessId, int32_t delay) 2818c29fa5a6Sopenharmony_ci{ 2819c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2820c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_KEYBOARD) && defined(OHOS_BUILD_ENABLE_COMBINATION_KEY) 2821c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2822c29fa5a6Sopenharmony_ci [this, businessId, delay] { 2823c29fa5a6Sopenharmony_ci return this->UpdateSettingsXml(businessId, delay); 2824c29fa5a6Sopenharmony_ci } 2825c29fa5a6Sopenharmony_ci ); 2826c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2827c29fa5a6Sopenharmony_ci MMI_HILOGE("Set key down duration failed:%{public}d", ret); 2828c29fa5a6Sopenharmony_ci return ret; 2829c29fa5a6Sopenharmony_ci } 2830c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD && OHOS_BUILD_ENABLE_COMBINATION_KEY 2831c29fa5a6Sopenharmony_ci return RET_OK; 2832c29fa5a6Sopenharmony_ci} 2833c29fa5a6Sopenharmony_ci 2834c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 2835c29fa5a6Sopenharmony_ciint32_t MMIService::ReadTouchpadScrollSwich(bool &switchFlag) 2836c29fa5a6Sopenharmony_ci{ 2837c29fa5a6Sopenharmony_ci MouseEventHdr->GetTouchpadScrollSwitch(switchFlag); 2838c29fa5a6Sopenharmony_ci return RET_OK; 2839c29fa5a6Sopenharmony_ci} 2840c29fa5a6Sopenharmony_ci 2841c29fa5a6Sopenharmony_ciint32_t MMIService::ReadTouchpadScrollDirection(bool &switchFlag) 2842c29fa5a6Sopenharmony_ci{ 2843c29fa5a6Sopenharmony_ci MouseEventHdr->GetTouchpadScrollDirection(switchFlag); 2844c29fa5a6Sopenharmony_ci return RET_OK; 2845c29fa5a6Sopenharmony_ci} 2846c29fa5a6Sopenharmony_ci 2847c29fa5a6Sopenharmony_ciint32_t MMIService::ReadTouchpadTapSwitch(bool &switchFlag) 2848c29fa5a6Sopenharmony_ci{ 2849c29fa5a6Sopenharmony_ci MouseEventHdr->GetTouchpadTapSwitch(switchFlag); 2850c29fa5a6Sopenharmony_ci return RET_OK; 2851c29fa5a6Sopenharmony_ci} 2852c29fa5a6Sopenharmony_ci 2853c29fa5a6Sopenharmony_ciint32_t MMIService::ReadTouchpadPointerSpeed(int32_t &speed) 2854c29fa5a6Sopenharmony_ci{ 2855c29fa5a6Sopenharmony_ci MouseEventHdr->GetTouchpadPointerSpeed(speed); 2856c29fa5a6Sopenharmony_ci return RET_OK; 2857c29fa5a6Sopenharmony_ci} 2858c29fa5a6Sopenharmony_ci 2859c29fa5a6Sopenharmony_ciint32_t MMIService::ReadTouchpadPinchSwitch(bool &switchFlag) 2860c29fa5a6Sopenharmony_ci{ 2861c29fa5a6Sopenharmony_ci TOUCH_EVENT_HDR->GetTouchpadPinchSwitch(switchFlag); 2862c29fa5a6Sopenharmony_ci return RET_OK; 2863c29fa5a6Sopenharmony_ci} 2864c29fa5a6Sopenharmony_ci 2865c29fa5a6Sopenharmony_ciint32_t MMIService::ReadTouchpadSwipeSwitch(bool &switchFlag) 2866c29fa5a6Sopenharmony_ci{ 2867c29fa5a6Sopenharmony_ci TOUCH_EVENT_HDR->GetTouchpadSwipeSwitch(switchFlag); 2868c29fa5a6Sopenharmony_ci return RET_OK; 2869c29fa5a6Sopenharmony_ci} 2870c29fa5a6Sopenharmony_ci 2871c29fa5a6Sopenharmony_ciint32_t MMIService::ReadTouchpadRightMenuType(int32_t &type) 2872c29fa5a6Sopenharmony_ci{ 2873c29fa5a6Sopenharmony_ci MouseEventHdr->GetTouchpadRightClickType(type); 2874c29fa5a6Sopenharmony_ci return RET_OK; 2875c29fa5a6Sopenharmony_ci} 2876c29fa5a6Sopenharmony_ci 2877c29fa5a6Sopenharmony_ciint32_t MMIService::ReadTouchpadRotateSwitch(bool &rotateSwitch) 2878c29fa5a6Sopenharmony_ci{ 2879c29fa5a6Sopenharmony_ci TOUCH_EVENT_HDR->GetTouchpadRotateSwitch(rotateSwitch); 2880c29fa5a6Sopenharmony_ci return RET_OK; 2881c29fa5a6Sopenharmony_ci} 2882c29fa5a6Sopenharmony_ci 2883c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 2884c29fa5a6Sopenharmony_ci 2885c29fa5a6Sopenharmony_ciint32_t MMIService::SetTouchpadScrollSwitch(bool switchFlag) 2886c29fa5a6Sopenharmony_ci{ 2887c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2888c29fa5a6Sopenharmony_ci#if defined OHOS_BUILD_ENABLE_POINTER 2889c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2890c29fa5a6Sopenharmony_ci [switchFlag] { 2891c29fa5a6Sopenharmony_ci return ::OHOS::DelayedSingleton<MouseEventNormalize>::GetInstance()->SetTouchpadScrollSwitch(switchFlag); 2892c29fa5a6Sopenharmony_ci } 2893c29fa5a6Sopenharmony_ci ); 2894c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2895c29fa5a6Sopenharmony_ci MMI_HILOGE("Set touchpad scroll switch failed, return:%{public}d", ret); 2896c29fa5a6Sopenharmony_ci return ret; 2897c29fa5a6Sopenharmony_ci } 2898c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 2899c29fa5a6Sopenharmony_ci return RET_OK; 2900c29fa5a6Sopenharmony_ci} 2901c29fa5a6Sopenharmony_ci 2902c29fa5a6Sopenharmony_ciint32_t MMIService::GetTouchpadScrollSwitch(bool &switchFlag) 2903c29fa5a6Sopenharmony_ci{ 2904c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2905c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 2906c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2907c29fa5a6Sopenharmony_ci [this, &switchFlag] { 2908c29fa5a6Sopenharmony_ci return this->ReadTouchpadScrollSwich(switchFlag); 2909c29fa5a6Sopenharmony_ci } 2910c29fa5a6Sopenharmony_ci ); 2911c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2912c29fa5a6Sopenharmony_ci MMI_HILOGE("Get touchpad scroll switch failed, return:%{public}d", ret); 2913c29fa5a6Sopenharmony_ci return ret; 2914c29fa5a6Sopenharmony_ci } 2915c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 2916c29fa5a6Sopenharmony_ci return RET_OK; 2917c29fa5a6Sopenharmony_ci} 2918c29fa5a6Sopenharmony_ci 2919c29fa5a6Sopenharmony_ciint32_t MMIService::SetTouchpadScrollDirection(bool state) 2920c29fa5a6Sopenharmony_ci{ 2921c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2922c29fa5a6Sopenharmony_ci#if defined OHOS_BUILD_ENABLE_POINTER 2923c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2924c29fa5a6Sopenharmony_ci [state] { 2925c29fa5a6Sopenharmony_ci return ::OHOS::DelayedSingleton<MouseEventNormalize>::GetInstance()->SetTouchpadScrollDirection(state); 2926c29fa5a6Sopenharmony_ci } 2927c29fa5a6Sopenharmony_ci ); 2928c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2929c29fa5a6Sopenharmony_ci MMI_HILOGE("Set touchpad scroll direction switch failed, return:%{public}d", ret); 2930c29fa5a6Sopenharmony_ci return ret; 2931c29fa5a6Sopenharmony_ci } 2932c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 2933c29fa5a6Sopenharmony_ci return RET_OK; 2934c29fa5a6Sopenharmony_ci} 2935c29fa5a6Sopenharmony_ci 2936c29fa5a6Sopenharmony_ciint32_t MMIService::GetTouchpadScrollDirection(bool &state) 2937c29fa5a6Sopenharmony_ci{ 2938c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2939c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 2940c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2941c29fa5a6Sopenharmony_ci [this, &state] { 2942c29fa5a6Sopenharmony_ci return this->ReadTouchpadScrollDirection(state); 2943c29fa5a6Sopenharmony_ci } 2944c29fa5a6Sopenharmony_ci ); 2945c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2946c29fa5a6Sopenharmony_ci MMI_HILOGE("Get touchpad scroll direction switch failed, return:%{public}d", ret); 2947c29fa5a6Sopenharmony_ci return ret; 2948c29fa5a6Sopenharmony_ci } 2949c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 2950c29fa5a6Sopenharmony_ci return RET_OK; 2951c29fa5a6Sopenharmony_ci} 2952c29fa5a6Sopenharmony_ci 2953c29fa5a6Sopenharmony_ciint32_t MMIService::SetTouchpadTapSwitch(bool switchFlag) 2954c29fa5a6Sopenharmony_ci{ 2955c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2956c29fa5a6Sopenharmony_ci#if defined OHOS_BUILD_ENABLE_POINTER 2957c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2958c29fa5a6Sopenharmony_ci [switchFlag] { 2959c29fa5a6Sopenharmony_ci return ::OHOS::DelayedSingleton<MouseEventNormalize>::GetInstance()->SetTouchpadTapSwitch(switchFlag); 2960c29fa5a6Sopenharmony_ci } 2961c29fa5a6Sopenharmony_ci ); 2962c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2963c29fa5a6Sopenharmony_ci MMI_HILOGE("Set touchpad tap switch failed, return:%{public}d", ret); 2964c29fa5a6Sopenharmony_ci return ret; 2965c29fa5a6Sopenharmony_ci } 2966c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 2967c29fa5a6Sopenharmony_ci return RET_OK; 2968c29fa5a6Sopenharmony_ci} 2969c29fa5a6Sopenharmony_ci 2970c29fa5a6Sopenharmony_ciint32_t MMIService::GetTouchpadTapSwitch(bool &switchFlag) 2971c29fa5a6Sopenharmony_ci{ 2972c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2973c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 2974c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2975c29fa5a6Sopenharmony_ci [this, &switchFlag] { 2976c29fa5a6Sopenharmony_ci return this->ReadTouchpadTapSwitch(switchFlag); 2977c29fa5a6Sopenharmony_ci } 2978c29fa5a6Sopenharmony_ci ); 2979c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2980c29fa5a6Sopenharmony_ci MMI_HILOGE("Get touchpad tap switch failed, return:%{public}d", ret); 2981c29fa5a6Sopenharmony_ci return ret; 2982c29fa5a6Sopenharmony_ci } 2983c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 2984c29fa5a6Sopenharmony_ci return RET_OK; 2985c29fa5a6Sopenharmony_ci} 2986c29fa5a6Sopenharmony_ci 2987c29fa5a6Sopenharmony_ciint32_t MMIService::SetTouchpadPointerSpeed(int32_t speed) 2988c29fa5a6Sopenharmony_ci{ 2989c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 2990c29fa5a6Sopenharmony_ci#if defined OHOS_BUILD_ENABLE_POINTER 2991c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 2992c29fa5a6Sopenharmony_ci [speed] { 2993c29fa5a6Sopenharmony_ci return ::OHOS::DelayedSingleton<MouseEventNormalize>::GetInstance()->SetTouchpadPointerSpeed(speed); 2994c29fa5a6Sopenharmony_ci } 2995c29fa5a6Sopenharmony_ci ); 2996c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 2997c29fa5a6Sopenharmony_ci MMI_HILOGE("Set touchpad speed failed, return:%{public}d", ret); 2998c29fa5a6Sopenharmony_ci return ret; 2999c29fa5a6Sopenharmony_ci } 3000c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 3001c29fa5a6Sopenharmony_ci return RET_OK; 3002c29fa5a6Sopenharmony_ci} 3003c29fa5a6Sopenharmony_ci 3004c29fa5a6Sopenharmony_ciint32_t MMIService::GetTouchpadPointerSpeed(int32_t &speed) 3005c29fa5a6Sopenharmony_ci{ 3006c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 3007c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 3008c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3009c29fa5a6Sopenharmony_ci [this, &speed] { 3010c29fa5a6Sopenharmony_ci return this->ReadTouchpadPointerSpeed(speed); 3011c29fa5a6Sopenharmony_ci } 3012c29fa5a6Sopenharmony_ci ); 3013c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3014c29fa5a6Sopenharmony_ci MMI_HILOGE("Get touchpad speed failed, return:%{public}d", ret); 3015c29fa5a6Sopenharmony_ci return ret; 3016c29fa5a6Sopenharmony_ci } 3017c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 3018c29fa5a6Sopenharmony_ci return RET_OK; 3019c29fa5a6Sopenharmony_ci} 3020c29fa5a6Sopenharmony_ci 3021c29fa5a6Sopenharmony_ciint32_t MMIService::SetTouchpadPinchSwitch(bool switchFlag) 3022c29fa5a6Sopenharmony_ci{ 3023c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 3024c29fa5a6Sopenharmony_ci#if defined OHOS_BUILD_ENABLE_POINTER 3025c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3026c29fa5a6Sopenharmony_ci [switchFlag] { 3027c29fa5a6Sopenharmony_ci return ::OHOS::DelayedSingleton<TouchEventNormalize>::GetInstance()->SetTouchpadPinchSwitch(switchFlag); 3028c29fa5a6Sopenharmony_ci } 3029c29fa5a6Sopenharmony_ci ); 3030c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3031c29fa5a6Sopenharmony_ci MMI_HILOGE("Set touch pad pinch switch failed, return:%{public}d", ret); 3032c29fa5a6Sopenharmony_ci return ret; 3033c29fa5a6Sopenharmony_ci } 3034c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 3035c29fa5a6Sopenharmony_ci return RET_OK; 3036c29fa5a6Sopenharmony_ci} 3037c29fa5a6Sopenharmony_ci 3038c29fa5a6Sopenharmony_ciint32_t MMIService::GetTouchpadPinchSwitch(bool &switchFlag) 3039c29fa5a6Sopenharmony_ci{ 3040c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 3041c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 3042c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3043c29fa5a6Sopenharmony_ci [this, &switchFlag] { 3044c29fa5a6Sopenharmony_ci return this->ReadTouchpadPinchSwitch(switchFlag); 3045c29fa5a6Sopenharmony_ci } 3046c29fa5a6Sopenharmony_ci ); 3047c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3048c29fa5a6Sopenharmony_ci MMI_HILOGE("Get touch pad pinch switch failed, return:%{public}d", ret); 3049c29fa5a6Sopenharmony_ci return ret; 3050c29fa5a6Sopenharmony_ci } 3051c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 3052c29fa5a6Sopenharmony_ci return RET_OK; 3053c29fa5a6Sopenharmony_ci} 3054c29fa5a6Sopenharmony_ci 3055c29fa5a6Sopenharmony_ciint32_t MMIService::SetTouchpadSwipeSwitch(bool switchFlag) 3056c29fa5a6Sopenharmony_ci{ 3057c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 3058c29fa5a6Sopenharmony_ci#if defined OHOS_BUILD_ENABLE_POINTER 3059c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3060c29fa5a6Sopenharmony_ci [switchFlag] { 3061c29fa5a6Sopenharmony_ci return ::OHOS::DelayedSingleton<TouchEventNormalize>::GetInstance()->SetTouchpadSwipeSwitch(switchFlag); 3062c29fa5a6Sopenharmony_ci } 3063c29fa5a6Sopenharmony_ci ); 3064c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3065c29fa5a6Sopenharmony_ci MMI_HILOGE("Set touchpad swipe switch failed, return:%{public}d", ret); 3066c29fa5a6Sopenharmony_ci return ret; 3067c29fa5a6Sopenharmony_ci } 3068c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 3069c29fa5a6Sopenharmony_ci return RET_OK; 3070c29fa5a6Sopenharmony_ci} 3071c29fa5a6Sopenharmony_ci 3072c29fa5a6Sopenharmony_ciint32_t MMIService::GetTouchpadSwipeSwitch(bool &switchFlag) 3073c29fa5a6Sopenharmony_ci{ 3074c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 3075c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 3076c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3077c29fa5a6Sopenharmony_ci [this, &switchFlag] { 3078c29fa5a6Sopenharmony_ci return this->ReadTouchpadSwipeSwitch(switchFlag); 3079c29fa5a6Sopenharmony_ci } 3080c29fa5a6Sopenharmony_ci ); 3081c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3082c29fa5a6Sopenharmony_ci MMI_HILOGE("Get touchpad swipe switch failed, return:%{public}d", ret); 3083c29fa5a6Sopenharmony_ci return ret; 3084c29fa5a6Sopenharmony_ci } 3085c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 3086c29fa5a6Sopenharmony_ci return RET_OK; 3087c29fa5a6Sopenharmony_ci} 3088c29fa5a6Sopenharmony_ci 3089c29fa5a6Sopenharmony_ciint32_t MMIService::SetTouchpadRightClickType(int32_t type) 3090c29fa5a6Sopenharmony_ci{ 3091c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 3092c29fa5a6Sopenharmony_ci#if defined OHOS_BUILD_ENABLE_POINTER 3093c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3094c29fa5a6Sopenharmony_ci [type] { 3095c29fa5a6Sopenharmony_ci return ::OHOS::DelayedSingleton<MouseEventNormalize>::GetInstance()->SetTouchpadRightClickType(type); 3096c29fa5a6Sopenharmony_ci } 3097c29fa5a6Sopenharmony_ci ); 3098c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3099c29fa5a6Sopenharmony_ci MMI_HILOGE("Set touchpad right button menu type failed, return:%{public}d", ret); 3100c29fa5a6Sopenharmony_ci return ret; 3101c29fa5a6Sopenharmony_ci } 3102c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 3103c29fa5a6Sopenharmony_ci return RET_OK; 3104c29fa5a6Sopenharmony_ci} 3105c29fa5a6Sopenharmony_ci 3106c29fa5a6Sopenharmony_ciint32_t MMIService::GetTouchpadRightClickType(int32_t &type) 3107c29fa5a6Sopenharmony_ci{ 3108c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 3109c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 3110c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3111c29fa5a6Sopenharmony_ci [this, &type] { 3112c29fa5a6Sopenharmony_ci return this->ReadTouchpadRightMenuType(type); 3113c29fa5a6Sopenharmony_ci } 3114c29fa5a6Sopenharmony_ci ); 3115c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3116c29fa5a6Sopenharmony_ci MMI_HILOGE("Get touchpad right button menu type failed, return:%{public}d", ret); 3117c29fa5a6Sopenharmony_ci return ret; 3118c29fa5a6Sopenharmony_ci } 3119c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 3120c29fa5a6Sopenharmony_ci return RET_OK; 3121c29fa5a6Sopenharmony_ci} 3122c29fa5a6Sopenharmony_ci 3123c29fa5a6Sopenharmony_ciint32_t MMIService::SetTouchpadRotateSwitch(bool rotateSwitch) 3124c29fa5a6Sopenharmony_ci{ 3125c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 3126c29fa5a6Sopenharmony_ci#if defined OHOS_BUILD_ENABLE_POINTER 3127c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3128c29fa5a6Sopenharmony_ci [rotateSwitch] { 3129c29fa5a6Sopenharmony_ci return ::OHOS::DelayedSingleton<TouchEventNormalize>::GetInstance()->SetTouchpadRotateSwitch(rotateSwitch); 3130c29fa5a6Sopenharmony_ci } 3131c29fa5a6Sopenharmony_ci ); 3132c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3133c29fa5a6Sopenharmony_ci MMI_HILOGE("Set touchpad rotate switch failed, ret:%{public}d", ret); 3134c29fa5a6Sopenharmony_ci return ret; 3135c29fa5a6Sopenharmony_ci } 3136c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 3137c29fa5a6Sopenharmony_ci return RET_OK; 3138c29fa5a6Sopenharmony_ci} 3139c29fa5a6Sopenharmony_ci 3140c29fa5a6Sopenharmony_ciint32_t MMIService::GetTouchpadRotateSwitch(bool &rotateSwitch) 3141c29fa5a6Sopenharmony_ci{ 3142c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 3143c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 3144c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3145c29fa5a6Sopenharmony_ci [this, &rotateSwitch] { 3146c29fa5a6Sopenharmony_ci return this->ReadTouchpadRotateSwitch(rotateSwitch); 3147c29fa5a6Sopenharmony_ci } 3148c29fa5a6Sopenharmony_ci ); 3149c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3150c29fa5a6Sopenharmony_ci MMI_HILOGE("Get touchpad rotate switch failed, ret:%{public}d", ret); 3151c29fa5a6Sopenharmony_ci return ret; 3152c29fa5a6Sopenharmony_ci } 3153c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 3154c29fa5a6Sopenharmony_ci return RET_OK; 3155c29fa5a6Sopenharmony_ci} 3156c29fa5a6Sopenharmony_ci 3157c29fa5a6Sopenharmony_ciint32_t MMIService::SetShieldStatus(int32_t shieldMode, bool isShield) 3158c29fa5a6Sopenharmony_ci{ 3159c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 3160c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_KEYBOARD 3161c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3162c29fa5a6Sopenharmony_ci [this, shieldMode, isShield] { 3163c29fa5a6Sopenharmony_ci return sMsgHandler_.SetShieldStatus(shieldMode, isShield); 3164c29fa5a6Sopenharmony_ci } 3165c29fa5a6Sopenharmony_ci ); 3166c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3167c29fa5a6Sopenharmony_ci MMI_HILOGE("Set shield event interception state failed, return:%{public}d", ret); 3168c29fa5a6Sopenharmony_ci return ret; 3169c29fa5a6Sopenharmony_ci } 3170c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD 3171c29fa5a6Sopenharmony_ci return RET_OK; 3172c29fa5a6Sopenharmony_ci} 3173c29fa5a6Sopenharmony_ci 3174c29fa5a6Sopenharmony_ciint32_t MMIService::GetShieldStatus(int32_t shieldMode, bool &isShield) 3175c29fa5a6Sopenharmony_ci{ 3176c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 3177c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_KEYBOARD 3178c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3179c29fa5a6Sopenharmony_ci [this, shieldMode, &isShield] { 3180c29fa5a6Sopenharmony_ci return sMsgHandler_.GetShieldStatus(shieldMode, isShield); 3181c29fa5a6Sopenharmony_ci } 3182c29fa5a6Sopenharmony_ci ); 3183c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3184c29fa5a6Sopenharmony_ci MMI_HILOGE("Failed to set shield event interception status, ret:%{public}d", ret); 3185c29fa5a6Sopenharmony_ci return ret; 3186c29fa5a6Sopenharmony_ci } 3187c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD 3188c29fa5a6Sopenharmony_ci return RET_OK; 3189c29fa5a6Sopenharmony_ci} 3190c29fa5a6Sopenharmony_ci 3191c29fa5a6Sopenharmony_ciint32_t MMIService::GetKeyState(std::vector<int32_t> &pressedKeys, std::map<int32_t, int32_t> &specialKeysState) 3192c29fa5a6Sopenharmony_ci{ 3193c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 3194c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_KEYBOARD 3195c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3196c29fa5a6Sopenharmony_ci [this, &pressedKeys, &specialKeysState] { 3197c29fa5a6Sopenharmony_ci return this->OnGetKeyState(pressedKeys, specialKeysState); 3198c29fa5a6Sopenharmony_ci } 3199c29fa5a6Sopenharmony_ci ); 3200c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3201c29fa5a6Sopenharmony_ci MMI_HILOGE("Get pressed keys failed, return:%{public}d", ret); 3202c29fa5a6Sopenharmony_ci return ret; 3203c29fa5a6Sopenharmony_ci } 3204c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD 3205c29fa5a6Sopenharmony_ci return RET_OK; 3206c29fa5a6Sopenharmony_ci} 3207c29fa5a6Sopenharmony_ci 3208c29fa5a6Sopenharmony_ciint32_t MMIService::Authorize(bool isAuthorize) 3209c29fa5a6Sopenharmony_ci{ 3210c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 3211c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3212c29fa5a6Sopenharmony_ci [this, isAuthorize] { 3213c29fa5a6Sopenharmony_ci return this->OnAuthorize(isAuthorize); 3214c29fa5a6Sopenharmony_ci } 3215c29fa5a6Sopenharmony_ci ); 3216c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3217c29fa5a6Sopenharmony_ci MMI_HILOGE("OnAuthorize failed, ret:%{public}d", ret); 3218c29fa5a6Sopenharmony_ci return ret; 3219c29fa5a6Sopenharmony_ci } 3220c29fa5a6Sopenharmony_ci return RET_OK; 3221c29fa5a6Sopenharmony_ci} 3222c29fa5a6Sopenharmony_ci 3223c29fa5a6Sopenharmony_ciint32_t MMIService::OnAuthorize(bool isAuthorize) 3224c29fa5a6Sopenharmony_ci{ 3225c29fa5a6Sopenharmony_ci return sMsgHandler_.OnAuthorize(isAuthorize); 3226c29fa5a6Sopenharmony_ci} 3227c29fa5a6Sopenharmony_ci 3228c29fa5a6Sopenharmony_ciint32_t MMIService::CancelInjection() 3229c29fa5a6Sopenharmony_ci{ 3230c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 3231c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3232c29fa5a6Sopenharmony_ci [this] { 3233c29fa5a6Sopenharmony_ci return this->OnCancelInjection(); 3234c29fa5a6Sopenharmony_ci } 3235c29fa5a6Sopenharmony_ci ); 3236c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3237c29fa5a6Sopenharmony_ci MMI_HILOGE("OnCancelInjection failed, ret:%{public}d", ret); 3238c29fa5a6Sopenharmony_ci return ret; 3239c29fa5a6Sopenharmony_ci } 3240c29fa5a6Sopenharmony_ci return RET_OK; 3241c29fa5a6Sopenharmony_ci} 3242c29fa5a6Sopenharmony_ci 3243c29fa5a6Sopenharmony_ciint32_t MMIService::OnCancelInjection() 3244c29fa5a6Sopenharmony_ci{ 3245c29fa5a6Sopenharmony_ci return sMsgHandler_.OnCancelInjection(); 3246c29fa5a6Sopenharmony_ci} 3247c29fa5a6Sopenharmony_ci 3248c29fa5a6Sopenharmony_ciint32_t MMIService::HasIrEmitter(bool &hasIrEmitter) 3249c29fa5a6Sopenharmony_ci{ 3250c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 3251c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3252c29fa5a6Sopenharmony_ci [this, &hasIrEmitter] { 3253c29fa5a6Sopenharmony_ci return this->OnHasIrEmitter(hasIrEmitter); 3254c29fa5a6Sopenharmony_ci } 3255c29fa5a6Sopenharmony_ci ); 3256c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3257c29fa5a6Sopenharmony_ci MMI_HILOGE("OnHasIrEmitter failed, ret:%{public}d", ret); 3258c29fa5a6Sopenharmony_ci return ret; 3259c29fa5a6Sopenharmony_ci } 3260c29fa5a6Sopenharmony_ci return RET_OK; 3261c29fa5a6Sopenharmony_ci} 3262c29fa5a6Sopenharmony_ci 3263c29fa5a6Sopenharmony_ciint32_t MMIService::GetInfraredFrequencies(std::vector<InfraredFrequency>& frequencies) 3264c29fa5a6Sopenharmony_ci{ 3265c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 3266c29fa5a6Sopenharmony_ci MMI_HILOGI("Start get infrared frequency"); 3267c29fa5a6Sopenharmony_ci std::vector<InfraredFrequencyInfo> infos; 3268c29fa5a6Sopenharmony_ci if (!InfraredEmitterController::GetInstance()->GetFrequencies(infos)) { 3269c29fa5a6Sopenharmony_ci MMI_HILOGE("Failed to get frequencies"); 3270c29fa5a6Sopenharmony_ci return RET_ERR; 3271c29fa5a6Sopenharmony_ci } 3272c29fa5a6Sopenharmony_ci for (auto &item : infos) { 3273c29fa5a6Sopenharmony_ci InfraredFrequency info; 3274c29fa5a6Sopenharmony_ci info.min_ = item.min_; 3275c29fa5a6Sopenharmony_ci info.max_ = item.max_; 3276c29fa5a6Sopenharmony_ci frequencies.push_back(info); 3277c29fa5a6Sopenharmony_ci } 3278c29fa5a6Sopenharmony_ci std::string context = ""; 3279c29fa5a6Sopenharmony_ci int32_t size = static_cast<int32_t>(frequencies.size()); 3280c29fa5a6Sopenharmony_ci for (int32_t i = 0; i < size; i++) { 3281c29fa5a6Sopenharmony_ci context = context + "frequencies[" + std::to_string(i) + "]. max=" + std::to_string(frequencies[i].max_) + 3282c29fa5a6Sopenharmony_ci ",min=" + std::to_string(frequencies[i].min_) + ";"; 3283c29fa5a6Sopenharmony_ci } 3284c29fa5a6Sopenharmony_ci MMI_HILOGD("Data from hdf context:%{public}s", context.c_str()); 3285c29fa5a6Sopenharmony_ci return RET_OK; 3286c29fa5a6Sopenharmony_ci} 3287c29fa5a6Sopenharmony_ci 3288c29fa5a6Sopenharmony_ciint32_t MMIService::TransmitInfrared(int64_t number, std::vector<int64_t>& pattern) 3289c29fa5a6Sopenharmony_ci{ 3290c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 3291c29fa5a6Sopenharmony_ci std::string context = "infraredFrequency:" + std::to_string(number) + ";"; 3292c29fa5a6Sopenharmony_ci int32_t size = static_cast<int32_t>(pattern.size()); 3293c29fa5a6Sopenharmony_ci for (int32_t i = 0; i < size; i++) { 3294c29fa5a6Sopenharmony_ci context = context + "index:" + std::to_string(i) + ": pattern:" + std::to_string(pattern[i]) + ";"; 3295c29fa5a6Sopenharmony_ci } 3296c29fa5a6Sopenharmony_ci MMI_HILOGI("TransmitInfrared para context:%{public}s", context.c_str()); 3297c29fa5a6Sopenharmony_ci if (!InfraredEmitterController::GetInstance()->Transmit(number, pattern)) { 3298c29fa5a6Sopenharmony_ci MMI_HILOGE("Failed to transmit"); 3299c29fa5a6Sopenharmony_ci return RET_ERR; 3300c29fa5a6Sopenharmony_ci } 3301c29fa5a6Sopenharmony_ci return RET_OK; 3302c29fa5a6Sopenharmony_ci} 3303c29fa5a6Sopenharmony_ci 3304c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_VKEYBOARD 3305c29fa5a6Sopenharmony_ciint32_t MMIService::SetVKeyboardArea(double topLeftX, double topLeftY, double bottomRightX, double bottomRightY) 3306c29fa5a6Sopenharmony_ci{ 3307c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 3308c29fa5a6Sopenharmony_ci if (!isHPR_) { 3309c29fa5a6Sopenharmony_ci MMI_HILOGE("Failed to set virtual keyboard area, feature not supported"); 3310c29fa5a6Sopenharmony_ci return RET_ERR; 3311c29fa5a6Sopenharmony_ci } 3312c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3313c29fa5a6Sopenharmony_ci [this, topLeftX, topLeftY, bottomRightX, bottomRightY] { 3314c29fa5a6Sopenharmony_ci return this->OnSetVKeyboardArea(topLeftX, topLeftY, bottomRightX, bottomRightY); 3315c29fa5a6Sopenharmony_ci } 3316c29fa5a6Sopenharmony_ci ); 3317c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3318c29fa5a6Sopenharmony_ci MMI_HILOGE("Failed to set virtual keyboard area, ret:%{public}d", ret); 3319c29fa5a6Sopenharmony_ci } 3320c29fa5a6Sopenharmony_ci return ret; 3321c29fa5a6Sopenharmony_ci} 3322c29fa5a6Sopenharmony_ci 3323c29fa5a6Sopenharmony_ciint32_t MMIService::OnSetVKeyboardArea(double topLeftX, double topLeftY, double bottomRightX, double bottomRightY) 3324c29fa5a6Sopenharmony_ci{ 3325c29fa5a6Sopenharmony_ci gaussiankeyboard_setVKeyboardArea_(topLeftX, topLeftY, bottomRightX, bottomRightY); 3326c29fa5a6Sopenharmony_ci int32_t sKeyEventID = 1234; 3327c29fa5a6Sopenharmony_ci int32_t sKeyEventDeviceId = 99; 3328c29fa5a6Sopenharmony_ci // Init the shared key event used by later key injection module and set common fields. 3329c29fa5a6Sopenharmony_ci g_VKeySharedKeyEvent = KeyEvent::Create(); 3330c29fa5a6Sopenharmony_ci CHKPR(g_VKeySharedKeyEvent, ERROR_NULL_POINTER); 3331c29fa5a6Sopenharmony_ci g_VKeySharedKeyEvent->SetId(sKeyEventID); 3332c29fa5a6Sopenharmony_ci g_VKeySharedKeyEvent->SetDeviceId(sKeyEventDeviceId); 3333c29fa5a6Sopenharmony_ci // Init the shared UI key event for UI rendering. 3334c29fa5a6Sopenharmony_ci g_VKeySharedUIKeyEvent = KeyEvent::Create(); 3335c29fa5a6Sopenharmony_ci CHKPR(g_VKeySharedUIKeyEvent, ERROR_NULL_POINTER); 3336c29fa5a6Sopenharmony_ci g_VKeySharedUIKeyEvent->SetId(sKeyEventID); 3337c29fa5a6Sopenharmony_ci g_VKeySharedUIKeyEvent->SetDeviceId(sKeyEventDeviceId); 3338c29fa5a6Sopenharmony_ci return RET_OK; 3339c29fa5a6Sopenharmony_ci} 3340c29fa5a6Sopenharmony_ci 3341c29fa5a6Sopenharmony_ciint32_t MMIService::SetMotionSpace(std::string& keyName, bool useShift, std::vector<int32_t>& pattern) 3342c29fa5a6Sopenharmony_ci{ 3343c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 3344c29fa5a6Sopenharmony_ci if (!isHPR_) { 3345c29fa5a6Sopenharmony_ci MMI_HILOGE("Failed to set motion space, feature not supported"); 3346c29fa5a6Sopenharmony_ci return RET_ERR; 3347c29fa5a6Sopenharmony_ci } 3348c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3349c29fa5a6Sopenharmony_ci [this, &keyName, useShift, &pattern] { 3350c29fa5a6Sopenharmony_ci return this->OnSetMotionSpace(keyName, useShift, pattern); 3351c29fa5a6Sopenharmony_ci } 3352c29fa5a6Sopenharmony_ci ); 3353c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3354c29fa5a6Sopenharmony_ci MMI_HILOGE("Failed to set motion space, ret:%{public}d", ret); 3355c29fa5a6Sopenharmony_ci } 3356c29fa5a6Sopenharmony_ci return ret; 3357c29fa5a6Sopenharmony_ci} 3358c29fa5a6Sopenharmony_ci 3359c29fa5a6Sopenharmony_ciint32_t MMIService::OnSetMotionSpace(std::string& keyName, bool useShift, std::vector<int32_t>& pattern) 3360c29fa5a6Sopenharmony_ci{ 3361c29fa5a6Sopenharmony_ci if (pattern.size() == MotionSpacePatternIndex::PATTERN_SIZE) { 3362c29fa5a6Sopenharmony_ci auto motionSpaceType = static_cast<MotionSpaceType>(pattern[MotionSpacePatternIndex::PATTERN_MST_ID]); 3363c29fa5a6Sopenharmony_ci if (motionSpaceType != MotionSpaceType::TRACKPAD) { 3364c29fa5a6Sopenharmony_ci gaussiankeyboard_updateMotionSpace_(keyName, useShift, pattern); 3365c29fa5a6Sopenharmony_ci } 3366c29fa5a6Sopenharmony_ci return RET_OK; 3367c29fa5a6Sopenharmony_ci } else { 3368c29fa5a6Sopenharmony_ci return COMMON_PARAMETER_ERROR; 3369c29fa5a6Sopenharmony_ci } 3370c29fa5a6Sopenharmony_ci} 3371c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_VKEYBOARD 3372c29fa5a6Sopenharmony_ci 3373c29fa5a6Sopenharmony_ciint32_t MMIService::OnHasIrEmitter(bool &hasIrEmitter) 3374c29fa5a6Sopenharmony_ci{ 3375c29fa5a6Sopenharmony_ci hasIrEmitter = false; 3376c29fa5a6Sopenharmony_ci return RET_OK; 3377c29fa5a6Sopenharmony_ci} 3378c29fa5a6Sopenharmony_ci 3379c29fa5a6Sopenharmony_ciint32_t MMIService::SetPixelMapData(int32_t infoId, void* pixelMap) 3380c29fa5a6Sopenharmony_ci{ 3381c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 3382c29fa5a6Sopenharmony_ci CHKPR(pixelMap, ERROR_NULL_POINTER); 3383c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3384c29fa5a6Sopenharmony_ci [this, infoId, pixelMap] { 3385c29fa5a6Sopenharmony_ci return sMsgHandler_.SetPixelMapData(infoId, pixelMap); 3386c29fa5a6Sopenharmony_ci } 3387c29fa5a6Sopenharmony_ci ); 3388c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3389c29fa5a6Sopenharmony_ci MMI_HILOGE("Failed to set pixelmap, ret:%{public}d", ret); 3390c29fa5a6Sopenharmony_ci return ret; 3391c29fa5a6Sopenharmony_ci } 3392c29fa5a6Sopenharmony_ci return RET_OK; 3393c29fa5a6Sopenharmony_ci} 3394c29fa5a6Sopenharmony_ci 3395c29fa5a6Sopenharmony_civoid MMIService::InitPreferences() 3396c29fa5a6Sopenharmony_ci{ 3397c29fa5a6Sopenharmony_ci PREFERENCES_MGR->InitPreferences(); 3398c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_MOVE_EVENT_FILTERS 3399c29fa5a6Sopenharmony_ci int32_t ret = SetMoveEventFilters(PREFERENCES_MGR->GetBoolValue("moveEventFilterFlag", false)); 3400c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3401c29fa5a6Sopenharmony_ci MMI_HILOGE("Failed to read moveEventFilterFlag, ret:%{public}d", ret); 3402c29fa5a6Sopenharmony_ci } 3403c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_MOVE_EVENT_FILTERS 3404c29fa5a6Sopenharmony_ci} 3405c29fa5a6Sopenharmony_ci 3406c29fa5a6Sopenharmony_ciint32_t MMIService::SetMoveEventFilters(bool flag) 3407c29fa5a6Sopenharmony_ci{ 3408c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 3409c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_MOVE_EVENT_FILTERS 3410c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3411c29fa5a6Sopenharmony_ci std::bind(&InputEventHandler::SetMoveEventFilters, InputHandler, flag)); 3412c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3413c29fa5a6Sopenharmony_ci MMI_HILOGE("Failed to set move event filter flag, ret:%{public}d", ret); 3414c29fa5a6Sopenharmony_ci return ret; 3415c29fa5a6Sopenharmony_ci } 3416c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_MOVE_EVENT_FILTERS 3417c29fa5a6Sopenharmony_ci return RET_OK; 3418c29fa5a6Sopenharmony_ci} 3419c29fa5a6Sopenharmony_ci 3420c29fa5a6Sopenharmony_ciint32_t MMIService::SetCurrentUser(int32_t userId) 3421c29fa5a6Sopenharmony_ci{ 3422c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 3423c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3424c29fa5a6Sopenharmony_ci [userId] { 3425c29fa5a6Sopenharmony_ci return ::OHOS::MMI::IInputWindowsManager::GetInstance()->SetCurrentUser(userId); 3426c29fa5a6Sopenharmony_ci } 3427c29fa5a6Sopenharmony_ci ); 3428c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3429c29fa5a6Sopenharmony_ci MMI_HILOGE("Failed to set current user, ret:%{public}d", ret); 3430c29fa5a6Sopenharmony_ci return ret; 3431c29fa5a6Sopenharmony_ci } 3432c29fa5a6Sopenharmony_ci return RET_OK; 3433c29fa5a6Sopenharmony_ci} 3434c29fa5a6Sopenharmony_ci 3435c29fa5a6Sopenharmony_ciint32_t MMIService::SetTouchpadThreeFingersTapSwitch(bool switchFlag) 3436c29fa5a6Sopenharmony_ci{ 3437c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 3438c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 3439c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3440c29fa5a6Sopenharmony_ci [switchFlag] { 3441c29fa5a6Sopenharmony_ci return ::OHOS::DelayedSingleton<TouchEventNormalize>::GetInstance()->SetTouchpadThreeFingersTapSwitch( 3442c29fa5a6Sopenharmony_ci switchFlag); 3443c29fa5a6Sopenharmony_ci } 3444c29fa5a6Sopenharmony_ci ); 3445c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3446c29fa5a6Sopenharmony_ci MMI_HILOGE("Failed to SetTouchpadThreeFingersTapSwitch status, ret:%{public}d", ret); 3447c29fa5a6Sopenharmony_ci return ret; 3448c29fa5a6Sopenharmony_ci } 3449c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 3450c29fa5a6Sopenharmony_ci return RET_OK; 3451c29fa5a6Sopenharmony_ci} 3452c29fa5a6Sopenharmony_ci 3453c29fa5a6Sopenharmony_ciint32_t MMIService::GetTouchpadThreeFingersTapSwitch(bool &switchFlag) 3454c29fa5a6Sopenharmony_ci{ 3455c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 3456c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 3457c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3458c29fa5a6Sopenharmony_ci [&switchFlag] { 3459c29fa5a6Sopenharmony_ci return ::OHOS::DelayedSingleton<TouchEventNormalize>::GetInstance()->GetTouchpadThreeFingersTapSwitch( 3460c29fa5a6Sopenharmony_ci switchFlag); 3461c29fa5a6Sopenharmony_ci } 3462c29fa5a6Sopenharmony_ci ); 3463c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3464c29fa5a6Sopenharmony_ci MMI_HILOGE("Failed to GetTouchpadThreeFingersTapSwitch status, ret:%{public}d", ret); 3465c29fa5a6Sopenharmony_ci return ret; 3466c29fa5a6Sopenharmony_ci } 3467c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 3468c29fa5a6Sopenharmony_ci return RET_OK; 3469c29fa5a6Sopenharmony_ci} 3470c29fa5a6Sopenharmony_ci 3471c29fa5a6Sopenharmony_ciint32_t MMIService::AddVirtualInputDevice(std::shared_ptr<InputDevice> device, int32_t &deviceId) 3472c29fa5a6Sopenharmony_ci{ 3473c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 3474c29fa5a6Sopenharmony_ci CHKPR(device, ERROR_NULL_POINTER); 3475c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3476c29fa5a6Sopenharmony_ci [device, &deviceId] { 3477c29fa5a6Sopenharmony_ci return ::OHOS::MMI::InputDeviceManager::GetInstance()->AddVirtualInputDevice(device, deviceId); 3478c29fa5a6Sopenharmony_ci } 3479c29fa5a6Sopenharmony_ci ); 3480c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3481c29fa5a6Sopenharmony_ci MMI_HILOGE("AddVirtualInputDevice failed:%{public}d", ret); 3482c29fa5a6Sopenharmony_ci } 3483c29fa5a6Sopenharmony_ci return ret; 3484c29fa5a6Sopenharmony_ci} 3485c29fa5a6Sopenharmony_ci 3486c29fa5a6Sopenharmony_ciint32_t MMIService::RemoveVirtualInputDevice(int32_t deviceId) 3487c29fa5a6Sopenharmony_ci{ 3488c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 3489c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3490c29fa5a6Sopenharmony_ci [deviceId] { 3491c29fa5a6Sopenharmony_ci return ::OHOS::MMI::InputDeviceManager::GetInstance()->RemoveVirtualInputDevice(deviceId); 3492c29fa5a6Sopenharmony_ci } 3493c29fa5a6Sopenharmony_ci ); 3494c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3495c29fa5a6Sopenharmony_ci MMI_HILOGE("RemoveVirtualInputDevice failed:%{public}d", ret); 3496c29fa5a6Sopenharmony_ci } 3497c29fa5a6Sopenharmony_ci return ret; 3498c29fa5a6Sopenharmony_ci} 3499c29fa5a6Sopenharmony_ci 3500c29fa5a6Sopenharmony_ciint32_t MMIService::EnableHardwareCursorStats(bool enable) 3501c29fa5a6Sopenharmony_ci{ 3502c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 3503c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) 3504c29fa5a6Sopenharmony_ci int32_t pid = GetCallingPid(); 3505c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3506c29fa5a6Sopenharmony_ci [pid, enable] { 3507c29fa5a6Sopenharmony_ci return IPointerDrawingManager::GetInstance()->EnableHardwareCursorStats(pid, enable); 3508c29fa5a6Sopenharmony_ci } 3509c29fa5a6Sopenharmony_ci ); 3510c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3511c29fa5a6Sopenharmony_ci MMI_HILOGE("Enable hardware cursor stats failed, ret:%{public}d", ret); 3512c29fa5a6Sopenharmony_ci return ret; 3513c29fa5a6Sopenharmony_ci } 3514c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING 3515c29fa5a6Sopenharmony_ci return RET_OK; 3516c29fa5a6Sopenharmony_ci} 3517c29fa5a6Sopenharmony_ci 3518c29fa5a6Sopenharmony_ciint32_t MMIService::GetHardwareCursorStats(uint32_t &frameCount, uint32_t &vsyncCount) 3519c29fa5a6Sopenharmony_ci{ 3520c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 3521c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) 3522c29fa5a6Sopenharmony_ci int32_t pid = GetCallingPid(); 3523c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3524c29fa5a6Sopenharmony_ci [pid, &frameCount, &vsyncCount] { 3525c29fa5a6Sopenharmony_ci return IPointerDrawingManager::GetInstance()->GetHardwareCursorStats(pid, frameCount, vsyncCount); 3526c29fa5a6Sopenharmony_ci } 3527c29fa5a6Sopenharmony_ci ); 3528c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3529c29fa5a6Sopenharmony_ci MMI_HILOGE("Get hardware cursor stats failed, ret:%{public}d", ret); 3530c29fa5a6Sopenharmony_ci return ret; 3531c29fa5a6Sopenharmony_ci } 3532c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING 3533c29fa5a6Sopenharmony_ci return RET_OK; 3534c29fa5a6Sopenharmony_ci} 3535c29fa5a6Sopenharmony_ci 3536c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_MAGICCURSOR 3537c29fa5a6Sopenharmony_ciint32_t MMIService::GetPointerSnapshot(void *pixelMapPtr) 3538c29fa5a6Sopenharmony_ci{ 3539c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 3540c29fa5a6Sopenharmony_ci#if defined OHOS_BUILD_ENABLE_POINTER 3541c29fa5a6Sopenharmony_ci MMI_HILOGI("Get pointer snapshot from process(%{public}d)", GetCallingPid()); 3542c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask(std::bind( 3543c29fa5a6Sopenharmony_ci std::bind(&IPointerDrawingManager::GetPointerSnapshot, IPointerDrawingManager::GetInstance(), pixelMapPtr))); 3544c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3545c29fa5a6Sopenharmony_ci MMI_HILOGE("Get the pointer snapshot failed, ret: %{public}d", ret); 3546c29fa5a6Sopenharmony_ci return ret; 3547c29fa5a6Sopenharmony_ci } 3548c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 3549c29fa5a6Sopenharmony_ci return RET_OK; 3550c29fa5a6Sopenharmony_ci} 3551c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_MAGICCURSOR 3552c29fa5a6Sopenharmony_ci 3553c29fa5a6Sopenharmony_ciint32_t MMIService::SetTouchpadScrollRows(int32_t rows) 3554c29fa5a6Sopenharmony_ci{ 3555c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 3556c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 3557c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3558c29fa5a6Sopenharmony_ci [rows] { 3559c29fa5a6Sopenharmony_ci return ::OHOS::DelayedSingleton<TouchEventNormalize>::GetInstance()->SetTouchpadScrollRows(rows); 3560c29fa5a6Sopenharmony_ci } 3561c29fa5a6Sopenharmony_ci ); 3562c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3563c29fa5a6Sopenharmony_ci MMI_HILOGE("Set the number of touchpad scrolling rows failed, return %{public}d", ret); 3564c29fa5a6Sopenharmony_ci return ret; 3565c29fa5a6Sopenharmony_ci } 3566c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 3567c29fa5a6Sopenharmony_ci return RET_OK; 3568c29fa5a6Sopenharmony_ci} 3569c29fa5a6Sopenharmony_ci 3570c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 3571c29fa5a6Sopenharmony_ciint32_t MMIService::ReadTouchpadScrollRows(int32_t &rows) 3572c29fa5a6Sopenharmony_ci{ 3573c29fa5a6Sopenharmony_ci rows = TOUCH_EVENT_HDR->GetTouchpadScrollRows(); 3574c29fa5a6Sopenharmony_ci return RET_OK; 3575c29fa5a6Sopenharmony_ci} 3576c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 3577c29fa5a6Sopenharmony_ci 3578c29fa5a6Sopenharmony_ciint32_t MMIService::GetTouchpadScrollRows(int32_t &rows) 3579c29fa5a6Sopenharmony_ci{ 3580c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 3581c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 3582c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3583c29fa5a6Sopenharmony_ci [this, &rows] { 3584c29fa5a6Sopenharmony_ci return this->ReadTouchpadScrollRows(rows); 3585c29fa5a6Sopenharmony_ci } 3586c29fa5a6Sopenharmony_ci ); 3587c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3588c29fa5a6Sopenharmony_ci MMI_HILOGE("Get the number of touchpad scrolling rows failed, return %{public}d, pid:%{public}d", ret, 3589c29fa5a6Sopenharmony_ci GetCallingPid()); 3590c29fa5a6Sopenharmony_ci return ret; 3591c29fa5a6Sopenharmony_ci } 3592c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 3593c29fa5a6Sopenharmony_ci return RET_OK; 3594c29fa5a6Sopenharmony_ci} 3595c29fa5a6Sopenharmony_ci 3596c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_ANCO 3597c29fa5a6Sopenharmony_ciint32_t MMIService::AncoAddChannel(sptr<IAncoChannel> channel) 3598c29fa5a6Sopenharmony_ci{ 3599c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask([channel]() { 3600c29fa5a6Sopenharmony_ci return WIN_MGR->AncoAddChannel(channel); 3601c29fa5a6Sopenharmony_ci }); 3602c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3603c29fa5a6Sopenharmony_ci MMI_HILOGE("AncoAddChannel fail, error:%{public}d", ret); 3604c29fa5a6Sopenharmony_ci } 3605c29fa5a6Sopenharmony_ci return ret; 3606c29fa5a6Sopenharmony_ci} 3607c29fa5a6Sopenharmony_ci 3608c29fa5a6Sopenharmony_ciint32_t MMIService::AncoRemoveChannel(sptr<IAncoChannel> channel) 3609c29fa5a6Sopenharmony_ci{ 3610c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask([channel]() { 3611c29fa5a6Sopenharmony_ci return WIN_MGR->AncoRemoveChannel(channel); 3612c29fa5a6Sopenharmony_ci }); 3613c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3614c29fa5a6Sopenharmony_ci MMI_HILOGE("AncoRemoveChannel fail, error:%{public}d", ret); 3615c29fa5a6Sopenharmony_ci } 3616c29fa5a6Sopenharmony_ci return ret; 3617c29fa5a6Sopenharmony_ci} 3618c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_ANCO 3619c29fa5a6Sopenharmony_ci 3620c29fa5a6Sopenharmony_ciint32_t MMIService::TransferBinderClientSrv(const sptr<IRemoteObject> &binderClientObject) 3621c29fa5a6Sopenharmony_ci{ 3622c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 3623c29fa5a6Sopenharmony_ci int32_t pid = GetCallingPid(); 3624c29fa5a6Sopenharmony_ci int32_t ret = 3625c29fa5a6Sopenharmony_ci delegateTasks_.PostSyncTask( 3626c29fa5a6Sopenharmony_ci [this, pid, binderClientObject] { 3627c29fa5a6Sopenharmony_ci return sMsgHandler_.OnTransferBinderClientSrv(binderClientObject, pid); 3628c29fa5a6Sopenharmony_ci } 3629c29fa5a6Sopenharmony_ci ); 3630c29fa5a6Sopenharmony_ci MMI_HILOGI("TransferBinderClientSrv result:%{public}d", ret); 3631c29fa5a6Sopenharmony_ci return ret; 3632c29fa5a6Sopenharmony_ci} 3633c29fa5a6Sopenharmony_ci 3634c29fa5a6Sopenharmony_civoid MMIService::CalculateFuntionRunningTime(std::function<void()> func, const std::string &flag) 3635c29fa5a6Sopenharmony_ci{ 3636c29fa5a6Sopenharmony_ci std::function<void (void *)> printLog = std::bind(&MMIService::PrintLog, this, flag, THREAD_BLOCK_TIMER_SPAN_S, 3637c29fa5a6Sopenharmony_ci getpid(), gettid()); 3638c29fa5a6Sopenharmony_ci int32_t id = HiviewDFX::XCollie::GetInstance().SetTimer(flag, THREAD_BLOCK_TIMER_SPAN_S, printLog, nullptr, 3639c29fa5a6Sopenharmony_ci HiviewDFX::XCOLLIE_FLAG_NOOP); 3640c29fa5a6Sopenharmony_ci func(); 3641c29fa5a6Sopenharmony_ci HiviewDFX::XCollie::GetInstance().CancelTimer(id); 3642c29fa5a6Sopenharmony_ci} 3643c29fa5a6Sopenharmony_ci 3644c29fa5a6Sopenharmony_civoid MMIService::PrintLog(const std::string &flag, int32_t duration, int32_t pid, int32_t tid) 3645c29fa5a6Sopenharmony_ci{ 3646c29fa5a6Sopenharmony_ci std::string dfxThreadBlockMsg { "MMIBlockTask name:" }; 3647c29fa5a6Sopenharmony_ci dfxThreadBlockMsg += flag; 3648c29fa5a6Sopenharmony_ci dfxThreadBlockMsg += ", duration time:"; 3649c29fa5a6Sopenharmony_ci dfxThreadBlockMsg += std::to_string(duration); 3650c29fa5a6Sopenharmony_ci dfxThreadBlockMsg += ", pid:"; 3651c29fa5a6Sopenharmony_ci dfxThreadBlockMsg += std::to_string(pid); 3652c29fa5a6Sopenharmony_ci dfxThreadBlockMsg += ", tid:"; 3653c29fa5a6Sopenharmony_ci dfxThreadBlockMsg += std::to_string(tid); 3654c29fa5a6Sopenharmony_ci MMI_HILOGW("DfxThreadBlockMsg:%{public}s", dfxThreadBlockMsg.c_str()); 3655c29fa5a6Sopenharmony_ci OHOS::HiviewDFX::DfxDumpCatcher dumpCatcher; 3656c29fa5a6Sopenharmony_ci dumpCatcher.DumpCatch(pid, tid, dfxThreadBlockMsg, MAX_FRAME_NUMS, false); 3657c29fa5a6Sopenharmony_ci} 3658c29fa5a6Sopenharmony_ci 3659c29fa5a6Sopenharmony_ciint32_t MMIService::SkipPointerLayer(bool isSkip) 3660c29fa5a6Sopenharmony_ci{ 3661c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 3662c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) 3663c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3664c29fa5a6Sopenharmony_ci [isSkip] { 3665c29fa5a6Sopenharmony_ci return IPointerDrawingManager::GetInstance()->SkipPointerLayer(isSkip); 3666c29fa5a6Sopenharmony_ci } 3667c29fa5a6Sopenharmony_ci ); 3668c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3669c29fa5a6Sopenharmony_ci MMI_HILOGE("Skip pointer layerfailed, return:%{public}d", ret); 3670c29fa5a6Sopenharmony_ci return ret; 3671c29fa5a6Sopenharmony_ci } 3672c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING 3673c29fa5a6Sopenharmony_ci return RET_OK; 3674c29fa5a6Sopenharmony_ci} 3675c29fa5a6Sopenharmony_ci 3676c29fa5a6Sopenharmony_civoid MMIService::OnSessionDelete(SessionPtr session) 3677c29fa5a6Sopenharmony_ci{ 3678c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 3679c29fa5a6Sopenharmony_ci CHKPV(session); 3680c29fa5a6Sopenharmony_ci std::string programName = session->GetProgramName(); 3681c29fa5a6Sopenharmony_ci std::lock_guard<std::mutex> guard(mutex_); 3682c29fa5a6Sopenharmony_ci auto it = clientInfos_.find(programName); 3683c29fa5a6Sopenharmony_ci if (it != clientInfos_.end()) { 3684c29fa5a6Sopenharmony_ci clientInfos_.erase(it); 3685c29fa5a6Sopenharmony_ci MMI_HILOGD("Clear the client info, programName:%{public}s", programName.c_str()); 3686c29fa5a6Sopenharmony_ci } 3687c29fa5a6Sopenharmony_ci} 3688c29fa5a6Sopenharmony_ci 3689c29fa5a6Sopenharmony_ciint32_t MMIService::SetClientInfo(int32_t pid, uint64_t readThreadId) 3690c29fa5a6Sopenharmony_ci{ 3691c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 3692c29fa5a6Sopenharmony_ci auto sess = GetSessionByPid(pid); 3693c29fa5a6Sopenharmony_ci CHKPR(sess, ERROR_NULL_POINTER); 3694c29fa5a6Sopenharmony_ci std::string programName = sess->GetProgramName(); 3695c29fa5a6Sopenharmony_ci std::lock_guard<std::mutex> guard(mutex_); 3696c29fa5a6Sopenharmony_ci if (clientInfos_.find(programName) != clientInfos_.end()) { 3697c29fa5a6Sopenharmony_ci clientInfos_[programName].pid = pid; 3698c29fa5a6Sopenharmony_ci clientInfos_[programName].readThreadId = readThreadId; 3699c29fa5a6Sopenharmony_ci return RET_OK; 3700c29fa5a6Sopenharmony_ci } 3701c29fa5a6Sopenharmony_ci ClientInfo clientInfo { 3702c29fa5a6Sopenharmony_ci .pid = pid, 3703c29fa5a6Sopenharmony_ci .readThreadId = readThreadId 3704c29fa5a6Sopenharmony_ci }; 3705c29fa5a6Sopenharmony_ci clientInfos_[programName] = clientInfo; 3706c29fa5a6Sopenharmony_ci return RET_OK; 3707c29fa5a6Sopenharmony_ci} 3708c29fa5a6Sopenharmony_ci 3709c29fa5a6Sopenharmony_civoid MMIService::InitPrintClientInfo() 3710c29fa5a6Sopenharmony_ci{ 3711c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 3712c29fa5a6Sopenharmony_ci TimerMgr->AddLongTimer(PRINT_INTERVAL_TIME, -1, [this]() { 3713c29fa5a6Sopenharmony_ci ffrt::submit([this] { 3714c29fa5a6Sopenharmony_ci for (const auto &info : clientInfos_) { 3715c29fa5a6Sopenharmony_ci if (static_cast<uint64_t>(info.second.pid) == info.second.readThreadId) { 3716c29fa5a6Sopenharmony_ci MMI_HILOGW("The application main thread and event reading thread are combined, such as:" 3717c29fa5a6Sopenharmony_ci "programName:%{public}s, pid:%{public}d, mainThreadId:%{public}d, readThreadId:%{public}" PRIu64, 3718c29fa5a6Sopenharmony_ci info.first.c_str(), info.second.pid, info.second.pid, info.second.readThreadId); 3719c29fa5a6Sopenharmony_ci return; 3720c29fa5a6Sopenharmony_ci } 3721c29fa5a6Sopenharmony_ci } 3722c29fa5a6Sopenharmony_ci if (!clientInfos_.empty()) { 3723c29fa5a6Sopenharmony_ci auto it = clientInfos_.begin(); 3724c29fa5a6Sopenharmony_ci MMI_HILOGI("The application main thread and event reading thread are separated, such as:" 3725c29fa5a6Sopenharmony_ci "programName:%{public}s, pid:%{public}d, mainThreadId:%{public}d, readThreadId:%{public}" PRIu64, 3726c29fa5a6Sopenharmony_ci it->first.c_str(), it->second.pid, it->second.pid, it->second.readThreadId); 3727c29fa5a6Sopenharmony_ci } 3728c29fa5a6Sopenharmony_ci }); 3729c29fa5a6Sopenharmony_ci }); 3730c29fa5a6Sopenharmony_ci std::function<void(SessionPtr)> callback = [this](SessionPtr sess) { 3731c29fa5a6Sopenharmony_ci return this->OnSessionDelete(sess); 3732c29fa5a6Sopenharmony_ci }; 3733c29fa5a6Sopenharmony_ci AddSessionDeletedCallback(callback); 3734c29fa5a6Sopenharmony_ci} 3735c29fa5a6Sopenharmony_ci 3736c29fa5a6Sopenharmony_ciint32_t MMIService::GetIntervalSinceLastInput(int64_t &timeInterval) 3737c29fa5a6Sopenharmony_ci{ 3738c29fa5a6Sopenharmony_ci CALL_INFO_TRACE; 3739c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask(std::bind(&InputEventHandler::GetIntervalSinceLastInput, 3740c29fa5a6Sopenharmony_ci InputHandler, std::ref(timeInterval))); 3741c29fa5a6Sopenharmony_ci MMI_HILOGD("timeInterval:%{public}" PRId64, timeInterval); 3742c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3743c29fa5a6Sopenharmony_ci MMI_HILOGE("Failed to GetIntervalSinceLastInput, ret:%{public}d", ret); 3744c29fa5a6Sopenharmony_ci } 3745c29fa5a6Sopenharmony_ci return ret; 3746c29fa5a6Sopenharmony_ci} 3747c29fa5a6Sopenharmony_ci 3748c29fa5a6Sopenharmony_ciint32_t MMIService::GetAllSystemHotkeys(std::vector<std::unique_ptr<KeyOption>> &keyOptions) 3749c29fa5a6Sopenharmony_ci{ 3750c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 3751c29fa5a6Sopenharmony_ci int32_t ret = delegateTasks_.PostSyncTask( 3752c29fa5a6Sopenharmony_ci [this, &keyOptions] { 3753c29fa5a6Sopenharmony_ci return this->OnGetAllSystemHotkey(keyOptions); 3754c29fa5a6Sopenharmony_ci } 3755c29fa5a6Sopenharmony_ci ); 3756c29fa5a6Sopenharmony_ci if (ret != RET_OK) { 3757c29fa5a6Sopenharmony_ci MMI_HILOGD("Get all system hot key, ret:%{public}d", ret); 3758c29fa5a6Sopenharmony_ci return ret; 3759c29fa5a6Sopenharmony_ci } 3760c29fa5a6Sopenharmony_ci return RET_OK; 3761c29fa5a6Sopenharmony_ci} 3762c29fa5a6Sopenharmony_ci 3763c29fa5a6Sopenharmony_ciint32_t MMIService::OnGetAllSystemHotkey(std::vector<std::unique_ptr<KeyOption>> &keyOptions) 3764c29fa5a6Sopenharmony_ci{ 3765c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 3766c29fa5a6Sopenharmony_ci #ifdef SHORTCUT_KEY_MANAGER_ENABLED 3767c29fa5a6Sopenharmony_ci return KEY_SHORTCUT_MGR->GetAllSystemHotkeys(keyOptions); 3768c29fa5a6Sopenharmony_ci #endif // SHORTCUT_KEY_MANAGER_ENABLED 3769c29fa5a6Sopenharmony_ci MMI_HILOGI("OnGetAllSystemHotkey function does not support"); 3770c29fa5a6Sopenharmony_ci return ERROR_UNSUPPORT; 3771c29fa5a6Sopenharmony_ci} 3772c29fa5a6Sopenharmony_ci} // namespace MMI 3773c29fa5a6Sopenharmony_ci} // namespace OHOS 3774