summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chris Ye <lzye@google.com> 2020-08-05 15:07:56 -0700
committer Linzhao Ye <lzye@google.com> 2020-10-10 05:01:28 +0000
commitdca44af78b0d3bc6b720e01642f6f15408a3b8d8 (patch)
treee7d9f8b32e28e97e1d0ce65260eb8563daaa4a10
parent611712ae14fd8d9810dff04cfb2d419ee77b9493 (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.cpp6
-rw-r--r--services/inputflinger/reader/mapper/TouchInputMapper.cpp5
-rw-r--r--services/inputflinger/tests/InputReader_test.cpp4
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);