From 06f453ed5a9061b6480f3593aea765c3888034b4 Mon Sep 17 00:00:00 2001 From: wuliangdong Date: Sun, 4 May 2025 11:46:32 +0800 Subject: [PATCH] Feature: Support GetMaxMultiTouchPointNum Signed-off-by: wuliangdong Change-Id: Ia90567ec0c800f76502272cbfdb45f059436cf86 --- .../include/input_manager_impl.h | 1 + .../event_handler/src/input_manager_impl.cpp | 6 +++++ frameworks/proxy/events/src/input_manager.cpp | 5 ++++ .../proxy/events/test/input_manager_test.cpp | 20 ++++++++++++++ .../innerkits/proxy/include/input_manager.h | 8 ++++++ .../include/i_multimodal_input_connect.h | 1 + .../multimodal_input_connect_manager.h | 1 + .../include/multimodal_input_connect_proxy.h | 1 + .../include/multimodal_input_connect_stub.h | 1 + .../multimodalinput_ipc_interface_code.h | 1 + .../src/multimodal_input_connect_manager.cpp | 7 +++++ .../src/multimodal_input_connect_proxy.cpp | 26 +++++++++++++++++++ .../src/multimodal_input_connect_stub.cpp | 17 ++++++++++++ .../test/mock_multimodal_input_connect_stub.h | 1 + .../multimodal_input_connect_stub_ex_test.cpp | 18 +++++++++++++ service/module_loader/include/mmi_service.h | 1 + service/module_loader/src/mmi_service.cpp | 19 ++++++++++++++ 17 files changed, 134 insertions(+) diff --git a/frameworks/proxy/event_handler/include/input_manager_impl.h b/frameworks/proxy/event_handler/include/input_manager_impl.h index 30495e1974..ec26a36ad0 100644 --- a/frameworks/proxy/event_handler/include/input_manager_impl.h +++ b/frameworks/proxy/event_handler/include/input_manager_impl.h @@ -242,6 +242,7 @@ public: int32_t ShiftAppPointerEvent(const ShiftWindowParam ¶m, bool autoGenDown); int32_t CheckKnuckleEvent(float pointX, float pointY, bool &touchType); int32_t LaunchAiScreenAbility(); + int32_t GetMaxMultiTouchPointNum(int32_t &pointNum); private: int32_t PackWindowInfo(NetPacket &pkt, DisplayGroupInfo &displayGroupInfo); diff --git a/frameworks/proxy/event_handler/src/input_manager_impl.cpp b/frameworks/proxy/event_handler/src/input_manager_impl.cpp index a6feaee7ef..8a1240ea9f 100644 --- a/frameworks/proxy/event_handler/src/input_manager_impl.cpp +++ b/frameworks/proxy/event_handler/src/input_manager_impl.cpp @@ -2821,5 +2821,11 @@ int32_t InputManagerImpl::LaunchAiScreenAbility() CALL_INFO_TRACE; return MULTIMODAL_INPUT_CONNECT_MGR->LaunchAiScreenAbility(); } + +int32_t InputManagerImpl::GetMaxMultiTouchPointNum(int32_t &pointNum) +{ + CALL_INFO_TRACE; + return MULTIMODAL_INPUT_CONNECT_MGR->GetMaxMultiTouchPointNum(pointNum); +} } // namespace MMI } // namespace OHOS \ No newline at end of file diff --git a/frameworks/proxy/events/src/input_manager.cpp b/frameworks/proxy/events/src/input_manager.cpp index f5c64b350b..21a277de0a 100644 --- a/frameworks/proxy/events/src/input_manager.cpp +++ b/frameworks/proxy/events/src/input_manager.cpp @@ -913,5 +913,10 @@ int32_t InputManager::LaunchAiScreenAbility() { return InputMgrImpl.LaunchAiScreenAbility(); } + +int32_t InputManager::GetMaxMultiTouchPointNum(int32_t &pointNum) +{ + return InputMgrImpl.GetMaxMultiTouchPointNum(pointNum); +} } // namespace MMI } // namespace OHOS diff --git a/frameworks/proxy/events/test/input_manager_test.cpp b/frameworks/proxy/events/test/input_manager_test.cpp index a9aba5fd4d..9935b40a7e 100644 --- a/frameworks/proxy/events/test/input_manager_test.cpp +++ b/frameworks/proxy/events/test/input_manager_test.cpp @@ -57,6 +57,7 @@ constexpr int32_t INVAID_VALUE = -1; constexpr uint32_t MAX_WINDOW_NUMS = 15; constexpr int32_t MOUSE_ICON_SIZE = 64; constexpr int32_t DEFAULT_SAMPLING_PERIOD { 8 }; // 8ms +constexpr int32_t MAX_MULTI_TOUCH_POINT_NUM { 10 }; #ifdef OHOS_BUILD_ENABLE_ANCO constexpr uint32_t SHELL_FLAGS_VALUE = 2; #endif // OHOS_BUILD_ENABLE_ANCO @@ -5682,5 +5683,24 @@ HWTEST_F(InputManagerTest, InputManagerTest_SetKnuckleSwitch_001, TestSize.Level std::shared_ptr inputManager = std::make_shared(); ASSERT_NO_FATAL_FAILURE(inputManager->SetKnuckleSwitch(knuckleSwitch)); } + +/* + * @tc.name: InputManagerTest_GetMaxMultiTouchPointNum_001 + * @tc.desc: GetMaxMultiTouchPointNum + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(InputManagerTest, InputManagerTest_GetMaxMultiTouchPointNum_001, TestSize.Level1) +{ + CALL_TEST_DEBUG; + int32_t pointNum { -1 }; + std::shared_ptr inputManager = std::make_shared(); + ASSERT_NO_FATAL_FAILURE(inputManager->GetMaxMultiTouchPointNum(pointNum)); + std::string productType = system::GetParameter("const.product.devicetype", "unknown"); + std::string productPC = "2in1"; + if (productType == productPC) { + ASSERT_EQ(MAX_MULTI_TOUCH_POINT_NUM, pointNum); + } +} } // namespace MMI } // namespace OHOS diff --git a/interfaces/native/innerkits/proxy/include/input_manager.h b/interfaces/native/innerkits/proxy/include/input_manager.h index 6fb604a424..e9ec8ffe1c 100644 --- a/interfaces/native/innerkits/proxy/include/input_manager.h +++ b/interfaces/native/innerkits/proxy/include/input_manager.h @@ -1173,6 +1173,14 @@ public: */ int32_t LaunchAiScreenAbility(); + /** + * @brief Get max Multi-Touch Points Num Supported. + * @param pointNum the value which Indicates the max Multi-Touch point num supported. + * @return Returns 0 if success; returns a non-0 value otherwise. + * @since 18 + */ + int32_t GetMaxMultiTouchPointNum(int32_t &pointNum); + private: InputManager() = default; DISALLOW_COPY_AND_MOVE(InputManager); diff --git a/service/connect_manager/include/i_multimodal_input_connect.h b/service/connect_manager/include/i_multimodal_input_connect.h index 8421742069..2c244bd5f8 100644 --- a/service/connect_manager/include/i_multimodal_input_connect.h +++ b/service/connect_manager/include/i_multimodal_input_connect.h @@ -187,6 +187,7 @@ public: virtual int32_t SetMultiWindowScreenId(uint64_t screenId, uint64_t displayNodeScreenId) = 0; virtual int32_t SetKnuckleSwitch(bool knuckleSwitch) = 0; virtual int32_t LaunchAiScreenAbility() = 0; + virtual int32_t GetMaxMultiTouchPointNum(int32_t &pointNum) = 0; }; } // namespace MMI } // namespace OHOS diff --git a/service/connect_manager/include/multimodal_input_connect_manager.h b/service/connect_manager/include/multimodal_input_connect_manager.h index dfecf926e6..f7959aad79 100644 --- a/service/connect_manager/include/multimodal_input_connect_manager.h +++ b/service/connect_manager/include/multimodal_input_connect_manager.h @@ -175,6 +175,7 @@ public: int32_t SetMultiWindowScreenId(uint64_t screenId, uint64_t displayNodeScreenId); int32_t SetKnuckleSwitch(bool knuckleSwitch); int32_t LaunchAiScreenAbility(); + int32_t GetMaxMultiTouchPointNum(int32_t &pointNum); private: MultimodalInputConnectManager() = default; diff --git a/service/connect_manager/include/multimodal_input_connect_proxy.h b/service/connect_manager/include/multimodal_input_connect_proxy.h index dfecb7f253..10cc198405 100644 --- a/service/connect_manager/include/multimodal_input_connect_proxy.h +++ b/service/connect_manager/include/multimodal_input_connect_proxy.h @@ -173,6 +173,7 @@ public: int32_t SetMultiWindowScreenId(uint64_t screenId, uint64_t displayNodeScreenId) override; int32_t SetKnuckleSwitch(bool knuckleSwitch) override; int32_t LaunchAiScreenAbility() override; + int32_t GetMaxMultiTouchPointNum(int32_t &pointNum) override; private: static inline BrokerDelegator delegator_; diff --git a/service/connect_manager/include/multimodal_input_connect_stub.h b/service/connect_manager/include/multimodal_input_connect_stub.h index 934e483265..dc38c1d5eb 100644 --- a/service/connect_manager/include/multimodal_input_connect_stub.h +++ b/service/connect_manager/include/multimodal_input_connect_stub.h @@ -187,6 +187,7 @@ protected: int32_t StubSetMultiWindowScreenId(MessageParcel& data, MessageParcel& reply); int32_t StubSetKnuckleSwitch(MessageParcel& data, MessageParcel& reply); int32_t StubLaunchAiScreenAbility(MessageParcel& data, MessageParcel& reply); + int32_t StubGetMaxMultiTouchPointNum(MessageParcel& data, MessageParcel& reply); private: int32_t VerifyTouchPadSetting(void); diff --git a/service/connect_manager/include/multimodalinput_ipc_interface_code.h b/service/connect_manager/include/multimodalinput_ipc_interface_code.h index 01bb07fbc6..628f31ff12 100644 --- a/service/connect_manager/include/multimodalinput_ipc_interface_code.h +++ b/service/connect_manager/include/multimodalinput_ipc_interface_code.h @@ -139,6 +139,7 @@ enum class MultimodalinputConnectInterfaceCode { SET_MUILT_WINDOW_SCREEN_ID = 123, SET_KNUCKLE_SWITCH = 124, LAUNCH_AI_SCREEN_ABILITY = 125, + GET_MAX_MULTI_TOUCH_POINT_NUM = 126, #ifdef OHOS_BUILD_ENABLE_VKEYBOARD CREATE_VKEYBOARD_DEVICE = 153, #endif // OHOS_BUILD_ENABLE_VKEYBOARD diff --git a/service/connect_manager/src/multimodal_input_connect_manager.cpp b/service/connect_manager/src/multimodal_input_connect_manager.cpp index 6ebcc3e508..c1b993d914 100644 --- a/service/connect_manager/src/multimodal_input_connect_manager.cpp +++ b/service/connect_manager/src/multimodal_input_connect_manager.cpp @@ -1073,5 +1073,12 @@ int32_t MultimodalInputConnectManager::LaunchAiScreenAbility() CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID); return multimodalInputConnectService_->LaunchAiScreenAbility(); } + +int32_t MultimodalInputConnectManager::GetMaxMultiTouchPointNum(int32_t &pointNum) +{ + std::lock_guard guard(lock_); + CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID); + return multimodalInputConnectService_->GetMaxMultiTouchPointNum(pointNum); +} } // namespace MMI } // namespace OHOS diff --git a/service/connect_manager/src/multimodal_input_connect_proxy.cpp b/service/connect_manager/src/multimodal_input_connect_proxy.cpp index eb0e6cf225..fc71ce4fa2 100644 --- a/service/connect_manager/src/multimodal_input_connect_proxy.cpp +++ b/service/connect_manager/src/multimodal_input_connect_proxy.cpp @@ -3051,5 +3051,31 @@ int32_t MultimodalInputConnectProxy::LaunchAiScreenAbility() } return ret; } + +int32_t MultimodalInputConnectProxy::GetMaxMultiTouchPointNum(int32_t &pointNum) +{ + CALL_DEBUG_ENTER; + MessageParcel data; + if (!data.WriteInterfaceToken(MultimodalInputConnectProxy::GetDescriptor())) { + MMI_HILOGE("Failed to write descriptor"); + return ERR_INVALID_VALUE; + } + MessageParcel reply; + MessageOption option; + sptr remote = Remote(); + CHKPR(remote, RET_ERR); + int32_t ret = remote->SendRequest( + static_cast(MultimodalinputConnectInterfaceCode::GET_MAX_MULTI_TOUCH_POINT_NUM), + data, reply, option); + if (ret != RET_OK) { + MMI_HILOGE("Send request failed, ret:%{public}d", ret); + return ret; + } + if (!reply.ReadInt32(pointNum)) { + MMI_HILOGE("Read pointNum failed"); + return IPC_PROXY_DEAD_OBJECT_ERR; + } + return ret; +} } // namespace MMI } // namespace OHOS diff --git a/service/connect_manager/src/multimodal_input_connect_stub.cpp b/service/connect_manager/src/multimodal_input_connect_stub.cpp index e9aacfae99..eacdc2bca5 100644 --- a/service/connect_manager/src/multimodal_input_connect_stub.cpp +++ b/service/connect_manager/src/multimodal_input_connect_stub.cpp @@ -510,6 +510,9 @@ int32_t MultimodalInputConnectStub::OnRemoteRequest(uint32_t code, MessageParcel case static_cast(MultimodalinputConnectInterfaceCode::QUERY_SWITCH_STATE_EVENT): ret = StubQuerySwitchStatus(data, reply); break; + case static_cast(MultimodalinputConnectInterfaceCode::GET_MAX_MULTI_TOUCH_POINT_NUM): + ret = StubGetMaxMultiTouchPointNum(data, reply); + break; default: { MMI_HILOGE("Unknown code:%{public}u, go switch default", code); ret = IPCObjectStub::OnRemoteRequest(code, data, reply, option); @@ -3515,5 +3518,19 @@ int32_t MultimodalInputConnectStub::StubLaunchAiScreenAbility(MessageParcel& dat } return RET_OK; } + +int32_t MultimodalInputConnectStub::StubGetMaxMultiTouchPointNum(MessageParcel& data, MessageParcel& reply) +{ + CALL_DEBUG_ENTER; + int32_t pointNum { -1 }; + int32_t ret = GetMaxMultiTouchPointNum(pointNum); + if (ret != RET_OK) { + MMI_HILOGE("Call GetMaxMultiTouchPointNum failed ret:%{public}d", ret); + return ret; + } + WRITEINT32(reply, pointNum, IPC_STUB_WRITE_PARCEL_ERR); + MMI_HILOGD("maxMultiTouchPointNum :%{public}d", pointNum); + return RET_OK; +} } // namespace MMI } // namespace OHOS diff --git a/service/connect_manager/test/mock_multimodal_input_connect_stub.h b/service/connect_manager/test/mock_multimodal_input_connect_stub.h index f38287bc29..8650f419a5 100644 --- a/service/connect_manager/test/mock_multimodal_input_connect_stub.h +++ b/service/connect_manager/test/mock_multimodal_input_connect_stub.h @@ -199,6 +199,7 @@ public: MOCK_METHOD(int32_t, SetMultiWindowScreenId, (uint64_t screenId, uint64_t displayNodeScreenId), (override)); MOCK_METHOD(int32_t, SetKnuckleSwitch, (bool knuckleSwitch), (override)); MOCK_METHOD(int32_t, LaunchAiScreenAbility, (), (override)); + MOCK_METHOD(int32_t, GetMaxMultiTouchPointNum, (int32_t &pointNum), (override)); MOCK_METHOD(bool, IsRunning, (), (const override)); }; diff --git a/service/connect_manager/test/multimodal_input_connect_stub_ex_test.cpp b/service/connect_manager/test/multimodal_input_connect_stub_ex_test.cpp index 66f5d09aad..ed7325214d 100644 --- a/service/connect_manager/test/multimodal_input_connect_stub_ex_test.cpp +++ b/service/connect_manager/test/multimodal_input_connect_stub_ex_test.cpp @@ -386,6 +386,8 @@ public: }; int32_t LaunchAiScreenAbility() override { return RET_OK; } + int32_t GetMaxMultiTouchPointNum(int32_t &pointNum) override { return RET_OK; } + std::atomic state_ = ServiceRunningState::STATE_NOT_START; int32_t rows_ = 0; int32_t size_ = 0; @@ -9235,5 +9237,21 @@ HWTEST_F(MultimodalInputConnectStubTest, StubLaunchAiScreenAbility_001, TestSize MessageParcel reply; EXPECT_NO_FATAL_FAILURE(stub->StubLaunchAiScreenAbility(data, reply)); } + +/** + * @tc.name: StubGetMaxMultiTouchPointNum_001 + * @tc.desc: Test the function StubGetMaxMultiTouchPointNum + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(MultimodalInputConnectStubTest, StubGetMaxMultiTouchPointNum_001, TestSize.Level1) +{ + CALL_TEST_DEBUG; + std::shared_ptr stub = std::make_shared(); + ASSERT_NE(stub, nullptr); + MessageParcel data; + MessageParcel reply; + EXPECT_NO_FATAL_FAILURE(stub->StubGetMaxMultiTouchPointNum(data, reply)); +} } // namespace MMI } // namespace OHOS \ No newline at end of file diff --git a/service/module_loader/include/mmi_service.h b/service/module_loader/include/mmi_service.h index fc8100a6e5..fa8a1b49d8 100644 --- a/service/module_loader/include/mmi_service.h +++ b/service/module_loader/include/mmi_service.h @@ -207,6 +207,7 @@ public: int32_t SetMultiWindowScreenIdInner(uint64_t screenId, uint64_t displayNodeScreenId); int32_t SetKnuckleSwitch(bool knuckleSwitch) override; int32_t LaunchAiScreenAbility() override; + int32_t GetMaxMultiTouchPointNum(int32_t &pointNum) override; protected: void OnConnected(SessionPtr s) override; diff --git a/service/module_loader/src/mmi_service.cpp b/service/module_loader/src/mmi_service.cpp index fa59185f0d..b9af560b31 100644 --- a/service/module_loader/src/mmi_service.cpp +++ b/service/module_loader/src/mmi_service.cpp @@ -110,6 +110,9 @@ constexpr int32_t THREAD_BLOCK_TIMER_SPAN_S { 3 }; constexpr int32_t PRINT_INTERVAL_TIME { 30000 }; constexpr int32_t RETRY_CHECK_TIMES { 5 }; constexpr int32_t CHECK_EEVENT_INTERVAL_TIME { 4000 }; +constexpr int32_t MAX_MULTI_TOUCH_POINT_NUM { 10 }; +const std::string PRODUCT_DEVICE_TYPE = system::GetParameter("const.product.devicetype", "unknown"); +const std::string PRODUCT_TYPE_PC = "2in1"; const int32_t ERROR_WINDOW_ID_PERMISSION_DENIED = 26500001; const std::set g_keyCodeValueSet = { #ifndef OHOS_BUILD_ENABLE_WATCH @@ -3855,5 +3858,21 @@ int32_t MMIService::LaunchAiScreenAbility() } return ret; } + +int32_t MMIService::GetMaxMultiTouchPointNum(int32_t &pointNum) +{ + int ret = delegateTasks_.PostSyncTask( + [&pointNum] () { + auto productDeviceType = PRODUCT_DEVICE_TYPE; + MMI_HILOGI("ProductDeviceType:%{public}s", productDeviceType.c_str()); + pointNum = MAX_MULTI_TOUCH_POINT_NUM; + return RET_OK; + } + ); + if (ret != RET_OK) { + MMI_HILOGE("GetMaxMultiTouchPointNum failed, return:%{public}d", ret); + } + return ret; +} } // namespace MMI } // namespace OHOS -- Gitee