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

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

Merge "Fix incorrect repeatCount sent to app when injecting repeat event" into main

parents a115f28e fe3c8f18
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1813,7 +1813,7 @@ bool InputDispatcher::dispatchKeyLocked(nsecs_t currentTime, std::shared_ptr<con
                                        DropReason* dropReason, nsecs_t& nextWakeupTime) {
    // Preprocessing.
    if (!entry->dispatchInProgress) {
        if (entry->repeatCount == 0 && entry->action == AKEY_EVENT_ACTION_DOWN &&
        if (!entry->syntheticRepeat && entry->action == AKEY_EVENT_ACTION_DOWN &&
            (entry->policyFlags & POLICY_FLAG_TRUSTED) &&
            (!(entry->policyFlags & POLICY_FLAG_DISABLE_KEY_REPEAT))) {
            if (mKeyRepeatState.lastKeyEntry &&
+20 −2
Original line number Diff line number Diff line
@@ -7477,6 +7477,12 @@ protected:
        mWindow->consumeKeyUp(ADISPLAY_ID_DEFAULT,
                              /*expectedFlags=*/0);
    }
    void injectKeyRepeat(int32_t repeatCount) {
        ASSERT_EQ(InputEventInjectionResult::SUCCEEDED,
                  injectKey(*mDispatcher, AKEY_EVENT_ACTION_DOWN, repeatCount, ADISPLAY_ID_DEFAULT))
                << "Inject key event should return InputEventInjectionResult::SUCCEEDED";
    }
};
TEST_F(InputDispatcherKeyRepeatTest, FocusedWindow_ReceivesKeyRepeat) {
@@ -7565,6 +7571,17 @@ TEST_F(InputDispatcherKeyRepeatTest, FocusedWindow_RepeatKeyEventsUseUniqueEvent
    }
}
TEST_F(InputDispatcherKeyRepeatTest, FocusedWindow_CorrectRepeatCountWhenInjectKeyRepeat) {
    injectKeyRepeat(0);
    mWindow->consumeKeyDown(ADISPLAY_ID_DEFAULT);
    for (int32_t repeatCount = 1; repeatCount <= 2; ++repeatCount) {
        expectKeyRepeatOnce(repeatCount);
    }
    injectKeyRepeat(1);
    // Expect repeatCount to be 3 instead of 1
    expectKeyRepeatOnce(3);
}
/* Test InputDispatcher for MultiDisplay */
class InputDispatcherFocusOnTwoDisplaysTest : public InputDispatcherTest {
public:
@@ -8709,9 +8726,10 @@ TEST_F(InputDispatcherSingleWindowAnr, StaleKeyEventDoesNotAnr) {
    // Define a valid key down event that is stale (too old).
    event.initialize(InputEvent::nextId(), DEVICE_ID, AINPUT_SOURCE_KEYBOARD, ADISPLAY_ID_NONE,
                     INVALID_HMAC, AKEY_EVENT_ACTION_DOWN, /*flags=*/0, AKEYCODE_A, KEY_A,
                     AMETA_NONE, /*repeatCount=*/1, eventTime, eventTime);
                     AMETA_NONE, /*repeatCount=*/0, eventTime, eventTime);
    const int32_t policyFlags = POLICY_FLAG_FILTERED | POLICY_FLAG_PASS_TO_USER;
    const int32_t policyFlags =
            POLICY_FLAG_FILTERED | POLICY_FLAG_PASS_TO_USER | POLICY_FLAG_DISABLE_KEY_REPEAT;
    InputEventInjectionResult result =
            mDispatcher->injectInputEvent(&event, /*targetUid=*/{},