diff options
2 files changed, 68 insertions, 19 deletions
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 9c1169414b07..ed8a35f45176 100644 --- a/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java +++ b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java @@ -901,6 +901,10 @@ public class FullScreenMagnificationController implements */ void onUserContextChanged(int displayId) { synchronized (mLock) { + if (!isActivated(displayId)) { + return; + } + if (isAlwaysOnMagnificationEnabled()) { setScaleAndCenter(displayId, 1.0f, Float.NaN, Float.NaN, true, diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationControllerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationControllerTest.java index 88f0c930f513..f1ad577fde88 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationControllerTest.java @@ -238,7 +238,7 @@ public class FullScreenMagnificationControllerTest { } private void notRegistered_publicMethodsShouldBeBenign(int displayId) { - checkActivatedAndMagnifyingState(/* activated= */false, /* magnifying= */false, displayId); + checkActivatedAndMagnifying(/* activated= */ false, /* magnifying= */ false, displayId); assertFalse( mFullScreenMagnificationController.magnificationRegionContains(displayId, 100, @@ -673,9 +673,9 @@ public class FullScreenMagnificationControllerTest { .setScale(displayId, 1.5f, startCenter.x, startCenter.y, false, SERVICE_ID_2); assertFalse(mFullScreenMagnificationController.resetIfNeeded(displayId, SERVICE_ID_1)); - checkActivatedAndMagnifyingState(/* activated= */true, /* magnifying= */true, displayId); + checkActivatedAndMagnifying(/* activated= */ true, /* magnifying= */ true, displayId); assertTrue(mFullScreenMagnificationController.resetIfNeeded(displayId, SERVICE_ID_2)); - checkActivatedAndMagnifyingState(/* activated= */false, /* magnifying= */false, displayId); + checkActivatedAndMagnifying(/* activated= */ false, /* magnifying= */ false, displayId); } @Test @@ -694,7 +694,7 @@ public class FullScreenMagnificationControllerTest { assertTrue(mFullScreenMagnificationController.resetIfNeeded(displayId, false)); verify(mRequestObserver).onFullScreenMagnificationChanged(eq(displayId), eq(INITIAL_MAGNIFICATION_REGION), any(MagnificationConfig.class)); - checkActivatedAndMagnifyingState(/* activated= */false, /* magnifying= */false, displayId); + checkActivatedAndMagnifying(/* activated= */ false, /* magnifying= */ false, displayId); assertFalse(mFullScreenMagnificationController.resetIfNeeded(displayId, false)); } @@ -758,7 +758,7 @@ public class FullScreenMagnificationControllerTest { mTargetAnimationListener.onAnimationUpdate(mMockValueAnimator); mStateListener.onAnimationEnd(mMockValueAnimator); - checkActivatedAndMagnifyingState(/* activated= */false, /* magnifying= */false, displayId); + checkActivatedAndMagnifying(/* activated= */ false, /* magnifying= */ false, displayId); verify(lastAnimationCallback).onResult(true); } @@ -776,26 +776,72 @@ public class FullScreenMagnificationControllerTest { mMessageCapturingHandler.sendAllMessages(); br.onReceive(mMockContext, null); mMessageCapturingHandler.sendAllMessages(); - checkActivatedAndMagnifyingState(/* activated= */false, /* magnifying= */false, DISPLAY_0); - checkActivatedAndMagnifyingState(/* activated= */false, /* magnifying= */false, DISPLAY_1); + checkActivatedAndMagnifying(/* activated= */ false, /* magnifying= */ false, DISPLAY_0); + checkActivatedAndMagnifying(/* activated= */ false, /* magnifying= */ false, DISPLAY_1); } @Test - public void testUserContextChange_resetsMagnification() { + public void testUserContextChange_magnifierActivated_resetMagnification() { for (int i = 0; i < DISPLAY_COUNT; i++) { - contextChange_resetsMagnification(i); + contextChange_expectedValues( + /* displayId= */ i, + /* isMagnifierActivated= */ true, + /* isAlwaysOnEnabled= */ false, + /* expectedActivated= */ false); resetMockWindowManager(); } } - private void contextChange_resetsMagnification(int displayId) { + @Test + public void testUserContextChange_magnifierActivatedAndAlwaysOnEnabled_stayActivated() { + for (int i = 0; i < DISPLAY_COUNT; i++) { + contextChange_expectedValues( + /* displayId= */ i, + /* isMagnifierActivated= */ true, + /* isAlwaysOnEnabled= */ true, + /* expectedActivated= */ true); + resetMockWindowManager(); + } + } + + @Test + public void testUserContextChange_magnifierDeactivated_stayDeactivated() { + for (int i = 0; i < DISPLAY_COUNT; i++) { + contextChange_expectedValues( + /* displayId= */ i, + /* isMagnifierActivated= */ false, + /* isAlwaysOnEnabled= */ false, + /* expectedActivated= */ false); + resetMockWindowManager(); + } + } + + @Test + public void testUserContextChange_magnifierDeactivatedAndAlwaysOnEnabled_stayDeactivated() { + for (int i = 0; i < DISPLAY_COUNT; i++) { + contextChange_expectedValues( + /* displayId= */ i, + /* isMagnifierActivated= */ false, + /* isAlwaysOnEnabled= */ true, + /* expectedActivated= */ false); + resetMockWindowManager(); + } + } + + private void contextChange_expectedValues( + int displayId, boolean isMagnifierActivated, boolean isAlwaysOnEnabled, + boolean expectedActivated) { + mFullScreenMagnificationController.setAlwaysOnMagnificationEnabled(isAlwaysOnEnabled); register(displayId); MagnificationCallbacks callbacks = getMagnificationCallbacks(displayId); - zoomIn2xToMiddle(displayId); - mMessageCapturingHandler.sendAllMessages(); + if (isMagnifierActivated) { + zoomIn2xToMiddle(displayId); + mMessageCapturingHandler.sendAllMessages(); + } callbacks.onUserContextChanged(); mMessageCapturingHandler.sendAllMessages(); - checkActivatedAndMagnifyingState(/* activated= */false, /* magnifying= */false, displayId); + checkActivatedAndMagnifying( + /* activated= */ expectedActivated, /* magnifying= */ false, displayId); } @Test @@ -811,10 +857,10 @@ public class FullScreenMagnificationControllerTest { MagnificationCallbacks callbacks = getMagnificationCallbacks(displayId); zoomIn2xToMiddle(displayId); mMessageCapturingHandler.sendAllMessages(); - checkActivatedAndMagnifyingState(/* activated= */true, /* magnifying= */true, displayId); + checkActivatedAndMagnifying(/* activated= */ true, /* magnifying= */ true, displayId); callbacks.onDisplaySizeChanged(); mMessageCapturingHandler.sendAllMessages(); - checkActivatedAndMagnifyingState(/* activated= */false, /* magnifying= */false, DISPLAY_0); + checkActivatedAndMagnifying(/* activated= */ false, /* magnifying= */ false, DISPLAY_0); } @Test @@ -1169,7 +1215,7 @@ public class FullScreenMagnificationControllerTest { mFullScreenMagnificationController.setScaleAndCenter( DISPLAY_0, scale, Float.NaN, Float.NaN, true, SERVICE_ID_1); - checkActivatedAndMagnifyingState(/* activated= */true, /* magnifying= */false, DISPLAY_0); + checkActivatedAndMagnifying(/* activated= */ true, /* magnifying= */ false, DISPLAY_0); verify(mMockWindowManager).setForceShowMagnifiableBounds(DISPLAY_0, true); } @@ -1280,11 +1326,10 @@ public class FullScreenMagnificationControllerTest { float scale = 2.0f; mFullScreenMagnificationController.setScale(displayId, scale, startCenter.x, startCenter.y, false, SERVICE_ID_1); - checkActivatedAndMagnifyingState(/* activated= */true, /* magnifying= */true, displayId); + checkActivatedAndMagnifying(/* activated= */ true, /* magnifying= */ true, displayId); } - private void checkActivatedAndMagnifyingState( - boolean activated, boolean magnifying, int displayId) { + private void checkActivatedAndMagnifying(boolean activated, boolean magnifying, int displayId) { final boolean isActivated = mFullScreenMagnificationController.isActivated(displayId); final boolean isMagnifying = mFullScreenMagnificationController.getScale(displayId) > 1.0f; assertTrue(isActivated == activated); |