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

Commit bf250af7 authored by Daniel Hsieh's avatar Daniel Hsieh
Browse files

Makes GesturesObserver#clear as a private method.

In the previous version, GesturesObserver#clear would be called by
MagnificationGesturesObserver, making the matchers' state be clear by
outside class. It would make the matchers' state not consistency in
GesturesObserver#onMotionEvent. Especially, when the matcher is
completed and becomes STATE_GESTURE_COMPLETED, it would be clear as
STATE_CLEAR by MagnificationGesturesObserver#clear which would trigger
GesturesObserver#clear. It would make the GesturesObserver keep going to
check other matchers since matcher.getState() !=
GestureMatcher.STATE_GESTURE_COMPLETED and wouldn't early return.

Therefore, we make GesturesObserver#clear as a private method and make
it to manager its matchers' state.

Bug: 206061247
Test: atest GesturesObserverTest
      atest MagnificationGesturesObserverTest
      atest MagnificationGestureHandlerTest
      atest WindowMagnificationGestureHandlerTest
Change-Id: I19294e231f969d7dd54b50dc9a2deb36d06b532a
parent c515a0ae
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -114,7 +114,7 @@ public final class GesturesObserver implements GestureMatcher.StateChangeListene
     * Clears all states to default.
     */
    @MainThread
    public void clear() {
    private void clear() {
        for (GestureMatcher matcher : mGestureMatchers) {
            matcher.clear();
        }
+3 −4
Original line number Diff line number Diff line
@@ -133,7 +133,7 @@ class MagnificationGesturesObserver implements GesturesObserver.Listener {
        mDelayedEventQueue = null;
        mCallback.onGestureCompleted(gestureId, mLastDownEventTime, delayEventQueue,
                event);
        recycleLastEvent();
        clear();
    }

    @Override
@@ -149,19 +149,18 @@ class MagnificationGesturesObserver implements GesturesObserver.Listener {
        mDelayedEventQueue = null;
        mCallback.onGestureCancelled(mLastDownEventTime, delayEventQueue,
                mLastEvent);
        recycleLastEvent();
        clear();
    }

    /**
     * Resets all state to default.
     */
    void clear() {
    private void clear() {
        if (DBG) {
            Slog.d(LOG_TAG, "clear:" + mDelayedEventQueue);
        }
        recycleLastEvent();
        mLastDownEventTime = 0;
        mGesturesObserver.clear();
        if (mDelayedEventQueue != null) {
            for (MotionEventInfo eventInfo2: mDelayedEventQueue) {
                eventInfo2.recycle();
+0 −10
Original line number Diff line number Diff line
@@ -439,21 +439,11 @@ public class WindowMagnificationGestureHandler extends MagnificationGestureHandl
                    new TwoFingersDownOrSwipe(context));
        }

        @Override
        public void onExit() {
            clear();
        }

        @Override
        public void onMotionEvent(MotionEvent event, MotionEvent rawEvent, int policyFlags) {
            mGesturesObserver.onMotionEvent(event, rawEvent, policyFlags);
        }

        @Override
        public void clear() {
            mGesturesObserver.clear();
        }

        @Override
        public String toString() {
            return "DetectingState{"