Merge "Logs the activated session duration for magnification. (1/2)" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
620e37edb9
@@ -167,6 +167,18 @@ public final class AccessibilityStatsLogUtils {
|
|||||||
convertToLoggingMagnificationMode(mode));
|
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
|
* Logs the warning status of the non-a11yTool service. Calls this when the warning status is
|
||||||
* changed.
|
* changed.
|
||||||
|
|||||||
@@ -193,6 +193,6 @@ class MagnificationGesturesObserver implements GesturesObserver.Listener {
|
|||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "MagnificationGesturesObserver{"
|
return "MagnificationGesturesObserver{"
|
||||||
+ ", mDelayedEventQueue=" + mDelayedEventQueue + '}';
|
+ "mDelayedEventQueue=" + mDelayedEventQueue + '}';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,12 +28,14 @@ import android.annotation.Nullable;
|
|||||||
import android.annotation.UiContext;
|
import android.annotation.UiContext;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Point;
|
import android.graphics.Point;
|
||||||
|
import android.os.SystemClock;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.util.MathUtils;
|
import android.util.MathUtils;
|
||||||
import android.util.Slog;
|
import android.util.Slog;
|
||||||
import android.view.Display;
|
import android.view.Display;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
|
|
||||||
|
import com.android.internal.accessibility.util.AccessibilityStatsLogUtils;
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.server.accessibility.AccessibilityTraceManager;
|
import com.android.server.accessibility.AccessibilityTraceManager;
|
||||||
import com.android.server.accessibility.EventStreamTransformation;
|
import com.android.server.accessibility.EventStreamTransformation;
|
||||||
@@ -91,6 +93,8 @@ public class WindowMagnificationGestureHandler extends MagnificationGestureHandl
|
|||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final Point mTempPoint = new Point();
|
private final Point mTempPoint = new Point();
|
||||||
|
|
||||||
|
private long mTripleTapAndHoldStartedTime = 0;
|
||||||
|
|
||||||
public WindowMagnificationGestureHandler(@UiContext Context context,
|
public WindowMagnificationGestureHandler(@UiContext Context context,
|
||||||
WindowMagnificationManager windowMagnificationMgr,
|
WindowMagnificationManager windowMagnificationMgr,
|
||||||
AccessibilityTraceManager trace,
|
AccessibilityTraceManager trace,
|
||||||
@@ -213,15 +217,39 @@ public class WindowMagnificationGestureHandler extends MagnificationGestureHandl
|
|||||||
WindowMagnificationManager.WINDOW_POSITION_AT_CENTER);
|
WindowMagnificationManager.WINDOW_POSITION_AT_CENTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onTripleTapAndHold(MotionEvent up) {
|
@VisibleForTesting
|
||||||
|
void onTripleTapAndHold(MotionEvent up) {
|
||||||
if (DEBUG_DETECTING) {
|
if (DEBUG_DETECTING) {
|
||||||
Slog.i(mLogTag, "onTripleTapAndHold()");
|
Slog.i(mLogTag, "onTripleTapAndHold()");
|
||||||
}
|
}
|
||||||
enableWindowMagnifier(up.getX(), up.getY(),
|
enableWindowMagnifier(up.getX(), up.getY(),
|
||||||
WindowMagnificationManager.WINDOW_POSITION_AT_TOP_LEFT);
|
WindowMagnificationManager.WINDOW_POSITION_AT_TOP_LEFT);
|
||||||
|
mTripleTapAndHoldStartedTime = SystemClock.uptimeMillis();
|
||||||
transitionTo(mViewportDraggingState);
|
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() {
|
void resetToDetectState() {
|
||||||
transitionTo(mDetectingState);
|
transitionTo(mDetectingState);
|
||||||
}
|
}
|
||||||
@@ -370,8 +398,7 @@ public class WindowMagnificationGestureHandler extends MagnificationGestureHandl
|
|||||||
|
|
||||||
case ACTION_UP:
|
case ACTION_UP:
|
||||||
case ACTION_CANCEL: {
|
case ACTION_CANCEL: {
|
||||||
mWindowMagnificationMgr.disableWindowMagnification(mDisplayId, true);
|
releaseTripleTapAndHold();
|
||||||
transitionTo(mDetectingState);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -447,7 +474,7 @@ public class WindowMagnificationGestureHandler extends MagnificationGestureHandl
|
|||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "DetectingState{"
|
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 com.android.server.testutils.TestUtils.strictMock;
|
||||||
|
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyLong;
|
||||||
import static org.mockito.Mockito.mock;
|
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.PointF;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
@@ -76,7 +80,8 @@ public class WindowMagnificationGestureHandlerTest {
|
|||||||
|
|
||||||
private WindowMagnificationManager mWindowMagnificationManager;
|
private WindowMagnificationManager mWindowMagnificationManager;
|
||||||
private MockWindowMagnificationConnection mMockConnection;
|
private MockWindowMagnificationConnection mMockConnection;
|
||||||
private WindowMagnificationGestureHandler mWindowMagnificationGestureHandler;
|
private SpyWindowMagnificationGestureHandler mWindowMagnificationGestureHandler;
|
||||||
|
private WindowMagnificationGestureHandler mMockWindowMagnificationGestureHandler;
|
||||||
@Mock
|
@Mock
|
||||||
MagnificationGestureHandler.Callback mMockCallback;
|
MagnificationGestureHandler.Callback mMockCallback;
|
||||||
@Mock
|
@Mock
|
||||||
@@ -89,9 +94,11 @@ public class WindowMagnificationGestureHandlerTest {
|
|||||||
mock(WindowMagnificationManager.Callback.class), mMockTrace,
|
mock(WindowMagnificationManager.Callback.class), mMockTrace,
|
||||||
new MagnificationScaleProvider(mContext));
|
new MagnificationScaleProvider(mContext));
|
||||||
mMockConnection = new MockWindowMagnificationConnection();
|
mMockConnection = new MockWindowMagnificationConnection();
|
||||||
mWindowMagnificationGestureHandler = new WindowMagnificationGestureHandler(
|
mWindowMagnificationGestureHandler = new SpyWindowMagnificationGestureHandler(
|
||||||
mContext, mWindowMagnificationManager, mMockTrace, mMockCallback,
|
mContext, mWindowMagnificationManager, mMockTrace, mMockCallback,
|
||||||
/** detectTripleTap= */true, /** detectShortcutTrigger= */true, DISPLAY_0);
|
/** detectTripleTap= */true, /** detectShortcutTrigger= */true, DISPLAY_0);
|
||||||
|
mMockWindowMagnificationGestureHandler =
|
||||||
|
mWindowMagnificationGestureHandler.getMockGestureHandler();
|
||||||
mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
|
mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
|
||||||
mWindowMagnificationGestureHandler.setNext(strictMock(EventStreamTransformation.class));
|
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) {
|
private void forEachState(IntConsumer action) {
|
||||||
for (int state = FIRST_STATE; state <= LAST_STATE; state++) {
|
for (int state = FIRST_STATE; state <= LAST_STATE; state++) {
|
||||||
action.accept(state);
|
action.accept(state);
|
||||||
@@ -335,4 +354,31 @@ public class WindowMagnificationGestureHandlerTest {
|
|||||||
private String stateDump() {
|
private String stateDump() {
|
||||||
return "\nCurrent state dump:\n" + mWindowMagnificationGestureHandler.mCurrentState;
|
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