Skip to content

Commit ea6892e

Browse files
author
Jeff Brown
committed
Support BTN_TOOL_*TAP as synonyms for BTN_TOOL_FINGER.
Bug: 5205301 Some drivers report one finger as BTN_TOOL_FINGER, two as BTN_TOOL_DOUBLETAP, three as BTN_TOOL_TRIPLETAP and four as BTN_TOOL_QUADTAP. Since we care about the tool type, we need to handle _DOUBLE/_TRIPLE/_QUAD tap in the same way we handle _FINGER. Change-Id: I8eb83d2a2bada9ac32d07619c7eea84e924316b8
1 parent 2a4c5ac commit ea6892e

File tree

3 files changed

+71
-4
lines changed

3 files changed

+71
-4
lines changed

services/input/InputReader.cpp

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1220,6 +1220,9 @@ void TouchButtonAccumulator::reset(InputDevice* device) {
12201220
mBtnToolAirbrush = device->isKeyPressed(BTN_TOOL_AIRBRUSH);
12211221
mBtnToolMouse = device->isKeyPressed(BTN_TOOL_MOUSE);
12221222
mBtnToolLens = device->isKeyPressed(BTN_TOOL_LENS);
1223+
mBtnToolDoubleTap = device->isKeyPressed(BTN_TOOL_DOUBLETAP);
1224+
mBtnToolTripleTap = device->isKeyPressed(BTN_TOOL_TRIPLETAP);
1225+
mBtnToolQuadTap = device->isKeyPressed(BTN_TOOL_QUADTAP);
12231226
}
12241227

12251228
void TouchButtonAccumulator::clearButtons() {
@@ -1234,6 +1237,9 @@ void TouchButtonAccumulator::clearButtons() {
12341237
mBtnToolAirbrush = 0;
12351238
mBtnToolMouse = 0;
12361239
mBtnToolLens = 0;
1240+
mBtnToolDoubleTap = 0;
1241+
mBtnToolTripleTap = 0;
1242+
mBtnToolQuadTap = 0;
12371243
}
12381244

12391245
void TouchButtonAccumulator::process(const RawEvent* rawEvent) {
@@ -1272,6 +1278,15 @@ void TouchButtonAccumulator::process(const RawEvent* rawEvent) {
12721278
case BTN_TOOL_LENS:
12731279
mBtnToolLens = rawEvent->value;
12741280
break;
1281+
case BTN_TOOL_DOUBLETAP:
1282+
mBtnToolDoubleTap = rawEvent->value;
1283+
break;
1284+
case BTN_TOOL_TRIPLETAP:
1285+
mBtnToolTripleTap = rawEvent->value;
1286+
break;
1287+
case BTN_TOOL_QUADTAP:
1288+
mBtnToolQuadTap = rawEvent->value;
1289+
break;
12751290
}
12761291
}
12771292
}
@@ -1297,7 +1312,7 @@ int32_t TouchButtonAccumulator::getToolType() const {
12971312
if (mBtnToolPen || mBtnToolBrush || mBtnToolPencil || mBtnToolAirbrush) {
12981313
return AMOTION_EVENT_TOOL_TYPE_STYLUS;
12991314
}
1300-
if (mBtnToolFinger) {
1315+
if (mBtnToolFinger || mBtnToolDoubleTap || mBtnToolTripleTap || mBtnToolQuadTap) {
13011316
return AMOTION_EVENT_TOOL_TYPE_FINGER;
13021317
}
13031318
return AMOTION_EVENT_TOOL_TYPE_UNKNOWN;
@@ -1306,7 +1321,8 @@ int32_t TouchButtonAccumulator::getToolType() const {
13061321
bool TouchButtonAccumulator::isToolActive() const {
13071322
return mBtnTouch || mBtnToolFinger || mBtnToolPen || mBtnToolRubber
13081323
|| mBtnToolBrush || mBtnToolPencil || mBtnToolAirbrush
1309-
|| mBtnToolMouse || mBtnToolLens;
1324+
|| mBtnToolMouse || mBtnToolLens
1325+
|| mBtnToolDoubleTap || mBtnToolTripleTap || mBtnToolQuadTap;
13101326
}
13111327

13121328
bool TouchButtonAccumulator::isHovering() const {

services/input/InputReader.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,9 @@ class TouchButtonAccumulator {
596596
bool mBtnToolAirbrush;
597597
bool mBtnToolMouse;
598598
bool mBtnToolLens;
599+
bool mBtnToolDoubleTap;
600+
bool mBtnToolTripleTap;
601+
bool mBtnToolQuadTap;
599602

600603
void clearButtons();
601604
};

services/input/tests/InputReader_test.cpp

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3377,8 +3377,32 @@ TEST_F(SingleTouchInputMapperTest, Process_ShouldHandleAllToolTypes) {
33773377
ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
33783378
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_MOUSE, motionArgs.pointerProperties[0].toolType);
33793379

3380-
// finger
3380+
// double-tap
33813381
processKey(mapper, BTN_TOOL_LENS, 0);
3382+
processKey(mapper, BTN_TOOL_DOUBLETAP, 1);
3383+
processSync(mapper);
3384+
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
3385+
ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
3386+
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
3387+
3388+
// triple-tap
3389+
processKey(mapper, BTN_TOOL_DOUBLETAP, 0);
3390+
processKey(mapper, BTN_TOOL_TRIPLETAP, 1);
3391+
processSync(mapper);
3392+
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
3393+
ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
3394+
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
3395+
3396+
// quad-tap
3397+
processKey(mapper, BTN_TOOL_TRIPLETAP, 0);
3398+
processKey(mapper, BTN_TOOL_QUADTAP, 1);
3399+
processSync(mapper);
3400+
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
3401+
ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
3402+
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
3403+
3404+
// finger
3405+
processKey(mapper, BTN_TOOL_QUADTAP, 0);
33823406
processKey(mapper, BTN_TOOL_FINGER, 1);
33833407
processSync(mapper);
33843408
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
@@ -4766,8 +4790,32 @@ TEST_F(MultiTouchInputMapperTest, Process_ShouldHandleAllToolTypes) {
47664790
ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
47674791
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_MOUSE, motionArgs.pointerProperties[0].toolType);
47684792

4769-
// finger
4793+
// double-tap
47704794
processKey(mapper, BTN_TOOL_LENS, 0);
4795+
processKey(mapper, BTN_TOOL_DOUBLETAP, 1);
4796+
processSync(mapper);
4797+
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
4798+
ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
4799+
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
4800+
4801+
// triple-tap
4802+
processKey(mapper, BTN_TOOL_DOUBLETAP, 0);
4803+
processKey(mapper, BTN_TOOL_TRIPLETAP, 1);
4804+
processSync(mapper);
4805+
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
4806+
ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
4807+
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
4808+
4809+
// quad-tap
4810+
processKey(mapper, BTN_TOOL_TRIPLETAP, 0);
4811+
processKey(mapper, BTN_TOOL_QUADTAP, 1);
4812+
processSync(mapper);
4813+
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
4814+
ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
4815+
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
4816+
4817+
// finger
4818+
processKey(mapper, BTN_TOOL_QUADTAP, 0);
47714819
processKey(mapper, BTN_TOOL_FINGER, 1);
47724820
processSync(mapper);
47734821
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));

0 commit comments

Comments
 (0)