diff options
| author | 2023-11-28 00:24:16 +0000 | |
|---|---|---|
| committer | 2023-11-28 00:24:16 +0000 | |
| commit | 1ee8ad3120a04eb9656bf479966cdc45761511a1 (patch) | |
| tree | b7f2f2cda497fe808ec80b2666462413e797477d | |
| parent | a839ab28082269c600b19fba129afb8f1f711dda (diff) | |
| parent | 625ede998407b8adc2c7d7a479edd477eb601858 (diff) | |
Merge "feat(MultiFingerMultiTap): Log two finger triple tap shortcut type" into main
3 files changed, 61 insertions, 5 deletions
diff --git a/core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java b/core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java index 7c4252e7aa5d..6b074a610818 100644 --- a/core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java +++ b/core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java @@ -33,6 +33,7 @@ import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__A11Y_FLOATING_MENU; import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__A11Y_GESTURE; import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__TRIPLE_TAP; +import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__TWO_FINGER_TRIPLE_TAP; import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__UNKNOWN_TYPE; import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__VOLUME_KEY; import static com.android.internal.util.FrameworkStatsLog.MAGNIFICATION_USAGE_REPORTED__ACTIVATED_MODE__MAGNIFICATION_ALL; @@ -131,6 +132,18 @@ public final class AccessibilityStatsLogUtils { } /** + * Logs magnification that is assigned to the two finger triple tap shortcut. Calls this when + * triggering the magnification two finger triple tap shortcut. + */ + public static void logMagnificationTwoFingerTripleTap(boolean enabled) { + FrameworkStatsLog.write(FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED, + MAGNIFICATION_COMPONENT_NAME.flattenToString(), + // jean update + ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__TWO_FINGER_TRIPLE_TAP, + convertToLoggingServiceStatus(enabled)); + } + + /** * Logs accessibility feature name that is assigned to the long pressed accessibility button * shortcut. Calls this when clicking the long pressed accessibility button shortcut. * 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 d31b1efafcc4..e3797c98bebe 100644 --- a/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler.java +++ b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler.java @@ -258,6 +258,11 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH public void logMagnificationTripleTap(boolean enabled) { AccessibilityStatsLogUtils.logMagnificationTripleTap(enabled); } + + @Override + public void logMagnificationTwoFingerTripleTap(boolean enabled) { + AccessibilityStatsLogUtils.logMagnificationTwoFingerTripleTap(enabled); + } }; } @@ -419,6 +424,7 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH /** An interface that allows testing magnification log events. */ interface MagnificationLogger { void logMagnificationTripleTap(boolean enabled); + void logMagnificationTwoFingerTripleTap(boolean enabled); } interface State { @@ -987,12 +993,14 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH mDisplayId, event.getX(), event.getY())) { transitionToDelegatingStateAndClear(); - } else if (isMultiTapTriggered(3 /* taps */)) { - onTripleTap(/* up */ event); - } else if (isMultiFingerMultiTapTriggered(/* targetTapCount= */ 3, event)) { + // Placing multiple fingers before a single finger, because achieving a + // multi finger multi tap also means achieving a single finger triple tap onTripleTap(event); + } else if (isMultiTapTriggered(3 /* taps */)) { + onTripleTap(/* up */ event); + } else if ( // Possible to be false on: 3tap&drag -> scale -> PTR_UP -> UP isFingerDown() @@ -1026,6 +1034,11 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH mCompletedTapCount++; mIsTwoFingerCountReached = false; } + + if (mDetectTwoFingerTripleTap && mCompletedTapCount > 2) { + final boolean enabled = !isActivated(); + mMagnificationLogger.logMagnificationTwoFingerTripleTap(enabled); + } return mDetectTwoFingerTripleTap && mCompletedTapCount == targetTapCount; } @@ -1037,6 +1050,29 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH mFirstPointerDownLocation.set(Float.NaN, Float.NaN); mSecondPointerDownLocation.set(Float.NaN, Float.NaN); } + + void transitionToViewportDraggingStateAndClear(MotionEvent down) { + + if (DEBUG_DETECTING) Slog.i(mLogTag, "onTripleTapAndHold()"); + final boolean shortcutTriggered = mShortcutTriggered; + + // Only log the 3tap and hold event + if (!shortcutTriggered) { + final boolean enabled = !isActivated(); + if (mCompletedTapCount == 2) { + // Two finger triple tap and hold + mMagnificationLogger.logMagnificationTwoFingerTripleTap(enabled); + } else { + // Triple tap and hold also belongs to triple tap event + mMagnificationLogger.logMagnificationTripleTap(enabled); + } + } + clear(); + + mViewportDraggingState.prepareForZoomInTemporary(shortcutTriggered); + zoomInTemporary(down.getX(), down.getY(), shortcutTriggered); + transitionTo(mViewportDraggingState); + } } /** @@ -1416,8 +1452,6 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH // Only log the 3tap and hold event if (!shortcutTriggered) { - // TODO:(b/309534286): Add metrics for two-finger triple-tap and fix - // the log two-finger bug before enabling the flag // Triple tap and hold also belongs to triple tap event final boolean enabled = !isActivated(); mMagnificationLogger.logMagnificationTripleTap(enabled); 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 fd2cf6d4bb5f..3b39160643d1 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 @@ -540,18 +540,23 @@ public class FullScreenMagnificationGestureHandlerTest { twoFingerTap(); assertIn(STATE_ACTIVATED); + verify(mMockMagnificationLogger, never()).logMagnificationTripleTap(anyBoolean()); + verify(mMockMagnificationLogger).logMagnificationTwoFingerTripleTap(true); } @Test @RequiresFlagsEnabled(Flags.FLAG_ENABLE_MAGNIFICATION_MULTIPLE_FINGER_MULTIPLE_TAP_GESTURE) public void testTwoFingerTripleTap_StateIsActivated_shouldInIdle() { goFromStateIdleTo(STATE_ACTIVATED); + reset(mMockMagnificationLogger); twoFingerTap(); twoFingerTap(); twoFingerTap(); assertIn(STATE_IDLE); + verify(mMockMagnificationLogger, never()).logMagnificationTripleTap(anyBoolean()); + verify(mMockMagnificationLogger).logMagnificationTwoFingerTripleTap(false); } @Test @@ -564,6 +569,8 @@ public class FullScreenMagnificationGestureHandlerTest { twoFingerTapAndHold(); assertIn(STATE_NON_ACTIVATED_ZOOMED_TMP); + verify(mMockMagnificationLogger, never()).logMagnificationTripleTap(anyBoolean()); + verify(mMockMagnificationLogger).logMagnificationTwoFingerTripleTap(true); } @Test @@ -576,6 +583,8 @@ public class FullScreenMagnificationGestureHandlerTest { twoFingerSwipeAndHold(); assertIn(STATE_NON_ACTIVATED_ZOOMED_TMP); + verify(mMockMagnificationLogger, never()).logMagnificationTripleTap(anyBoolean()); + verify(mMockMagnificationLogger).logMagnificationTwoFingerTripleTap(true); } @Test |