@@ -57,6 +57,7 @@ namespace android {
5757
5858using namespace ftl::flag_operators;
5959using testing::AllOf;
60+ using testing::VariantWith;
6061using std::chrono_literals::operator""ms;
6162using std::chrono_literals::operator""s;
6263
@@ -4430,15 +4431,15 @@ class SingleTouchInputMapperTest : public TouchInputMapperTest {
44304431 void prepareButtons();
44314432 void prepareAxes(int axes);
44324433
4433- void processDown(SingleTouchInputMapper& mapper, int32_t x, int32_t y);
4434- void processMove(SingleTouchInputMapper& mapper, int32_t x, int32_t y);
4435- void processUp(SingleTouchInputMapper& mappery);
4436- void processPressure(SingleTouchInputMapper& mapper, int32_t pressure);
4437- void processToolMajor(SingleTouchInputMapper& mapper, int32_t toolMajor);
4438- void processDistance(SingleTouchInputMapper& mapper, int32_t distance);
4439- void processTilt(SingleTouchInputMapper& mapper, int32_t tiltX, int32_t tiltY);
4440- void processKey(SingleTouchInputMapper& mapper, int32_t code, int32_t value);
4441- void processSync(SingleTouchInputMapper& mapper);
4434+ std::list<NotifyArgs> processDown(SingleTouchInputMapper& mapper, int32_t x, int32_t y);
4435+ std::list<NotifyArgs> processMove(SingleTouchInputMapper& mapper, int32_t x, int32_t y);
4436+ std::list<NotifyArgs> processUp(SingleTouchInputMapper& mappery);
4437+ std::list<NotifyArgs> processPressure(SingleTouchInputMapper& mapper, int32_t pressure);
4438+ std::list<NotifyArgs> processToolMajor(SingleTouchInputMapper& mapper, int32_t toolMajor);
4439+ std::list<NotifyArgs> processDistance(SingleTouchInputMapper& mapper, int32_t distance);
4440+ std::list<NotifyArgs> processTilt(SingleTouchInputMapper& mapper, int32_t tiltX, int32_t tiltY);
4441+ std::list<NotifyArgs> processKey(SingleTouchInputMapper& mapper, int32_t code, int32_t value);
4442+ std::list<NotifyArgs> processSync(SingleTouchInputMapper& mapper);
44424443};
44434444
44444445void SingleTouchInputMapperTest::prepareButtons() {
@@ -4468,47 +4469,57 @@ void SingleTouchInputMapperTest::prepareAxes(int axes) {
44684469 }
44694470}
44704471
4471- void SingleTouchInputMapperTest::processDown(SingleTouchInputMapper& mapper, int32_t x, int32_t y) {
4472- process(mapper, ARBITRARY_TIME, READ_TIME, EV_KEY, BTN_TOUCH, 1);
4473- process(mapper, ARBITRARY_TIME, READ_TIME, EV_ABS, ABS_X, x);
4474- process(mapper, ARBITRARY_TIME, READ_TIME, EV_ABS, ABS_Y, y);
4472+ std::list<NotifyArgs> SingleTouchInputMapperTest::processDown(SingleTouchInputMapper& mapper,
4473+ int32_t x, int32_t y) {
4474+ std::list<NotifyArgs> args;
4475+ args += process(mapper, ARBITRARY_TIME, READ_TIME, EV_KEY, BTN_TOUCH, 1);
4476+ args += process(mapper, ARBITRARY_TIME, READ_TIME, EV_ABS, ABS_X, x);
4477+ args += process(mapper, ARBITRARY_TIME, READ_TIME, EV_ABS, ABS_Y, y);
4478+ return args;
44754479}
44764480
4477- void SingleTouchInputMapperTest::processMove(SingleTouchInputMapper& mapper, int32_t x, int32_t y) {
4478- process(mapper, ARBITRARY_TIME, READ_TIME, EV_ABS, ABS_X, x);
4479- process(mapper, ARBITRARY_TIME, READ_TIME, EV_ABS, ABS_Y, y);
4481+ std::list<NotifyArgs> SingleTouchInputMapperTest::processMove(SingleTouchInputMapper& mapper,
4482+ int32_t x, int32_t y) {
4483+ std::list<NotifyArgs> args;
4484+ args += process(mapper, ARBITRARY_TIME, READ_TIME, EV_ABS, ABS_X, x);
4485+ args += process(mapper, ARBITRARY_TIME, READ_TIME, EV_ABS, ABS_Y, y);
4486+ return args;
44804487}
44814488
4482- void SingleTouchInputMapperTest::processUp(SingleTouchInputMapper& mapper) {
4483- process(mapper, ARBITRARY_TIME, READ_TIME, EV_KEY, BTN_TOUCH, 0);
4489+ std::list<NotifyArgs> SingleTouchInputMapperTest::processUp(SingleTouchInputMapper& mapper) {
4490+ return process(mapper, ARBITRARY_TIME, READ_TIME, EV_KEY, BTN_TOUCH, 0);
44844491}
44854492
4486- void SingleTouchInputMapperTest::processPressure(SingleTouchInputMapper& mapper, int32_t pressure) {
4487- process(mapper, ARBITRARY_TIME, READ_TIME, EV_ABS, ABS_PRESSURE, pressure);
4493+ std::list<NotifyArgs> SingleTouchInputMapperTest::processPressure(SingleTouchInputMapper& mapper,
4494+ int32_t pressure) {
4495+ return process(mapper, ARBITRARY_TIME, READ_TIME, EV_ABS, ABS_PRESSURE, pressure);
44884496}
44894497
4490- void SingleTouchInputMapperTest::processToolMajor(SingleTouchInputMapper& mapper,
4491- int32_t toolMajor) {
4492- process(mapper, ARBITRARY_TIME, READ_TIME, EV_ABS, ABS_TOOL_WIDTH, toolMajor);
4498+ std::list<NotifyArgs> SingleTouchInputMapperTest::processToolMajor(SingleTouchInputMapper& mapper,
4499+ int32_t toolMajor) {
4500+ return process(mapper, ARBITRARY_TIME, READ_TIME, EV_ABS, ABS_TOOL_WIDTH, toolMajor);
44934501}
44944502
4495- void SingleTouchInputMapperTest::processDistance(SingleTouchInputMapper& mapper, int32_t distance) {
4496- process(mapper, ARBITRARY_TIME, READ_TIME, EV_ABS, ABS_DISTANCE, distance);
4503+ std::list<NotifyArgs> SingleTouchInputMapperTest::processDistance(SingleTouchInputMapper& mapper,
4504+ int32_t distance) {
4505+ return process(mapper, ARBITRARY_TIME, READ_TIME, EV_ABS, ABS_DISTANCE, distance);
44974506}
44984507
4499- void SingleTouchInputMapperTest::processTilt(SingleTouchInputMapper& mapper, int32_t tiltX,
4500- int32_t tiltY) {
4501- process(mapper, ARBITRARY_TIME, READ_TIME, EV_ABS, ABS_TILT_X, tiltX);
4502- process(mapper, ARBITRARY_TIME, READ_TIME, EV_ABS, ABS_TILT_Y, tiltY);
4508+ std::list<NotifyArgs> SingleTouchInputMapperTest::processTilt(SingleTouchInputMapper& mapper,
4509+ int32_t tiltX, int32_t tiltY) {
4510+ std::list<NotifyArgs> args;
4511+ args += process(mapper, ARBITRARY_TIME, READ_TIME, EV_ABS, ABS_TILT_X, tiltX);
4512+ args += process(mapper, ARBITRARY_TIME, READ_TIME, EV_ABS, ABS_TILT_Y, tiltY);
4513+ return args;
45034514}
45044515
4505- void SingleTouchInputMapperTest::processKey(SingleTouchInputMapper& mapper, int32_t code ,
4506- int32_t value) {
4507- process(mapper, ARBITRARY_TIME, READ_TIME, EV_KEY, code, value);
4516+ std::list<NotifyArgs> SingleTouchInputMapperTest::processKey(SingleTouchInputMapper& mapper,
4517+ int32_t code, int32_t value) {
4518+ return process(mapper, ARBITRARY_TIME, READ_TIME, EV_KEY, code, value);
45084519}
45094520
4510- void SingleTouchInputMapperTest::processSync(SingleTouchInputMapper& mapper) {
4511- process(mapper, ARBITRARY_TIME, READ_TIME, EV_SYN, SYN_REPORT, 0);
4521+ std::list<NotifyArgs> SingleTouchInputMapperTest::processSync(SingleTouchInputMapper& mapper) {
4522+ return process(mapper, ARBITRARY_TIME, READ_TIME, EV_SYN, SYN_REPORT, 0);
45124523}
45134524
45144525TEST_F(SingleTouchInputMapperTest, GetSources_WhenDeviceTypeIsNotSpecifiedAndNotACursor_ReturnsPointer) {
@@ -4599,6 +4610,42 @@ TEST_F(SingleTouchInputMapperTest, MarkSupportedKeyCodes) {
45994610 ASSERT_FALSE(flags[1]);
46004611}
46014612
4613+ TEST_F(SingleTouchInputMapperTest, DeviceTypeChange_RecalculatesRawToDisplayTransform) {
4614+ prepareDisplay(ui::ROTATION_0);
4615+ prepareAxes(POSITION);
4616+ addConfigurationProperty("touch.deviceType", "touchScreen");
4617+ SingleTouchInputMapper& mapper = constructAndAddMapper<SingleTouchInputMapper>();
4618+
4619+ const int32_t x = 900;
4620+ const int32_t y = 75;
4621+ std::list<NotifyArgs> args;
4622+ args += processDown(mapper, x, y);
4623+ args += processSync(mapper);
4624+
4625+ // Assert that motion event is received in display coordinate space for deviceType touchScreen.
4626+ ASSERT_THAT(args,
4627+ ElementsAre(VariantWith<NotifyMotionArgs>(
4628+ AllOf(WithMotionAction(AMOTION_EVENT_ACTION_DOWN),
4629+ WithCoords(toDisplayX(x), toDisplayY(y))))));
4630+
4631+ // Add device type association after the device was created.
4632+ mFakePolicy->addDeviceTypeAssociation(DEVICE_LOCATION, "touchNavigation");
4633+ // Send update to the mapper.
4634+ std::list<NotifyArgs> unused =
4635+ mDevice->configure(ARBITRARY_TIME, mFakePolicy->getReaderConfiguration(),
4636+ InputReaderConfiguration::Change::DEVICE_TYPE /*changes*/);
4637+
4638+ args.clear();
4639+ args += processDown(mapper, x, y);
4640+ args += processSync(mapper);
4641+
4642+ // Assert that motion event is received in raw coordinate space for deviceType touchNavigation.
4643+ ASSERT_THAT(args,
4644+ ElementsAre(VariantWith<NotifyMotionArgs>(
4645+ AllOf(WithMotionAction(AMOTION_EVENT_ACTION_DOWN),
4646+ WithCoords(x - RAW_X_MIN, y - RAW_Y_MIN)))));
4647+ }
4648+
46024649TEST_F(SingleTouchInputMapperTest, Process_WhenVirtualKeyIsPressedAndReleasedNormally_SendsKeyDownAndKeyUp) {
46034650 addConfigurationProperty("touch.deviceType", "touchScreen");
46044651 prepareDisplay(ui::ROTATION_0);
0 commit comments