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

Commit dca44af7 authored by Chris Ye's avatar Chris Ye Committed by Linzhao Ye
Browse files

Fix MultiTouchInputMapperTest#Process_TouchpadCapture test failure.

Do not consume raw event because of checking inside surface pass,
if device mode is unscaled. This will prevent the first motion event
to be consumed unexpectedly for touchpad pointer capture mode.

Bug: 162974380
Test: atest MultiTouchInputMapperTest#Process_TouchpadCapture
Change-Id: I3c5b0a4514d67990540967d7fa3d6b48011d3884
Merged_In: I3c5b0a4514d67990540967d7fa3d6b48011d3884
parent 611712ae
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -316,7 +316,7 @@ void CursorInputMapper::sync(nsecs_t when) {

    mPointerVelocityControl.move(when, &deltaX, &deltaY);

    int32_t displayId;
    int32_t displayId = ADISPLAY_ID_NONE;
    float xCursorPosition = AMOTION_EVENT_INVALID_CURSOR_POSITION;
    float yCursorPosition = AMOTION_EVENT_INVALID_CURSOR_POSITION;
    if (mSource == AINPUT_SOURCE_MOUSE) {
@@ -340,12 +340,12 @@ void CursorInputMapper::sync(nsecs_t when) {
        pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_RELATIVE_X, deltaX);
        pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_RELATIVE_Y, deltaY);
        displayId = mPointerController->getDisplayId();
    } else {
    } else if (mSource == AINPUT_SOURCE_MOUSE_RELATIVE) {
        // Pointer capture mode
        pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_X, deltaX);
        pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_Y, deltaY);
        pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_RELATIVE_X, deltaX);
        pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_RELATIVE_Y, deltaY);
        displayId = ADISPLAY_ID_NONE;
    }

    pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, down ? 1.0f : 0.0f);
+3 −2
Original line number Diff line number Diff line
@@ -1780,7 +1780,8 @@ bool TouchInputMapper::consumeRawTouches(nsecs_t when, uint32_t policyFlags) {
        // Pointer just went down.  Check for virtual key press or off-screen touches.
        uint32_t id = mCurrentRawState.rawPointerData.touchingIdBits.firstMarkedBit();
        const RawPointerData::Pointer& pointer = mCurrentRawState.rawPointerData.pointerForId(id);
        if (!isPointInsideSurface(pointer.x, pointer.y)) {
        // Exclude unscaled device for inside surface checking.
        if (!isPointInsideSurface(pointer.x, pointer.y) && mDeviceMode != DeviceMode::UNSCALED) {
            // If exactly one pointer went down, check for virtual key hit.
            // Otherwise we will drop the entire stroke.
            if (mCurrentRawState.rawPointerData.touchingIdBits.count() == 1) {
@@ -2274,7 +2275,7 @@ void TouchInputMapper::cookPointerData() {
            out.setAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR, toolMinor);
        }

        // Write output relative fieldis if applicable.
        // Write output relative fields if applicable.
        uint32_t id = in.id;
        if (mSource == AINPUT_SOURCE_TOUCHPAD &&
            mLastCookedState.cookedPointerData.hasPointerCoordsForId(id)) {
+3 −1
Original line number Diff line number Diff line
@@ -7558,6 +7558,7 @@ TEST_F(MultiTouchInputMapperTest, Process_TouchpadCapture) {
    //                              identical to what the hardware sends (accounting for any
    //                              calibration).
    // FINGER 0 DOWN
    processSlot(mapper, 0);
    processId(mapper, 1);
    processPosition(mapper, 100 + RAW_X_MIN, 100 + RAW_Y_MIN);
    processKey(mapper, BTN_TOUCH, 1);
@@ -7581,7 +7582,8 @@ TEST_F(MultiTouchInputMapperTest, Process_TouchpadCapture) {

    // expect coord[0] to contain previous location, coord[1] to contain new touch 1 location
    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
    ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_DOWN | 0x0100, args.action);
    ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_DOWN | (1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
            args.action);
    ASSERT_EQ(2U, args.pointerCount);
    ASSERT_EQ(0, args.pointerProperties[0].id);
    ASSERT_EQ(1, args.pointerProperties[1].id);