Loading core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java +8 −2 Original line number Diff line number Diff line Loading @@ -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)); } /** Loading Loading @@ -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); } } services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java +4 −0 Original line number Diff line number Diff line Loading @@ -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. Loading services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java +10 −4 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -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); } Loading Loading @@ -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); } /** Loading services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java +15 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -528,6 +530,7 @@ public class WindowMagnificationManager implements return; } magnifier.setScale(scale); mLastActivatedScale.put(displayId, scale); } } Loading Loading @@ -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) { Loading Loading @@ -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. * Loading services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java +42 −33 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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 Loading Loading
core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java +8 −2 Original line number Diff line number Diff line Loading @@ -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)); } /** Loading Loading @@ -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); } }
services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java +4 −0 Original line number Diff line number Diff line Loading @@ -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. Loading
services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java +10 −4 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -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); } Loading Loading @@ -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); } /** Loading
services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java +15 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -528,6 +530,7 @@ public class WindowMagnificationManager implements return; } magnifier.setScale(scale); mLastActivatedScale.put(displayId, scale); } } Loading Loading @@ -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) { Loading Loading @@ -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. * Loading
services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java +42 −33 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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 Loading