From 629dc8b8a1e02d90ec8b52609312ae3ba6d50bfe Mon Sep 17 00:00:00 2001 From: chenchong_666 Date: Mon, 16 Jun 2025 14:47:26 +0800 Subject: [PATCH] fix:Separate the business function drawn by the cursor into a separate so Signed-off-by: chenchong_666 --- BUILD.gn | 1 + multimodalinput_mini.gni | 1 - service/BUILD.gn | 153 ++- .../delegate_task/src/delegate_interface.cpp | 4 +- .../src/input_device_manager.cpp | 11 +- .../src/display_event_monitor.cpp | 4 +- service/event_dump/src/event_dump.cpp | 4 +- .../key_command/src/key_command_handler.cpp | 6 +- .../libinput_adapter/src/libinput_adapter.cpp | 12 +- .../message_handle/src/server_msg_handler.cpp | 14 +- service/module_loader/src/mmi_service.cpp | 50 +- .../src/mouse_transform_processor.cpp | 4 +- .../include/multimodal_client.h | 239 +++++ .../window_manager/include/multimodal_impl.h | 94 ++ .../src/input_windows_manager.cpp | 92 +- .../window_manager/src/multimodal_client.cpp | 988 ++++++++++++++++++ .../window_manager/src/multimodal_impl.cpp | 300 ++++++ .../src/pointer_drawing_manager.cpp | 5 +- 18 files changed, 1849 insertions(+), 133 deletions(-) create mode 100644 service/window_manager/include/multimodal_client.h create mode 100644 service/window_manager/include/multimodal_impl.h create mode 100644 service/window_manager/src/multimodal_client.cpp create mode 100644 service/window_manager/src/multimodal_impl.cpp diff --git a/BUILD.gn b/BUILD.gn index 24ec5287d5..ee17050df2 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -91,6 +91,7 @@ group("multimodalinput_mmi_frameworks") { group("multimodalinput_mmi_service") { deps = [ "service:libmmi-server", + "service:libmultimodal_impl", "tools/inject_event:uinput", "util/screen_capture:libmmi-screen_capture", ] diff --git a/multimodalinput_mini.gni b/multimodalinput_mini.gni index de07949398..d01712c011 100644 --- a/multimodalinput_mini.gni +++ b/multimodalinput_mini.gni @@ -423,7 +423,6 @@ if (input_feature_product == "watch") { "device_config/src/device_config_file_parser.cpp", "fingersense_wrapper/src/fingersense_wrapper.cpp", "gesturesense_wrapper/src/gesturesense_wrapper.cpp", - "hardware_cursor_pointer_manager/src/hardware_cursor_pointer_manager.cpp", ] if (input_new_knuckle_dynamic_enabled) { diff --git a/service/BUILD.gn b/service/BUILD.gn index ee9e4b4295..1ac0452af3 100644 --- a/service/BUILD.gn +++ b/service/BUILD.gn @@ -94,11 +94,7 @@ config("libmmi_server_config") { ] if (input_feature_product != "watch") { - include_dirs += [ - "hardware_cursor_pointer_manager/include", - "infrared_emitter/include", - "${mmi_service_path}/hardware_cursor_pointer_manager/include", - ] + include_dirs += [ "infrared_emitter/include" ] } if (input_ext_feature_keyboard_ext_flag) { @@ -121,15 +117,6 @@ config("libmmi_server_config") { ] } - if (input_ext_feature_magiccursor) { - include_dirs += [ - "${mmi_ext_path}/magic_cursor/include", - "${g2d_ext_path}/sdf/include", - "${surface_path}/interfaces/inner_api/surface", - "${g2d_path}/rosen/modules/render_service_base/src", - ] - } - if (input_feature_combination_key) { defines += [ "OHOS_BUILD_ENABLE_COMBINATION_KEY" ] } @@ -163,6 +150,116 @@ ohos_rust_unittest("rust_mmi_test") { part_name = "input" } +ohos_shared_library("libmultimodal_impl") { + sanitize = { + cfi = true + cfi_cross_dso = true + debug = false + } + + include_dirs = [ + "connect_manager/include", + "delegate_task/include/", + "device_config/include", + "device_manager/include/", + "dfx/include", + "event_handler/include", + "hardware_cursor_pointer_manager/include", + "module_loader/include/", + "mouse_event_normalize/include", + "timer_manager/include/", + "touch_event_normalize/include", + "key_command/include", + "${mmi_path}/frameworks/proxy/event_handler/include", + "${mmi_path}/interfaces/native/innerkits/event/include", + "${mmi_path}/interfaces/native/innerkits/proxy/include", + "${mmi_path}/util/common/include", + "${mmi_path}/util/network/include/", + "${mmi_path}/util/socket/include/", + "window_manager/include" + ] + + if (input_ext_feature_magiccursor) { + include_dirs += [ + "${mmi_ext_path}/magic_cursor/include", + "${g2d_ext_path}/sdf/include", + "${surface_path}/interfaces/inner_api/surface", + "${g2d_path}/rosen/modules/render_service_base/src", + ] + } + + if (input_feature_pointer_drawing) { + sources = [ + "window_manager/src/multimodal_impl.cpp", + "window_manager/src/pointer_drawing_manager.cpp", + "window_manager/src/pointer_renderer.cpp", + "window_manager/src/screen_pointer.cpp", + "hardware_cursor_pointer_manager/src/hardware_cursor_pointer_manager.cpp", + ] + } else { + sources += [ "window_manager/src/i_pointer_drawing_manager.cpp" ] + } + + deps = [ + "${mmi_path}/common/anco/comm:mmi_anco_channel_proxy", + "${mmi_path}/service:libmmi-server", + "${mmi_path}/service/connect_manager:mmi_connect_manager_service", + "${mmi_path}/util:libmmi-util", + ] + + external_deps = [ + "common_event_service:cesfwk_innerkits", + "cJSON:cjson", + "c_utils:utils", + "data_share:datashare_consumer", + "ffrt:libffrt", + "graphic_surface:surface", + "hisysevent:libhisysevent", + "libinput:libinput-third-mmi", + "preferences:native_preferences", + "window_manager:libdm_lite", + "window_manager:libwsutils", + ] + + if (input_feature_pointer_drawing) { + external_deps += [ "window_manager:libwm_lite" ] + } + + if (input_ext_feature_magiccursor) { + external_deps += [ "eventhandler:libeventhandler" ] + } + + if (input_feature_product != "watch") { + deps += [ "${mmi_path}/etc/mouse_icon:input_mouse_icon" ] + external_deps += [ + "drivers_interface_display:libdisplay_composer_hdi_impl_1.2", + "drivers_interface_display:libdisplay_composer_proxy_1.0", + "graphic_2d:libcomposer", + "graphic_2d:librender_service_base", + "graphic_2d:librender_service_client", + "hilog:libhilog", + "image_framework:image_native", + "init:libbeget_proxy", + "init:libbegetutil", + "ipc:ipc_single", + "safwk:system_ability_fwk", + ] + } + if (resource_schedule_service_enabled) { + external_deps += [ "resource_schedule_service:ressched_client" ] + } + if (hitrace_enabled) { + external_deps += [ "hitrace:hitrace_meter" ] + } + + if (defined(use_rosen_drawing) && use_rosen_drawing) { + defines += [ "USE_ROSEN_DRAWING" ] + } + + part_name = "input" + subsystem_name = "multimodalinput" +} + ohos_shared_library("libmmi-server") { sources = libmmi_service_sources branch_protector_ret = "pac_ret" @@ -172,10 +269,14 @@ ohos_shared_library("libmmi-server") { debug = false } version_script = "libmmi-server-map" - include_dirs = [ "${mmi_path}/frameworks/proxy/events/include" ] + include_dirs = [ + "${mmi_path}/frameworks/proxy/events/include", + "window_manager/include" + ] sources += [ "account_manager/src/account_manager.cpp" ] sources += [ "subscriber/src/tablet_subscriber_handler.cpp" ] + sources += [ "window_manager/src/multimodal_client.cpp" ] if (input_feature_keyboard) { sources += [ "display_state_manager/src/display_event_monitor.cpp", @@ -221,15 +322,6 @@ ohos_shared_library("libmmi-server") { "mouse_event_normalize/src/mouse_transform_processor.cpp", "touch_event_normalize/src/touchpad_transform_processor.cpp", ] - if (input_feature_pointer_drawing) { - sources += [ - "window_manager/src/pointer_drawing_manager.cpp", - "window_manager/src/pointer_renderer.cpp", - "window_manager/src/screen_pointer.cpp", - ] - } else { - sources += [ "window_manager/src/i_pointer_drawing_manager.cpp" ] - } } if (input_feature_touchscreen) { sources += [ @@ -1025,11 +1117,13 @@ ohos_unittest("PointerDrawingManagerTest") { blocklist = "./ipc_blocklist.txt" } + include_dirs = [ "${mmi_path}/service/hardware_cursor_pointer_manager/include" ] sources = [ "window_manager/test/pointer_drawing_manager_test.cpp" ] deps = [ "${mmi_path}/frameworks/proxy:libmmi-common", "${mmi_path}/service:libmmi-server", + "${mmi_path}/service:libmultimodal_impl", "${mmi_path}/test/facility/mock:mmi_mock_sources", "${mmi_path}/util:libmmi-util", ] @@ -1083,11 +1177,13 @@ ohos_unittest("PointerDrawingManagerExTest") { blocklist = "./ipc_blocklist.txt" } + include_dirs = [ "${mmi_path}/service/hardware_cursor_pointer_manager/include" ] sources = [ "window_manager/test/pointer_drawing_manager_ex_test.cpp" ] deps = [ "${mmi_path}/frameworks/proxy:libmmi-common", "${mmi_path}/service:libmmi-server", + "${mmi_path}/service:libmultimodal_impl", "${mmi_path}/test/facility/mock:mmi_mock_sources", "${mmi_path}/util:libmmi-util", ] @@ -1189,6 +1285,7 @@ ohos_unittest("TouchDrawingManagerTest") { blocklist = "./ipc_blocklist.txt" } + include_dirs = [ "${mmi_path}/service/hardware_cursor_pointer_manager/include" ] sources = [ "window_manager/test/pointer_renderer_test.cpp", "window_manager/test/screen_pointer_test.cpp", @@ -1197,6 +1294,7 @@ ohos_unittest("TouchDrawingManagerTest") { deps = [ "${mmi_path}/service:libmmi-server", + "${mmi_path}/service:libmultimodal_impl", "${mmi_path}/test/facility/mock:mmi_mock_sources", "${mmi_path}/util:libmmi-util", ] @@ -1330,7 +1428,10 @@ ohos_unittest("InputWindowsManagerTest") { "-Dprotected=public", ] - include_dirs = [ "${mmi_path}/service/event_handler/include" ] + include_dirs = [ + "hardware_cursor_pointer_manager/include", + "${mmi_path}/service/event_handler/include", + ] sources = [ "window_manager/test/input_windows_manager_test.cpp", @@ -1339,6 +1440,7 @@ ohos_unittest("InputWindowsManagerTest") { deps = [ "${mmi_path}/service:libmmi-server", + "${mmi_path}/service:libmultimodal_impl", "${mmi_path}/util:libmmi-util", ] @@ -1454,6 +1556,7 @@ ohos_unittest("InputWindowsManagerEXTest") { "window_manager/test", "${mmi_path}/libudev/include", "${mmi_path}/common/anco/comm/include", + "${mmi_path}/service/hardware_cursor_pointer_manager/include", ] configs = [ diff --git a/service/delegate_task/src/delegate_interface.cpp b/service/delegate_task/src/delegate_interface.cpp index 2020636a3a..6cd9269065 100644 --- a/service/delegate_task/src/delegate_interface.cpp +++ b/service/delegate_task/src/delegate_interface.cpp @@ -17,7 +17,7 @@ #include "display_event_monitor.h" #include "input_event_handler.h" -#include "i_pointer_drawing_manager.h" +#include "multimodal_client.h" #include "property_reader.h" #ifdef OHOS_BUILD_ENABLE_TOUCH_DRAWING #include "touch_drawing_manager.h" @@ -39,7 +39,7 @@ void DelegateInterface::Init() DISPLAY_MONITOR->SetDelegateProxy(shared_from_this()); #endif // #ifdef OHOS_BUILD_ENABLE_KEYBOARD #ifdef OHOS_BUILD_ENABLE_POINTER_DRAWING - IPointerDrawingManager::GetInstance()->SetDelegateProxy(shared_from_this()); + MultimodalClient::GetInstance().SetDelegateProxy(shared_from_this()); #endif // OHOS_BUILD_ENABLE_POINTER_DRAWING PropReader->SetDelegateProxy(shared_from_this()); } diff --git a/service/device_manager/src/input_device_manager.cpp b/service/device_manager/src/input_device_manager.cpp index b2fae292ac..e211614d02 100644 --- a/service/device_manager/src/input_device_manager.cpp +++ b/service/device_manager/src/input_device_manager.cpp @@ -20,11 +20,10 @@ #include "input_event_handler.h" #include "key_auto_repeat.h" -#ifndef OHOS_BUILD_ENABLE_WATCH -#include "pointer_drawing_manager.h" -#endif // OHOS_BUILD_ENABLE_WATCH #include "util_ex.h" #include "dfx_hisysevent_device.h" +#include "multimodal_client.h" +#include "parameters.h" #undef MMI_LOG_DOMAIN #define MMI_LOG_DOMAIN MMI_LOG_SERVER @@ -896,7 +895,7 @@ void InputDeviceManager::NotifyAddPointerDevice(bool addNewPointerDevice, bool e if (addNewPointerDevice && !existEnabledPointerDevice) { #if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) if (HasTouchDevice()) { - IPointerDrawingManager::GetInstance()->SetMouseDisplayState(false); + MultimodalClient::GetInstance().SetMouseDisplayState(false); } #endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING NotifyPointerDevice(true, true, true); @@ -908,7 +907,7 @@ void InputDeviceManager::NotifyAddPointerDevice(bool addNewPointerDevice, bool e WIN_MGR->UpdatePointerChangeAreas(); } if (addNewPointerDevice && !existEnabledPointerDevice && - IPointerDrawingManager::GetInstance()->GetMouseDisplayState()) { + MultimodalClient::GetInstance().GetMouseDisplayState()) { WIN_MGR->DispatchPointer(PointerEvent::POINTER_ACTION_ENTER_WINDOW); } #endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING @@ -918,7 +917,7 @@ void InputDeviceManager::NotifyRemovePointerDevice(bool removePointerDevice) { #if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) if (removePointerDevice && !HasPointerDevice() && !HasVirtualPointerDevice() && - IPointerDrawingManager::GetInstance()->GetMouseDisplayState()) { + MultimodalClient::GetInstance().GetMouseDisplayState()) { WIN_MGR->DispatchPointer(PointerEvent::POINTER_ACTION_LEAVE_WINDOW); } #endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING diff --git a/service/display_state_manager/src/display_event_monitor.cpp b/service/display_state_manager/src/display_event_monitor.cpp index 5e6564842d..d8af74dea9 100644 --- a/service/display_state_manager/src/display_event_monitor.cpp +++ b/service/display_state_manager/src/display_event_monitor.cpp @@ -18,9 +18,9 @@ #include "delegate_interface.h" #include "input_event_handler.h" #include "input_windows_manager.h" -#include "i_pointer_drawing_manager.h" #include "input_event_handler.h" #include "key_subscriber_handler.h" +#include "multimodal_client.h" #include "setting_datashare.h" #include "system_ability_definition.h" @@ -109,7 +109,7 @@ public: MMI_HILOGI("Received data share ready event"); if (SettingDataShare::GetInstance(DISTRIBUTED_KV_DATA_SERVICE_ABILITY_ID).CheckIfSettingsDataReady()) { MMI_HILOGI("Data share has readyed"); - IPointerDrawingManager::GetInstance()->InitPointerObserver(); + MultimodalClient::GetInstance().InitPointerObserver(); auto keySubscriberHandler = InputHandler->GetSubscriberHandler(); CHKPV(keySubscriberHandler); keySubscriberHandler->InitDataShareListener(); diff --git a/service/event_dump/src/event_dump.cpp b/service/event_dump/src/event_dump.cpp index 44e637fab0..953531bf93 100644 --- a/service/event_dump/src/event_dump.cpp +++ b/service/event_dump/src/event_dump.cpp @@ -18,7 +18,6 @@ #include #include "event_statistic.h" -#include "i_pointer_drawing_manager.h" #include "input_device_manager.h" #include "input_event_handler.h" #ifdef OHOS_BUILD_ENABLE_KEYBOARD @@ -31,6 +30,7 @@ #ifdef OHOS_BUILD_ENABLE_TOUCH_DRAWING #include "touch_drawing_manager.h" #endif // #ifdef OHOS_BUILD_ENABLE_TOUCH_DRAWING +#include "multimodal_client.h" #include "util_ex.h" #undef MMI_LOG_DOMAIN @@ -191,7 +191,7 @@ void EventDump::ParseCommand(int32_t fd, const std::vector &args) } case 'c': { #if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) - IPointerDrawingManager::GetInstance()->Dump(fd, args); + MultimodalClient::GetInstance().Dump(fd, args); #else mprintf(fd, "Pointer device does not support"); #endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING diff --git a/service/key_command/src/key_command_handler.cpp b/service/key_command/src/key_command_handler.cpp index 9e7bfbe82a..23f936ebfc 100644 --- a/service/key_command/src/key_command_handler.cpp +++ b/service/key_command/src/key_command_handler.cpp @@ -26,10 +26,8 @@ #include "key_command_handler_util.h" #include "key_event_normalize.h" #include "long_press_subscriber_handler.h" +#include "multimodal_client.h" #include "pull_throw_subscriber_handler.h" -#ifndef OHOS_BUILD_ENABLE_WATCH -#include "pointer_drawing_manager.h" -#endif // OHOS_BUILD_ENABLE_WATCH #include "sensor_agent.h" #include "sensor_agent_type.h" #include "stylus_key_handler.h" @@ -2652,7 +2650,7 @@ void KeyCommandHandler::HandlePointerVisibleKeys(const std::shared_ptr if (keyEvent->GetKeyCode() == KeyEvent::KEYCODE_F9 && lastKeyEventCode_ == KeyEvent::KEYCODE_CTRL_LEFT) { MMI_HILOGI("Force make pointer visible"); #if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) - IPointerDrawingManager::GetInstance()->ForceClearPointerVisiableStatus(); + MultimodalClient::GetInstance().ForceClearPointerVisiableStatus(); #endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING } lastKeyEventCode_ = keyEvent->GetKeyCode(); diff --git a/service/libinput_adapter/src/libinput_adapter.cpp b/service/libinput_adapter/src/libinput_adapter.cpp index 190e90e50c..9e4faf5f5d 100644 --- a/service/libinput_adapter/src/libinput_adapter.cpp +++ b/service/libinput_adapter/src/libinput_adapter.cpp @@ -1666,21 +1666,17 @@ void LibinputAdapter::HandleHWKeyEventForVKeyboard(libinput_event* event) void LibinputAdapter::ShowMouseCursor() { - MMI_HILOGD("Check cursor state function valid = %{public}d", - IPointerDrawingManager::GetInstance() != nullptr); - if (IPointerDrawingManager::GetInstance() != nullptr && - !IPointerDrawingManager::GetInstance()->GetMouseDisplayState()) { + if (!MultimodalClient::GetInstance().GetMouseDisplayState()) { MMI_HILOGI("Found hidden mouse cursor during trackpad operation, show it."); - IPointerDrawingManager::GetInstance()->SetMouseDisplayState(true); + MultimodalClient::GetInstance().SetMouseDisplayState(true); } } void LibinputAdapter::HideMouseCursorTemporary() { MMI_HILOGI("VKeyboard hide mouse."); - if (IPointerDrawingManager::GetInstance() != nullptr && - IPointerDrawingManager::GetInstance()->GetMouseDisplayState()) { - IPointerDrawingManager::GetInstance()->SetMouseDisplayState(false); + if (MultimodalClient::GetInstance().GetMouseDisplayState()) { + MultimodalClient::GetInstance().SetMouseDisplayState(false); } } diff --git a/service/message_handle/src/server_msg_handler.cpp b/service/message_handle/src/server_msg_handler.cpp index 3ee102fac7..c76945e4bb 100644 --- a/service/message_handle/src/server_msg_handler.cpp +++ b/service/message_handle/src/server_msg_handler.cpp @@ -27,7 +27,6 @@ #include "event_log_helper.h" #include "input_device_manager.h" #include "input_event_handler.h" -#include "i_pointer_drawing_manager.h" #ifdef OHOS_BUILD_ENABLE_KEY_PRESSED_HANDLER #include "key_monitor_manager.h" #endif // OHOS_BUILD_ENABLE_KEY_PRESSED_HANDLER @@ -37,6 +36,7 @@ #include "long_press_subscriber_handler.h" #include "libinput_adapter.h" #include "time_cost_chk.h" +#include "multimodal_client.h" #ifdef OHOS_BUILD_ENABLE_TOUCH_DRAWING #include "touch_drawing_manager.h" #endif // #ifdef OHOS_BUILD_ENABLE_TOUCH_DRAWING @@ -291,11 +291,11 @@ int32_t ServerMsgHandler::OnInjectTouchPadEventExt(const std::shared_ptrHasFlag(InputEvent::EVENT_FLAG_ACCESSIBILITY); if (pointerEvent->HasFlag(InputEvent::EVENT_FLAG_HIDE_POINTER)) { - IPointerDrawingManager::GetInstance()->SetMouseDisplayState(false); + MultimodalClient::GetInstance().SetMouseDisplayState(false); } else if (((pointerEvent->GetPointerAction() < PointerEvent::POINTER_ACTION_PULL_DOWN) || (pointerEvent->GetPointerAction() > PointerEvent::POINTER_ACTION_PULL_OUT_WINDOW)) && - !IPointerDrawingManager::GetInstance()->IsPointerVisible()) { - IPointerDrawingManager::GetInstance()->SetPointerVisible(getpid(), true, 0, false); + !MultimodalClient::GetInstance().IsPointerVisible()) { + MultimodalClient::GetInstance().SetPointerVisible(getpid(), true, 0, false); } #endif // OHOS_BUILD_ENABLE_POINTER || OHOS_BUILD_ENABLE_TOUCH } else { @@ -372,11 +372,11 @@ int32_t ServerMsgHandler::OnInjectPointerEventExt(const std::shared_ptrHasFlag(InputEvent::EVENT_FLAG_ACCESSIBILITY)) { break; } else if (pointerEvent->HasFlag(InputEvent::EVENT_FLAG_HIDE_POINTER)) { - IPointerDrawingManager::GetInstance()->SetMouseDisplayState(false); + MultimodalClient::GetInstance().SetMouseDisplayState(false); } else if (((pointerEvent->GetPointerAction() < PointerEvent::POINTER_ACTION_PULL_DOWN) || (pointerEvent->GetPointerAction() > PointerEvent::POINTER_ACTION_PULL_OUT_WINDOW)) && - !IPointerDrawingManager::GetInstance()->IsPointerVisible()) { - IPointerDrawingManager::GetInstance()->SetPointerVisible(getpid(), true, 0, false); + !MultimodalClient::GetInstance().IsPointerVisible()) { + MultimodalClient::GetInstance().SetPointerVisible(getpid(), true, 0, false); } #endif // OHOS_BUILD_ENABLE_POINTER break; diff --git a/service/module_loader/src/mmi_service.cpp b/service/module_loader/src/mmi_service.cpp index 5bb3e91e71..d82b8259f5 100644 --- a/service/module_loader/src/mmi_service.cpp +++ b/service/module_loader/src/mmi_service.cpp @@ -49,13 +49,13 @@ #include "infrared_emitter_controller.h" #endif // OHOS_BUILD_ENABLE_WATCH #include "ipc_skeleton.h" -#include "i_pointer_drawing_manager.h" #include "i_preference_manager.h" #include "key_auto_repeat.h" #ifdef SHORTCUT_KEY_MANAGER_ENABLED #include "key_shortcut_manager.h" #endif // SHORTCUT_KEY_MANAGER_ENABLED #include "permission_helper.h" +#include "multimodal_client.h" #include "touch_event_normalize.h" #if defined(OHOS_BUILD_ENABLE_TOUCH) && defined(OHOS_BUILD_ENABLE_MONITOR) #include "touch_gesture_manager.h" @@ -401,7 +401,7 @@ int32_t MMIService::Init() ANRMgr->Init(*this); MMI_HILOGI("PointerDrawingManager Init"); #if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) - if (!IPointerDrawingManager::GetInstance()->Init()) { + if (!MultimodalClient::GetInstance().PointerDrawingManagerInit()) { MMI_HILOGE("Pointer draw init failed"); return POINTER_DRAW_INIT_FAIL; } @@ -479,7 +479,7 @@ void MMIService::OnStart() InitAncoUds(); #endif // OHOS_BUILD_ENABLE_ANCO #if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) - IPointerDrawingManager::GetInstance()->InitPointerObserver(); + MultimodalClient::GetInstance().InitPointerObserver(); #endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING InitPreferences(); #if OHOS_BUILD_ENABLE_POINTER @@ -710,7 +710,7 @@ void MMIService::OnDisconnected(SessionPtr s) } #endif // OHOS_BUILD_ENABLE_ANCO #ifdef OHOS_BUILD_ENABLE_POINTER - IPointerDrawingManager::GetInstance()->DeletePointerVisible(s->GetPid()); + MultimodalClient::GetInstance().DeletePointerVisible(s->GetPid()); #endif // OHOS_BUILD_ENABLE_POINTER } @@ -779,7 +779,7 @@ ErrCode MMIService::SetCustomCursorPixelMap(int32_t windowId, int32_t focusX, in } ret = delegateTasks_.PostSyncTask(std::bind( [curPixelMap, pid, windowId, focusX, focusY] { - return IPointerDrawingManager::GetInstance()->SetCustomCursor(curPixelMap, + return MultimodalClient::GetInstance().SetCustomCursor(curPixelMap, pid, windowId, focusX, focusY); } )); @@ -812,7 +812,7 @@ ErrCode MMIService::SetMouseIcon(int32_t windowId, const CursorPixelMap& curPixe } ret = delegateTasks_.PostSyncTask(std::bind( [pid, windowId, curPixelMap] { - return IPointerDrawingManager::GetInstance()->SetMouseIcon(pid, windowId, curPixelMap); + return MultimodalClient::GetInstance().SetMouseIcon(pid, windowId, curPixelMap); } )); if (ret != RET_OK) { @@ -846,7 +846,7 @@ ErrCode MMIService::SetMouseHotSpot(int32_t pid, int32_t windowId, int32_t hotSp } ret = delegateTasks_.PostSyncTask( [pid, windowId, hotSpotX, hotSpotY] { - return IPointerDrawingManager::GetInstance()->SetMouseHotSpot(pid, windowId, hotSpotX, hotSpotY); + return MultimodalClient::GetInstance().SetMouseHotSpot(pid, windowId, hotSpotX, hotSpotY); } ); if (ret != RET_OK) { @@ -925,7 +925,7 @@ ErrCode MMIService::SetPointerSize(int32_t size) #if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) int32_t ret = delegateTasks_.PostSyncTask( [size] { - return IPointerDrawingManager::GetInstance()->SetPointerSize(size); + return MultimodalClient::GetInstance().SetPointerSize(size); } ); if (ret != RET_OK) { @@ -939,7 +939,7 @@ ErrCode MMIService::SetPointerSize(int32_t size) #if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) int32_t MMIService::ReadPointerSize(int32_t &size) { - size = IPointerDrawingManager::GetInstance()->GetPointerSize(); + size = MultimodalClient::GetInstance().GetPointerSize(); return RET_OK; } #endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING @@ -985,7 +985,7 @@ ErrCode MMIService::GetCursorSurfaceId(uint64_t &surfaceId) #ifdef OHOS_BUILD_ENABLE_POINTER auto ret = delegateTasks_.PostSyncTask( [&surfaceId] { - return IPointerDrawingManager::GetInstance()->GetCursorSurfaceId(surfaceId); + return MultimodalClient::GetInstance().GetCursorSurfaceId(surfaceId); }); if (ret != RET_OK) { MMI_HILOGE("GetCursorSurfaceId fail, error:%{public}d", ret); @@ -1063,7 +1063,7 @@ ErrCode MMIService::SetPointerVisible(bool visible, int32_t priority) int32_t clientPid = GetCallingPid(); int32_t ret = delegateTasks_.PostSyncTask( [clientPid, visible, priority, isHap] { - return IPointerDrawingManager::GetInstance()->SetPointerVisible(clientPid, visible, priority, isHap); + return MultimodalClient::GetInstance().SetPointerVisible(clientPid, visible, priority, isHap); } ); if (ret != RET_OK) { @@ -1078,7 +1078,7 @@ ErrCode MMIService::SetPointerVisible(bool visible, int32_t priority) int32_t MMIService::CheckPointerVisible(bool &visible) { WIN_MGR->UpdatePointerDrawingManagerWindowInfo(); - visible = IPointerDrawingManager::GetInstance()->IsPointerVisible(); + visible = MultimodalClient::GetInstance().IsPointerVisible(); return RET_OK; } #endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING @@ -1136,7 +1136,7 @@ ErrCode MMIService::SetPointerColor(int32_t color) #if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) int32_t ret = delegateTasks_.PostSyncTask( [color] { - return IPointerDrawingManager::GetInstance()->SetPointerColor(color); + return MultimodalClient::GetInstance().SetPointerColor(color); } ); if (ret != RET_OK) { @@ -1150,7 +1150,7 @@ ErrCode MMIService::SetPointerColor(int32_t color) #if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) int32_t MMIService::ReadPointerColor(int32_t &color) { - color = IPointerDrawingManager::GetInstance()->GetPointerColor(); + color = MultimodalClient::GetInstance().GetPointerColor(); return RET_OK; } #endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING @@ -1267,7 +1267,7 @@ ErrCode MMIService::SetPointerStyle(int32_t windowId, const PointerStyle& pointe int32_t clientPid = GetCallingPid(); int32_t ret = delegateTasks_.PostSyncTask( [clientPid, windowId, pointerStyle, isUiExtension] { - return IPointerDrawingManager::GetInstance()->SetPointerStyle( + return MultimodalClient::GetInstance().SetPointerStyle( clientPid, windowId, pointerStyle, isUiExtension); } ); @@ -1294,7 +1294,7 @@ ErrCode MMIService::ClearWindowPointerStyle(int32_t pid, int32_t windowId) } ret = delegateTasks_.PostSyncTask( [pid, windowId] { - return IPointerDrawingManager::GetInstance()->ClearWindowPointerStyle(pid, windowId); + return MultimodalClient::GetInstance().ClearWindowPointerStyle(pid, windowId); } ); if (ret != RET_OK) { @@ -1312,7 +1312,7 @@ ErrCode MMIService::GetPointerStyle(int32_t windowId, PointerStyle& pointerStyle int32_t clientPid = GetCallingPid(); int32_t ret = delegateTasks_.PostSyncTask( [clientPid, windowId, &pointerStyle, isUiExtension] { - return IPointerDrawingManager::GetInstance()->GetPointerStyle( + return MultimodalClient::GetInstance().GetPointerStyle( clientPid, windowId, pointerStyle, isUiExtension); } ); @@ -2287,13 +2287,13 @@ void MMIService::OnAddSystemAbility(int32_t systemAbilityId, const std::string & } #if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) if (systemAbilityId == RENDER_SERVICE) { - IPointerDrawingManager::GetInstance()->InitPointerCallback(); + MultimodalClient::GetInstance().InitPointerCallback(); } if (systemAbilityId == DISPLAY_MANAGER_SERVICE_SA_ID) { - IPointerDrawingManager::GetInstance()->InitScreenInfo(); + MultimodalClient::GetInstance().InitScreenInfo(); } if (systemAbilityId == DISPLAY_MANAGER_SERVICE_SA_ID) { - IPointerDrawingManager::GetInstance()->SubscribeScreenModeChange(); + MultimodalClient::GetInstance().SubscribeScreenModeChange(); } #endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING if (systemAbilityId == DISPLAY_MANAGER_SERVICE_SA_ID) { @@ -2305,7 +2305,7 @@ void MMIService::OnAddSystemAbility(int32_t systemAbilityId, const std::string & #if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) if (systemAbilityId == DISTRIBUTED_KV_DATA_SERVICE_ABILITY_ID) { if (SettingDataShare::GetInstance(DISTRIBUTED_KV_DATA_SERVICE_ABILITY_ID).CheckIfSettingsDataReady()) { - IPointerDrawingManager::GetInstance()->InitPointerObserver(); + MultimodalClient::GetInstance().InitPointerObserver(); } } #endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING @@ -4384,7 +4384,7 @@ ErrCode MMIService::EnableHardwareCursorStats(bool enable) int32_t pid = GetCallingPid(); int32_t ret = delegateTasks_.PostSyncTask( [pid, enable] { - return IPointerDrawingManager::GetInstance()->EnableHardwareCursorStats(pid, enable); + return MultimodalClient::GetInstance().EnableHardwareCursorStats(pid, enable); } ); if (ret != RET_OK) { @@ -4408,7 +4408,7 @@ ErrCode MMIService::GetHardwareCursorStats(uint32_t &frameCount, uint32_t &vsync int32_t pid = GetCallingPid(); int32_t ret = delegateTasks_.PostSyncTask( [pid, &frameCount, &vsyncCount] { - return IPointerDrawingManager::GetInstance()->GetHardwareCursorStats(pid, frameCount, vsyncCount); + return MultimodalClient::GetInstance().GetHardwareCursorStats(pid, frameCount, vsyncCount); } ); if (ret != RET_OK) { @@ -4597,7 +4597,7 @@ ErrCode MMIService::SkipPointerLayer(bool isSkip) #if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) int32_t ret = delegateTasks_.PostSyncTask( [isSkip] { - return IPointerDrawingManager::GetInstance()->SkipPointerLayer(isSkip); + return MultimodalClient::GetInstance().SkipPointerLayer(isSkip); } ); if (ret != RET_OK) { @@ -4825,7 +4825,7 @@ ErrCode MMIService::SetCustomCursor(int32_t windowId, #if defined OHOS_BUILD_ENABLE_POINTER ret = delegateTasks_.PostSyncTask(std::bind( [pid, windowId, cursor, options] { - return IPointerDrawingManager::GetInstance()->SetCustomCursor(pid, windowId, cursor, options); + return MultimodalClient::GetInstance().SetCustomCursor(pid, windowId, cursor, options); } )); if (ret != RET_OK) { diff --git a/service/mouse_event_normalize/src/mouse_transform_processor.cpp b/service/mouse_event_normalize/src/mouse_transform_processor.cpp index 6e0c875680..a260a95432 100644 --- a/service/mouse_event_normalize/src/mouse_transform_processor.cpp +++ b/service/mouse_event_normalize/src/mouse_transform_processor.cpp @@ -16,10 +16,10 @@ #include "mouse_transform_processor.h" #include "dfx_hisysevent.h" #include "event_log_helper.h" -#include "i_pointer_drawing_manager.h" #include "i_preference_manager.h" #include "input_event_handler.h" #include "mouse_device_state.h" +#include "multimodal_client.h" #include "scene_board_judgement.h" #include "touchpad_transform_processor.h" #include "util_ex.h" @@ -1249,7 +1249,7 @@ int32_t MouseTransformProcessor::SetPointerLocation(int32_t x, int32_t y, int32_ } WIN_MGR->UpdateAndAdjustMouseLocation(cursorPos.displayId, cursorPos.cursorPos.x, cursorPos.cursorPos.y, false); cursorPos = WIN_MGR->GetCursorPos(); - IPointerDrawingManager::GetInstance()->SetPointerLocation(cursorPos.cursorPos.x, cursorPos.cursorPos.y, + MultimodalClient::GetInstance().SetPointerLocation(cursorPos.cursorPos.x, cursorPos.cursorPos.y, cursorPos.displayId); MMI_HILOGI("CursorPosX:%f, cursorPosY:%f", cursorPos.cursorPos.x, cursorPos.cursorPos.y); return RET_OK; diff --git a/service/window_manager/include/multimodal_client.h b/service/window_manager/include/multimodal_client.h new file mode 100644 index 0000000000..e9e2bda8a6 --- /dev/null +++ b/service/window_manager/include/multimodal_client.h @@ -0,0 +1,239 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MULTIMODAL_IMPL_H +#define MULTIMODAL_IMPL_H + +#include + +#include "cstdint" +#include "delegate_interface.h" +#include "pointer_style.h" +#include "window_info.h" +#include "struct_multimodal.h" + +namespace OHOS::MMI { +enum { + MULTIMODAL_CLIENT_SUCCESS = 0, + MULTIMODAL_CLIENT_DLOPEN_FAILED, + MULTIMODAL_CLIENT_DLSYM_FAILED, +}; +class MultimodalClient { +// PointerDrawingManager +public: + MultimodalClient(); + ~MultimodalClient(); + void ClosePointerUseState(); + bool DlcloseMultimodalClient(); + static MultimodalClient& GetInstance(); + + void DrawPointer(int32_t displayId, int32_t physicalX, int32_t physicalY, + const PointerStyle pointerStyle, Direction direction); + void UpdateDisplayInfo(const DisplayInfo& displayInfo); + void OnDisplayInfo(const DisplayGroupInfo& displayGroupInfo); + void OnWindowInfo(const WinInfo &info); + bool PointerDrawingManagerInit(); + void DeletePointerVisible(int32_t pid); + int32_t SetPointerVisible(int32_t pid, bool visible, int32_t priority, bool isHap); + bool GetPointerVisible(int32_t pid); + int32_t SetPointerColor(int32_t color); + int32_t GetPointerColor(); + int32_t SetPointerStyle(int32_t pid, int32_t windowId, PointerStyle pointerStyle, bool isUiExtension); + int32_t ClearWindowPointerStyle(int32_t pid, int32_t windowId); + int32_t GetPointerStyle(int32_t pid, int32_t windowId, PointerStyle &pointerStyle, bool isUiExtension); + void DrawPointerStyle(const PointerStyle& pointerStyle); + bool IsPointerVisible(); + void SetPointerLocation(int32_t x, int32_t y, int32_t displayId); + void SetMouseDisplayState(bool state); + bool GetMouseDisplayState(); + int32_t SetCustomCursor(CursorPixelMap curPixelMap, int32_t pid, int32_t windowId, int32_t focusX, int32_t focusY); + int32_t SetCustomCursor(int32_t pid, int32_t windowId, CustomCursor cursor, CursorOptions options); + int32_t SetMouseIcon(int32_t pid, int32_t windowId, CursorPixelMap curPixelMap); + int32_t SetMouseHotSpot(int32_t pid, int32_t windowId, int32_t hotSpotX, int32_t hotSpotY); + int32_t SetPointerSize(int32_t size); + int32_t GetPointerSize(); + void GetPointerImageSize(int32_t &width, int32_t &height); + int32_t GetCursorSurfaceId(uint64_t &surfaceId); + PointerStyle GetLastMouseStyle(); + IconStyle GetIconStyle(const MOUSE_ICON mouseStyle); + const std::map& GetMouseIconPath(); + int32_t SwitchPointerStyle(); + void DrawMovePointer(int32_t displayId, int32_t physicalX, int32_t physicalY); + void Dump(int32_t fd, const std::vector &args); + void InitPointerCallback(); + void InitScreenInfo(); + int32_t EnableHardwareCursorStats(int32_t pid, bool enable); + int32_t GetHardwareCursorStats(int32_t pid, uint32_t &frameCount, uint32_t &vsyncCount); + DisplayInfo GetCurrentDisplayInfo(); + void ForceClearPointerVisiableStatus(); + void InitPointerObserver(); + void OnSessionLost(int32_t pid); + int32_t SkipPointerLayer(bool isSkip); + + void SetDelegateProxy(std::shared_ptr proxy); + std::shared_ptr GetDelegateProxy(); + void DestroyPointerWindow(); + void DrawScreenCenterPointer(const PointerStyle &pointerStyle); + void SubscribeScreenModeChange(); + int32_t UpdateMouseLayer( + const PointerStyle& pointerStyle, int32_t displayId, int32_t physicalX, int32_t physicalY); + int32_t DrawNewDpiPointer(); + bool GetHardCursorEnabled(); + +#ifdef OHOS_BUILD_ENABLE_HARDWARE_CURSOR + bool IsSupported(); + void AttachAllSurfaceNode(); + void DetachAllSurfaceNode(); + int32_t CheckHwcReady(); +#endif // OHOS_BUILD_ENABLE_HARDWARE_CURSOR + +#ifdef OHOS_BUILD_ENABLE_MAGICCURSOR + int32_t GetPointerSnapshot(void *pixelMapPtr); +#endif // OHOS_BUILD_ENABLE_MAGICCURSOR + +private: + DISALLOW_COPY_AND_MOVE(MultimodalClient); + bool OpenMultimodalClientSo(); + using DrawPointerFunc = void (*)(int32_t, int32_t, int32_t, const PointerStyle, Direction); + using UpdateDisplayInfoFunc = void (*)(const DisplayInfo&); + using OnDisplayInfoFunc = void (*)(const DisplayGroupInfo&); + using OnWindowInfoFunc = void (*)(const WinInfo&); + using PointerDrawingManagerInitFunc = bool (*)(); + using DeletePointerVisibleFunc = void (*)(int32_t pid); + using SetPointerVisibleFunc = int32_t (*)(int32_t pid, bool visible, int32_t priority, bool isHap); + using GetPointerVisibleFunc = bool (*)(int32_t pid); + using SetPointerColorFunc = int32_t (*)(int32_t color); + using GetPointerColorFunc = int32_t (*)(); + using SetPointerStyleFunc = int32_t (*)(int32_t, int32_t, PointerStyle, bool); + using ClearWindowPointerStyleFunc = int32_t (*)(int32_t pid, int32_t windowId); + using GetPointerStyleFunc = int32_t (*)(int32_t, int32_t, PointerStyle&, bool); + using DrawPointerStyleFunc = void (*)(const PointerStyle&); + using IsPointerVisibleFunc = bool (*)(); + using SetPointerLocationFunc = void (*)(int32_t, int32_t, int32_t); + using SetMouseDisplayStateFunc = void (*)(bool state); + using GetMouseDisplayStateFunc = bool (*)(); + using SetCustomCursorWithPMFunc = int32_t (*)(CursorPixelMap, int32_t, int32_t, int32_t, int32_t); + using SetCustomCursorFunc = int32_t (*)(int32_t, int32_t, CustomCursor, CursorOptions); + using SetMouseIconFunc = int32_t (*)(int32_t, int32_t, CursorPixelMap); + using SetMouseHotSpotFunc = int32_t (*)(int32_t, int32_t, int32_t, int32_t); + using SetPointerSizeFunc = int32_t (*)(int32_t); + using GetPointerSizeFunc = int32_t (*)(); + using GetPointerImageSizeFunc = void (*)(int32_t&, int32_t&); + using GetCursorSurfaceIdFunc = int32_t (*)(uint64_t&); + using GetLastMouseStyleFunc = PointerStyle (*)(); + using GetIconStyleFunc = IconStyle (*)(const MOUSE_ICON); + using GetMouseIconPathFunc = const std::map& (*)(); + using SwitchPointerStyleFunc = int32_t (*)(); + using DrawMovePointerFunc = void (*)(int32_t, int32_t, int32_t); + using DumpFunc = void (*)(int32_t fd, const std::vector&); + using InitPointerCallbackFunc = void (*)(); + using InitScreenInfoFunc = void (*)(); + using EnableHardwareCursorStatsFunc = int32_t (*)(int32_t, bool); + using GetHardwareCursorStatsFunc = int32_t (*)(int32_t, uint32_t&, uint32_t&); + using GetCurrentDisplayInfoFunc = DisplayInfo (*)(); + using ForceClearPointerVisiableStatusFunc = void (*)(); + using InitPointerObserverFunc = void (*)(); + using OnSessionLostFunc = void (*)(int32_t); + using SkipPointerLayerFunc = int32_t (*)(bool); + using SetDelegateProxyFunc = void (*)(std::shared_ptr); + using GetDelegateProxyFunc = std::shared_ptr (*)(); + using DestroyPointerWindowFunc = void (*)(); + using DrawScreenCenterPointerFunc = void (*)(const PointerStyle&); + using SubscribeScreenModeChangeFunc = void (*)(); + using UpdateMouseLayerFunc = int32_t (*)(const PointerStyle&, int32_t, int32_t, int32_t); + using DrawNewDpiPointerFunc = int32_t (*)(); + using GetHardCursorEnabledFunc = bool (*)(); + +#ifdef OHOS_BUILD_ENABLE_HARDWARE_CURSOR + using IsSupportedFunc = bool (*)(); + using AttachAllSurfaceNodeFunc = void (*)(); + using DetachAllSurfaceNodeFunc = void (*)(); + using CheckHwcReadyFunc = int32_t (*)(); +#endif // OHOS_BUILD_ENABLE_HARDWARE_CURSOR + +#ifdef OHOS_BUILD_ENABLE_MAGICCURSOR + using GetPointerSnapshotFunc = int32_t (*)(void*); +#endif // OHOS_BUILD_ENABLE_MAGICCURSOR + + DrawPointerFunc drawPointerFunc_ { nullptr }; + UpdateDisplayInfoFunc updateDisplayInfoFunc_ { nullptr }; + OnDisplayInfoFunc onDisplayInfoFunc_ { nullptr }; + OnWindowInfoFunc onWindowInfoFunc_ { nullptr }; + PointerDrawingManagerInitFunc pointerDrawingManagerInitFunc_ { nullptr }; + DeletePointerVisibleFunc deletePointerVisibleFunc_ { nullptr }; + SetPointerVisibleFunc setPointerVisibleFunc_ { nullptr }; + GetPointerVisibleFunc getPointerVisibleFunc_ { nullptr }; + SetPointerColorFunc setPointerColorFunc_ { nullptr }; + GetPointerColorFunc getPointerColorFunc_ { nullptr }; + SetPointerStyleFunc setPointerStyleFunc_ { nullptr }; + ClearWindowPointerStyleFunc clearWindowPointerStyleFunc_ { nullptr }; + GetPointerStyleFunc getPointerStyleFunc_ { nullptr }; + DrawPointerStyleFunc drawPointerStyleFunc_ { nullptr }; + IsPointerVisibleFunc isPointerVisibleFunc_ { nullptr }; + SetPointerLocationFunc setPointerLocationFunc_ { nullptr }; + SetMouseDisplayStateFunc setMouseDisplayStateFunc_ { nullptr }; + GetMouseDisplayStateFunc getMouseDisplayStateFunc_ { nullptr }; + SetCustomCursorWithPMFunc SetCustomCursorWithPMFunc_ { nullptr }; + SetCustomCursorFunc setCustomCursorFunc_ { nullptr }; + SetMouseIconFunc setMouseIconFunc_ { nullptr }; + SetMouseHotSpotFunc setMouseHotSpotFunc_ { nullptr }; + SetPointerSizeFunc setPointerSizeFunc_ { nullptr }; + GetPointerSizeFunc getPointerSizeFunc_ { nullptr }; + GetPointerImageSizeFunc getPointerImageSizeFunc_ { nullptr }; + GetCursorSurfaceIdFunc getCursorSurfaceIdFunc_ { nullptr }; + GetLastMouseStyleFunc getLastMouseStyleFunc_ { nullptr }; + GetIconStyleFunc getIconStyleFunc_ { nullptr }; + GetMouseIconPathFunc getMouseIconPathFunc_ { nullptr }; + SwitchPointerStyleFunc switchPointerStyleFunc_ { nullptr }; + DrawMovePointerFunc drawMovePointerFunc_ { nullptr }; + DumpFunc dumpFunc_ { nullptr }; + InitPointerCallbackFunc initPointerCallbackFunc_ { nullptr }; + InitScreenInfoFunc initScreenInfoFunc_ { nullptr }; + EnableHardwareCursorStatsFunc enableHardwareCursorStatsFunc_ { nullptr }; + GetHardwareCursorStatsFunc getHardwareCursorStatsFunc_ { nullptr }; + GetCurrentDisplayInfoFunc getCurrentDisplayInfoFunc_ { nullptr }; + ForceClearPointerVisiableStatusFunc forceClearPointerVisiableStatusFunc_ { nullptr }; + InitPointerObserverFunc initPointerObserverFunc_ { nullptr }; + OnSessionLostFunc onSessionLostFunc_ { nullptr }; + SkipPointerLayerFunc skipPointerLayerFunc_ { nullptr }; + SetDelegateProxyFunc setDelegateProxyFunc_ { nullptr }; + GetDelegateProxyFunc getDelegateProxyFunc_ { nullptr }; + DestroyPointerWindowFunc destroyPointerWindowFunc_ { nullptr }; + DrawScreenCenterPointerFunc drawScreenCenterPointerFunc_ { nullptr }; + SubscribeScreenModeChangeFunc subscribeScreenModeChangeFunc_ { nullptr }; + UpdateMouseLayerFunc updateMouseLayerFunc_ { nullptr }; + DrawNewDpiPointerFunc drawNewDpiPointerFunc_ { nullptr }; + GetHardCursorEnabledFunc getHardCursorEnabledFunc { nullptr }; + +#ifdef OHOS_BUILD_ENABLE_HARDWARE_CURSOR + IsSupportedFunc isSupportedFunc_ { nullptr }; + AttachAllSurfaceNodeFunc attachAllSurfaceNodeFunc_ { nullptr }; + DetachAllSurfaceNodeFunc detachAllSurfaceNodeFunc_ { nullptr }; + CheckHwcReadyFunc checkHwcReadyFunc_ { nullptr }; +#endif // OHOS_BUILD_ENABLE_HARDWARE_CURSOR + +#ifdef OHOS_BUILD_ENABLE_MAGICCURSOR + GetPointerSnapshotFunc getPointerSnapshotFunc_ { nullptr }; +#endif // OHOS_BUILD_ENABLE_MAGICCURSOR + + std::mutex loadSoMutex_; + std::atomic exitFlag_ { false }; + bool isLoaded_ { false }; + void *soHandle_ { nullptr }; + std::atomic isPointerUse_ { false }; +}; +} // namespace OHOS::MMI + +#endif // MULTIMODAL_IMPL_H \ No newline at end of file diff --git a/service/window_manager/include/multimodal_impl.h b/service/window_manager/include/multimodal_impl.h new file mode 100644 index 0000000000..e6dcebf187 --- /dev/null +++ b/service/window_manager/include/multimodal_impl.h @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MULTIMODAL_IMPL_H +#define MULTIMODAL_IMPL_H + +#include + +#include "cstdint" +#include "i_pointer_drawing_manager.h" +#include "pointer_style.h" +#include "window_info.h" +#include "struct_multimodal.h" + +namespace OHOS::MMI { + +// PointerDrawingManager +void DrawPointer(int32_t displayId, int32_t physicalX, int32_t physicalY, + const PointerStyle pointerStyle, Direction direction); +void UpdateDisplayInfo(const DisplayInfo& displayInfo); +void OnDisplayInfo(const DisplayGroupInfo& displayGroupInfo); +void OnWindowInfo(const WinInfo &info); +bool PointerDrawingManagerInit(); +void DeletePointerVisible(int32_t pid); +int32_t SetPointerVisible(int32_t pid, bool visible, int32_t priority, bool isHap); +bool GetPointerVisible(int32_t pid); +int32_t SetPointerColor(int32_t color); +int32_t GetPointerColor(); +int32_t SetPointerStyle(int32_t pid, int32_t windowId, PointerStyle pointerStyle, bool isUiExtension); +int32_t ClearWindowPointerStyle(int32_t pid, int32_t windowId); +int32_t GetPointerStyle(int32_t pid, int32_t windowId, PointerStyle &pointerStyle, bool isUiExtension); +void DrawPointerStyle(const PointerStyle& pointerStyle); +bool IsPointerVisible(); +void SetPointerLocation(int32_t x, int32_t y, int32_t displayId); +void SetMouseDisplayState(bool state); +bool GetMouseDisplayState(); +int32_t SetCustomCursorWithPM( + CursorPixelMap curPixelMap, int32_t pid, int32_t windowId, int32_t focusX, int32_t focusY); +int32_t SetCustomCursor(int32_t pid, int32_t windowId, CustomCursor cursor, CursorOptions options); +int32_t SetMouseIcon(int32_t pid, int32_t windowId, CursorPixelMap curPixelMap); +int32_t SetMouseHotSpot(int32_t pid, int32_t windowId, int32_t hotSpotX, int32_t hotSpotY); +int32_t SetPointerSize(int32_t size); +int32_t GetPointerSize(); +void GetPointerImageSize(int32_t &width, int32_t &height); +int32_t GetCursorSurfaceId(uint64_t &surfaceId); +PointerStyle GetLastMouseStyle(); +IconStyle GetIconStyle(const MOUSE_ICON mouseStyle); +const std::map& GetMouseIconPath(); +int32_t SwitchPointerStyle(); +void DrawMovePointer(int32_t displayId, int32_t physicalX, int32_t physicalY); +void Dump(int32_t fd, const std::vector &args); +void InitPointerCallback(); +void InitScreenInfo(); +int32_t EnableHardwareCursorStats(int32_t pid, bool enable); +int32_t GetHardwareCursorStats(int32_t pid, uint32_t &frameCount, uint32_t &vsyncCount); +DisplayInfo GetCurrentDisplayInfo(); +void ForceClearPointerVisiableStatus(); +void InitPointerObserver(); +void OnSessionLost(int32_t pid); +int32_t SkipPointerLayer(bool isSkip); +void SetDelegateProxy(std::shared_ptr proxy); +std::shared_ptr GetDelegateProxy(); +void DestroyPointerWindow(); +void DrawScreenCenterPointer(const PointerStyle &pointerStyle); +void SubscribeScreenModeChange(); +int32_t UpdateMouseLayer(const PointerStyle& pointerStyle, int32_t displayId, int32_t physicalX, int32_t physicalY); +int32_t DrawNewDpiPointer(); +bool GetHardCursorEnabled(); + +#ifdef OHOS_BUILD_ENABLE_HARDWARE_CURSOR +bool IsSupported(); +void AttachAllSurfaceNode(); +void DetachAllSurfaceNode(); +int32_t CheckHwcReady(); +#endif // OHOS_BUILD_ENABLE_HARDWARE_CURSOR + +#ifdef OHOS_BUILD_ENABLE_MAGICCURSOR +int32_t GetPointerSnapshot(void *pixelMapPtr); +#endif // OHOS_BUILD_ENABLE_MAGICCURSOR + +} // namespace OHOS::MMI +#endif // MULTIMODAL_IMPL_H \ No newline at end of file diff --git a/service/window_manager/src/input_windows_manager.cpp b/service/window_manager/src/input_windows_manager.cpp index 0a0a80ac3b..2e2f6f507f 100644 --- a/service/window_manager/src/input_windows_manager.cpp +++ b/service/window_manager/src/input_windows_manager.cpp @@ -18,9 +18,9 @@ #include "display_manager.h" #include "event_log_helper.h" -#include "i_pointer_drawing_manager.h" #include "key_command_handler_util.h" #include "mmi_matrix3.h" +#include "multimodal_client.h" #include "scene_board_judgement.h" #ifdef OHOS_BUILD_ENABLE_TOUCH_DRAWING #include "touch_drawing_manager.h" @@ -467,7 +467,7 @@ int32_t InputWindowsManager::GetClientFd(std::shared_ptr pointerEv if (windowInfo == nullptr) { if (pointerEvent->GetPointerAction() == PointerEvent::POINTER_ACTION_CANCEL) { dragPointerStyle_.id = DEFAULT_POINTER_STYLE; - IPointerDrawingManager::GetInstance()->DrawPointerStyle(dragPointerStyle_); + MultimodalClient::GetInstance().DrawPointerStyle(dragPointerStyle_); } MMI_HILOG_DISPATCHD("window info is null, pointerAction:%{public}d", pointerEvent->GetPointerAction()); if (pointerEvent->GetPointerAction() == PointerEvent::POINTER_ACTION_LEAVE_WINDOW || @@ -1379,7 +1379,7 @@ void InputWindowsManager::ResetPointerPositionIfOutValidDisplay(const DisplayGro } auto displayInfo = GetPhysicalDisplay(displayId); CHKPV(displayInfo); - IPointerDrawingManager::GetInstance()->SetPointerLocation( + MultimodalClient::GetInstance().SetPointerLocation( static_cast(cursorPosx), static_cast(cursorPosy), displayInfo->uniqueId); } @@ -1894,7 +1894,7 @@ void InputWindowsManager::AdjustDisplayRotation(int32_t groupId) (extraData_.sourceType == PointerEvent::SOURCE_TYPE_MOUSE)) { AdjustDragPosition(groupId); } - IPointerDrawingManager::GetInstance()->UpdateDisplayInfo(*displayInfo); + MultimodalClient::GetInstance().UpdateDisplayInfo(*displayInfo); int32_t displayId = -1; if (iter != cursorPosMap_.end()) { @@ -1902,7 +1902,7 @@ void InputWindowsManager::AdjustDisplayRotation(int32_t groupId) } auto displayInfoTmp = GetPhysicalDisplay(displayId); CHKPV(displayInfoTmp); - IPointerDrawingManager::GetInstance()->SetPointerLocation( + MultimodalClient::GetInstance().SetPointerLocation( static_cast(coord.x), static_cast(coord.y), displayInfoTmp->uniqueId); } } @@ -2003,9 +2003,9 @@ void InputWindowsManager::DrawPointer(bool isDisplayRemoved) { if (DISPLAY_MONITOR->GetScreenStatus() != EventFwk::CommonEventSupport::COMMON_EVENT_SCREEN_OFF) { if (!isDisplayRemoved) { - IPointerDrawingManager::GetInstance()->DrawPointerStyle(dragPointerStyle_); + MultimodalClient::GetInstance().DrawPointerStyle(dragPointerStyle_); } else { - IPointerDrawingManager::GetInstance()->DrawScreenCenterPointer(dragPointerStyle_); + MultimodalClient::GetInstance().DrawScreenCenterPointer(dragPointerStyle_); } } } @@ -2013,8 +2013,8 @@ void InputWindowsManager::DrawPointer(bool isDisplayRemoved) void InputWindowsManager::PointerDrawingManagerOnDisplayInfo(const DisplayGroupInfo &displayGroupInfo, bool isDisplayRemoved) { - auto currentDisplayInfo = IPointerDrawingManager::GetInstance()->GetCurrentDisplayInfo(); - IPointerDrawingManager::GetInstance()->OnDisplayInfo(displayGroupInfo); + auto currentDisplayInfo = MultimodalClient::GetInstance().GetCurrentDisplayInfo(); + MultimodalClient::GetInstance().OnDisplayInfo(displayGroupInfo); int32_t groupId = displayGroupInfo.groupId; int32_t newId = 0; int32_t &lastDpiTmp = lastDpi_; @@ -2041,7 +2041,7 @@ void InputWindowsManager::PointerDrawingManagerOnDisplayInfo(const DisplayGroupI MMI_HILOGD("dpi changed, current displayId: %{public}d, dpi: %{public}d, " "latest displayId: %{public}d, dpi: %{public}d", currentDisplayInfo.uniqueId, currentDisplayInfo.dpi, displayInfo.uniqueId, displayInfo.dpi); - auto drawNewDpiRes = IPointerDrawingManager::GetInstance()->DrawNewDpiPointer(); + auto drawNewDpiRes = MultimodalClient::GetInstance().DrawNewDpiPointer(); if (drawNewDpiRes != RET_OK) { MMI_HILOGE("Draw New Dpi pointer failed."); } @@ -2104,7 +2104,7 @@ void InputWindowsManager::PointerDrawingManagerOnDisplayInfo(const DisplayGroupI CHKFRV(windowInfo, "The windowInfo is nullptr"); int32_t windowPid = GetWindowPid(windowInfo->id); WinInfo info = { .windowPid = windowPid, .windowId = windowInfo->id }; - IPointerDrawingManager::GetInstance()->OnWindowInfo(info); + MultimodalClient::GetInstance().OnWindowInfo(info); PointerStyle pointerStyle; GetPointerStyle(info.windowPid, info.windowId, pointerStyle); MMI_HILOGD("Get pointer style, pid:%{public}d, windowid:%{public}d, style:%{public}d", @@ -2242,7 +2242,7 @@ void InputWindowsManager::UpdatePointerDrawingManagerWindowInfo() CHKFRV(windowInfo, "The windowInfo is nullptr"); int32_t windowPid = GetWindowPid(windowInfo->id); WinInfo info = { .windowPid = windowPid, .windowId = windowInfo->id }; - IPointerDrawingManager::GetInstance()->OnWindowInfo(info); + MultimodalClient::GetInstance().OnWindowInfo(info); } void InputWindowsManager::SetPointerEvent(int32_t pointerAction, std::shared_ptr pointerEvent) @@ -2357,7 +2357,7 @@ void InputWindowsManager::DispatchPointer(int32_t pointerAction, int32_t windowI CALL_INFO_TRACE; CHKPV(udsServer_); #if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) - if (!IPointerDrawingManager::GetInstance()->GetMouseDisplayState() && !HasMouseHideFlag()) { + if (!MultimodalClient::GetInstance().GetMouseDisplayState() && !HasMouseHideFlag()) { MMI_HILOGI("The mouse is hide"); return; } @@ -3228,7 +3228,7 @@ void InputWindowsManager::OnSessionLost(SessionPtr session) CALL_DEBUG_ENTER; CHKPV(session); int32_t pid = session->GetPid(); - IPointerDrawingManager::GetInstance()->OnSessionLost(pid); + MultimodalClient::GetInstance().OnSessionLost(pid); auto it = pointerStyle_.find(pid); if (it != pointerStyle_.end()) { pointerStyle_.erase(it); @@ -4170,19 +4170,19 @@ int32_t InputWindowsManager::UpdateMouseTarget(std::shared_ptr poi if (pointerEvent->GetPointerAction() == PointerEvent::POINTER_ACTION_BUTTON_DOWN || (mouseDownInfo_.id == -1 && axisBeginWindowInfo_ == std::nullopt)) { MMI_HILOGE("touchWindow is nullptr, targetWindow:%{public}d", pointerEvent->GetTargetWindowId()); - if (!IPointerDrawingManager::GetInstance()->GetMouseDisplayState() && + if (!MultimodalClient::GetInstance().GetMouseDisplayState() && IsMouseDrawing(pointerEvent->GetPointerAction()) && pointerItem.GetMoveFlag() != POINTER_MOVEFLAG) { MMI_HILOGD("Turn the mouseDisplay from false to true"); - IPointerDrawingManager::GetInstance()->SetMouseDisplayState(true); + MultimodalClient::GetInstance().SetMouseDisplayState(true); } int64_t beginTime = GetSysClockTime(); #ifdef OHOS_BUILD_ENABLE_POINTER_DRAWING if (pointerEvent->HasFlag(InputEvent::EVENT_FLAG_HIDE_POINTER) && pointerItem.GetMoveFlag() == POINTER_MOVEFLAG) { - IPointerDrawingManager::GetInstance()->SetMouseDisplayState(false); + MultimodalClient::GetInstance().SetMouseDisplayState(false); } else { - IPointerDrawingManager::GetInstance()->SetMouseDisplayState(true); + MultimodalClient::GetInstance().SetMouseDisplayState(true); } if (GetHardCursorEnabled()) { std::vector cursorPos = HandleHardwareCursor(physicalDisplayInfo, physicalX, physicalY); @@ -4190,9 +4190,9 @@ int32_t InputWindowsManager::UpdateMouseTarget(std::shared_ptr poi MMI_HILOGW("cursorPos is empty"); return RET_ERR; } - IPointerDrawingManager::GetInstance()->DrawMovePointer(displayId, cursorPos[0], cursorPos[1]); + MultimodalClient::GetInstance().DrawMovePointer(displayId, cursorPos[0], cursorPos[1]); } else { - IPointerDrawingManager::GetInstance()->DrawMovePointer(displayId, physicalX, physicalY); + MultimodalClient::GetInstance().DrawMovePointer(displayId, physicalX, physicalY); } MMI_HILOGI("UpdateMouseTarget id:%{public}d, logicalX:%{public}d, logicalY:%{public}d," "displayX:%{public}d, displayY:%{public}d", physicalDisplayInfo->uniqueId, logicalX, logicalY, @@ -4236,39 +4236,39 @@ int32_t InputWindowsManager::UpdateMouseTarget(std::shared_ptr poi TimerMgr->RemoveTimer(timerId_); timerId_ = DEFAULT_VALUE; } - if (!IPointerDrawingManager::GetInstance()->GetMouseDisplayState() && + if (!MultimodalClient::GetInstance().GetMouseDisplayState() && IsMouseDrawing(pointerEvent->GetPointerAction()) && pointerItem.GetMoveFlag() != POINTER_MOVEFLAG) { MMI_HILOGD("Turn the mouseDisplay from false to true"); - IPointerDrawingManager::GetInstance()->SetMouseDisplayState(true); + MultimodalClient::GetInstance().SetMouseDisplayState(true); } - pointerStyle = IPointerDrawingManager::GetInstance()->GetLastMouseStyle(); + pointerStyle = MultimodalClient::GetInstance().GetLastMouseStyle(); MMI_HILOGD("showing the lastMouseStyle %{public}d, lastPointerStyle %{public}d", pointerStyle.id, lastPointerStyle_.id); - IPointerDrawingManager::GetInstance()->UpdateDisplayInfo(*physicalDisplayInfo); + MultimodalClient::GetInstance().UpdateDisplayInfo(*physicalDisplayInfo); WinInfo info = { .windowPid = touchWindow->pid, .windowId = touchWindow->id }; - IPointerDrawingManager::GetInstance()->OnWindowInfo(info); + MultimodalClient::GetInstance().OnWindowInfo(info); } else { if (timerId_ != DEFAULT_VALUE) { TimerMgr->RemoveTimer(timerId_); timerId_ = DEFAULT_VALUE; } GetPointerStyle(touchWindow->pid, touchWindow->id, pointerStyle); - if (!IPointerDrawingManager::GetInstance()->GetMouseDisplayState() && + if (!MultimodalClient::GetInstance().GetMouseDisplayState() && pointerItem.GetMoveFlag() != POINTER_MOVEFLAG) { - IPointerDrawingManager::GetInstance()->SetMouseDisplayState(true); + MultimodalClient::GetInstance().SetMouseDisplayState(true); DispatchPointer(PointerEvent::POINTER_ACTION_ENTER_WINDOW); } - IPointerDrawingManager::GetInstance()->UpdateDisplayInfo(*physicalDisplayInfo); + MultimodalClient::GetInstance().UpdateDisplayInfo(*physicalDisplayInfo); WinInfo info = { .windowPid = touchWindow->pid, .windowId = touchWindow->id }; - IPointerDrawingManager::GetInstance()->OnWindowInfo(info); + MultimodalClient::GetInstance().OnWindowInfo(info); } #endif // OHOS_BUILD_ENABLE_POINTER_DRAWING #ifdef OHOS_BUILD_EMULATOR if (pointerEvent->GetPointerAction() == PointerEvent::POINTER_ACTION_BUTTON_DOWN && - !IPointerDrawingManager::GetInstance()->GetMouseDisplayState() && + !MultimodalClient::GetInstance().GetMouseDisplayState() && pointerItem.GetMoveFlag() != POINTER_MOVEFLAG) { - IPointerDrawingManager::GetInstance()->SetMouseDisplayState(true); + MultimodalClient::GetInstance().SetMouseDisplayState(true); } #endif GetPointerStyle(touchWindow->pid, touchWindow->id, pointerStyle); @@ -4316,16 +4316,16 @@ int32_t InputWindowsManager::UpdateMouseTarget(std::shared_ptr poi if (IsMouseDrawing(pointerEvent->GetPointerAction())) { if (pointerEvent->HasFlag(InputEvent::EVENT_FLAG_HIDE_POINTER) || pointerItem.GetMoveFlag() == POINTER_MOVEFLAG) { - IPointerDrawingManager::GetInstance()->SetMouseDisplayState(false); + MultimodalClient::GetInstance().SetMouseDisplayState(false); } else { - IPointerDrawingManager::GetInstance()->SetMouseDisplayState(true); + MultimodalClient::GetInstance().SetMouseDisplayState(true); } if (extraData_.drawCursor) { MMI_HILOGD("Cursor must be default, pointerStyle:%{public}d globalStyle:%{public}d", dragPointerStyle_.id, globalStyle_.id); dragPointerStyle_ = globalStyle_; } - IPointerDrawingManager::GetInstance()->DrawPointer(physicalDisplayInfo->uniqueId, physicalX, physicalY, + MultimodalClient::GetInstance().DrawPointer(physicalDisplayInfo->uniqueId, physicalX, physicalY, dragPointerStyle_, direction); } #endif // OHOS_BUILD_ENABLE_POINTER_DRAWING @@ -4373,7 +4373,7 @@ int32_t InputWindowsManager::UpdateMouseTarget(std::shared_ptr poi #ifdef OHOS_BUILD_ENABLE_POINTER_DRAWING UpdatePointerEvent(logicalX, logicalY, pointerEvent, *touchWindow); #elif defined(OHOS_BUILD_EMULATOR) - if (IPointerDrawingManager::GetInstance()->GetMouseDisplayState()) { + if (MultimodalClient::GetInstance().GetMouseDisplayState()) { UpdatePointerEvent(logicalX, logicalY, pointerEvent, *touchWindow); } #endif // OHOS_BUILD_ENABLE_POINTER_DRAWING @@ -4429,7 +4429,7 @@ int32_t InputWindowsManager::UpdateMouseTarget(std::shared_ptr poi ClearExtraData(); } if (pointerItem.GetMoveFlag() == POINTER_MOVEFLAG) { - IPointerDrawingManager::GetInstance()->SetMouseDisplayState(false); + MultimodalClient::GetInstance().SetMouseDisplayState(false); } return ERR_OK; } @@ -4821,7 +4821,7 @@ void InputWindowsManager::DispatchUIExtentionPointerEvent(int32_t logicalX, int3 #ifdef OHOS_BUILD_ENABLE_TOUCH void InputWindowsManager::HandleGestureInjection(bool gestureInject) { if (!gestureInject) { - IPointerDrawingManager::GetInstance()->SetMouseDisplayState(false); + MultimodalClient::GetInstance().SetMouseDisplayState(false); } } @@ -5251,8 +5251,8 @@ int32_t InputWindowsManager::UpdateTouchScreenTarget(std::shared_ptrGetMouseDisplayState()) { - IPointerDrawingManager::GetInstance()->SetMouseDisplayState(true); + if (!MultimodalClient::GetInstance().GetMouseDisplayState()) { + MultimodalClient::GetInstance().SetMouseDisplayState(true); if (touchWindow->id != lastWindowInfo_.id) { lastWindowInfo_ = *touchWindow; } @@ -5260,12 +5260,12 @@ int32_t InputWindowsManager::UpdateTouchScreenTarget(std::shared_ptrpid, touchWindow->id, pointerStyle); - IPointerDrawingManager::GetInstance()->UpdateDisplayInfo(*physicDisplayInfo); + MultimodalClient::GetInstance().UpdateDisplayInfo(*physicDisplayInfo); WinInfo info = { .windowPid = touchWindow->pid, .windowId = touchWindow->id }; - IPointerDrawingManager::GetInstance()->OnWindowInfo(info); - IPointerDrawingManager::GetInstance()->DrawPointer(physicDisplayInfo->uniqueId, + MultimodalClient::GetInstance().OnWindowInfo(info); + MultimodalClient::GetInstance().DrawPointer(physicDisplayInfo->uniqueId, pointerItem.GetDisplayX(), pointerItem.GetDisplayY(), pointerStyle, physicDisplayInfo->direction); - } else if (IPointerDrawingManager::GetInstance()->GetMouseDisplayState()) { + } else if (MultimodalClient::GetInstance().GetMouseDisplayState()) { if ((!checkExtraData) && (!(extraData_.appended && extraData_.sourceType == PointerEvent::SOURCE_TYPE_MOUSE))) { MMI_HILOG_DISPATCHD("PointerAction is to leave the window"); @@ -5773,7 +5773,7 @@ bool InputWindowsManager::AcrossDisplay(const DisplayInfo &displayInfoDes, const bool re = false; layoutX = layout.x; layoutY = layout.y; - IPointerDrawingManager::GetInstance()->GetPointerImageSize(pointerWidth, pointerHeight); + MultimodalClient::GetInstance().GetPointerImageSize(pointerWidth, pointerHeight); if (!AddInt32(displayInfoDes.x, displayInfoDes.validWidth, layoutMax.x)) { MMI_HILOGE("The addition of layoutMax.x overflows"); return false; @@ -6299,7 +6299,7 @@ void InputWindowsManager::Dump(int32_t fd, const std::vector &args) { CALL_DEBUG_ENTER; std::shared_ptr delegateProxy = - IPointerDrawingManager::GetInstance()->GetDelegateProxy(); + MultimodalClient::GetInstance().GetDelegateProxy(); CHKPV(delegateProxy); std::vector displaysInfo; std::vector windowsInfo; @@ -6876,7 +6876,7 @@ bool InputWindowsManager::OnDisplayRemovedOrCombinationChanged(const DisplayGrou bool InputWindowsManager::GetHardCursorEnabled() { - return IPointerDrawingManager::GetInstance()->GetHardCursorEnabled(); + return MultimodalClient::GetInstance().GetHardCursorEnabled(); } int32_t InputWindowsManager::GetCurrentUserId() diff --git a/service/window_manager/src/multimodal_client.cpp b/service/window_manager/src/multimodal_client.cpp new file mode 100644 index 0000000000..ea471b260c --- /dev/null +++ b/service/window_manager/src/multimodal_client.cpp @@ -0,0 +1,988 @@ +/* + * Copyright (C) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "multimodal_client.h" + +#include + +#include "mmi_log.h" + +#define MMI_LOG_TAG "MultimodalClient" +#define CHECKPV_DLSYM(ptr, func, err) \ + if ((ptr) == nullptr) { \ + MMI_HILOGE("dlsym %{public}s fail, err msg:%{public}s", func, err); \ + return; \ + } + +#define CHECKPF_DLSYM(ptr, func, err) \ + if ((ptr) == nullptr) { \ + MMI_HILOGE("dlsym %{public}s fail, err msg:%{public}s", func, err); \ + return false; \ + } + +#define CHECKPR_DLSYM(ptr, func, err) \ + if ((ptr) == nullptr) { \ + MMI_HILOGE("dlsym %{public}s fail, err msg:%{public}s", func, err); \ + return MULTIMODAL_CLIENT_DLSYM_FAILED; \ + } + +namespace OHOS::MMI { + +static constexpr const char *MULTIMODAL_PATH_NAME = "libmultimodal_impl.z.so"; + +MultimodalClient& MultimodalClient::GetInstance() +{ + static MultimodalClient instance; + return instance; +} + +MultimodalClient::MultimodalClient() +{ +} + +MultimodalClient::~MultimodalClient() +{ + MMI_HILOGI("destroy"); +} + +bool MultimodalClient::OpenMultimodalClientSo() +{ + std::lock_guard lockGuard(loadSoMutex_); + if (isLoaded_ && (soHandle_ != nullptr)) { + return true; + } + + soHandle_ = dlopen(MULTIMODAL_PATH_NAME, RTLD_NOW | RTLD_NODELETE); + if (soHandle_ == nullptr) { + MMI_HILOGE("dlopen %{public}s failed, err msg:%{public}s", MULTIMODAL_PATH_NAME, dlerror()); + return false; + } + + isLoaded_ = true; + MMI_HILOGI("dlopen %{public}s SOFTBUS_CLIENT_SUCCESS", MULTIMODAL_PATH_NAME); + return true; +} + +void MultimodalClient::ClosePointerUseState() +{ + isPointerUse_.store(false); +} + +bool MultimodalClient::DlcloseMultimodalClient() +{ + std::lock_guard lockGuard(loadSoMutex_); + if (!isLoaded_ || (soHandle_ == nullptr)) { + MMI_HILOGI("%{public}s has been uninstalled", MULTIMODAL_PATH_NAME); + return false; + } + if (isPointerUse_) { + MMI_HILOGE("There are other business functions using this so"); + return true; + } + if (dlclose(soHandle_) != 0) { + MMI_HILOGE("dlopen %{public}s failed, err msg:%{public}s", MULTIMODAL_PATH_NAME, dlerror()); + return false; + } + return true; +} + +void MultimodalClient::DrawPointer(int32_t displayId, int32_t physicalX, int32_t physicalY, + const PointerStyle pointerStyle, Direction direction) +{ + if (drawPointerFunc_ != nullptr) { + return drawPointerFunc_(displayId, physicalX, physicalY, pointerStyle, direction); + } + + if (!OpenMultimodalClientSo()) { + return; + } + drawPointerFunc_ = (DrawPointerFunc)dlsym(soHandle_, "DrawPointer"); + CHECKPV_DLSYM(drawPointerFunc_, "DrawPointerFunc", dlerror()); + isPointerUse_.store(true); + return drawPointerFunc_(displayId, physicalX, physicalY, pointerStyle, direction); +} + +void MultimodalClient::UpdateDisplayInfo(const DisplayInfo& displayInfo) +{ + if (updateDisplayInfoFunc_ != nullptr) { + return updateDisplayInfoFunc_(displayInfo); + } + + if (!OpenMultimodalClientSo()) { + return; + } + updateDisplayInfoFunc_ = (UpdateDisplayInfoFunc)dlsym(soHandle_, "UpdateDisplayInfo"); + CHECKPV_DLSYM(updateDisplayInfoFunc_, "UpdateDisplayInfoFunc", dlerror()); + isPointerUse_.store(true); + return updateDisplayInfoFunc_(displayInfo); +} + +void MultimodalClient::OnDisplayInfo(const DisplayGroupInfo& displayGroupInfo) +{ + if (onDisplayInfoFunc_ != nullptr) { + return onDisplayInfoFunc_(displayGroupInfo); + } + + if (!OpenMultimodalClientSo()) { + return; + } + onDisplayInfoFunc_ = (OnDisplayInfoFunc)dlsym(soHandle_, "OnDisplayInfo"); + CHECKPV_DLSYM(onDisplayInfoFunc_, "OnDisplayInfoFunc", dlerror()); + isPointerUse_.store(true); + + return onDisplayInfoFunc_(displayGroupInfo); +} + +void MultimodalClient::OnWindowInfo(const WinInfo &info) +{ + if (onWindowInfoFunc_ != nullptr) { + return onWindowInfoFunc_(info); + } + + if (!OpenMultimodalClientSo()) { + return; + } + onWindowInfoFunc_ = (OnWindowInfoFunc)dlsym(soHandle_, "OnWindowInfo"); + CHECKPV_DLSYM(onWindowInfoFunc_, "OnWindowInfoFunc", dlerror()); + isPointerUse_.store(true); + + return onWindowInfoFunc_(info); +} + +bool MultimodalClient::PointerDrawingManagerInit() +{ + if (pointerDrawingManagerInitFunc_ != nullptr) { + return pointerDrawingManagerInitFunc_(); + } + + if (!OpenMultimodalClientSo()) { + return false; + } + pointerDrawingManagerInitFunc_ = (PointerDrawingManagerInitFunc)dlsym(soHandle_, "PointerDrawingManagerInit"); + CHECKPF_DLSYM(pointerDrawingManagerInitFunc_, "PointerDrawingManagerInitFunc", dlerror()); + isPointerUse_.store(true); + + return pointerDrawingManagerInitFunc_(); +} + +void MultimodalClient::DeletePointerVisible(int32_t pid) +{ + if (deletePointerVisibleFunc_ != nullptr) { + return deletePointerVisibleFunc_(pid); + } + + if (!OpenMultimodalClientSo()) { + return; + } + deletePointerVisibleFunc_ = (DeletePointerVisibleFunc)dlsym(soHandle_, "DeletePointerVisible"); + CHECKPV_DLSYM(deletePointerVisibleFunc_, "DeletePointerVisibleFunc", dlerror()); + isPointerUse_.store(true); + + return deletePointerVisibleFunc_(pid); +} + +int32_t MultimodalClient::SetPointerVisible(int32_t pid, bool visible, int32_t priority, bool isHap) +{ + if (setPointerVisibleFunc_ != nullptr) { + return setPointerVisibleFunc_(pid, visible, priority, isHap); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + setPointerVisibleFunc_ = (SetPointerVisibleFunc)dlsym(soHandle_, "SetPointerVisible"); + CHECKPR_DLSYM(setPointerVisibleFunc_, "SetPointerVisibleFunc", dlerror()); + isPointerUse_.store(true); + + return setPointerVisibleFunc_(pid, visible, priority, isHap); +} + +bool MultimodalClient::GetPointerVisible(int32_t pid) +{ + if (getPointerVisibleFunc_ != nullptr) { + return getPointerVisibleFunc_(pid); + } + + if (!OpenMultimodalClientSo()) { + return false; + } + getPointerVisibleFunc_ = (GetPointerVisibleFunc)dlsym(soHandle_, "GetPointerVisible"); + CHECKPF_DLSYM(getPointerVisibleFunc_, "GetPointerVisibleFunc", dlerror()); + isPointerUse_.store(true); + + return getPointerVisibleFunc_(pid); +} + +int32_t MultimodalClient::SetPointerColor(int32_t color) +{ + if (setPointerColorFunc_ != nullptr) { + return setPointerColorFunc_(color); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + setPointerColorFunc_ = (SetPointerColorFunc)dlsym(soHandle_, "SetPointerColor"); + CHECKPR_DLSYM(setPointerColorFunc_, "SetPointerColorFunc", dlerror()); + isPointerUse_.store(true); + + return setPointerColorFunc_(color); +} + +int32_t MultimodalClient::GetPointerColor() +{ + if (getPointerColorFunc_ != nullptr) { + return getPointerColorFunc_(); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + getPointerColorFunc_ = (GetPointerColorFunc)dlsym(soHandle_, "GetPointerColor"); + CHECKPR_DLSYM(getPointerColorFunc_, "GetPointerColorFunc", dlerror()); + isPointerUse_.store(true); + + return getPointerColorFunc_(); +} + +int32_t MultimodalClient::SetPointerStyle( + int32_t pid, int32_t windowId, PointerStyle pointerStyle, bool isUiExtension) +{ + if (setPointerStyleFunc_ != nullptr) { + return setPointerStyleFunc_(pid, windowId, pointerStyle, isUiExtension); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + setPointerStyleFunc_ = (SetPointerStyleFunc)dlsym(soHandle_, "SetPointerStyle"); + CHECKPR_DLSYM(setPointerStyleFunc_, "SetPointerStyleFunc", dlerror()); + isPointerUse_.store(true); + + return setPointerStyleFunc_(pid, windowId, pointerStyle, isUiExtension); +} + +int32_t MultimodalClient::ClearWindowPointerStyle(int32_t pid, int32_t windowId) +{ + if (clearWindowPointerStyleFunc_ != nullptr) { + return clearWindowPointerStyleFunc_(pid, windowId); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + clearWindowPointerStyleFunc_ = (ClearWindowPointerStyleFunc)dlsym(soHandle_, "ClearWindowPointerStyle"); + CHECKPR_DLSYM(clearWindowPointerStyleFunc_, "ClearWindowPointerStyleFunc", dlerror()); + isPointerUse_.store(true); + + return clearWindowPointerStyleFunc_(pid, windowId); +} + +int32_t MultimodalClient::GetPointerStyle( + int32_t pid, int32_t windowId, PointerStyle &pointerStyle, bool isUiExtension) +{ + if (getPointerStyleFunc_ != nullptr) { + return getPointerStyleFunc_(pid, windowId, pointerStyle, isUiExtension); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + getPointerStyleFunc_ = (GetPointerStyleFunc)dlsym(soHandle_, "GetPointerStyle"); + CHECKPR_DLSYM(getPointerStyleFunc_, "GetPointerStyleFunc", dlerror()); + isPointerUse_.store(true); + + return getPointerStyleFunc_(pid, windowId, pointerStyle, isUiExtension); +} + +void MultimodalClient::DrawPointerStyle(const PointerStyle& pointerStyle) +{ + if (drawPointerStyleFunc_ != nullptr) { + return drawPointerStyleFunc_(pointerStyle); + } + + if (!OpenMultimodalClientSo()) { + return; + } + drawPointerStyleFunc_ = (DrawPointerStyleFunc)dlsym(soHandle_, "DrawPointerStyle"); + CHECKPV_DLSYM(drawPointerStyleFunc_, "DrawPointerStyleFunc", dlerror()); + isPointerUse_.store(true); + + return drawPointerStyleFunc_(pointerStyle); +} + +bool MultimodalClient::IsPointerVisible() +{ + if (isPointerVisibleFunc_ != nullptr) { + return isPointerVisibleFunc_(); + } + + if (!OpenMultimodalClientSo()) { + return false; + } + isPointerVisibleFunc_ = (IsPointerVisibleFunc)dlsym(soHandle_, "IsPointerVisible"); + CHECKPF_DLSYM(isPointerVisibleFunc_, "IsPointerVisibleFunc", dlerror()); + isPointerUse_.store(true); + + return isPointerVisibleFunc_(); +} + +void MultimodalClient::SetPointerLocation(int32_t x, int32_t y, int32_t displayId) +{ + if (setPointerLocationFunc_ != nullptr) { + return setPointerLocationFunc_(x, y, displayId); + } + + if (!OpenMultimodalClientSo()) { + return; + } + setPointerLocationFunc_ = (SetPointerLocationFunc)dlsym(soHandle_, "SetPointerLocation"); + CHECKPV_DLSYM(setPointerLocationFunc_, "SetPointerLocationFunc", dlerror()); + isPointerUse_.store(true); + + return setPointerLocationFunc_(x, y, displayId); +} + +void MultimodalClient::SetMouseDisplayState(bool state) +{ + if (setMouseDisplayStateFunc_ != nullptr) { + return setMouseDisplayStateFunc_(state); + } + + if (!OpenMultimodalClientSo()) { + return; + } + setMouseDisplayStateFunc_ = (SetMouseDisplayStateFunc)dlsym(soHandle_, "SetMouseDisplayState"); + CHECKPV_DLSYM(setMouseDisplayStateFunc_, "SetMouseDisplayStateFunc", dlerror()); + isPointerUse_.store(true); + + return setMouseDisplayStateFunc_(state); +} + +bool MultimodalClient::GetMouseDisplayState() +{ + if (getMouseDisplayStateFunc_ != nullptr) { + return getMouseDisplayStateFunc_(); + } + + if (!OpenMultimodalClientSo()) { + return false; + } + getMouseDisplayStateFunc_ = (GetMouseDisplayStateFunc)dlsym(soHandle_, "GetMouseDisplayState"); + CHECKPF_DLSYM(getMouseDisplayStateFunc_, "GetMouseDisplayStateFunc", dlerror()); + isPointerUse_.store(true); + + return getMouseDisplayStateFunc_(); +} + +int32_t MultimodalClient::SetCustomCursor( + CursorPixelMap curPixelMap, int32_t pid, int32_t windowId, int32_t focusX, int32_t focusY) +{ + if (SetCustomCursorWithPMFunc_ != nullptr) { + return SetCustomCursorWithPMFunc_(curPixelMap, pid, windowId, focusX, focusY); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + SetCustomCursorWithPMFunc_ = (SetCustomCursorWithPMFunc)dlsym(soHandle_, "SetCustomCursorWithPM"); + CHECKPR_DLSYM(SetCustomCursorWithPMFunc_, "SetCustomCursorWithPMFunc", dlerror()); + isPointerUse_.store(true); + + return SetCustomCursorWithPMFunc_(curPixelMap, pid, windowId, focusX, focusY); +} + +int32_t MultimodalClient::SetCustomCursor(int32_t pid, int32_t windowId, CustomCursor cursor, CursorOptions options) +{ + if (setCustomCursorFunc_ != nullptr) { + return setCustomCursorFunc_(pid, windowId, cursor, options); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + setCustomCursorFunc_ = (SetCustomCursorFunc)dlsym(soHandle_, "SetCustomCursor"); + CHECKPR_DLSYM(setCustomCursorFunc_, "SetCustomCursorFunc", dlerror()); + isPointerUse_.store(true); + + return setCustomCursorFunc_(pid, windowId, cursor, options); +} + +int32_t MultimodalClient::SetMouseIcon(int32_t pid, int32_t windowId, CursorPixelMap curPixelMap) +{ + if (setMouseIconFunc_ != nullptr) { + return setMouseIconFunc_(pid, windowId, curPixelMap); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + setMouseIconFunc_ = (SetMouseIconFunc)dlsym(soHandle_, "SetMouseIcon"); + CHECKPR_DLSYM(setMouseIconFunc_, "SetMouseIconFunc", dlerror()); + isPointerUse_.store(true); + + return setMouseIconFunc_(pid, windowId, curPixelMap); +} + +int32_t MultimodalClient::SetMouseHotSpot(int32_t pid, int32_t windowId, int32_t hotSpotX, int32_t hotSpotY) +{ + if (setMouseHotSpotFunc_ != nullptr) { + return setMouseHotSpotFunc_(pid, windowId, hotSpotX, hotSpotY); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + setMouseHotSpotFunc_ = (SetMouseHotSpotFunc)dlsym(soHandle_, "SetMouseHotSpot"); + CHECKPR_DLSYM(setMouseHotSpotFunc_, "SetMouseHotSpotFunc", dlerror()); + isPointerUse_.store(true); + + return setMouseHotSpotFunc_(pid, windowId, hotSpotX, hotSpotY); +} + +int32_t MultimodalClient::SetPointerSize(int32_t size) +{ + if (setPointerSizeFunc_ != nullptr) { + return setPointerSizeFunc_(size); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + setPointerSizeFunc_ = (SetPointerSizeFunc)dlsym(soHandle_, "SetPointerSize"); + CHECKPR_DLSYM(setPointerSizeFunc_, "SetPointerSizeFunc", dlerror()); + isPointerUse_.store(true); + + return setPointerSizeFunc_(size); +} + +int32_t MultimodalClient::GetPointerSize() +{ + if (getPointerSizeFunc_ != nullptr) { + return getPointerSizeFunc_(); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + getPointerSizeFunc_ = (GetPointerSizeFunc)dlsym(soHandle_, "GetPointerSize"); + CHECKPR_DLSYM(getPointerSizeFunc_, "GetPointerSizeFunc", dlerror()); + isPointerUse_.store(true); + + return getPointerSizeFunc_(); +} + +void MultimodalClient::GetPointerImageSize(int32_t &width, int32_t &height) +{ + if (getPointerImageSizeFunc_ != nullptr) { + return getPointerImageSizeFunc_(width, height); + } + + if (!OpenMultimodalClientSo()) { + return; + } + getPointerImageSizeFunc_ = (GetPointerImageSizeFunc)dlsym(soHandle_, "GetPointerImageSize"); + CHECKPV_DLSYM(getPointerImageSizeFunc_, "GetPointerImageSizeFunc", dlerror()); + isPointerUse_.store(true); + + return getPointerImageSizeFunc_(width, height); +} + +int32_t MultimodalClient::GetCursorSurfaceId(uint64_t &surfaceId) +{ + if (getCursorSurfaceIdFunc_ != nullptr) { + return getCursorSurfaceIdFunc_(surfaceId); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + getCursorSurfaceIdFunc_ = (GetCursorSurfaceIdFunc)dlsym(soHandle_, "GetCursorSurfaceId"); + CHECKPR_DLSYM(getCursorSurfaceIdFunc_, "GetCursorSurfaceIdFunc", dlerror()); + isPointerUse_.store(true); + + return getCursorSurfaceIdFunc_(surfaceId); +} + +PointerStyle MultimodalClient::GetLastMouseStyle() +{ + if (getLastMouseStyleFunc_ != nullptr) { + return getLastMouseStyleFunc_(); + } + + if (!OpenMultimodalClientSo()) { + return PointerStyle(); + } + getLastMouseStyleFunc_ = (GetLastMouseStyleFunc)dlsym(soHandle_, "GetLastMouseStyle"); + if (getLastMouseStyleFunc_ == nullptr) { + MMI_HILOGE("dlsym GetLastMouseStyleFunc fail, err msg:%{public}s", dlerror()); + return PointerStyle(); + } + isPointerUse_.store(true); + + return getLastMouseStyleFunc_(); +} + +IconStyle MultimodalClient::GetIconStyle(const MOUSE_ICON mouseStyle) +{ + if (getIconStyleFunc_ != nullptr) { + return getIconStyleFunc_(mouseStyle); + } + + if (!OpenMultimodalClientSo()) { + return IconStyle(); + } + getIconStyleFunc_ = (GetIconStyleFunc)dlsym(soHandle_, "GetIconStyle"); + if (getIconStyleFunc_ == nullptr) { + MMI_HILOGE("dlsym GetIconStyleFunc fail, err msg:%{public}s", dlerror()); + return IconStyle(); + } + isPointerUse_.store(true); + + return getIconStyleFunc_(mouseStyle); +} + +const std::map& MultimodalClient::GetMouseIconPath() +{ + std::map errMap; + if (getMouseIconPathFunc_ != nullptr) { + return getMouseIconPathFunc_(); + } + + if (!OpenMultimodalClientSo()) { + return errMap; + } + getMouseIconPathFunc_ = (GetMouseIconPathFunc)dlsym(soHandle_, "GetMouseIconPath"); + if (getMouseIconPathFunc_ == nullptr) { + MMI_HILOGE("dlsym GetMouseIconPathFunc fail, err msg:%{public}s", dlerror()); + return errMap; + } + isPointerUse_.store(true); + + return getMouseIconPathFunc_(); +} + +int32_t MultimodalClient::SwitchPointerStyle() +{ + if (switchPointerStyleFunc_ != nullptr) { + return switchPointerStyleFunc_(); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + switchPointerStyleFunc_ = (SwitchPointerStyleFunc)dlsym(soHandle_, "SwitchPointerStyle"); + CHECKPR_DLSYM(switchPointerStyleFunc_, "SwitchPointerStyleFunc", dlerror()); + isPointerUse_.store(true); + + return switchPointerStyleFunc_(); +} + +void MultimodalClient::DrawMovePointer(int32_t displayId, int32_t physicalX, int32_t physicalY) +{ + if (drawMovePointerFunc_ != nullptr) { + return drawMovePointerFunc_(displayId, physicalX, physicalY); + } + + if (!OpenMultimodalClientSo()) { + return; + } + drawMovePointerFunc_ = (DrawMovePointerFunc)dlsym(soHandle_, "DrawMovePointer"); + CHECKPV_DLSYM(drawMovePointerFunc_, "DrawMovePointerFunc", dlerror()); + isPointerUse_.store(true); + + return drawMovePointerFunc_(displayId, physicalX, physicalY); +} + +void MultimodalClient::Dump(int32_t fd, const std::vector &args) +{ + if (dumpFunc_ != nullptr) { + return dumpFunc_(fd, args); + } + + if (!OpenMultimodalClientSo()) { + return; + } + dumpFunc_ = (DumpFunc)dlsym(soHandle_, "Dump"); + CHECKPV_DLSYM(dumpFunc_, "DumpFunc", dlerror()); + isPointerUse_.store(true); + + return dumpFunc_(fd, args); +} + +void MultimodalClient::InitPointerCallback() +{ + if (initPointerCallbackFunc_ != nullptr) { + return initPointerCallbackFunc_(); + } + + if (!OpenMultimodalClientSo()) { + return; + } + initPointerCallbackFunc_ = (InitPointerCallbackFunc)dlsym(soHandle_, "InitPointerCallback"); + CHECKPV_DLSYM(initPointerCallbackFunc_, "InitPointerCallbackFunc", dlerror()); + isPointerUse_.store(true); + + return initPointerCallbackFunc_(); +} + +void MultimodalClient::InitScreenInfo() +{ + if (initScreenInfoFunc_ != nullptr) { + return initScreenInfoFunc_(); + } + + if (!OpenMultimodalClientSo()) { + return; + } + initScreenInfoFunc_ = (InitScreenInfoFunc)dlsym(soHandle_, "InitScreenInfo"); + CHECKPV_DLSYM(initScreenInfoFunc_, "InitScreenInfoFunc", dlerror()); + isPointerUse_.store(true); + + return initScreenInfoFunc_(); +} + +int32_t MultimodalClient::EnableHardwareCursorStats(int32_t pid, bool enable) +{ + if (enableHardwareCursorStatsFunc_ != nullptr) { + return enableHardwareCursorStatsFunc_(pid, enable); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + enableHardwareCursorStatsFunc_ = (EnableHardwareCursorStatsFunc)dlsym(soHandle_, "EnableHardwareCursorStats"); + CHECKPR_DLSYM(enableHardwareCursorStatsFunc_, "EnableHardwareCursorStatsFunc", dlerror()); + isPointerUse_.store(true); + + return enableHardwareCursorStatsFunc_(pid, enable); +} + +int32_t MultimodalClient::GetHardwareCursorStats(int32_t pid, uint32_t &frameCount, uint32_t &vsyncCount) +{ + if (getHardwareCursorStatsFunc_ != nullptr) { + return getHardwareCursorStatsFunc_(pid, frameCount, vsyncCount); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + getHardwareCursorStatsFunc_ = (GetHardwareCursorStatsFunc)dlsym(soHandle_, "GetHardwareCursorStats"); + CHECKPR_DLSYM(getHardwareCursorStatsFunc_, "GetHardwareCursorStatsFunc", dlerror()); + isPointerUse_.store(true); + + return getHardwareCursorStatsFunc_(pid, frameCount, vsyncCount); +} + +DisplayInfo MultimodalClient::GetCurrentDisplayInfo() +{ + if (getCurrentDisplayInfoFunc_ != nullptr) { + return getCurrentDisplayInfoFunc_(); + } + + if (!OpenMultimodalClientSo()) { + return DisplayInfo(); + } + getCurrentDisplayInfoFunc_ = (GetCurrentDisplayInfoFunc)dlsym(soHandle_, "GetCurrentDisplayInfo"); + if (getCurrentDisplayInfoFunc_ == nullptr) { + MMI_HILOGE("dlsym GetCurrentDisplayInfoFunc fail, err msg:%{public}s", dlerror()); + return DisplayInfo(); + } + isPointerUse_.store(true); + + return getCurrentDisplayInfoFunc_(); +} + +void MultimodalClient::ForceClearPointerVisiableStatus() +{ + if (forceClearPointerVisiableStatusFunc_ != nullptr) { + return forceClearPointerVisiableStatusFunc_(); + } + + if (!OpenMultimodalClientSo()) { + return; + } + forceClearPointerVisiableStatusFunc_ = (ForceClearPointerVisiableStatusFunc)dlsym( + soHandle_, "ForceClearPointerVisiableStatus"); + CHECKPV_DLSYM(forceClearPointerVisiableStatusFunc_, "ForceClearPointerVisiableStatusFunc", dlerror()); + isPointerUse_.store(true); + + return forceClearPointerVisiableStatusFunc_(); +} + +void MultimodalClient::InitPointerObserver() +{ + if (initPointerObserverFunc_ != nullptr) { + return initPointerObserverFunc_(); + } + + if (!OpenMultimodalClientSo()) { + return; + } + initPointerObserverFunc_ = (InitPointerObserverFunc)dlsym(soHandle_, "InitPointerObserver"); + CHECKPV_DLSYM(initPointerObserverFunc_, "InitPointerObserverFunc", dlerror()); + isPointerUse_.store(true); + + return initPointerObserverFunc_(); +} + +void MultimodalClient::OnSessionLost(int32_t pid) +{ + if (onSessionLostFunc_ != nullptr) { + return onSessionLostFunc_(pid); + } + + if (!OpenMultimodalClientSo()) { + return; + } + onSessionLostFunc_ = (OnSessionLostFunc)dlsym(soHandle_, "OnSessionLost"); + CHECKPV_DLSYM(onSessionLostFunc_, "OnSessionLostFunc", dlerror()); + isPointerUse_.store(true); + + return onSessionLostFunc_(pid); +} + +int32_t MultimodalClient::SkipPointerLayer(bool isSkip) +{ + if (skipPointerLayerFunc_ != nullptr) { + return skipPointerLayerFunc_(isSkip); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + skipPointerLayerFunc_ = (SkipPointerLayerFunc)dlsym(soHandle_, "SkipPointerLayer"); + CHECKPR_DLSYM(skipPointerLayerFunc_, "SkipPointerLayerFunc", dlerror()); + isPointerUse_.store(true); + + return skipPointerLayerFunc_(isSkip); +} + +void MultimodalClient::SetDelegateProxy(std::shared_ptr proxy) +{ + if (setDelegateProxyFunc_ != nullptr) { + return setDelegateProxyFunc_(proxy); + } + + if (!OpenMultimodalClientSo()) { + return; + } + setDelegateProxyFunc_ = (SetDelegateProxyFunc)dlsym(soHandle_, "SetDelegateProxy"); + CHECKPV_DLSYM(setDelegateProxyFunc_, "SetDelegateProxyFunc", dlerror()); + isPointerUse_.store(true); + + return setDelegateProxyFunc_(proxy); +} + +std::shared_ptr MultimodalClient::GetDelegateProxy() +{ + if (getDelegateProxyFunc_ != nullptr) { + return getDelegateProxyFunc_(); + } + + if (!OpenMultimodalClientSo()) { + return std::shared_ptr(); + } + getDelegateProxyFunc_ = (GetDelegateProxyFunc)dlsym(soHandle_, "GetDelegateProxy"); + if (getDelegateProxyFunc_ == nullptr) { + MMI_HILOGE("dlsym GetDelegateProxyFunc fail, err msg:%{public}s", dlerror()); + return std::shared_ptr(); + } + isPointerUse_.store(true); + + return getDelegateProxyFunc_(); +} + +void MultimodalClient::DestroyPointerWindow() +{ + if (destroyPointerWindowFunc_ != nullptr) { + return destroyPointerWindowFunc_(); + } + + if (!OpenMultimodalClientSo()) { + return; + } + destroyPointerWindowFunc_ = (DestroyPointerWindowFunc)dlsym(soHandle_, "DestroyPointerWindow"); + CHECKPV_DLSYM(destroyPointerWindowFunc_, "DestroyPointerWindowFunc", dlerror()); + isPointerUse_.store(true); + + return destroyPointerWindowFunc_(); +} + +void MultimodalClient::DrawScreenCenterPointer(const PointerStyle &pointerStyle) +{ + if (drawScreenCenterPointerFunc_ != nullptr) { + return drawScreenCenterPointerFunc_(pointerStyle); + } + + if (!OpenMultimodalClientSo()) { + return; + } + drawScreenCenterPointerFunc_ = (DrawScreenCenterPointerFunc)dlsym(soHandle_, "DrawScreenCenterPointer"); + CHECKPV_DLSYM(drawScreenCenterPointerFunc_, "DrawScreenCenterPointerFunc", dlerror()); + isPointerUse_.store(true); + + return drawScreenCenterPointerFunc_(pointerStyle); +} + +void MultimodalClient::SubscribeScreenModeChange() +{ + if (subscribeScreenModeChangeFunc_ != nullptr) { + return subscribeScreenModeChangeFunc_(); + } + + if (!OpenMultimodalClientSo()) { + return; + } + subscribeScreenModeChangeFunc_ = (SubscribeScreenModeChangeFunc)dlsym(soHandle_, "SubscribeScreenModeChange"); + CHECKPV_DLSYM(subscribeScreenModeChangeFunc_, "SubscribeScreenModeChangeFunc", dlerror()); + isPointerUse_.store(true); + + return subscribeScreenModeChangeFunc_(); +} + +int32_t MultimodalClient::UpdateMouseLayer( + const PointerStyle& pointerStyle, int32_t displayId, int32_t physicalX, int32_t physicalY) +{ + if (updateMouseLayerFunc_ != nullptr) { + return updateMouseLayerFunc_(pointerStyle, displayId, physicalX, physicalY); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + updateMouseLayerFunc_ = (UpdateMouseLayerFunc)dlsym(soHandle_, "UpdateMouseLayer"); + CHECKPR_DLSYM(updateMouseLayerFunc_, "UpdateMouseLayerFunc", dlerror()); + isPointerUse_.store(true); + + return updateMouseLayerFunc_(pointerStyle, displayId, physicalX, physicalY); +} + +int32_t MultimodalClient::DrawNewDpiPointer() +{ + if (drawNewDpiPointerFunc_ != nullptr) { + return drawNewDpiPointerFunc_(); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + drawNewDpiPointerFunc_ = (DrawNewDpiPointerFunc)dlsym(soHandle_, "DrawNewDpiPointer"); + CHECKPR_DLSYM(drawNewDpiPointerFunc_, "DrawNewDpiPointerFunc", dlerror()); + isPointerUse_.store(true); + + return drawNewDpiPointerFunc_(); +} + +bool MultimodalClient::GetHardCursorEnabled() +{ + if (getHardCursorEnabledFunc != nullptr) { + return getHardCursorEnabledFunc(); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + getHardCursorEnabledFunc = (GetHardCursorEnabledFunc)dlsym(soHandle_, "GetHardCursorEnabled"); + CHECKPR_DLSYM(getHardCursorEnabledFunc, "GetHardCursorEnabledFunc", dlerror()); + isPointerUse_.store(true); + + return getHardCursorEnabledFunc(); +} + +#ifdef OHOS_BUILD_ENABLE_HARDWARE_CURSOR +bool MultimodalClient::IsSupported() +{ + if (isSupportedFunc_ != nullptr) { + return isSupportedFunc_(); + } + + if (!OpenMultimodalClientSo()) { + return false; + } + isSupportedFunc_ = (IsSupportedFunc)dlsym(soHandle_, "IsSupported"); + CHECKPF_DLSYM(isSupportedFunc_, "IsSupportedFunc", dlerror()); + isPointerUse_.store(true); + + return isSupportedFunc_(); +} + +void MultimodalClient::AttachAllSurfaceNode() +{ + if (attachAllSurfaceNodeFunc_ != nullptr) { + return attachAllSurfaceNodeFunc_(); + } + + if (!OpenMultimodalClientSo()) { + return; + } + attachAllSurfaceNodeFunc_ = (AttachAllSurfaceNodeFunc)dlsym(soHandle_, "AttachAllSurfaceNode"); + CHECKPV_DLSYM(attachAllSurfaceNodeFunc_, "AttachAllSurfaceNodeFunc", dlerror()); + isPointerUse_.store(true); + + return attachAllSurfaceNodeFunc_(); +} + +void MultimodalClient::DetachAllSurfaceNode() +{ + if (detachAllSurfaceNodeFunc_ != nullptr) { + return detachAllSurfaceNodeFunc_(); + } + + if (!OpenMultimodalClientSo()) { + return; + } + detachAllSurfaceNodeFunc_ = (DetachAllSurfaceNodeFunc)dlsym(soHandle_, "DetachAllSurfaceNode"); + CHECKPV_DLSYM(detachAllSurfaceNodeFunc_, "DetachAllSurfaceNodeFunc", dlerror()); + isPointerUse_.store(true); + + return detachAllSurfaceNodeFunc_(); +} + +int32_t MultimodalClient::CheckHwcReady() +{ + if (checkHwcReadyFunc_ != nullptr) { + return checkHwcReadyFunc_(); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + checkHwcReadyFunc_ = (CheckHwcReadyFunc)dlsym(soHandle_, "CheckHwcReady"); + CHECKPR_DLSYM(checkHwcReadyFunc_, "CheckHwcReadyFunc", dlerror()); + isPointerUse_.store(true); + + return checkHwcReadyFunc_(); +} +#endif // OHOS_BUILD_ENABLE_HARDWARE_CURSOR + +#ifdef OHOS_BUILD_ENABLE_MAGICCURSOR +int32_t MultimodalClient::GetPointerSnapshot(void *pixelMapPtr) +{ + if (getPointerSnapshotFunc_ != nullptr) { + return getPointerSnapshotFunc_(pixelMapPtr); + } + + if (!OpenMultimodalClientSo()) { + return MULTIMODAL_CLIENT_DLOPEN_FAILED; + } + getPointerSnapshotFunc_ = (GetPointerSnapshotFunc)dlsym(soHandle_, "GetPointerSnapshot"); + CHECKPR_DLSYM(getPointerSnapshotFunc_, "GetPointerSnapshotFunc", dlerror()); + isPointerUse_.store(true); + + return getPointerSnapshotFunc_(pixelMapPtr); +} +#endif // OHOS_BUILD_ENABLE_MAGICCURSOR +} // namespace OHOS diff --git a/service/window_manager/src/multimodal_impl.cpp b/service/window_manager/src/multimodal_impl.cpp new file mode 100644 index 0000000000..7d9934dd43 --- /dev/null +++ b/service/window_manager/src/multimodal_impl.cpp @@ -0,0 +1,300 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "multimodal_impl.h" + +#include "pointer_drawing_manager.h" + +namespace OHOS::MMI { +void DrawPointer( + int32_t displayId, int32_t physicalX, int32_t physicalY, const PointerStyle pointerStyle, Direction direction) +{ + IPointerDrawingManager::GetInstance()->DrawPointer(displayId, physicalX, physicalY, pointerStyle, direction); +} + +void UpdateDisplayInfo(const DisplayInfo& displayInfo) +{ + IPointerDrawingManager::GetInstance()->UpdateDisplayInfo(displayInfo); +} + +void OnDisplayInfo(const DisplayGroupInfo& displayGroupInfo) +{ + IPointerDrawingManager::GetInstance()->OnDisplayInfo(displayGroupInfo); +} + +void OnWindowInfo(const WinInfo &info) +{ + IPointerDrawingManager::GetInstance()->OnWindowInfo(info); +} + +bool PointerDrawingManagerInit() +{ + return IPointerDrawingManager::GetInstance()->Init(); +} + +void DeletePointerVisible(int32_t pid) +{ + IPointerDrawingManager::GetInstance()->DeletePointerVisible(pid); +} + +int32_t SetPointerVisible(int32_t pid, bool visible, int32_t priority, bool isHap) +{ + return IPointerDrawingManager::GetInstance()->SetPointerVisible(pid, visible, priority, isHap); +} + +bool GetPointerVisible(int32_t pid) +{ + return IPointerDrawingManager::GetInstance()->GetPointerVisible(pid); +} + +int32_t SetPointerColor(int32_t color) +{ + return IPointerDrawingManager::GetInstance()->SetPointerColor(color); +} + +int32_t GetPointerColor() +{ + return IPointerDrawingManager::GetInstance()->GetPointerColor(); +} + +int32_t SetPointerStyle( + int32_t pid, int32_t windowId, PointerStyle pointerStyle, bool isUiExtension) +{ + return IPointerDrawingManager::GetInstance()->SetPointerStyle(pid, windowId, pointerStyle, isUiExtension); +} + +int32_t ClearWindowPointerStyle(int32_t pid, int32_t windowId) +{ + return IPointerDrawingManager::GetInstance()->ClearWindowPointerStyle(pid, windowId); +} + +int32_t GetPointerStyle( + int32_t pid, int32_t windowId, PointerStyle &pointerStyle, bool isUiExtension) +{ + return IPointerDrawingManager::GetInstance()->GetPointerStyle(pid, windowId, pointerStyle, isUiExtension); +} + +void DrawPointerStyle(const PointerStyle& pointerStyle) +{ + IPointerDrawingManager::GetInstance()->DrawPointerStyle(pointerStyle); +} + +bool IsPointerVisible() +{ + return IPointerDrawingManager::GetInstance()->IsPointerVisible(); +} + +void SetPointerLocation(int32_t x, int32_t y, int32_t displayId) +{ + IPointerDrawingManager::GetInstance()->SetPointerLocation(x, y, displayId); +} + +void SetMouseDisplayState(bool state) +{ + IPointerDrawingManager::GetInstance()->SetMouseDisplayState(state); +} + +bool GetMouseDisplayState() +{ + return IPointerDrawingManager::GetInstance()->GetMouseDisplayState(); +} + +int32_t SetCustomCursorWithPM( + CursorPixelMap curPixelMap, int32_t pid, int32_t windowId, int32_t focusX, int32_t focusY) +{ + return IPointerDrawingManager::GetInstance()->SetCustomCursor(curPixelMap, pid, windowId, focusX, focusY); +} + +int32_t SetCustomCursor( + int32_t pid, int32_t windowId, CustomCursor cursor, CursorOptions options) +{ + return IPointerDrawingManager::GetInstance()->SetCustomCursor(pid, windowId, cursor, options); +} + +int32_t SetMouseIcon(int32_t pid, int32_t windowId, CursorPixelMap curPixelMap) +{ + return IPointerDrawingManager::GetInstance()->SetMouseIcon(pid, windowId, curPixelMap); +} + +int32_t SetMouseHotSpot(int32_t pid, int32_t windowId, int32_t hotSpotX, int32_t hotSpotY) +{ + return IPointerDrawingManager::GetInstance()->SetMouseHotSpot(pid, windowId, hotSpotX, hotSpotY); +} + +int32_t SetPointerSize(int32_t size) +{ + return IPointerDrawingManager::GetInstance()->SetPointerSize(size); +} + +int32_t GetPointerSize() +{ + return IPointerDrawingManager::GetInstance()->GetPointerSize(); +} + +void GetPointerImageSize(int32_t &width, int32_t &height) +{ + IPointerDrawingManager::GetInstance()->GetPointerImageSize(width, height); +} + +int32_t GetCursorSurfaceId(uint64_t &surfaceId) +{ + return IPointerDrawingManager::GetInstance()->GetCursorSurfaceId(surfaceId); +} + +PointerStyle GetLastMouseStyle() +{ + return IPointerDrawingManager::GetInstance()->GetLastMouseStyle(); +} + +IconStyle GetIconStyle(const MOUSE_ICON mouseStyle) +{ + return IPointerDrawingManager::GetInstance()->GetIconStyle(mouseStyle); +} + +const std::map& GetMouseIconPath() +{ + return IPointerDrawingManager::GetInstance()->GetMouseIconPath(); +} + +int32_t SwitchPointerStyle() +{ + return IPointerDrawingManager::GetInstance()->SwitchPointerStyle(); +} + +void DrawMovePointer(int32_t displayId, int32_t physicalX, int32_t physicalY) +{ + return IPointerDrawingManager::GetInstance()->DrawMovePointer(displayId, physicalX, physicalY); +} + +void Dump(int32_t fd, const std::vector &args) +{ + return IPointerDrawingManager::GetInstance()->Dump(fd, args); +} + +void InitPointerCallback() +{ + return IPointerDrawingManager::GetInstance()->InitPointerCallback(); +} + +void InitScreenInfo() +{ + IPointerDrawingManager::GetInstance()->InitScreenInfo(); +} + +int32_t EnableHardwareCursorStats(int32_t pid, bool enable) +{ + return IPointerDrawingManager::GetInstance()->EnableHardwareCursorStats(pid, enable); +} + +int32_t GetHardwareCursorStats(int32_t pid, uint32_t &frameCount, uint32_t &vsyncCount) +{ + return IPointerDrawingManager::GetInstance()->GetHardwareCursorStats(pid, frameCount, vsyncCount); +} + +DisplayInfo GetCurrentDisplayInfo() +{ + return IPointerDrawingManager::GetInstance()->GetCurrentDisplayInfo(); +} + +void ForceClearPointerVisiableStatus() +{ + IPointerDrawingManager::GetInstance()->ForceClearPointerVisiableStatus(); +} + +void InitPointerObserver() +{ + IPointerDrawingManager::GetInstance()->InitPointerObserver(); +} + +void OnSessionLost(int32_t pid) +{ + IPointerDrawingManager::GetInstance()->OnSessionLost(pid); +} + +int32_t SkipPointerLayer(bool isSkip) +{ + return IPointerDrawingManager::GetInstance()->SkipPointerLayer(isSkip); +} + +void SetDelegateProxy(std::shared_ptr proxy) +{ + IPointerDrawingManager::GetInstance()->SetDelegateProxy(proxy); +} + +std::shared_ptr GetDelegateProxy() +{ + return IPointerDrawingManager::GetInstance()->GetDelegateProxy(); +} + +void DestroyPointerWindow() +{ + IPointerDrawingManager::GetInstance()->DestroyPointerWindow(); +} + +void DrawScreenCenterPointer(const PointerStyle &pointerStyle) +{ + IPointerDrawingManager::GetInstance()->DrawScreenCenterPointer(pointerStyle); +} + +void SubscribeScreenModeChange() +{ + IPointerDrawingManager::GetInstance()->SubscribeScreenModeChange(); +} + +int32_t UpdateMouseLayer(const PointerStyle& pointerStyle, + int32_t displayId, int32_t physicalX, int32_t physicalY) +{ + return IPointerDrawingManager::GetInstance()->UpdateMouseLayer(pointerStyle, displayId, physicalX, physicalY); +} + +int32_t DrawNewDpiPointer() +{ + return IPointerDrawingManager::GetInstance()->DrawNewDpiPointer(); +} + +bool GetHardCursorEnabled() +{ + return IPointerDrawingManager::GetInstance()->GetHardCursorEnabled(); +} + +#ifdef OHOS_BUILD_ENABLE_HARDWARE_CURSOR +bool IsSupported() +{ + return IPointerDrawingManager::GetInstance()->IsSupported(); +} + +void AttachAllSurfaceNode() +{ + IPointerDrawingManager::GetInstance()->AttachAllSurfaceNode(); +} + +void DetachAllSurfaceNode() +{ + IPointerDrawingManager::GetInstance()->DetachAllSurfaceNode(); +} + +int32_t CheckHwcReady() +{ + return IPointerDrawingManager::GetInstance()->CheckHwcReady(); +} +#endif // OHOS_BUILD_ENABLE_HARDWARE_CURSOR + +#ifdef OHOS_BUILD_ENABLE_MAGICCURSOR +int32_t GetPointerSnapshot(void *pixelMapPtr) +{ + return IPointerDrawingManager::GetInstance()->GetPointerSnapshot(pixelMapPtr); +} +#endif // OHOS_BUILD_ENABLE_MAGICCURSOR + +} // namespace OHOS::MMI \ No newline at end of file diff --git a/service/window_manager/src/pointer_drawing_manager.cpp b/service/window_manager/src/pointer_drawing_manager.cpp index 6e39facb94..c2c53b2d9d 100644 --- a/service/window_manager/src/pointer_drawing_manager.cpp +++ b/service/window_manager/src/pointer_drawing_manager.cpp @@ -31,7 +31,6 @@ #include "bytrace_adapter.h" #include "define_multimodal.h" -#include "mmi_service.h" #include "input_device_manager.h" #include "i_input_windows_manager.h" #include "ipc_skeleton.h" @@ -143,6 +142,7 @@ std::atomic g_isRsRestart { false }; #ifdef OHOS_BUILD_PC_PRIORITY constexpr int32_t PC_PRIORITY { 2 }; #endif // OHOS_BUILD_PC_PRIORITY +const int32_t MULTIMODAL_INPUT_SERVICE_ID = 3101; } // namespace } // namespace MMI } // namespace OHOS @@ -581,8 +581,7 @@ void PointerDrawingManager::CreateMagicCursorChangeObserver() // Listening enabling cursor deformation and color inversion SettingObserver::UpdateFunc func = [](const std::string& key) { bool statusValue = false; - auto ret = SettingDataShare::GetInstance( - MMIService::MULTIMODAL_INPUT_CONNECT_SERVICE_ID).GetBoolValue(key, statusValue); + auto ret = SettingDataShare::GetInstance(MULTIMODAL_INPUT_SERVICE_ID).GetBoolValue(key, statusValue); if (ret != RET_OK) { MMI_HILOGE("Get value from setting date fail"); return; -- Gitee