From bf250af771335861f2b67c8ea1daacc6b1497f06 Mon Sep 17 00:00:00 2001 From: Daniel Hsieh Date: Thu, 17 Mar 2022 09:09:42 +0000 Subject: [PATCH] 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 --- .../accessibility/magnification/GesturesObserver.java | 2 +- .../magnification/MagnificationGesturesObserver.java | 7 +++---- .../WindowMagnificationGestureHandler.java | 10 ---------- 3 files changed, 4 insertions(+), 15 deletions(-) diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/GesturesObserver.java b/services/accessibility/java/com/android/server/accessibility/magnification/GesturesObserver.java index 3d8f5173d25a5..a5c8837dd8f51 100644 --- a/services/accessibility/java/com/android/server/accessibility/magnification/GesturesObserver.java +++ b/services/accessibility/java/com/android/server/accessibility/magnification/GesturesObserver.java @@ -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(); } diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationGesturesObserver.java b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationGesturesObserver.java index 085c343ff6317..23cded771cae0 100644 --- a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationGesturesObserver.java +++ b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationGesturesObserver.java @@ -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(); diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationGestureHandler.java b/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationGestureHandler.java index 820be28387aed..9ff51eecba1d4 100644 --- a/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationGestureHandler.java +++ b/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationGestureHandler.java @@ -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{"