summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java10
-rw-r--r--services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java4
-rw-r--r--services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java14
-rw-r--r--services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java15
-rw-r--r--services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java75
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