Merge "chore(#Magnification): add new field in metric MagnificationUsageReported" into udc-dev am: 8bd32b525b

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23061058

Change-Id: I314d4eef9b086504979e68ac9793f6fe2d31fdb2
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Roy Chou
2023-05-09 10:28:22 +00:00
committed by Automerger Merge Worker
5 changed files with 79 additions and 39 deletions

View File

@@ -149,11 +149,13 @@ public final class AccessibilityStatsLogUtils {
*
* @param mode The activated magnification mode.
* @param duration The duration in milliseconds during the magnification is activated.
* @param scale The last magnification scale for the activation
*/
public static void logMagnificationUsageState(int mode, long duration) {
public static void logMagnificationUsageState(int mode, long duration, float scale) {
FrameworkStatsLog.write(FrameworkStatsLog.MAGNIFICATION_USAGE_REPORTED,
convertToLoggingMagnificationMode(mode),
duration);
duration,
convertToLoggingMagnificationScale(scale));
}
/**
@@ -254,4 +256,8 @@ public final class AccessibilityStatsLogUtils {
return MAGNIFICATION_USAGE_REPORTED__ACTIVATED_MODE__MAGNIFICATION_UNKNOWN_MODE;
}
}
private static int convertToLoggingMagnificationScale(float scale) {
return (int) (scale * 100);
}
}

View File

@@ -1072,6 +1072,10 @@ public class FullScreenMagnificationController implements
}
}
protected float getLastActivatedScale(int displayId) {
return getScale(displayId);
}
/**
* Returns the X offset of the magnification viewport. If an animation
* is in progress, this reflects the end state of the animation.

View File

@@ -470,12 +470,14 @@ public class MagnificationController implements WindowMagnificationManager.Callb
disableFullScreenMagnificationIfNeeded(displayId);
} else {
long duration;
float scale;
synchronized (mLock) {
setCurrentMagnificationModeAndSwitchDelegate(displayId,
ACCESSIBILITY_MAGNIFICATION_MODE_NONE);
duration = SystemClock.uptimeMillis() - mWindowModeEnabledTimeArray.get(displayId);
scale = mWindowMagnificationMgr.getLastActivatedScale(displayId);
}
logMagnificationUsageState(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW, duration);
logMagnificationUsageState(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW, duration, scale);
}
updateMagnificationUIControls(displayId, ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
}
@@ -567,13 +569,16 @@ public class MagnificationController implements WindowMagnificationManager.Callb
disableWindowMagnificationIfNeeded(displayId);
} else {
long duration;
float scale;
synchronized (mLock) {
setCurrentMagnificationModeAndSwitchDelegate(displayId,
ACCESSIBILITY_MAGNIFICATION_MODE_NONE);
duration = SystemClock.uptimeMillis()
- mFullScreenModeEnabledTimeArray.get(displayId);
scale = mFullScreenMagnificationController.getLastActivatedScale(displayId);
}
logMagnificationUsageState(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN, duration);
logMagnificationUsageState(
ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN, duration, scale);
}
updateMagnificationUIControls(displayId, ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
}
@@ -612,10 +617,11 @@ public class MagnificationController implements WindowMagnificationManager.Callb
*
* @param mode The activated magnification mode.
* @param duration The duration in milliseconds during the magnification is activated.
* @param scale The last magnification scale for the activation
*/
@VisibleForTesting
public void logMagnificationUsageState(int mode, long duration) {
AccessibilityStatsLogUtils.logMagnificationUsageState(mode, duration);
public void logMagnificationUsageState(int mode, long duration, float scale) {
AccessibilityStatsLogUtils.logMagnificationUsageState(mode, duration, scale);
}
/**

View File

@@ -142,6 +142,8 @@ public class WindowMagnificationManager implements
private boolean mMagnificationFollowTypingEnabled = true;
@GuardedBy("mLock")
private final SparseBooleanArray mIsImeVisibleArray = new SparseBooleanArray();
@GuardedBy("mLock")
private final SparseArray<Float> mLastActivatedScale = new SparseArray<>();
private boolean mReceiverRegistered = false;
@VisibleForTesting
@@ -528,6 +530,7 @@ public class WindowMagnificationManager implements
return;
}
magnifier.setScale(scale);
mLastActivatedScale.put(displayId, scale);
}
}
@@ -615,6 +618,9 @@ public class WindowMagnificationManager implements
previousEnabled = magnifier.mEnabled;
enabled = magnifier.enableWindowMagnificationInternal(scale, centerX, centerY,
animationCallback, windowPosition, id);
if (enabled) {
mLastActivatedScale.put(displayId, getScale(displayId));
}
}
if (enabled) {
@@ -752,6 +758,15 @@ public class WindowMagnificationManager implements
}
}
protected float getLastActivatedScale(int displayId) {
synchronized (mLock) {
if (!mLastActivatedScale.contains(displayId)) {
return -1.0f;
}
return mLastActivatedScale.get(displayId);
}
}
/**
* Moves window magnification on the specified display with the specified offset.
*

View File

@@ -208,8 +208,8 @@ public class MagnificationControllerTest {
mMockConnection = new MockWindowMagnificationConnection(true);
mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
mMagnificationController = new MagnificationController(mService, globalLock, mContext,
mScreenMagnificationController, mWindowMagnificationManager, mScaleProvider);
mMagnificationController = spy(new MagnificationController(mService, globalLock, mContext,
mScreenMagnificationController, mWindowMagnificationManager, mScaleProvider));
mMagnificationController.setMagnificationCapabilities(
Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL);
@@ -774,15 +774,21 @@ public class MagnificationControllerTest {
verify(mWindowMagnificationManager, times(2)).removeMagnificationButton(eq(TEST_DISPLAY));
}
@Test public void activateWindowMagnification_triggerCallback() throws RemoteException {
setMagnificationEnabled(MODE_WINDOW);
verify(mMagnificationController).onWindowMagnificationActivationState(
eq(TEST_DISPLAY), eq(true));
}
@Test
public void onWindowMagnificationActivationState_windowActivated_logWindowDuration() {
MagnificationController spyController = spy(mMagnificationController);
spyController.onWindowMagnificationActivationState(TEST_DISPLAY, true);
public void deactivateWindowMagnification_windowActivated_triggerCallbackAndLogUsage()
throws RemoteException {
setMagnificationEnabled(MODE_WINDOW);
mWindowMagnificationManager.disableWindowMagnification(TEST_DISPLAY, /* clear= */ true);
spyController.onWindowMagnificationActivationState(TEST_DISPLAY, false);
verify(spyController).logMagnificationUsageState(
eq(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW), anyLong());
verify(mMagnificationController).onWindowMagnificationActivationState(
eq(TEST_DISPLAY), eq(false));
verify(mMagnificationController).logMagnificationUsageState(
eq(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW), anyLong(), eq(DEFAULT_SCALE));
}
@Test
@@ -906,15 +912,22 @@ public class MagnificationControllerTest {
assertEquals(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN, lastActivatedMode);
}
@Test public void activateFullScreenMagnification_triggerCallback() throws RemoteException {
setMagnificationEnabled(MODE_FULLSCREEN);
verify(mMagnificationController).onFullScreenMagnificationActivationState(
eq(TEST_DISPLAY), eq(true));
}
@Test
public void onFullScreenMagnificationActivationState_fullScreenEnabled_logFullScreenDuration() {
MagnificationController spyController = spy(mMagnificationController);
spyController.onFullScreenMagnificationActivationState(TEST_DISPLAY, true);
public void deactivateFullScreenMagnification_fullScreenEnabled_triggerCallbackAndLogUsage()
throws RemoteException {
setMagnificationEnabled(MODE_FULLSCREEN);
mScreenMagnificationController.reset(TEST_DISPLAY, /* animate= */ false);
spyController.onFullScreenMagnificationActivationState(TEST_DISPLAY, false);
verify(spyController).logMagnificationUsageState(
eq(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN), anyLong());
verify(mMagnificationController).onFullScreenMagnificationActivationState(
eq(TEST_DISPLAY), eq(false));
verify(mMagnificationController).logMagnificationUsageState(
eq(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN), anyLong(), eq(DEFAULT_SCALE));
}
@Test
@@ -1106,48 +1119,44 @@ public class MagnificationControllerTest {
@Test
public void imeWindowStateShown_windowMagnifying_logWindowMode() {
MagnificationController spyController = spy(mMagnificationController);
spyController.onWindowMagnificationActivationState(TEST_DISPLAY, true);
mMagnificationController.onWindowMagnificationActivationState(TEST_DISPLAY, true);
spyController.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
mMagnificationController.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
verify(spyController).logMagnificationModeWithIme(
verify(mMagnificationController).logMagnificationModeWithIme(
eq(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW));
}
@Test
public void imeWindowStateShown_fullScreenMagnifying_logFullScreenMode() {
MagnificationController spyController = spy(mMagnificationController);
spyController.onFullScreenMagnificationActivationState(TEST_DISPLAY, true);
mMagnificationController.onFullScreenMagnificationActivationState(TEST_DISPLAY, true);
spyController.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
mMagnificationController.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
verify(spyController).logMagnificationModeWithIme(
verify(mMagnificationController).logMagnificationModeWithIme(
eq(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN));
}
@Test
public void imeWindowStateShown_noMagnifying_noLogAnyMode() {
MagnificationController spyController = spy(mMagnificationController);
spyController.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
mMagnificationController.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
verify(spyController, never()).logMagnificationModeWithIme(anyInt());
verify(mMagnificationController, never()).logMagnificationModeWithIme(anyInt());
}
@Test
public void imeWindowStateHidden_windowMagnifying_noLogAnyMode() {
MagnificationController spyController = spy(mMagnificationController);
spyController.onFullScreenMagnificationActivationState(TEST_DISPLAY, true);
mMagnificationController.onFullScreenMagnificationActivationState(
TEST_DISPLAY, true);
verify(spyController, never()).logMagnificationModeWithIme(anyInt());
verify(mMagnificationController, never()).logMagnificationModeWithIme(anyInt());
}
@Test
public void imeWindowStateHidden_fullScreenMagnifying_noLogAnyMode() {
MagnificationController spyController = spy(mMagnificationController);
spyController.onWindowMagnificationActivationState(TEST_DISPLAY, true);
mMagnificationController.onWindowMagnificationActivationState(TEST_DISPLAY, true);
verify(spyController, never()).logMagnificationModeWithIme(anyInt());
verify(mMagnificationController, never()).logMagnificationModeWithIme(anyInt());
}
@Test