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

Commit 1b5469bc authored by Prabir Pradhan's avatar Prabir Pradhan Committed by Automerger Merge Worker
Browse files

Prevent keyboards from being recognized as a stylus am: a2dce3e1

parents dd003702 a2dce3e1
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -2409,7 +2409,8 @@ void EventHub::openDeviceLocked(const std::string& devicePath) {
        }

        // See if this device has any stylus buttons that we would want to fuse with touch data.
        if (!device->classes.any(InputDeviceClass::TOUCH | InputDeviceClass::TOUCH_MT)) {
        if (!device->classes.any(InputDeviceClass::TOUCH | InputDeviceClass::TOUCH_MT) &&
            !device->classes.any(InputDeviceClass::ALPHAKEY)) {
            for (int32_t keycode : STYLUS_BUTTON_KEYCODES) {
                if (device->hasKeycodeLocked(keycode)) {
                    device->classes |= InputDeviceClass::EXTERNAL_STYLUS;
+18 −0
Original line number Diff line number Diff line
@@ -1476,6 +1476,24 @@ TEST_F(InputReaderIntegrationTest, ExternalStylusesButtons) {
            AllOf(UP, WithKeyCode(AKEYCODE_STYLUS_BUTTON_TERTIARY))));
}
TEST_F(InputReaderIntegrationTest, KeyboardWithStylusButtons) {
    std::unique_ptr<UinputKeyboard> keyboard =
            createUinputDevice<UinputKeyboard>("KeyboardWithStylusButtons", /*productId=*/99,
                                               std::initializer_list<int>{KEY_Q, KEY_W, KEY_E,
                                                                          KEY_R, KEY_T, KEY_Y,
                                                                          BTN_STYLUS, BTN_STYLUS2,
                                                                          BTN_STYLUS3});
    ASSERT_NO_FATAL_FAILURE(mFakePolicy->assertInputDevicesChanged());
    const auto device = findDeviceByName(keyboard->getName());
    ASSERT_TRUE(device.has_value());
    // An alphabetical keyboard that reports stylus buttons should not be recognized as a stylus.
    ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, device->getSources())
            << "Unexpected source " << inputEventSourceToString(device->getSources()).c_str();
    ASSERT_EQ(AINPUT_KEYBOARD_TYPE_ALPHABETIC, device->getKeyboardType());
}
/**
 * The Steam controller sends BTN_GEAR_DOWN and BTN_GEAR_UP for the two "paddle" buttons
 * on the back. In this test, we make sure that BTN_GEAR_DOWN / BTN_WHEEL and BTN_GEAR_UP