diff options
4 files changed, 63 insertions, 10 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 3d07da5fbb30..5b74cbd9621e 100644 --- a/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java +++ b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java @@ -114,6 +114,8 @@ public class FullScreenMagnificationController { private boolean mUnregisterPending; private boolean mDeleteAfterUnregister; + private boolean mForceShowMagnifiableBounds; + private final int mDisplayId; private static final int INVALID_ID = -1; @@ -420,12 +422,18 @@ public class FullScreenMagnificationController { @GuardedBy("mLock") void setForceShowMagnifiableBounds(boolean show) { if (mRegistered) { + mForceShowMagnifiableBounds = show; mControllerCtx.getWindowManager().setForceShowMagnifiableBounds( mDisplayId, show); } } @GuardedBy("mLock") + boolean isForceShowMagnifiableBounds() { + return mRegistered && mForceShowMagnifiableBounds; + } + + @GuardedBy("mLock") boolean reset(boolean animate) { return reset(transformToStubCallback(animate)); } @@ -442,6 +450,7 @@ public class FullScreenMagnificationController { onMagnificationChangedLocked(); } mIdOfLastServiceToMagnify = INVALID_ID; + mForceShowMagnifiableBounds = false; sendSpecToAnimation(spec, animationCallback); return changed; } @@ -1158,6 +1167,21 @@ public class FullScreenMagnificationController { } } + /** + * Returns {@code true} if the magnifiable regions of the display is forced to be shown. + * + * @param displayId The logical display id. + */ + public boolean isForceShowMagnifiableBounds(int displayId) { + synchronized (mLock) { + final DisplayMagnification display = mDisplays.get(displayId); + if (display == null) { + return false; + } + return display.isForceShowMagnifiableBounds(); + } + } + private void onScreenTurnedOff() { final Message m = PooledLambda.obtainMessage( FullScreenMagnificationController::resetAllIfNeeded, this, false); 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 17a7d393f369..4d51d55f0d83 100644 --- a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java +++ b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java @@ -358,7 +358,8 @@ public class MagnificationController implements WindowMagnificationManager.Callb boolean isActivated = false; if (mode == ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN && mFullScreenMagnificationController != null) { - isActivated = mFullScreenMagnificationController.isMagnifying(displayId); + isActivated = mFullScreenMagnificationController.isMagnifying(displayId) + || mFullScreenMagnificationController.isForceShowMagnifiableBounds(displayId); } else if (mode == ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW && mWindowMagnificationMgr != null) { isActivated = mWindowMagnificationMgr.isWindowMagnifierEnabled(displayId); 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 872b95548655..29691fb3583a 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 @@ -65,7 +65,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; -import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import java.util.Locale; @@ -1115,6 +1114,23 @@ public class FullScreenMagnificationControllerTest { } @Test + public void testSetForceShowMagnifiableBounds() { + register(DISPLAY_0); + + mFullScreenMagnificationController.setForceShowMagnifiableBounds(DISPLAY_0, true); + + verify(mMockWindowManager).setForceShowMagnifiableBounds(DISPLAY_0, true); + } + + @Test + public void testIsForceShowMagnifiableBounds() { + register(DISPLAY_0); + mFullScreenMagnificationController.setForceShowMagnifiableBounds(DISPLAY_0, true); + + assertTrue(mFullScreenMagnificationController.isForceShowMagnifiableBounds(DISPLAY_0)); + } + + @Test public void testSetScale_toMagnifying_shouldNotifyActivatedState() { setScaleToMagnifying(); @@ -1142,14 +1158,11 @@ public class FullScreenMagnificationControllerTest { for (int i = 0; i < DISPLAY_COUNT; i++) { when(mMockWindowManager.setMagnificationCallbacks(eq(i), any())).thenReturn(true); } - doAnswer(new Answer<Void>() { - @Override - public Void answer(InvocationOnMock invocationOnMock) throws Throwable { - Object[] args = invocationOnMock.getArguments(); - Region regionArg = (Region) args[1]; - regionArg.set(INITIAL_MAGNIFICATION_REGION); - return null; - } + doAnswer((Answer<Void>) invocationOnMock -> { + Object[] args = invocationOnMock.getArguments(); + Region regionArg = (Region) args[1]; + regionArg.set(INITIAL_MAGNIFICATION_REGION); + return null; }).when(mMockWindowManager).getMagnificationRegion(anyInt(), (Region) anyObject()); } 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 84c76b77018d..31dd09724165 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 @@ -365,6 +365,19 @@ public class MagnificationControllerTest { eq(MODE_FULLSCREEN)); } + + @Test + public void onTouchInteractionChanged_fullscreenNotActivated_notShowMagnificationButton() + throws RemoteException { + setMagnificationModeSettings(MODE_FULLSCREEN); + + mMagnificationController.onTouchInteractionStart(TEST_DISPLAY, MODE_FULLSCREEN); + mMagnificationController.onTouchInteractionEnd(TEST_DISPLAY, MODE_FULLSCREEN); + + verify(mWindowMagnificationManager, never()).showMagnificationButton(eq(TEST_DISPLAY), + eq(MODE_FULLSCREEN)); + } + @Test public void onShortcutTriggered_windowModeEnabledAndCapabilitiesAll_showMagnificationButton() throws RemoteException { @@ -450,6 +463,8 @@ public class MagnificationControllerTest { } if (mode == MODE_FULLSCREEN) { when(mScreenMagnificationController.isMagnifying(TEST_DISPLAY)).thenReturn(true); + when(mScreenMagnificationController.isForceShowMagnifiableBounds( + TEST_DISPLAY)).thenReturn(true); when(mScreenMagnificationController.getPersistedScale()).thenReturn(DEFAULT_SCALE); when(mScreenMagnificationController.getScale(TEST_DISPLAY)).thenReturn(DEFAULT_SCALE); when(mScreenMagnificationController.getCenterX(TEST_DISPLAY)).thenReturn( |