summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Minche Li <mincheli@google.com> 2021-03-18 22:52:06 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-03-18 22:52:06 +0000
commit6c0af1a19e341fb2a7a8bf556eeee35951829910 (patch)
treea1a3ff9d3bab8c1e3703561887625a474e6f03ea
parent447ee0cc3b8ed29253ef310b29f4ea34c31609db (diff)
parent97237d814283995757bdfcae187b3d321aa1a430 (diff)
Merge changes from topic "magnification_btn" into sc-dev
* changes: Updates magnification button after magnification mode transition is done Also regarded as magnification activated when it is forced to show magnification bounds
-rw-r--r--services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java24
-rw-r--r--services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java8
-rw-r--r--services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationControllerTest.java31
-rw-r--r--services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java68
4 files changed, 120 insertions, 11 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..2073c7001fa4 100644
--- a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java
@@ -52,6 +52,9 @@ import com.android.server.accessibility.AccessibilityManagerService;
* <li> 4. {@link #onTripleTapped} updates magnification switch UI depending on magnification
* capabilities and magnification active state when triple-tap gesture is detected. </li>
* </ol>
+ *
+ * <b>Note</b> Updates magnification switch UI when magnification mode transition
+ * is done {@link DisableMagnificationCallback#onResult}.
*/
public class MagnificationController implements WindowMagnificationManager.Callback,
MagnificationGestureHandler.Callback,
@@ -358,7 +361,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);
@@ -400,6 +404,7 @@ public class MagnificationController implements WindowMagnificationManager.Callb
adjustCurrentCenterIfNeededLocked();
applyMagnificationModeLocked(mTargetMode);
}
+ updateMagnificationButton(mDisplayId, mTargetMode);
mTransitionCallBack.onResult(success);
}
}
@@ -424,6 +429,7 @@ public class MagnificationController implements WindowMagnificationManager.Callb
}
setExpiredAndRemoveFromListLocked();
applyMagnificationModeLocked(mCurrentMode);
+ updateMagnificationButton(mDisplayId, mCurrentMode);
mTransitionCallBack.onResult(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 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..cf231979171b 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
@@ -25,6 +25,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
@@ -174,6 +175,23 @@ public class MagnificationControllerTest {
}
@Test
+ public void transitionToWindowMode_disablingWindowMode_showMagnificationButton()
+ throws RemoteException {
+ setMagnificationEnabled(MODE_WINDOW);
+ mMagnificationController.transitionMagnificationModeLocked(TEST_DISPLAY,
+ MODE_FULLSCREEN,
+ mTransitionCallBack);
+
+ mMagnificationController.transitionMagnificationModeLocked(TEST_DISPLAY,
+ MODE_WINDOW,
+ mTransitionCallBack);
+
+ mMockConnection.invokeCallbacks();
+ verify(mWindowMagnificationManager).showMagnificationButton(eq(TEST_DISPLAY),
+ eq(MODE_WINDOW));
+ }
+
+ @Test
public void transitionToFullScreenMode_windowMagnifying_disableWindowAndEnableFullScreen()
throws RemoteException {
setMagnificationEnabled(MODE_WINDOW);
@@ -228,7 +246,6 @@ public class MagnificationControllerTest {
verify(mTransitionCallBack).onResult(true);
}
-
@Test
public void interruptDuringTransitionToFullScreenMode_windowMagnifying_notifyTransitionFailed()
throws RemoteException {
@@ -365,6 +382,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 {
@@ -427,6 +457,35 @@ public class MagnificationControllerTest {
verify(mWindowMagnificationManager).removeMagnificationButton(eq(TEST_DISPLAY));
}
+ @Test
+ public void transitionToFullScreenMode_fullscreenModeActivated_showMagnificationButton()
+ throws RemoteException {
+ setMagnificationEnabled(MODE_WINDOW);
+
+ mMagnificationController.transitionMagnificationModeLocked(TEST_DISPLAY,
+ MODE_FULLSCREEN, mTransitionCallBack);
+ mMockConnection.invokeCallbacks();
+
+ verify(mWindowMagnificationManager).showMagnificationButton(eq(TEST_DISPLAY),
+ eq(MODE_FULLSCREEN));
+ }
+
+ @Test
+ public void transitionToWindow_windowModeActivated_showMagnificationButton()
+ throws RemoteException {
+ setMagnificationEnabled(MODE_FULLSCREEN);
+
+ mMagnificationController.transitionMagnificationModeLocked(TEST_DISPLAY,
+ MODE_WINDOW, mTransitionCallBack);
+
+ verify(mScreenMagnificationController).reset(eq(TEST_DISPLAY),
+ mCallbackArgumentCaptor.capture());
+ mCallbackArgumentCaptor.getValue().onResult(true);
+ mMockConnection.invokeCallbacks();
+ verify(mWindowMagnificationManager).showMagnificationButton(eq(TEST_DISPLAY),
+ eq(MODE_WINDOW));
+ }
+
private void setMagnificationEnabled(int mode) throws RemoteException {
setMagnificationEnabled(mode, MAGNIFIED_CENTER_X, MAGNIFIED_CENTER_Y);
@@ -450,6 +509,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(
@@ -457,6 +518,11 @@ public class MagnificationControllerTest {
when(mScreenMagnificationController.getCenterY(TEST_DISPLAY)).thenReturn(
centerY);
} else {
+ doAnswer(invocation -> {
+ when(mScreenMagnificationController.isMagnifying(TEST_DISPLAY)).thenReturn(true);
+ return null;
+ }).when(mScreenMagnificationController).setScaleAndCenter(eq(TEST_DISPLAY),
+ eq(DEFAULT_SCALE), anyFloat(), anyFloat(), anyBoolean(), anyInt());
mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, DEFAULT_SCALE,
centerX, centerY, null);
mMockConnection.invokeCallbacks();