diff options
2 files changed, 53 insertions, 13 deletions
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 f38dcf18db5c..46998123cd87 100644 --- a/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java +++ b/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java @@ -360,7 +360,7 @@ public class WindowMagnificationManager implements * @param displayId The logical display id. * @param trackingTypingFocusEnabled Enabled or disable the function of tracking typing focus. */ - private void setTrackingTypingFocusEnabled(int displayId, boolean trackingTypingFocusEnabled) { + void setTrackingTypingFocusEnabled(int displayId, boolean trackingTypingFocusEnabled) { synchronized (mLock) { WindowMagnifier magnifier = mWindowMagnifiers.get(displayId); if (magnifier == null) { @@ -503,8 +503,11 @@ public class WindowMagnificationManager implements animationCallback, windowPosition, id); } - if (enabled && !previousEnabled) { - mCallback.onWindowMagnificationActivationState(displayId, true); + if (enabled) { + setTrackingTypingFocusEnabled(displayId, true); + if (!previousEnabled) { + mCallback.onWindowMagnificationActivationState(displayId, true); + } } return enabled; } @@ -886,7 +889,6 @@ public class WindowMagnificationManager implements mWindowMagnificationManager = windowMagnificationManager; } - @GuardedBy("mLock") boolean enableWindowMagnificationInternal(float scale, float centerX, float centerY, @Nullable MagnificationAnimationCallback animationCallback, @WindowPosition int windowPosition, int id) { diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java index f527d2178650..88ca7f539cb7 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java @@ -277,7 +277,7 @@ public class WindowMagnificationManagerTest { } @Test - public void onRectangleOnScreenRequested_trackingDisabledByOnDrag_withoutMovingMagnification() + public void onRectangleOnScreenRequested_trackingDisabledByOnDrag_withoutMovingMagnifier() throws RemoteException { mWindowMagnificationManager.setConnection(mMockConnection.getConnection()); mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f); @@ -296,7 +296,7 @@ public class WindowMagnificationManagerTest { @Test - public void onRectangleOnScreenRequested_trackingDisabledByScroll_withoutMovingMagnification() + public void onRectangleOnScreenRequested_trackingDisabledByScroll_withoutMovingMagnifier() throws RemoteException { final float distanceX = 10f; final float distanceY = 10f; @@ -316,7 +316,7 @@ public class WindowMagnificationManagerTest { } @Test - public void onRectangleOnScreenRequested_requestRectangleInBound_withoutMovingMagnification() + public void onRectangleOnScreenRequested_requestRectangleInBound_withoutMovingMagnifier() throws RemoteException { mWindowMagnificationManager.setConnection(mMockConnection.getConnection()); mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f); @@ -333,7 +333,7 @@ public class WindowMagnificationManagerTest { } @Test - public void onRectangleOnScreenRequested_trackingEnabledByDefault_movingMagnification() + public void onRectangleOnScreenRequested_trackingEnabledByDefault_movingMagnifier() throws RemoteException { mWindowMagnificationManager.setConnection(mMockConnection.getConnection()); mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f); @@ -351,12 +351,10 @@ public class WindowMagnificationManagerTest { } @Test - public void onRectangleOnScreenRequested_trackingEnabledByDragAndReset_movingMagnification() + public void onRectangleOnScreenRequested_trackingEnabledByDragAndReset_movingMagnifier() throws RemoteException { - final PointF initialPoint = new PointF(50f, 50f); mWindowMagnificationManager.setConnection(mMockConnection.getConnection()); - mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, - initialPoint.x, initialPoint.y); + mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f); mMockConnection.getConnectionCallback().onDrag(TEST_DISPLAY); mWindowMagnificationManager.onImeWindowVisibilityChanged(true); final Region outRegion = new Region(); @@ -373,7 +371,7 @@ public class WindowMagnificationManagerTest { } @Test - public void onRectangleOnScreenRequested_followTypingIsDisabled_withoutMovingMagnification() { + public void onRectangleOnScreenRequested_followTypingIsDisabled_withoutMovingMagnifier() { mWindowMagnificationManager.setConnection(mMockConnection.getConnection()); mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f); final Region beforeRegion = new Region(); @@ -391,6 +389,46 @@ public class WindowMagnificationManagerTest { } @Test + public void onRectangleOnScreenRequested_trackingDisabled_withoutMovingMagnifier() { + mWindowMagnificationManager.setConnection(mMockConnection.getConnection()); + mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f); + mWindowMagnificationManager.setTrackingTypingFocusEnabled(TEST_DISPLAY, false); + final Region beforeRegion = new Region(); + mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, beforeRegion); + final Rect requestedRect = beforeRegion.getBounds(); + requestedRect.offsetTo(requestedRect.right + 10, requestedRect.bottom + 10); + + mWindowMagnificationManager.onRectangleOnScreenRequested(TEST_DISPLAY, + requestedRect.left, requestedRect.top, requestedRect.right, requestedRect.bottom); + + final Region afterRegion = new Region(); + mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, afterRegion); + assertEquals(afterRegion, beforeRegion); + } + + @Test + public void onRectangleOnScreenRequested_trackingDisabledAndEnabledMagnifier_movingMagnifier() + throws RemoteException { + mWindowMagnificationManager.setConnection(mMockConnection.getConnection()); + mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f); + mWindowMagnificationManager.setTrackingTypingFocusEnabled(TEST_DISPLAY, false); + final Region beforeRegion = new Region(); + mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, beforeRegion); + final Rect requestedRect = beforeRegion.getBounds(); + requestedRect.offsetTo(requestedRect.right + 10, requestedRect.bottom + 10); + mWindowMagnificationManager.disableWindowMagnification(TEST_DISPLAY, false); + // Enabling a window magnifier again will turn on the tracking typing focus functionality. + mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, NaN, NaN, NaN); + + mWindowMagnificationManager.onRectangleOnScreenRequested(TEST_DISPLAY, + requestedRect.left, requestedRect.top, requestedRect.right, requestedRect.bottom); + + verify(mMockConnection.getConnection()).moveWindowMagnifierToPosition(eq(TEST_DISPLAY), + eq(requestedRect.exactCenterX()), eq(requestedRect.exactCenterY()), + any(IRemoteMagnificationAnimationCallback.class)); + } + + @Test public void moveWindowMagnifier_enabled_invokeConnectionMethod() throws RemoteException { mWindowMagnificationManager.setConnection(mMockConnection.getConnection()); mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 2f, NaN, NaN); |