diff --git a/frameworks/proxy/event_handler/include/input_manager_impl.h b/frameworks/proxy/event_handler/include/input_manager_impl.h index 30495e1974fb03663d3bce26bb59ce26b881b0b4..ec26a36ad01004bbdad161a47cc795a5d57356b5 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 a6feaee7ef9ff6b824a4fb7960bccee15ff5c24d..8a1240ea9f51c84f50bb7e42f95272bfc9608180 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 f5c64b350b054f58f5cb75495e5131897c3f09f2..21a277de0aee9234ad85f5bce90864ef71f0ba69 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 a9aba5fd4d8522b200fad9708c180e88aa3ce6aa..9935b40a7e878307d9d9a75eef0be1f5fd4773dd 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 6fb604a424f70f3992734e947adb440e3633b099..e9ec8ffe1caaba49deff94d45de61ec40878d7b5 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 842174206942c78b5266dd5332a61ae28ec8a267..2c244bd5f8912978d464e0fb94902788f721ee07 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 dfecf926e679fe2c277ce7959a96fe347efb6f1e..f7959aad79058380a2d43efd173ecc15546c58c2 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 dfecb7f253fe4c91f5cea6fcdfa178b3e9937086..10cc198405dc148f1b13af13601a622283c8836a 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 934e4832656e727369e65245c0b7083640c612f3..dc38c1d5eb918e5f0490877cf47ed637464a1b75 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 01bb07fbc63c068f90b76afa61c3ca9b77ca631b..628f31ff1289510fb40ce37c2d3faca5b2c1724e 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 6ebcc3e508bc10eef7d3349c00944b9e74479803..c1b993d9141a91a124da116d6f9b83a6b9b71bde 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 eb0e6cf22577677bcadaea587bcb0155d15a5e20..fc71ce4fa2970a3a8d9c7cb62f632c999d200479 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 e9aacfae99b13ab1304211e4a057d54dd00c2921..eacdc2bca5e570a15e34ac2b7be0c6f7481f2a26 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 f38287bc2907d995d964cea415684e272edb8d8f..8650f419a5fd6bf3e6614df20f7200ca6ee160c6 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 66f5d09aad1ff2c41b54e6f8c891b289c986a371..ed7325214d35e6afd0a38e5773ab08557ee0601b 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 fc8100a6e56c43b53078a3cffd0efecf11347b69..fa8a1b49d882735f433cb135d7fdb9e1d41a5fbc 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 fa59185f0d78732882a73f671583d2ee2aea7db0..b9af560b3124c91910cf0b1e93e29de6b22e3db7 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