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

Commit 16a24cc6 authored by Harry Cutts's avatar Harry Cutts
Browse files

Use both mouse and touchpad sources for touchpads

Previously, touchpads only used `SOURCE_MOUSE`, unless they were
captured, in which case they only used `SOURCE_TOUCHPAD`. This made it
hard to distinguish connected touchpads from mice, e.g. when deciding
whether to display touchpad-specific settings. With this change,
uncaptured touchpads will have `SOURCE_MOUSE | SOURCE_TOUCHPAD`.

Bug: 245929943
Test: Check output of `dumpsys input`
Test: Check sources of incoming touchpad `MotionEvent`s in a test app
Test: atest inputflinger_tests
Change-Id: I74a75db63b7be211ad247b0c9c6c6b28853a4df8
parent 6278ca24
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -897,6 +897,8 @@ void TouchInputMapper::configureInputDevice(nsecs_t when, bool* outResetNeeded)
        mDeviceMode = DeviceMode::POINTER;
        if (hasStylus()) {
            mSource |= AINPUT_SOURCE_STYLUS;
        } else {
            mSource |= AINPUT_SOURCE_TOUCHPAD;
        }
    } else if (isTouchScreen()) {
        mSource = AINPUT_SOURCE_TOUCHSCREEN;
+8 −8
Original line number Diff line number Diff line
@@ -5521,7 +5521,7 @@ TEST_F(SingleTouchInputMapperTest, GetSources_WhenDeviceTypeIsNotSpecifiedAndNot
    prepareAxes(POSITION);
    SingleTouchInputMapper& mapper = addMapperAndConfigure<SingleTouchInputMapper>();

    ASSERT_EQ(AINPUT_SOURCE_MOUSE, mapper.getSources());
    ASSERT_EQ(AINPUT_SOURCE_MOUSE | AINPUT_SOURCE_TOUCHPAD, mapper.getSources());
}

TEST_F(SingleTouchInputMapperTest, GetSources_WhenDeviceTypeIsTouchScreen_ReturnsTouchScreen) {
@@ -8791,8 +8791,8 @@ TEST_F(MultiTouchInputMapperTest, Process_Pointer_ShouldHandleDisplayId) {
    prepareAxes(POSITION);
    MultiTouchInputMapper& mapper = addMapperAndConfigure<MultiTouchInputMapper>();

    // Check source is mouse that would obtain the PointerController.
    ASSERT_EQ(AINPUT_SOURCE_MOUSE, mapper.getSources());
    // Check source is a touchpad that would obtain the PointerController.
    ASSERT_EQ(AINPUT_SOURCE_MOUSE | AINPUT_SOURCE_TOUCHPAD, mapper.getSources());

    NotifyMotionArgs motionArgs;
    processPosition(mapper, 100, 100);
@@ -9795,11 +9795,11 @@ TEST_F(MultiTouchInputMapperTest, Process_TouchpadCapture) {
    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
    ASSERT_EQ(AMOTION_EVENT_ACTION_UP, args.action);

    // non captured touchpad should be a mouse source
    // A non captured touchpad should have a mouse and touchpad source.
    mFakePolicy->setPointerCapture(false);
    configureDevice(InputReaderConfiguration::CHANGE_POINTER_CAPTURE);
    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyDeviceResetWasCalled(&resetArgs));
    ASSERT_EQ(AINPUT_SOURCE_MOUSE, mapper.getSources());
    ASSERT_EQ(AINPUT_SOURCE_MOUSE | AINPUT_SOURCE_TOUCHPAD, mapper.getSources());
}

TEST_F(MultiTouchInputMapperTest, Process_UnCapturedTouchpadPointer) {
@@ -9858,10 +9858,10 @@ TEST_F(MultiTouchInputMapperTest, WhenCapturedAndNotCaptured_GetSources) {
    mFakePolicy->setPointerCapture(false);
    MultiTouchInputMapper& mapper = addMapperAndConfigure<MultiTouchInputMapper>();

    // uncaptured touchpad should be a pointer device
    ASSERT_EQ(AINPUT_SOURCE_MOUSE, mapper.getSources());
    // An uncaptured touchpad should be a pointer device, with additional touchpad source.
    ASSERT_EQ(AINPUT_SOURCE_MOUSE | AINPUT_SOURCE_TOUCHPAD, mapper.getSources());

    // captured touchpad should be a touchpad device
    // A captured touchpad should just have a touchpad source.
    mFakePolicy->setPointerCapture(true);
    configureDevice(InputReaderConfiguration::CHANGE_POINTER_CAPTURE);
    ASSERT_EQ(AINPUT_SOURCE_TOUCHPAD, mapper.getSources());