Logs the activated session duration for magnification. (1/2)
Uses the atom MagnificationTripleTapAndHoldActivatedSessionReported in
westworld to log the activated session duration for the window magnifier
which is triggered by the triple-tap-and-hold gesture.
The duration is from the window magnifier's enabled time to its disabled
time.
Bug: 216733714
Test: atest WindowMagnificationGestureHandlerTest
m statsd_testdrive & statsd_testdrive 452
Change-Id: I423ac39c167c89b0b2db931a616cdd34d6eb151c
Merged-In: I423ac39c167c89b0b2db931a616cdd34d6eb151c
This commit is contained in:
committed by
Tyler Freeman
parent
baf76a1173
commit
5b5226eb81
@@ -167,6 +167,18 @@ public final class AccessibilityStatsLogUtils {
|
||||
convertToLoggingMagnificationMode(mode));
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs the duration for the magnification session which is activated by the triple tap and
|
||||
* hold gesture.
|
||||
*
|
||||
* @param duration The duration of a triple-tap-and-hold activation session.
|
||||
*/
|
||||
public static void logMagnificationTripleTapAndHoldSession(long duration) {
|
||||
FrameworkStatsLog.write(
|
||||
FrameworkStatsLog.MAGNIFICATION_TRIPLE_TAP_AND_HOLD_ACTIVATED_SESSION_REPORTED,
|
||||
duration);
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs the warning status of the non-a11yTool service. Calls this when the warning status is
|
||||
* changed.
|
||||
|
||||
@@ -193,6 +193,6 @@ class MagnificationGesturesObserver implements GesturesObserver.Listener {
|
||||
@Override
|
||||
public String toString() {
|
||||
return "MagnificationGesturesObserver{"
|
||||
+ ", mDelayedEventQueue=" + mDelayedEventQueue + '}';
|
||||
+ "mDelayedEventQueue=" + mDelayedEventQueue + '}';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,12 +28,14 @@ import android.annotation.Nullable;
|
||||
import android.annotation.UiContext;
|
||||
import android.content.Context;
|
||||
import android.graphics.Point;
|
||||
import android.os.SystemClock;
|
||||
import android.provider.Settings;
|
||||
import android.util.MathUtils;
|
||||
import android.util.Slog;
|
||||
import android.view.Display;
|
||||
import android.view.MotionEvent;
|
||||
|
||||
import com.android.internal.accessibility.util.AccessibilityStatsLogUtils;
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.server.accessibility.AccessibilityTraceManager;
|
||||
import com.android.server.accessibility.EventStreamTransformation;
|
||||
@@ -91,6 +93,8 @@ public class WindowMagnificationGestureHandler extends MagnificationGestureHandl
|
||||
private final Context mContext;
|
||||
private final Point mTempPoint = new Point();
|
||||
|
||||
private long mTripleTapAndHoldStartedTime = 0;
|
||||
|
||||
public WindowMagnificationGestureHandler(@UiContext Context context,
|
||||
WindowMagnificationManager windowMagnificationMgr,
|
||||
AccessibilityTraceManager trace,
|
||||
@@ -213,15 +217,39 @@ public class WindowMagnificationGestureHandler extends MagnificationGestureHandl
|
||||
WindowMagnificationManager.WINDOW_POSITION_AT_CENTER);
|
||||
}
|
||||
|
||||
private void onTripleTapAndHold(MotionEvent up) {
|
||||
@VisibleForTesting
|
||||
void onTripleTapAndHold(MotionEvent up) {
|
||||
if (DEBUG_DETECTING) {
|
||||
Slog.i(mLogTag, "onTripleTapAndHold()");
|
||||
}
|
||||
enableWindowMagnifier(up.getX(), up.getY(),
|
||||
WindowMagnificationManager.WINDOW_POSITION_AT_TOP_LEFT);
|
||||
mTripleTapAndHoldStartedTime = SystemClock.uptimeMillis();
|
||||
transitionTo(mViewportDraggingState);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void releaseTripleTapAndHold() {
|
||||
mWindowMagnificationMgr.disableWindowMagnification(mDisplayId, true);
|
||||
transitionTo(mDetectingState);
|
||||
if (mTripleTapAndHoldStartedTime != 0) {
|
||||
final long duration = SystemClock.uptimeMillis() - mTripleTapAndHoldStartedTime;
|
||||
logMagnificationTripleTapAndHoldSession(duration);
|
||||
mTripleTapAndHoldStartedTime = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs the duration for the magnification session which is activated by the triple tap and
|
||||
* hold gesture.
|
||||
*
|
||||
* @param duration The duration of a triple-tap-and-hold activation session.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
void logMagnificationTripleTapAndHoldSession(long duration) {
|
||||
AccessibilityStatsLogUtils.logMagnificationTripleTapAndHoldSession(duration);
|
||||
}
|
||||
|
||||
void resetToDetectState() {
|
||||
transitionTo(mDetectingState);
|
||||
}
|
||||
@@ -310,7 +338,7 @@ public class WindowMagnificationGestureHandler extends MagnificationGestureHandl
|
||||
@Override
|
||||
public String toString() {
|
||||
return "PanningScalingState{"
|
||||
+ "mPanningScalingHandler =" + mPanningScalingHandler + '}';
|
||||
+ "mPanningScalingHandler=" + mPanningScalingHandler + '}';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -370,8 +398,7 @@ public class WindowMagnificationGestureHandler extends MagnificationGestureHandl
|
||||
|
||||
case ACTION_UP:
|
||||
case ACTION_CANCEL: {
|
||||
mWindowMagnificationMgr.disableWindowMagnification(mDisplayId, true);
|
||||
transitionTo(mDetectingState);
|
||||
releaseTripleTapAndHold();
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -447,7 +474,7 @@ public class WindowMagnificationGestureHandler extends MagnificationGestureHandl
|
||||
@Override
|
||||
public String toString() {
|
||||
return "DetectingState{"
|
||||
+ ", mGestureTimeoutObserver =" + mGesturesObserver
|
||||
+ "mGestureTimeoutObserver=" + mGesturesObserver
|
||||
+ '}';
|
||||
}
|
||||
|
||||
|
||||
@@ -19,8 +19,12 @@ package com.android.server.accessibility.magnification;
|
||||
import static com.android.server.testutils.TestUtils.strictMock;
|
||||
|
||||
import static org.junit.Assert.fail;
|
||||
import static org.mockito.ArgumentMatchers.anyLong;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import android.annotation.UiContext;
|
||||
import android.content.Context;
|
||||
import android.graphics.PointF;
|
||||
import android.graphics.Rect;
|
||||
import android.os.RemoteException;
|
||||
@@ -76,7 +80,8 @@ public class WindowMagnificationGestureHandlerTest {
|
||||
|
||||
private WindowMagnificationManager mWindowMagnificationManager;
|
||||
private MockWindowMagnificationConnection mMockConnection;
|
||||
private WindowMagnificationGestureHandler mWindowMagnificationGestureHandler;
|
||||
private SpyWindowMagnificationGestureHandler mWindowMagnificationGestureHandler;
|
||||
private WindowMagnificationGestureHandler mMockWindowMagnificationGestureHandler;
|
||||
@Mock
|
||||
MagnificationGestureHandler.Callback mMockCallback;
|
||||
@Mock
|
||||
@@ -89,9 +94,11 @@ public class WindowMagnificationGestureHandlerTest {
|
||||
mock(WindowMagnificationManager.Callback.class), mMockTrace,
|
||||
new MagnificationScaleProvider(mContext));
|
||||
mMockConnection = new MockWindowMagnificationConnection();
|
||||
mWindowMagnificationGestureHandler = new WindowMagnificationGestureHandler(
|
||||
mWindowMagnificationGestureHandler = new SpyWindowMagnificationGestureHandler(
|
||||
mContext, mWindowMagnificationManager, mMockTrace, mMockCallback,
|
||||
/** detectTripleTap= */true, /** detectShortcutTrigger= */true, DISPLAY_0);
|
||||
mMockWindowMagnificationGestureHandler =
|
||||
mWindowMagnificationGestureHandler.getMockGestureHandler();
|
||||
mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
|
||||
mWindowMagnificationGestureHandler.setNext(strictMock(EventStreamTransformation.class));
|
||||
}
|
||||
@@ -154,6 +161,18 @@ public class WindowMagnificationGestureHandlerTest {
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTripleTapAndHold_logSessionDuration() {
|
||||
// perform triple tap on spy gesture handler
|
||||
goFromStateIdleTo(STATE_SHOW_MAGNIFIER_TRIPLE_TAP_AND_HOLD);
|
||||
|
||||
// perform up event on spy gesture handler
|
||||
returnToNormalFrom(STATE_SHOW_MAGNIFIER_TRIPLE_TAP_AND_HOLD);
|
||||
|
||||
verify(mMockWindowMagnificationGestureHandler)
|
||||
.logMagnificationTripleTapAndHoldSession(anyLong());
|
||||
}
|
||||
|
||||
private void forEachState(IntConsumer action) {
|
||||
for (int state = FIRST_STATE; state <= LAST_STATE; state++) {
|
||||
action.accept(state);
|
||||
@@ -335,4 +354,31 @@ public class WindowMagnificationGestureHandlerTest {
|
||||
private String stateDump() {
|
||||
return "\nCurrent state dump:\n" + mWindowMagnificationGestureHandler.mCurrentState;
|
||||
}
|
||||
|
||||
private static class SpyWindowMagnificationGestureHandler
|
||||
extends WindowMagnificationGestureHandler {
|
||||
|
||||
private final WindowMagnificationGestureHandler mMockWindowMagnificationGestureHandler;
|
||||
|
||||
SpyWindowMagnificationGestureHandler(@UiContext Context context,
|
||||
WindowMagnificationManager windowMagnificationMgr,
|
||||
AccessibilityTraceManager trace,
|
||||
Callback callback,
|
||||
boolean detectTripleTap, boolean detectShortcutTrigger, int displayId) {
|
||||
super(context, windowMagnificationMgr, trace, callback, detectTripleTap,
|
||||
detectShortcutTrigger, displayId);
|
||||
mMockWindowMagnificationGestureHandler = mock(WindowMagnificationGestureHandler.class);
|
||||
}
|
||||
|
||||
WindowMagnificationGestureHandler getMockGestureHandler() {
|
||||
return mMockWindowMagnificationGestureHandler;
|
||||
}
|
||||
|
||||
@Override
|
||||
void logMagnificationTripleTapAndHoldSession(long duration) {
|
||||
super.logMagnificationTripleTapAndHoldSession(duration);
|
||||
mMockWindowMagnificationGestureHandler
|
||||
.logMagnificationTripleTapAndHoldSession(duration);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user