Loading libs/input/input_flags.aconfig +0 −7 Original line number Diff line number Diff line Loading @@ -60,13 +60,6 @@ flag { bug: "299977100" } flag { name: "report_palms_to_gestures_library" namespace: "input" description: "Report touches marked as palm by firmware to gestures library" bug: "302505955" } flag { name: "enable_touchpad_typing_palm_rejection" namespace: "input" Loading services/inputflinger/reader/mapper/gestures/HardwareStateConverter.cpp +4 −17 Original line number Diff line number Diff line Loading @@ -25,12 +25,8 @@ #include <com_android_input_flags.h> #include <linux/input-event-codes.h> namespace input_flags = com::android::input::flags; namespace android { const bool REPORT_PALMS_TO_GESTURES_LIBRARY = input_flags::report_palms_to_gestures_library(); HardwareStateConverter::HardwareStateConverter(const InputDeviceContext& deviceContext, MultiTouchMotionAccumulator& motionAccumulator) : mDeviceContext(deviceContext), Loading Loading @@ -81,18 +77,11 @@ SelfContainedHardwareState HardwareStateConverter::produceHardwareState(nsecs_t } schs.fingers.clear(); size_t numPalms = 0; for (size_t i = 0; i < mMotionAccumulator.getSlotCount(); i++) { MultiTouchMotionAccumulator::Slot slot = mMotionAccumulator.getSlot(i); if (!slot.isInUse()) { continue; } // Some touchpads continue to report contacts even after they've identified them as palms. // We want to exclude these contacts from the HardwareStates. if (!REPORT_PALMS_TO_GESTURES_LIBRARY && slot.getToolType() == ToolType::PALM) { numPalms++; continue; } FingerState& fingerState = schs.fingers.emplace_back(); fingerState = {}; Loading @@ -105,15 +94,13 @@ SelfContainedHardwareState HardwareStateConverter::produceHardwareState(nsecs_t fingerState.position_x = slot.getX(); fingerState.position_y = slot.getY(); fingerState.tracking_id = slot.getTrackingId(); if (REPORT_PALMS_TO_GESTURES_LIBRARY) { fingerState.tool_type = slot.getToolType() == ToolType::PALM ? FingerState::ToolType::kPalm : FingerState::ToolType::kFinger; } } schs.state.fingers = schs.fingers.data(); schs.state.finger_cnt = schs.fingers.size(); schs.state.touch_cnt = mTouchButtonAccumulator.getTouchCount() - numPalms; schs.state.touch_cnt = mTouchButtonAccumulator.getTouchCount(); return schs; } Loading services/inputflinger/tests/HardwareStateConverter_test.cpp +2 −73 Original line number Diff line number Diff line Loading @@ -33,13 +33,6 @@ namespace android { namespace { const auto REPORT_PALMS = ACONFIG_FLAG(com::android::input::flags, report_palms_to_gestures_library); } // namespace class HardwareStateConverterTest : public testing::Test { public: HardwareStateConverterTest() Loading Loading @@ -201,24 +194,7 @@ TEST_F(HardwareStateConverterTest, TwoFingers) { EXPECT_EQ(0u, finger2.flags); } TEST_F_WITH_FLAGS(HardwareStateConverterTest, OnePalmDisableReportPalms, REQUIRES_FLAGS_DISABLED(REPORT_PALMS)) { processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_SLOT, 0); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_TOOL_TYPE, MT_TOOL_PALM); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_TRACKING_ID, 123); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_POSITION_X, 50); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_POSITION_Y, 100); processAxis(ARBITRARY_TIME, EV_KEY, BTN_TOUCH, 1); processAxis(ARBITRARY_TIME, EV_KEY, BTN_TOOL_FINGER, 1); std::optional<SelfContainedHardwareState> schs = processSync(ARBITRARY_TIME); ASSERT_TRUE(schs.has_value()); EXPECT_EQ(0, schs->state.touch_cnt); EXPECT_EQ(0, schs->state.finger_cnt); } TEST_F_WITH_FLAGS(HardwareStateConverterTest, OnePalmEnableReportPalms, REQUIRES_FLAGS_ENABLED(REPORT_PALMS)) { TEST_F(HardwareStateConverterTest, OnePalm) { processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_SLOT, 0); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_TOOL_TYPE, MT_TOOL_PALM); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_TRACKING_ID, 123); Loading @@ -234,54 +210,7 @@ TEST_F_WITH_FLAGS(HardwareStateConverterTest, OnePalmEnableReportPalms, EXPECT_EQ(FingerState::ToolType::kPalm, schs->state.fingers[0].tool_type); } TEST_F_WITH_FLAGS(HardwareStateConverterTest, OneFingerTurningIntoAPalmDisableReportPalms, REQUIRES_FLAGS_DISABLED(REPORT_PALMS)) { processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_SLOT, 0); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_TOOL_TYPE, MT_TOOL_FINGER); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_TRACKING_ID, 123); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_POSITION_X, 50); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_POSITION_Y, 100); processAxis(ARBITRARY_TIME, EV_KEY, BTN_TOUCH, 1); processAxis(ARBITRARY_TIME, EV_KEY, BTN_TOOL_FINGER, 1); std::optional<SelfContainedHardwareState> schs = processSync(ARBITRARY_TIME); ASSERT_TRUE(schs.has_value()); EXPECT_EQ(1, schs->state.touch_cnt); EXPECT_EQ(1, schs->state.finger_cnt); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_TOOL_TYPE, MT_TOOL_PALM); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_POSITION_X, 51); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_POSITION_Y, 99); schs = processSync(ARBITRARY_TIME); ASSERT_TRUE(schs.has_value()); EXPECT_EQ(0, schs->state.touch_cnt); ASSERT_EQ(0, schs->state.finger_cnt); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_POSITION_X, 53); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_POSITION_Y, 97); schs = processSync(ARBITRARY_TIME); ASSERT_TRUE(schs.has_value()); EXPECT_EQ(0, schs->state.touch_cnt); EXPECT_EQ(0, schs->state.finger_cnt); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_TOOL_TYPE, MT_TOOL_FINGER); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_POSITION_X, 55); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_POSITION_Y, 95); schs = processSync(ARBITRARY_TIME); ASSERT_TRUE(schs.has_value()); EXPECT_EQ(1, schs->state.touch_cnt); ASSERT_EQ(1, schs->state.finger_cnt); const FingerState& newFinger = schs->state.fingers[0]; EXPECT_EQ(123, newFinger.tracking_id); EXPECT_NEAR(55, newFinger.position_x, EPSILON); EXPECT_NEAR(95, newFinger.position_y, EPSILON); } TEST_F_WITH_FLAGS(HardwareStateConverterTest, OneFingerTurningIntoAPalmEnableReportPalms, REQUIRES_FLAGS_ENABLED(REPORT_PALMS)) { TEST_F(HardwareStateConverterTest, OneFingerTurningIntoAPalmEnableReportPalms) { processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_SLOT, 0); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_TOOL_TYPE, MT_TOOL_FINGER); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_TRACKING_ID, 123); Loading Loading
libs/input/input_flags.aconfig +0 −7 Original line number Diff line number Diff line Loading @@ -60,13 +60,6 @@ flag { bug: "299977100" } flag { name: "report_palms_to_gestures_library" namespace: "input" description: "Report touches marked as palm by firmware to gestures library" bug: "302505955" } flag { name: "enable_touchpad_typing_palm_rejection" namespace: "input" Loading
services/inputflinger/reader/mapper/gestures/HardwareStateConverter.cpp +4 −17 Original line number Diff line number Diff line Loading @@ -25,12 +25,8 @@ #include <com_android_input_flags.h> #include <linux/input-event-codes.h> namespace input_flags = com::android::input::flags; namespace android { const bool REPORT_PALMS_TO_GESTURES_LIBRARY = input_flags::report_palms_to_gestures_library(); HardwareStateConverter::HardwareStateConverter(const InputDeviceContext& deviceContext, MultiTouchMotionAccumulator& motionAccumulator) : mDeviceContext(deviceContext), Loading Loading @@ -81,18 +77,11 @@ SelfContainedHardwareState HardwareStateConverter::produceHardwareState(nsecs_t } schs.fingers.clear(); size_t numPalms = 0; for (size_t i = 0; i < mMotionAccumulator.getSlotCount(); i++) { MultiTouchMotionAccumulator::Slot slot = mMotionAccumulator.getSlot(i); if (!slot.isInUse()) { continue; } // Some touchpads continue to report contacts even after they've identified them as palms. // We want to exclude these contacts from the HardwareStates. if (!REPORT_PALMS_TO_GESTURES_LIBRARY && slot.getToolType() == ToolType::PALM) { numPalms++; continue; } FingerState& fingerState = schs.fingers.emplace_back(); fingerState = {}; Loading @@ -105,15 +94,13 @@ SelfContainedHardwareState HardwareStateConverter::produceHardwareState(nsecs_t fingerState.position_x = slot.getX(); fingerState.position_y = slot.getY(); fingerState.tracking_id = slot.getTrackingId(); if (REPORT_PALMS_TO_GESTURES_LIBRARY) { fingerState.tool_type = slot.getToolType() == ToolType::PALM ? FingerState::ToolType::kPalm : FingerState::ToolType::kFinger; } } schs.state.fingers = schs.fingers.data(); schs.state.finger_cnt = schs.fingers.size(); schs.state.touch_cnt = mTouchButtonAccumulator.getTouchCount() - numPalms; schs.state.touch_cnt = mTouchButtonAccumulator.getTouchCount(); return schs; } Loading
services/inputflinger/tests/HardwareStateConverter_test.cpp +2 −73 Original line number Diff line number Diff line Loading @@ -33,13 +33,6 @@ namespace android { namespace { const auto REPORT_PALMS = ACONFIG_FLAG(com::android::input::flags, report_palms_to_gestures_library); } // namespace class HardwareStateConverterTest : public testing::Test { public: HardwareStateConverterTest() Loading Loading @@ -201,24 +194,7 @@ TEST_F(HardwareStateConverterTest, TwoFingers) { EXPECT_EQ(0u, finger2.flags); } TEST_F_WITH_FLAGS(HardwareStateConverterTest, OnePalmDisableReportPalms, REQUIRES_FLAGS_DISABLED(REPORT_PALMS)) { processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_SLOT, 0); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_TOOL_TYPE, MT_TOOL_PALM); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_TRACKING_ID, 123); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_POSITION_X, 50); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_POSITION_Y, 100); processAxis(ARBITRARY_TIME, EV_KEY, BTN_TOUCH, 1); processAxis(ARBITRARY_TIME, EV_KEY, BTN_TOOL_FINGER, 1); std::optional<SelfContainedHardwareState> schs = processSync(ARBITRARY_TIME); ASSERT_TRUE(schs.has_value()); EXPECT_EQ(0, schs->state.touch_cnt); EXPECT_EQ(0, schs->state.finger_cnt); } TEST_F_WITH_FLAGS(HardwareStateConverterTest, OnePalmEnableReportPalms, REQUIRES_FLAGS_ENABLED(REPORT_PALMS)) { TEST_F(HardwareStateConverterTest, OnePalm) { processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_SLOT, 0); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_TOOL_TYPE, MT_TOOL_PALM); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_TRACKING_ID, 123); Loading @@ -234,54 +210,7 @@ TEST_F_WITH_FLAGS(HardwareStateConverterTest, OnePalmEnableReportPalms, EXPECT_EQ(FingerState::ToolType::kPalm, schs->state.fingers[0].tool_type); } TEST_F_WITH_FLAGS(HardwareStateConverterTest, OneFingerTurningIntoAPalmDisableReportPalms, REQUIRES_FLAGS_DISABLED(REPORT_PALMS)) { processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_SLOT, 0); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_TOOL_TYPE, MT_TOOL_FINGER); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_TRACKING_ID, 123); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_POSITION_X, 50); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_POSITION_Y, 100); processAxis(ARBITRARY_TIME, EV_KEY, BTN_TOUCH, 1); processAxis(ARBITRARY_TIME, EV_KEY, BTN_TOOL_FINGER, 1); std::optional<SelfContainedHardwareState> schs = processSync(ARBITRARY_TIME); ASSERT_TRUE(schs.has_value()); EXPECT_EQ(1, schs->state.touch_cnt); EXPECT_EQ(1, schs->state.finger_cnt); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_TOOL_TYPE, MT_TOOL_PALM); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_POSITION_X, 51); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_POSITION_Y, 99); schs = processSync(ARBITRARY_TIME); ASSERT_TRUE(schs.has_value()); EXPECT_EQ(0, schs->state.touch_cnt); ASSERT_EQ(0, schs->state.finger_cnt); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_POSITION_X, 53); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_POSITION_Y, 97); schs = processSync(ARBITRARY_TIME); ASSERT_TRUE(schs.has_value()); EXPECT_EQ(0, schs->state.touch_cnt); EXPECT_EQ(0, schs->state.finger_cnt); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_TOOL_TYPE, MT_TOOL_FINGER); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_POSITION_X, 55); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_POSITION_Y, 95); schs = processSync(ARBITRARY_TIME); ASSERT_TRUE(schs.has_value()); EXPECT_EQ(1, schs->state.touch_cnt); ASSERT_EQ(1, schs->state.finger_cnt); const FingerState& newFinger = schs->state.fingers[0]; EXPECT_EQ(123, newFinger.tracking_id); EXPECT_NEAR(55, newFinger.position_x, EPSILON); EXPECT_NEAR(95, newFinger.position_y, EPSILON); } TEST_F_WITH_FLAGS(HardwareStateConverterTest, OneFingerTurningIntoAPalmEnableReportPalms, REQUIRES_FLAGS_ENABLED(REPORT_PALMS)) { TEST_F(HardwareStateConverterTest, OneFingerTurningIntoAPalmEnableReportPalms) { processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_SLOT, 0); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_TOOL_TYPE, MT_TOOL_FINGER); processAxis(ARBITRARY_TIME, EV_ABS, ABS_MT_TRACKING_ID, 123); Loading