InputDispatcher: Fix pointer count when canceling a subset of pointers
There was a bug in the logic for calculating the pointer coords and
properties for canceling a subset of pointers. It was introduced when we
refactored storing the coords in a vector rather than using a
fixed-length array with a pointerCount variable in the following change:
I91b4a88ec5df3f017ade8a6e55be3d3c1281de75
Bug: 346342507
Test: atest inputflinger_tests
Flag: NONE bug fix
Change-Id: Ie9a5fbd5ba1fd75c53b7289a93573ec2d0d1947b
diff --git a/services/inputflinger/tests/InputDispatcher_test.cpp b/services/inputflinger/tests/InputDispatcher_test.cpp
index 56a05a3..244deab 100644
--- a/services/inputflinger/tests/InputDispatcher_test.cpp
+++ b/services/inputflinger/tests/InputDispatcher_test.cpp
@@ -1282,9 +1282,11 @@
injectMotionEvent(*mDispatcher, secondFingerUpEvent, INJECT_EVENT_TIMEOUT,
InputEventInjectionSync::WAIT_FOR_RESULT))
<< "Inject motion event should return InputEventInjectionResult::SUCCEEDED";
- foregroundWindow->consumeMotionPointerUp(0);
- wallpaperWindow->consumeMotionPointerUp(0, ui::LogicalDisplayId::DEFAULT,
- EXPECTED_WALLPAPER_FLAGS);
+ foregroundWindow->consumeMotionPointerUp(/*pointerIdx=*/0,
+ WithDisplayId(ui::LogicalDisplayId::DEFAULT));
+ wallpaperWindow->consumeMotionPointerUp(/*pointerIdx=*/0,
+ AllOf(WithDisplayId(ui::LogicalDisplayId::DEFAULT),
+ WithFlags(EXPECTED_WALLPAPER_FLAGS)));
ASSERT_EQ(InputEventInjectionResult::SUCCEEDED,
injectMotionEvent(*mDispatcher,
@@ -6220,8 +6222,10 @@
{touchPoint, touchPoint}));
// The first window gets nothing and the second gets pointer up
firstWindow->assertNoEvents();
- secondWindow->consumeMotionPointerUp(1, ui::LogicalDisplayId::DEFAULT,
- AMOTION_EVENT_FLAG_NO_FOCUS_CHANGE);
+ secondWindow->consumeMotionPointerUp(/*pointerIdx=*/1,
+ AllOf(WithDisplayId(ui::LogicalDisplayId::DEFAULT),
+ WithFlags(AMOTION_EVENT_FLAG_NO_FOCUS_CHANGE),
+ WithPointerCount(2)));
// Send up event to the second window
mDispatcher->notifyMotion(generateMotionArgs(AMOTION_EVENT_ACTION_UP, AINPUT_SOURCE_TOUCHSCREEN,
@@ -6363,8 +6367,10 @@
{pointInFirst, pointInSecond}));
// The first window gets nothing and the second gets pointer up
firstWindow->assertNoEvents();
- secondWindow->consumeMotionPointerUp(1, ui::LogicalDisplayId::DEFAULT,
- AMOTION_EVENT_FLAG_NO_FOCUS_CHANGE);
+ secondWindow->consumeMotionPointerUp(/*pointerIdx=*/1,
+ AllOf(WithDisplayId(ui::LogicalDisplayId::DEFAULT),
+ WithFlags(AMOTION_EVENT_FLAG_NO_FOCUS_CHANGE),
+ WithPointerCount(2)));
// Send up event to the second window
mDispatcher->notifyMotion(generateMotionArgs(AMOTION_EVENT_ACTION_UP, AINPUT_SOURCE_TOUCHSCREEN,
@@ -12878,10 +12884,14 @@
// Spy window pilfers the pointers.
EXPECT_EQ(OK, mDispatcher->pilferPointers(spy->getToken()));
- window->consumeMotionPointerUp(/*idx=*/2, ui::LogicalDisplayId::DEFAULT,
- AMOTION_EVENT_FLAG_CANCELED);
- window->consumeMotionPointerUp(/*idx=*/1, ui::LogicalDisplayId::DEFAULT,
- AMOTION_EVENT_FLAG_CANCELED);
+ window->consumeMotionPointerUp(/*pointerIdx=*/2,
+ AllOf(WithDisplayId(ui::LogicalDisplayId::DEFAULT),
+ WithFlags(AMOTION_EVENT_FLAG_CANCELED),
+ WithPointerCount(3)));
+ window->consumeMotionPointerUp(/*pointerIdx=*/1,
+ AllOf(WithDisplayId(ui::LogicalDisplayId::DEFAULT),
+ WithFlags(AMOTION_EVENT_FLAG_CANCELED),
+ WithPointerCount(2)));
spy->assertNoEvents();
window->assertNoEvents();