summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler.java59
-rw-r--r--services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandlerTest.java70
2 files changed, 118 insertions, 11 deletions
diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler.java b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler.java
index c0967db47315..ebb127d888d3 100644
--- a/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler.java
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler.java
@@ -24,7 +24,6 @@ import static android.view.MotionEvent.ACTION_POINTER_DOWN;
import static android.view.MotionEvent.ACTION_POINTER_UP;
import static android.view.MotionEvent.ACTION_UP;
-import static com.android.internal.accessibility.util.AccessibilityStatsLogUtils.logMagnificationTripleTap;
import static com.android.server.accessibility.gestures.GestureUtils.distance;
import static com.android.server.accessibility.gestures.GestureUtils.distanceClosestPointerToPoint;
@@ -65,6 +64,7 @@ import android.view.ScaleGestureDetector.OnScaleGestureListener;
import android.view.ViewConfiguration;
import com.android.internal.R;
+import com.android.internal.accessibility.util.AccessibilityStatsLogUtils;
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.accessibility.AccessibilityManagerService;
import com.android.server.accessibility.AccessibilityTraceManager;
@@ -143,6 +143,7 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
private final ScreenStateReceiver mScreenStateReceiver;
private final WindowMagnificationPromptController mPromptController;
+ @NonNull private final MagnificationLogger mMagnificationLogger;
@VisibleForTesting State mCurrentState;
@VisibleForTesting State mPreviousState;
@@ -164,6 +165,10 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
public @interface OverscrollState {}
@VisibleForTesting boolean mIsSinglePanningEnabled;
+
+ /**
+ * FullScreenMagnificationGestureHandler Constructor.
+ */
public FullScreenMagnificationGestureHandler(@UiContext Context context,
FullScreenMagnificationController fullScreenMagnificationController,
AccessibilityTraceManager trace,
@@ -173,6 +178,23 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
@NonNull WindowMagnificationPromptController promptController,
int displayId,
FullScreenMagnificationVibrationHelper fullScreenMagnificationVibrationHelper) {
+ this(context, fullScreenMagnificationController, trace, callback, detectTripleTap,
+ detectShortcutTrigger, promptController, displayId,
+ fullScreenMagnificationVibrationHelper, /* magnificationLogger= */ null);
+ }
+
+ /** Constructor for tests. */
+ @VisibleForTesting
+ FullScreenMagnificationGestureHandler(@UiContext Context context,
+ FullScreenMagnificationController fullScreenMagnificationController,
+ AccessibilityTraceManager trace,
+ Callback callback,
+ boolean detectTripleTap,
+ boolean detectShortcutTrigger,
+ @NonNull WindowMagnificationPromptController promptController,
+ int displayId,
+ FullScreenMagnificationVibrationHelper fullScreenMagnificationVibrationHelper,
+ MagnificationLogger magnificationLogger) {
super(displayId, detectTripleTap, detectShortcutTrigger, trace, callback);
if (DEBUG_ALL) {
Log.i(mLogTag,
@@ -216,6 +238,17 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
mPromptController = promptController;
+ if (magnificationLogger != null) {
+ mMagnificationLogger = magnificationLogger;
+ } else {
+ mMagnificationLogger = new MagnificationLogger() {
+ @Override
+ public void logMagnificationTripleTap(boolean enabled) {
+ AccessibilityStatsLogUtils.logMagnificationTripleTap(enabled);
+ }
+ };
+ }
+
mDelegatingState = new DelegatingState();
mDetectingState = new DetectingState(context);
mViewportDraggingState = new ViewportDraggingState();
@@ -365,6 +398,11 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
mCurrentState = state;
}
+ /** An interface that allows testing magnification log events. */
+ interface MagnificationLogger {
+ void logMagnificationTripleTap(boolean enabled);
+ }
+
interface State {
void onMotionEvent(MotionEvent event, MotionEvent rawEvent, int policyFlags)
throws GestureException;
@@ -930,10 +968,10 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
&& isMultiTap(mPreLastDown, mLastDown)
&& isMultiTap(mPreLastUp, mLastUp);
- // Only log the triple tap event, use numTaps to filter.
+ // Only log the triple tap event, use numTaps to filter
if (multitapTriggered && numTaps > 2) {
- final boolean enabled = isActivated();
- logMagnificationTripleTap(enabled);
+ final boolean enabled = !isActivated();
+ mMagnificationLogger.logMagnificationTripleTap(enabled);
}
return multitapTriggered;
}
@@ -1094,16 +1132,17 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
if (DEBUG_DETECTING) Slog.i(mLogTag, "onTripleTapAndHold()");
final boolean shortcutTriggered = mShortcutTriggered;
- clear();
- // Triple tap and hold also belongs to triple tap event.
- final boolean enabled = !isActivated();
- logMagnificationTripleTap(enabled);
+ // Only log the 3tap and hold event
+ if (!shortcutTriggered) {
+ // Triple tap and hold also belongs to triple tap event
+ final boolean enabled = !isActivated();
+ mMagnificationLogger.logMagnificationTripleTap(enabled);
+ }
+ clear();
mViewportDraggingState.prepareForZoomInTemporary(shortcutTriggered);
-
zoomInTemporary(down.getX(), down.getY(), shortcutTriggered);
-
transitionTo(mViewportDraggingState);
}
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandlerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandlerTest.java
index 9fe743da225e..b79c7bee90b1 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandlerTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandlerTest.java
@@ -31,6 +31,7 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.junit.Assume.assumeTrue;
+import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
@@ -38,6 +39,7 @@ import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -170,6 +172,8 @@ public class FullScreenMagnificationGestureHandlerTest {
AccessibilityTraceManager mMockTraceManager;
@Mock
FullScreenMagnificationVibrationHelper mMockFullScreenMagnificationVibrationHelper;
+ @Mock
+ FullScreenMagnificationGestureHandler.MagnificationLogger mMockMagnificationLogger;
@Rule
public final TestableContext mContext = new TestableContext(getInstrumentation().getContext());
@@ -253,7 +257,7 @@ public class FullScreenMagnificationGestureHandlerTest {
mContext, mFullScreenMagnificationController, mMockTraceManager, mMockCallback,
detectTripleTap, detectShortcutTrigger,
mWindowMagnificationPromptController, DISPLAY_0,
- mMockFullScreenMagnificationVibrationHelper);
+ mMockFullScreenMagnificationVibrationHelper, mMockMagnificationLogger);
if (isWatch()) {
h.setSinglePanningEnabled(true);
} else {
@@ -428,6 +432,70 @@ public class FullScreenMagnificationGestureHandlerTest {
}
@Test
+ public void testLongTapAfterShortcutTriggered_neverLogMagnificationTripleTap() {
+ goFromStateIdleTo(STATE_SHORTCUT_TRIGGERED);
+
+ longTap();
+
+ verify(mMockMagnificationLogger, never()).logMagnificationTripleTap(anyBoolean());
+ }
+
+ @Test
+ public void testSwipeAndHoldAfterShortcutTriggered_neverLogMagnificationTripleTap() {
+ goFromStateIdleTo(STATE_SHORTCUT_TRIGGERED);
+
+ swipeAndHold();
+
+ verify(mMockMagnificationLogger, never()).logMagnificationTripleTap(anyBoolean());
+ }
+
+ @Test
+ public void testTripleTap_isNotActivated_logMagnificationTripleTapIsEnabled() {
+ goFromStateIdleTo(STATE_IDLE);
+
+ tap();
+ tap();
+ longTap();
+
+ verify(mMockMagnificationLogger).logMagnificationTripleTap(true);
+ }
+
+ @Test
+ public void testTripleTap_isActivated_logMagnificationTripleTapIsNotEnabled() {
+ goFromStateIdleTo(STATE_ACTIVATED);
+ reset(mMockMagnificationLogger);
+
+ tap();
+ tap();
+ longTap();
+
+ verify(mMockMagnificationLogger).logMagnificationTripleTap(false);
+ }
+
+ @Test
+ public void testTripleTapAndHold_isNotActivated_logMagnificationTripleTapIsEnabled() {
+ goFromStateIdleTo(STATE_IDLE);
+
+ tap();
+ tap();
+ swipeAndHold();
+
+ verify(mMockMagnificationLogger).logMagnificationTripleTap(true);
+ }
+
+ @Test
+ public void testTripleTapAndHold_isActivated_logMagnificationTripleTapIsNotEnabled() {
+ goFromStateIdleTo(STATE_ACTIVATED);
+ reset(mMockMagnificationLogger);
+
+ tap();
+ tap();
+ swipeAndHold();
+
+ verify(mMockMagnificationLogger).logMagnificationTripleTap(false);
+ }
+
+ @Test
public void testTripleTapAndHold_zoomsImmediately() {
assertZoomsImmediatelyOnSwipeFrom(STATE_2TAPS, STATE_NON_ACTIVATED_ZOOMED_TMP);
assertZoomsImmediatelyOnSwipeFrom(STATE_ACTIVATED_2TAPS, STATE_ZOOMED_FURTHER_TMP);