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

Commit 56e0b8c4 authored by ryanlwlin's avatar ryanlwlin
Browse files

Fix Accidently trigger A11y button long pressed

We used the original down location while injecting all down events.
It accidently increases the velocity in the beginning and cause
Launcher detect the wrong gesture.

To fix it, we adjust the down time to real downTime.
Test: manually test
Bug: 165896230

Change-Id: I318dbc2af04298a21b9efe99278285911f56b1a0
parent 7d3bff08
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -287,7 +287,9 @@ class EventDispatcher {

    /**
     * Sends down events to the view hierarchy for all pointers which are not already being
     * delivered with original down location. i.e. pointers that are not yet injected.
     * delivered with original down location. i.e. pointers that are not yet injected. The down time
     * is also replaced by the original one.
     *
     *
     * @param prototype The prototype from which to create the injected events.
     * @param policyFlags The policy flags associated with the event.
@@ -296,7 +298,7 @@ class EventDispatcher {
        // Inject the injected pointers.
        int pointerIdBits = 0;
        final int pointerCount = prototype.getPointerCount();
        final MotionEvent event = computeEventWithOriginalDown(prototype);
        final MotionEvent event = computeInjectionDownEvent(prototype);
        for (int i = 0; i < pointerCount; i++) {
            final int pointerId = prototype.getPointerId(i);
            // Do not send event for already delivered pointers.
@@ -313,7 +315,7 @@ class EventDispatcher {
        }
    }

    private MotionEvent computeEventWithOriginalDown(MotionEvent prototype) {
    private MotionEvent computeInjectionDownEvent(MotionEvent prototype) {
        final int pointerCount = prototype.getPointerCount();
        if (pointerCount != mState.getReceivedPointerTracker().getReceivedPointerDownCount()) {
            Slog.w(LOG_TAG, "The pointer count doesn't match the received count.");
@@ -336,7 +338,10 @@ class EventDispatcher {
        MotionEvent event =
                MotionEvent.obtain(
                        prototype.getDownTime(),
                        prototype.getEventTime(),
                        // The event time is used for downTime while sending ACTION_DOWN. We adjust
                        // it to avoid the motion velocity is too fast in the beginning after
                        // Delegating.
                        prototype.getDownTime(),
                        prototype.getAction(),
                        pointerCount,
                        properties,