diff options
| author | 2021-03-03 20:02:40 +0800 | |
|---|---|---|
| committer | 2021-03-18 10:25:25 +0800 | |
| commit | eb467b991d74074ad82dda7e6a8432cea93accc3 (patch) | |
| tree | d5e4335c054991cd9dacc1f9a2a80824650a8870 | |
| parent | 93501a33ee64be4b9d5c99e9d1310161cb1aada6 (diff) | |
Also regarded as magnification activated when it is forced to show magnification bounds
When fullscreen magnification is showing initially, it would force to
show magnification bounds but not not be magnifying first.
Then a user has to perform one tap to make the magnifier scaling.
For this case, we also think that it is magnification activated when the
magnification bounds are showing but not magnifying.
Bug: 181597348
Test: atest MagnificationControllerTest;atest FullScreenMagnificationControllerTest
Change-Id: I90b34cc25aca636d4ac84f6627d1a674faecbb1c
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( |