diff --git a/frameworks/native/input/oh_input_manager.cpp b/frameworks/native/input/oh_input_manager.cpp index 91c7b2596d30391be392cd3b72442e72c75d99a4..a3cc8b41ebb9ad7cd341e4d71b0c3446eba0249c 100644 --- a/frameworks/native/input/oh_input_manager.cpp +++ b/frameworks/native/input/oh_input_manager.cpp @@ -120,7 +120,7 @@ static constexpr int32_t INVALID_MONITOR_ID = -1; static constexpr int32_t INVALID_INTERCEPTOR_ID = -1; static constexpr int32_t OCCUPIED_BY_SYSTEM = -3; static constexpr int32_t OCCUPIED_BY_OTHER = -4; -static constexpr int32_t SIMULATE_POINTER_EVENT_START_ID { 10000 }; +static constexpr int32_t SIMULATE_POINTER_EVENT_START_ID { 30000 }; static std::shared_ptr g_keyEvent = OHOS::MMI::KeyEvent::Create(); static std::shared_ptr g_mouseEvent = OHOS::MMI::PointerEvent::Create(); static std::shared_ptr g_touchEvent = OHOS::MMI::PointerEvent::Create(); @@ -2780,7 +2780,8 @@ static int32_t TransformTouchAction(const struct Input_TouchEvent *touchEvent, } static int32_t TransformTouchProperty(const struct Input_TouchEvent *touchEvent, - std::shared_ptr pointerEvent, OHOS::MMI::PointerEvent::PointerItem &item) + std::shared_ptr pointerEvent, + OHOS::MMI::PointerEvent::PointerItem &item, int32_t windowX, int32_t windowY) { CALL_INFO_TRACE; CHKPR(touchEvent, INPUT_PARAMETER_ERROR); @@ -2798,8 +2799,14 @@ static int32_t TransformTouchProperty(const struct Input_TouchEvent *touchEvent, int32_t globalY = touchEvent->globalY; item.SetGlobalX(globalX); item.SetGlobalY(globalY); + item.SetWindowX(windowX); + item.SetWindowY(windowY); int32_t id = touchEvent->id; + if (id < 0) { + MMI_HILOGE("displayId is less 0, can not process"); + return INPUT_PARAMETER_ERROR; + } item.SetOriginPointerId(id); if (id < SIMULATE_POINTER_EVENT_START_ID) { item.SetPointerId(id + SIMULATE_POINTER_EVENT_START_ID); @@ -2820,13 +2827,18 @@ static int32_t TransformTouchProperty(const struct Input_TouchEvent *touchEvent, return INPUT_SUCCESS; } -std::shared_ptr OH_Input_TouchEventToPointerEvent(Input_TouchEvent *touchEvent) +std::shared_ptr OH_Input_TouchEventToPointerEvent(Input_TouchEvent *touchEvent, + int32_t windowX, int32_t windowY) { CALL_INFO_TRACE; if (touchEvent == nullptr) { MMI_HILOGE("touchEvent is null"); return nullptr; } + if (windowX < 0 || windowY < 0) { + MMI_HILOGE("window coordination is less 0"); + return nullptr; + } std::shared_ptr pointerEvent = OHOS::MMI::PointerEvent::Create(); if (pointerEvent == nullptr) { MMI_HILOGE("pointerEventis null"); @@ -2838,7 +2850,7 @@ std::shared_ptr OH_Input_TouchEventToPointerEvent(Input return nullptr; } - ret = TransformTouchProperty(touchEvent, pointerEvent, item); + ret = TransformTouchProperty(touchEvent, pointerEvent, item, windowX, windowY); if (ret != INPUT_SUCCESS) { return nullptr; } diff --git a/frameworks/proxy/events/test/pointer_event_ndk_test.cpp b/frameworks/proxy/events/test/pointer_event_ndk_test.cpp index 878ed6bd91d6eb4d3e02b63c22d6ce32bc7de002..bb89b3ef8ad2d02b91ec7bb66b058a5841932792 100644 --- a/frameworks/proxy/events/test/pointer_event_ndk_test.cpp +++ b/frameworks/proxy/events/test/pointer_event_ndk_test.cpp @@ -61,9 +61,11 @@ HWTEST_F(PointerEventNdkTest, PointerEventNdkTest_OH_Input_TouchEventToPointerEv inputTouchEvent.id = 1; inputTouchEvent.displayX = 100; inputTouchEvent.displayY = 200; + int32_t windowX = 10; + int32_t windowY = 20; std::shared_ptr result - = OH_Input_TouchEventToPointerEvent(&inputTouchEvent); + = OH_Input_TouchEventToPointerEvent(&inputTouchEvent, windowX, windowY); EXPECT_NE(result, nullptr); } @@ -82,9 +84,11 @@ HWTEST_F(PointerEventNdkTest, PointerEventNdkTest_OH_Input_TouchEventToPointerEv inputTouchEvent.id = 1; inputTouchEvent.displayX = 100; inputTouchEvent.displayY = 200; + int32_t windowX = 10; + int32_t windowY = 20; std::shared_ptr result - = OH_Input_TouchEventToPointerEvent(&inputTouchEvent); + = OH_Input_TouchEventToPointerEvent(&inputTouchEvent, windowX, windowY); EXPECT_NE(result, nullptr); } @@ -103,9 +107,11 @@ HWTEST_F(PointerEventNdkTest, PointerEventNdkTest_OH_Input_TouchEventToPointerEv inputTouchEvent.id = 1; inputTouchEvent.displayX = 100; inputTouchEvent.displayY = 200; + int32_t windowX = 10; + int32_t windowY = 20; std::shared_ptr result - = OH_Input_TouchEventToPointerEvent(&inputTouchEvent); + = OH_Input_TouchEventToPointerEvent(&inputTouchEvent, windowX, windowY); EXPECT_EQ(result, nullptr); } @@ -124,9 +130,11 @@ HWTEST_F(PointerEventNdkTest, PointerEventNdkTest_OH_Input_TouchEventToPointerEv inputTouchEvent.id = 1; inputTouchEvent.displayX = -1; inputTouchEvent.displayY = 200; + int32_t windowX = 10; + int32_t windowY = 20; std::shared_ptr result - = OH_Input_TouchEventToPointerEvent(&inputTouchEvent); + = OH_Input_TouchEventToPointerEvent(&inputTouchEvent, windowX, windowY); EXPECT_EQ(result, nullptr); } @@ -145,9 +153,57 @@ HWTEST_F(PointerEventNdkTest, PointerEventNdkTest_OH_Input_TouchEventToPointerEv inputTouchEvent.id = 1; inputTouchEvent.displayX = 100; inputTouchEvent.displayY = -1; + int32_t windowX = 10; + int32_t windowY = 20; std::shared_ptr result - = OH_Input_TouchEventToPointerEvent(&inputTouchEvent); + = OH_Input_TouchEventToPointerEvent(&inputTouchEvent, windowX, windowY); + EXPECT_EQ(result, nullptr); +} + +/** + * @tc.name: PointerEventNdkTest_OH_Input_TouchEventToPointerEvent_InvalidWindowX + * @tc.desc: Test the function OH_Input_TouchEventToPointerEvent with invalid windowX + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PointerEventNdkTest, PointerEventNdkTest_OH_Input_TouchEventToPointerEvent_006, TestSize.Level1) +{ + CALL_TEST_DEBUG; + Input_TouchEvent inputTouchEvent; + inputTouchEvent.actionTime = 100; + inputTouchEvent.action = TOUCH_ACTION_DOWN; + inputTouchEvent.id = 1; + inputTouchEvent.displayX = 100; + inputTouchEvent.displayY = 200; + int32_t windowX = -1; + int32_t windowY = 20; + + std::shared_ptr result + = OH_Input_TouchEventToPointerEvent(&inputTouchEvent, windowX, windowY); + EXPECT_EQ(result, nullptr); +} + +/** + * @tc.name: PointerEventNdkTest_OH_Input_TouchEventToPointerEvent_InvalidWindowY + * @tc.desc: Test the function OH_Input_TouchEventToPointerEvent with invalid windowY + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PointerEventNdkTest, PointerEventNdkTest_OH_Input_TouchEventToPointerEvent_007, TestSize.Level1) +{ + CALL_TEST_DEBUG; + Input_TouchEvent inputTouchEvent; + inputTouchEvent.actionTime = 100; + inputTouchEvent.action = TOUCH_ACTION_DOWN; + inputTouchEvent.id = 1; + inputTouchEvent.displayX = 100; + inputTouchEvent.displayY = 200; + int32_t windowX = 10; + int32_t windowY = -1; + + std::shared_ptr result + = OH_Input_TouchEventToPointerEvent(&inputTouchEvent, windowX, windowY); EXPECT_EQ(result, nullptr); } } // namespace MMI diff --git a/interfaces/native/innerkits/event/include/pointer_event_ndk.h b/interfaces/native/innerkits/event/include/pointer_event_ndk.h index 105479f7be9e1a7c6fa2e50056e3741e3f5c47f6..9fec4a7ad60de880f646a67a6450be678c27d9e9 100644 --- a/interfaces/native/innerkits/event/include/pointer_event_ndk.h +++ b/interfaces/native/innerkits/event/include/pointer_event_ndk.h @@ -20,6 +20,7 @@ #include "oh_input_manager.h" #include "pointer_event.h" -std::shared_ptr OH_Input_TouchEventToPointerEvent(Input_TouchEvent *touchEvent); +std::shared_ptr OH_Input_TouchEventToPointerEvent(Input_TouchEvent *touchEvent, + int32_t windowX, int32_t windowY); #endif // POINTER_EVENT_NDK_H \ No newline at end of file