Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 435f0c58 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "HardwareStateConverter: clean up palm reporting flag" into main

parents 26627094 577119bd
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -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"
+4 −17
Original line number Diff line number Diff line
@@ -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),
@@ -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 = {};
@@ -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;
}

+2 −73
Original line number Diff line number Diff line
@@ -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()
@@ -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);
@@ -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);