diff options
5 files changed, 79 insertions, 39 deletions
diff --git a/core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java b/core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java index 6bc7ac6cd7d9..1f7640d97b4d 100644 --- a/core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java +++ b/core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java @@ -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); + } } diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java index fbc7b3cbc63b..874fb0164b01 100644 --- a/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java +++ b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java @@ -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. diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java index 7ee72dfa30fd..fee20c89c106 100644 --- a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java +++ b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java @@ -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); } /** diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java b/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java index ce18b2cf9bad..d07db3f7578d 100644 --- a/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java +++ b/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java @@ -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. * diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java index 11e4120e77e6..5f2db795f8bc 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java @@ -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); - - spyController.onWindowMagnificationActivationState(TEST_DISPLAY, false); + public void deactivateWindowMagnification_windowActivated_triggerCallbackAndLogUsage() + throws RemoteException { + setMagnificationEnabled(MODE_WINDOW); + mWindowMagnificationManager.disableWindowMagnification(TEST_DISPLAY, /* clear= */ true); - 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 onFullScreenMagnificationActivationState_fullScreenEnabled_logFullScreenDuration() { - MagnificationController spyController = spy(mMagnificationController); - spyController.onFullScreenMagnificationActivationState(TEST_DISPLAY, true); + @Test public void activateFullScreenMagnification_triggerCallback() throws RemoteException { + setMagnificationEnabled(MODE_FULLSCREEN); + verify(mMagnificationController).onFullScreenMagnificationActivationState( + eq(TEST_DISPLAY), eq(true)); + } - spyController.onFullScreenMagnificationActivationState(TEST_DISPLAY, false); + @Test + public void deactivateFullScreenMagnification_fullScreenEnabled_triggerCallbackAndLogUsage() + throws RemoteException { + setMagnificationEnabled(MODE_FULLSCREEN); + mScreenMagnificationController.reset(TEST_DISPLAY, /* animate= */ 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 |