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

Commit 88151b8f authored by Siarhei Vishniakou's avatar Siarhei Vishniakou
Browse files

Add test for heuristic palm rejection

For short strokes, the palm rejection code has a heuristic - large
touches are canceled.
Since the behaviour is currently present, let's add an integration test
for it.

Separately, we will also remove 'getLinuxToolType' here because
tool_type is not used in the palm rejection code.

However, tool_code is used in that code. So let's add getLinuxToolCode
instead. This piece does not affect the behaviour of the palm rejection
model, but it makes our inputs more correct.

Bug: 241935838
Test: atest inputflinger_tests
Change-Id: Ied9e185bdfc6e892cf3a1069b98101ca8ae9c74b
parent 1cf6d7f4
Loading
Loading
Loading
Loading
+12 −14
Original line number Diff line number Diff line
@@ -99,17 +99,15 @@ static bool isPalmRejectionEnabled() {
    return false;
}

static int getLinuxToolType(int32_t toolType) {
    switch (toolType) {
        case AMOTION_EVENT_TOOL_TYPE_FINGER:
            return MT_TOOL_FINGER;
        case AMOTION_EVENT_TOOL_TYPE_STYLUS:
            return MT_TOOL_PEN;
        case AMOTION_EVENT_TOOL_TYPE_PALM:
            return MT_TOOL_PALM;
static int getLinuxToolCode(int toolType) {
    if (toolType == AMOTION_EVENT_TOOL_TYPE_STYLUS) {
        return BTN_TOOL_PEN;
    }
    ALOGW("Got tool type %" PRId32 ", converting to MT_TOOL_FINGER", toolType);
    return MT_TOOL_FINGER;
    if (toolType == AMOTION_EVENT_TOOL_TYPE_FINGER) {
        return BTN_TOOL_FINGER;
    }
    ALOGW("Got tool type %" PRId32 ", converting to BTN_TOOL_FINGER", toolType);
    return BTN_TOOL_FINGER;
}

static int32_t getActionUpForPointerId(const NotifyMotionArgs& args, int32_t pointerId) {
@@ -562,7 +560,7 @@ std::vector<::ui::InProgressTouchEvdev> getTouches(const NotifyMotionArgs& args,
        touches.emplace_back(::ui::InProgressTouchEvdev());
        touches.back().major = args.pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR);
        touches.back().minor = args.pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR);
        touches.back().tool_type = getLinuxToolType(args.pointerProperties[i].toolType);
        // The field 'tool_type' is not used for palm rejection

        // Whether there is new information for the touch.
        touches.back().altered = true;
@@ -609,10 +607,10 @@ std::vector<::ui::InProgressTouchEvdev> getTouches(const NotifyMotionArgs& args,

        // The fields 'radius_x' and 'radius_x' are not used for palm rejection
        touches.back().pressure = args.pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_PRESSURE);
        touches.back().tool_code = BTN_TOOL_FINGER;
        touches.back().tool_code = getLinuxToolCode(args.pointerProperties[i].toolType);
        // The field 'orientation' is not used for palm rejection
        // The fields 'tilt_x' and 'tilt_y' are not used for palm rejection
        touches.back().reported_tool_type = ::ui::EventPointerType::kTouch;
        // The field 'reported_tool_type' is not used for palm rejection
        touches.back().stylus_button = false;
    }
    return touches;
@@ -691,7 +689,7 @@ std::vector<NotifyMotionArgs> PalmRejector::processMotion(const NotifyMotionArgs
    return argsWithoutUnwantedPointers;
}

const AndroidPalmFilterDeviceInfo& PalmRejector::getPalmFilterDeviceInfo() {
const AndroidPalmFilterDeviceInfo& PalmRejector::getPalmFilterDeviceInfo() const {
    return mDeviceInfo;
}

+1 −1
Original line number Diff line number Diff line
@@ -147,7 +147,7 @@ public:
    std::vector<NotifyMotionArgs> processMotion(const NotifyMotionArgs& args);

    // Get the device info of this device, for comparison purposes
    const AndroidPalmFilterDeviceInfo& getPalmFilterDeviceInfo();
    const AndroidPalmFilterDeviceInfo& getPalmFilterDeviceInfo() const;
    std::string dump() const;

private:
+5 −4
Original line number Diff line number Diff line
@@ -110,7 +110,8 @@ void InputDevice::dump(std::string& dump, const std::string& eventHubDevStr) {
        dump += "<none>\n";
    }
    dump += StringPrintf(INDENT2 "HasMic:     %s\n", toString(mHasMic));
    dump += StringPrintf(INDENT2 "Sources: 0x%08x\n", deviceInfo.getSources());
    dump += StringPrintf(INDENT2 "Sources: %s\n",
                         inputEventSourceToString(deviceInfo.getSources()).c_str());
    dump += StringPrintf(INDENT2 "KeyboardType: %d\n", deviceInfo.getKeyboardType());
    dump += StringPrintf(INDENT2 "ControllerNum: %d\n", deviceInfo.getControllerNumber());

@@ -128,10 +129,10 @@ void InputDevice::dump(std::string& dump, const std::string& eventHubDevStr) {
                snprintf(name, sizeof(name), "%d", range.axis);
            }
            dump += StringPrintf(INDENT3
                                 "%s: source=0x%08x, "
                                 "%s: source=%s, "
                                 "min=%0.3f, max=%0.3f, flat=%0.3f, fuzz=%0.3f, resolution=%0.3f\n",
                                 name, range.source, range.min, range.max, range.flat, range.fuzz,
                                 range.resolution);
                                 name, inputEventSourceToString(range.source).c_str(), range.min,
                                 range.max, range.flat, range.fuzz, range.resolution);
        }
    }

+5 −4
Original line number Diff line number Diff line
@@ -196,9 +196,9 @@ void InputReader::addDeviceLocked(nsecs_t when, int32_t eventHubId) {
              "(ignored non-input device)",
              device->getId(), eventHubId, identifier.name.c_str(), identifier.descriptor.c_str());
    } else {
        ALOGI("Device added: id=%d, eventHubId=%d, name='%s', descriptor='%s',sources=0x%08x",
        ALOGI("Device added: id=%d, eventHubId=%d, name='%s', descriptor='%s',sources=%s",
              device->getId(), eventHubId, identifier.name.c_str(), identifier.descriptor.c_str(),
              device->getSources());
              inputEventSourceToString(device->getSources()).c_str());
    }

    mDevices.emplace(eventHubId, device);
@@ -250,9 +250,10 @@ void InputReader::removeDeviceLocked(nsecs_t when, int32_t eventHubId) {
              device->getId(), eventHubId, device->getName().c_str(),
              device->getDescriptor().c_str());
    } else {
        ALOGI("Device removed: id=%d, eventHubId=%d, name='%s', descriptor='%s', sources=0x%08x",
        ALOGI("Device removed: id=%d, eventHubId=%d, name='%s', descriptor='%s', sources=%s",
              device->getId(), eventHubId, device->getName().c_str(),
              device->getDescriptor().c_str(), device->getSources());
              device->getDescriptor().c_str(),
              inputEventSourceToString(device->getSources()).c_str());
    }

    device->removeEventHubDevice(eventHubId);
+1 −0
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ cc_test {
    },
    static_libs: [
        "libc++fs",
        "libgmock",
    ],
    require_root: true,
    test_suites: ["device-tests"],
Loading