diff options
| author | 2020-08-05 15:07:56 -0700 | |
|---|---|---|
| committer | 2020-10-10 05:01:28 +0000 | |
| commit | dca44af78b0d3bc6b720e01642f6f15408a3b8d8 (patch) | |
| tree | e7d9f8b32e28e97e1d0ce65260eb8563daaa4a10 | |
| parent | 611712ae14fd8d9810dff04cfb2d419ee77b9493 (diff) | |
Fix MultiTouchInputMapperTest#Process_TouchpadCapture test failure.
Do not consume raw event because of checking inside surface pass,
if device mode is unscaled. This will prevent the first motion event
to be consumed unexpectedly for touchpad pointer capture mode.
Bug: 162974380
Test: atest MultiTouchInputMapperTest#Process_TouchpadCapture
Change-Id: I3c5b0a4514d67990540967d7fa3d6b48011d3884
Merged_In: I3c5b0a4514d67990540967d7fa3d6b48011d3884
| -rw-r--r-- | services/inputflinger/reader/mapper/CursorInputMapper.cpp | 6 | ||||
| -rw-r--r-- | services/inputflinger/reader/mapper/TouchInputMapper.cpp | 5 | ||||
| -rw-r--r-- | services/inputflinger/tests/InputReader_test.cpp | 4 |
3 files changed, 9 insertions, 6 deletions
diff --git a/services/inputflinger/reader/mapper/CursorInputMapper.cpp b/services/inputflinger/reader/mapper/CursorInputMapper.cpp index 3b7068467a..55c1a1dcac 100644 --- a/services/inputflinger/reader/mapper/CursorInputMapper.cpp +++ b/services/inputflinger/reader/mapper/CursorInputMapper.cpp @@ -316,7 +316,7 @@ void CursorInputMapper::sync(nsecs_t when) { mPointerVelocityControl.move(when, &deltaX, &deltaY); - int32_t displayId; + int32_t displayId = ADISPLAY_ID_NONE; float xCursorPosition = AMOTION_EVENT_INVALID_CURSOR_POSITION; float yCursorPosition = AMOTION_EVENT_INVALID_CURSOR_POSITION; if (mSource == AINPUT_SOURCE_MOUSE) { @@ -340,12 +340,12 @@ void CursorInputMapper::sync(nsecs_t when) { pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_RELATIVE_X, deltaX); pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_RELATIVE_Y, deltaY); displayId = mPointerController->getDisplayId(); - } else { + } else if (mSource == AINPUT_SOURCE_MOUSE_RELATIVE) { + // Pointer capture mode pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_X, deltaX); pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_Y, deltaY); pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_RELATIVE_X, deltaX); pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_RELATIVE_Y, deltaY); - displayId = ADISPLAY_ID_NONE; } pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, down ? 1.0f : 0.0f); diff --git a/services/inputflinger/reader/mapper/TouchInputMapper.cpp b/services/inputflinger/reader/mapper/TouchInputMapper.cpp index 0f4e3a502c..2770c14f81 100644 --- a/services/inputflinger/reader/mapper/TouchInputMapper.cpp +++ b/services/inputflinger/reader/mapper/TouchInputMapper.cpp @@ -1780,7 +1780,8 @@ bool TouchInputMapper::consumeRawTouches(nsecs_t when, uint32_t policyFlags) { // Pointer just went down. Check for virtual key press or off-screen touches. uint32_t id = mCurrentRawState.rawPointerData.touchingIdBits.firstMarkedBit(); const RawPointerData::Pointer& pointer = mCurrentRawState.rawPointerData.pointerForId(id); - if (!isPointInsideSurface(pointer.x, pointer.y)) { + // Exclude unscaled device for inside surface checking. + if (!isPointInsideSurface(pointer.x, pointer.y) && mDeviceMode != DeviceMode::UNSCALED) { // If exactly one pointer went down, check for virtual key hit. // Otherwise we will drop the entire stroke. if (mCurrentRawState.rawPointerData.touchingIdBits.count() == 1) { @@ -2274,7 +2275,7 @@ void TouchInputMapper::cookPointerData() { out.setAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR, toolMinor); } - // Write output relative fieldis if applicable. + // Write output relative fields if applicable. uint32_t id = in.id; if (mSource == AINPUT_SOURCE_TOUCHPAD && mLastCookedState.cookedPointerData.hasPointerCoordsForId(id)) { diff --git a/services/inputflinger/tests/InputReader_test.cpp b/services/inputflinger/tests/InputReader_test.cpp index 9c24248ed6..d589a62bd2 100644 --- a/services/inputflinger/tests/InputReader_test.cpp +++ b/services/inputflinger/tests/InputReader_test.cpp @@ -7558,6 +7558,7 @@ TEST_F(MultiTouchInputMapperTest, Process_TouchpadCapture) { // identical to what the hardware sends (accounting for any // calibration). // FINGER 0 DOWN + processSlot(mapper, 0); processId(mapper, 1); processPosition(mapper, 100 + RAW_X_MIN, 100 + RAW_Y_MIN); processKey(mapper, BTN_TOUCH, 1); @@ -7581,7 +7582,8 @@ TEST_F(MultiTouchInputMapperTest, Process_TouchpadCapture) { // expect coord[0] to contain previous location, coord[1] to contain new touch 1 location ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args)); - ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_DOWN | 0x0100, args.action); + ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_DOWN | (1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT), + args.action); ASSERT_EQ(2U, args.pointerCount); ASSERT_EQ(0, args.pointerProperties[0].id); ASSERT_EQ(1, args.pointerProperties[1].id); |