From 7c2a525ec0ad366d05aed6e021e57807cfe07079 Mon Sep 17 00:00:00 2001 From: ryanlwlin Date: Wed, 16 Sep 2020 16:23:27 +0800 Subject: [PATCH] Move magnification-relatd stuff to MagnificationController We moved most of magnification-related stuff to MagnificationController to centeralize the common magnification logic and the interaction between magnification modes. Test: atest CtsAccessibilityServiceTestCases atest com.android.server.accessibility atest com.android.server.accessibility.magnification Change-Id: I30face9d94a29844dfa1d4a98139628bf1d79fec --- .../AccessibilityManagerService.java | 49 +++----- ...ller.java => MagnificationController.java} | 118 +++++++++++++++--- .../WindowMagnificationManager.java | 9 ++ .../AccessibilityManagerServiceTest.java | 6 +- ....java => MagnificationControllerTest.java} | 50 +++++--- .../WindowMagnificationManagerTest.java | 10 ++ 6 files changed, 170 insertions(+), 72 deletions(-) rename services/accessibility/java/com/android/server/accessibility/magnification/{MagnificationTransitionController.java => MagnificationController.java} (66%) rename services/tests/servicestests/src/com/android/server/accessibility/magnification/{MagnificationTransitionControllerTest.java => MagnificationControllerTest.java} (85%) diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 80e9703e0e624..ae33f0c3da9cd 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -119,8 +119,8 @@ import com.android.internal.util.IntPair; import com.android.server.LocalServices; import com.android.server.SystemService; import com.android.server.accessibility.magnification.FullScreenMagnificationController; +import com.android.server.accessibility.magnification.MagnificationController; import com.android.server.accessibility.magnification.MagnificationGestureHandler; -import com.android.server.accessibility.magnification.MagnificationTransitionController; import com.android.server.accessibility.magnification.WindowMagnificationManager; import com.android.server.wm.ActivityTaskManagerInternal; import com.android.server.wm.WindowManagerInternal; @@ -219,16 +219,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub // Lazily initialized - access through getSystemActionPerfomer() private SystemActionPerformer mSystemActionPerformer; - private FullScreenMagnificationController mFullScreenMagnificationController; - private InteractionBridge mInteractionBridge; private AlertDialog mEnableTouchExplorationDialog; private AccessibilityInputFilter mInputFilter; - private WindowMagnificationManager mWindowMagnificationMgr; - private boolean mHasInputFilter; private KeyEventDispatcher mKeyEventDispatcher; @@ -259,7 +255,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub private Point mTempPoint = new Point(); private boolean mIsAccessibilityButtonShown; - private MagnificationTransitionController mMagnificationTransitionController; + private MagnificationController mMagnificationController; private AccessibilityUserState getCurrentUserStateLocked() { return getUserStateLocked(mCurrentUserId); @@ -292,7 +288,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub SystemActionPerformer systemActionPerformer, AccessibilityWindowManager a11yWindowManager, AccessibilityDisplayListener a11yDisplayListener, - WindowMagnificationManager windowMagnificationMgr) { + MagnificationController magnificationController) { mContext = context; mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); mWindowManagerService = LocalServices.getService(WindowManagerInternal.class); @@ -303,8 +299,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub mSystemActionPerformer = systemActionPerformer; mA11yWindowManager = a11yWindowManager; mA11yDisplayListener = a11yDisplayListener; - mWindowMagnificationMgr = windowMagnificationMgr; - mMagnificationTransitionController = new MagnificationTransitionController(this, mLock); + mMagnificationController = magnificationController; init(); } @@ -324,7 +319,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub mA11yWindowManager = new AccessibilityWindowManager(mLock, mMainHandler, mWindowManagerService, this, mSecurityPolicy, this); mA11yDisplayListener = new AccessibilityDisplayListener(mContext, mMainHandler); - mMagnificationTransitionController = new MagnificationTransitionController(this, mLock); + mMagnificationController = new MagnificationController(this, mLock, mContext); init(); } @@ -1195,9 +1190,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub // The user changed. mCurrentUserId = userId; - if (mWindowMagnificationMgr != null) { - mWindowMagnificationMgr.setUserId(mCurrentUserId); - } + mMagnificationController.updateUserIdIfNeeded(mCurrentUserId); AccessibilityUserState userState = getCurrentUserStateLocked(); readConfigurationForUserStateLocked(userState); @@ -1554,7 +1547,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub if (fallBackMagnificationModeSettingsLocked(userState)) { return; } - mMagnificationTransitionController.transitionMagnificationModeLocked( + mMagnificationController.transitionMagnificationModeLocked( Display.DEFAULT_DISPLAY, userState.getMagnificationModeLocked(), this::onMagnificationTransitionEndedLocked); } @@ -2310,13 +2303,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub return; } - if (mFullScreenMagnificationController != null) { - mFullScreenMagnificationController.setUserId(userState.mUserId); - } - if (mUiAutomationManager.suppressingAccessibilityServicesLocked() - && mFullScreenMagnificationController != null) { - mFullScreenMagnificationController.unregisterAll(); + && mMagnificationController.isFullScreenMagnificationControllerInitialized()) { + getFullScreenMagnificationController().unregisterAll(); return; } @@ -2339,8 +2328,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub final int displayId = display.getDisplayId(); if (userHasListeningMagnificationServicesLocked(userState, displayId)) { getFullScreenMagnificationController().register(displayId); - } else if (mFullScreenMagnificationController != null) { - mFullScreenMagnificationController.unregister(displayId); + } else if (mMagnificationController.isFullScreenMagnificationControllerInitialized()) { + getFullScreenMagnificationController().unregister(displayId); } } } @@ -2990,10 +2979,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub */ public WindowMagnificationManager getWindowMagnificationMgr() { synchronized (mLock) { - if (mWindowMagnificationMgr == null) { - mWindowMagnificationMgr = new WindowMagnificationManager(mContext, mCurrentUserId); - } - return mWindowMagnificationMgr; + return mMagnificationController.getWindowMagnificationMgr(); } } @@ -3060,12 +3046,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub @Override public FullScreenMagnificationController getFullScreenMagnificationController() { synchronized (mLock) { - if (mFullScreenMagnificationController == null) { - mFullScreenMagnificationController = new FullScreenMagnificationController(mContext, - this, mLock); - mFullScreenMagnificationController.setUserId(mCurrentUserId); - } - return mFullScreenMagnificationController; + return mMagnificationController.getFullScreenMagnificationController(); } } @@ -3307,9 +3288,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } } } - if (mFullScreenMagnificationController != null) { - mFullScreenMagnificationController.onDisplayRemoved(displayId); - } + mMagnificationController.onDisplayRemoved(displayId); mA11yWindowManager.stopTrackingWindows(displayId); } diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationTransitionController.java b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java similarity index 66% rename from services/accessibility/java/com/android/server/accessibility/magnification/MagnificationTransitionController.java rename to services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java index af4b34f9613ae..0dc5267c47f69 100644 --- a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationTransitionController.java +++ b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java @@ -21,6 +21,7 @@ import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ import android.annotation.NonNull; import android.annotation.Nullable; +import android.content.Context; import android.graphics.PointF; import android.graphics.Rect; import android.graphics.Region; @@ -29,21 +30,26 @@ import android.util.Slog; import android.util.SparseArray; import android.view.accessibility.MagnificationAnimationCallback; +import com.android.internal.annotations.VisibleForTesting; import com.android.server.accessibility.AccessibilityManagerService; /** - * Handles magnification mode transition. + * Handles all magnification controllers initialization, generic interactions + * and magnification mode transition. */ -public class MagnificationTransitionController { +public class MagnificationController { private static final boolean DEBUG = false; private static final String TAG = "MagnificationController"; private final AccessibilityManagerService mAms; private final PointF mTempPoint = new PointF(); private final Object mLock; + private final Context mContext; private final SparseArray mMagnificationEndRunnableSparseArray = new SparseArray(); + private FullScreenMagnificationController mFullScreenMagnificationController; + private WindowMagnificationManager mWindowMagnificationMgr; /** * A callback to inform the magnification transition result. @@ -56,9 +62,20 @@ public class MagnificationTransitionController { void onResult(boolean success); } - public MagnificationTransitionController(AccessibilityManagerService ams, Object lock) { + public MagnificationController(AccessibilityManagerService ams, Object lock, + Context context) { mAms = ams; mLock = lock; + mContext = context; + } + + @VisibleForTesting + public MagnificationController(AccessibilityManagerService ams, Object lock, + Context context, FullScreenMagnificationController fullScreenMagnificationController, + WindowMagnificationManager windowMagnificationManager) { + this(ams, lock, context); + mFullScreenMagnificationController = fullScreenMagnificationController; + mWindowMagnificationMgr = windowMagnificationManager; } /** @@ -97,7 +114,7 @@ public class MagnificationTransitionController { } final FullScreenMagnificationController screenMagnificationController = getFullScreenMagnificationController(); - final WindowMagnificationManager windowMagnificationMgr = getWindowMagnificationManager(); + final WindowMagnificationManager windowMagnificationMgr = getWindowMagnificationMgr(); final float scale = windowMagnificationMgr.getPersistedScale(); final DisableMagnificationCallback animationEndCallback = new DisableMagnificationCallback(transitionCallBack, displayId, targetMode, @@ -111,6 +128,39 @@ public class MagnificationTransitionController { setDisableMagnificationCallbackLocked(displayId, animationEndCallback); } + /** + * Updates the active user ID of {@link FullScreenMagnificationController} and {@link + * WindowMagnificationManager}. + * + * @param userId the currently active user ID + */ + public void updateUserIdIfNeeded(int userId) { + synchronized (mLock) { + if (mFullScreenMagnificationController != null) { + mFullScreenMagnificationController.setUserId(userId); + } + if (mWindowMagnificationMgr != null) { + mWindowMagnificationMgr.setUserId(userId); + } + } + } + + /** + * Removes the magnification instance with given id. + * + * @param displayId The logical display id. + */ + public void onDisplayRemoved(int displayId) { + synchronized (mLock) { + if (mFullScreenMagnificationController != null) { + mFullScreenMagnificationController.onDisplayRemoved(displayId); + } + if (mWindowMagnificationMgr != null) { + mWindowMagnificationMgr.onDisplayRemoved(displayId); + } + } + } + private DisableMagnificationCallback getDisableMagnificationEndRunnableLocked( int displayId) { return mMagnificationEndRunnableSparseArray.get(displayId); @@ -125,31 +175,63 @@ public class MagnificationTransitionController { } } - private FullScreenMagnificationController getFullScreenMagnificationController() { - return mAms.getFullScreenMagnificationController(); + /** + * Getter of {@link FullScreenMagnificationController}. + * + * @return {@link FullScreenMagnificationController}. + */ + public FullScreenMagnificationController getFullScreenMagnificationController() { + synchronized (mLock) { + if (mFullScreenMagnificationController == null) { + mFullScreenMagnificationController = new FullScreenMagnificationController(mContext, + mAms, mLock); + mFullScreenMagnificationController.setUserId(mAms.getCurrentUserIdLocked()); + } + } + return mFullScreenMagnificationController; } - private WindowMagnificationManager getWindowMagnificationManager() { - return mAms.getWindowMagnificationMgr(); + /** + * Is {@link #mFullScreenMagnificationController} is initialized. + * @return {code true} if {@link #mFullScreenMagnificationController} is initialized. + */ + public boolean isFullScreenMagnificationControllerInitialized() { + synchronized (mLock) { + return mFullScreenMagnificationController != null; + } + } + + /** + * Getter of {@link WindowMagnificationManager}. + * + * @return {@link WindowMagnificationManager}. + */ + public WindowMagnificationManager getWindowMagnificationMgr() { + synchronized (mLock) { + if (mWindowMagnificationMgr == null) { + mWindowMagnificationMgr = new WindowMagnificationManager(mContext, + mAms.getCurrentUserIdLocked()); + } + return mWindowMagnificationMgr; + } } private @Nullable PointF getCurrentMagnificationBoundsCenterLocked(int displayId, int targetMode) { if (targetMode == ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN) { - final WindowMagnificationManager magnificationManager = getWindowMagnificationManager(); - if (!magnificationManager.isWindowMagnifierEnabled(displayId)) { + if (mWindowMagnificationMgr == null + || !mWindowMagnificationMgr.isWindowMagnifierEnabled(displayId)) { return null; } - mTempPoint.set(magnificationManager.getCenterX(displayId), - magnificationManager.getCenterY(displayId)); + mTempPoint.set(mWindowMagnificationMgr.getCenterX(displayId), + mWindowMagnificationMgr.getCenterY(displayId)); } else { - final FullScreenMagnificationController screenMagnificationController = - getFullScreenMagnificationController(); - if (!screenMagnificationController.isMagnifying(displayId)) { + if (mFullScreenMagnificationController == null + || !mFullScreenMagnificationController.isMagnifying(displayId)) { return null; } - mTempPoint.set(screenMagnificationController.getCenterX(displayId), - screenMagnificationController.getCenterY(displayId)); + mTempPoint.set(mFullScreenMagnificationController.getCenterX(displayId), + mFullScreenMagnificationController.getCenterY(displayId)); } return mTempPoint; } @@ -228,7 +310,7 @@ public class MagnificationTransitionController { mCurrentCenter.y, true, AccessibilityManagerService.MAGNIFICATION_GESTURE_HANDLER_ID); } else { - getWindowMagnificationManager().enableWindowMagnification(mDisplayId, + getWindowMagnificationMgr().enableWindowMagnification(mDisplayId, mCurrentScale, mCurrentCenter.x, mCurrentCenter.y); } 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 c8e485f503ec9..ed3085f97dedc 100644 --- a/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java +++ b/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java @@ -452,6 +452,15 @@ public class WindowMagnificationManager implements return magnifier; } + /** + * Removes the window magnifier with given id. + * + * @param displayId The logical display id. + */ + void onDisplayRemoved(int displayId) { + disableWindowMagnification(displayId, true); + } + private class ConnectionCallback extends IWindowMagnificationConnectionCallback.Stub implements IBinder.DeathRecipient { private boolean mExpiredDeathRecipient = false; diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java index b7355ce92c28d..b9c2e56a4d902 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java @@ -49,6 +49,7 @@ import androidx.test.InstrumentationRegistry; import com.android.server.LocalServices; import com.android.server.accessibility.AccessibilityManagerService.AccessibilityDisplayListener; +import com.android.server.accessibility.magnification.MagnificationController; import com.android.server.accessibility.magnification.WindowMagnificationManager; import com.android.server.accessibility.test.MessageCapturingHandler; import com.android.server.wm.ActivityTaskManagerInternal; @@ -94,6 +95,7 @@ public class AccessibilityManagerServiceTest extends AndroidTestCase { @Mock private IBinder mMockBinder; @Mock private IAccessibilityServiceClient mMockServiceClient; @Mock private WindowMagnificationManager mMockWindowMagnificationMgr; + @Mock private MagnificationController mMockMagnificationController; private AccessibilityUserState mUserState; private MessageCapturingHandler mHandler = new MessageCapturingHandler(null); @@ -110,6 +112,8 @@ public class AccessibilityManagerServiceTest extends AndroidTestCase { LocalServices.addService( ActivityTaskManagerInternal.class, mMockActivityTaskManagerInternal); + when(mMockMagnificationController.getWindowMagnificationMgr()).thenReturn( + mMockWindowMagnificationMgr); mA11yms = new AccessibilityManagerService( InstrumentationRegistry.getContext(), mMockPackageManager, @@ -117,7 +121,7 @@ public class AccessibilityManagerServiceTest extends AndroidTestCase { mMockSystemActionPerformer, mMockA11yWindowManager, mMockA11yDisplayListener, - mMockWindowMagnificationMgr); + mMockMagnificationController); final AccessibilityUserState userState = new AccessibilityUserState( mA11yms.getCurrentUserIdLocked(), mMockContext, mA11yms); diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationTransitionControllerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java similarity index 85% rename from services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationTransitionControllerTest.java rename to services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java index cd8e39cfd2e7f..3e34f8a428db9 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationTransitionControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java @@ -62,7 +62,7 @@ import org.mockito.MockitoAnnotations; * Tests for MagnificationController. */ @RunWith(AndroidJUnit4.class) -public class MagnificationTransitionControllerTest { +public class MagnificationControllerTest { private static final int TEST_DISPLAY = Display.DEFAULT_DISPLAY; private static final Region MAGNIFICATION_REGION = new Region(0, 0, 500, 600); @@ -75,7 +75,7 @@ public class MagnificationTransitionControllerTest { Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN; @Mock private AccessibilityManagerService mService; - @Mock private MagnificationTransitionController.TransitionCallBack mTransitionCallBack; + @Mock private MagnificationController.TransitionCallBack mTransitionCallBack; @Mock private Context mContext; @Mock private FullScreenMagnificationController mScreenMagnificationController; @Captor private ArgumentCaptor mCallbackArgumentCaptor; @@ -83,7 +83,7 @@ public class MagnificationTransitionControllerTest { private MockWindowMagnificationConnection mMockConnection; private WindowMagnificationManager mWindowMagnificationManager; private MockContentResolver mMockResolver; - private MagnificationTransitionController mMagnificationTransitionController; + private MagnificationController mMagnificationController; @Before public void setUp() throws Exception { @@ -95,14 +95,12 @@ public class MagnificationTransitionControllerTest { Settings.Secure.putFloatForUser(mMockResolver, Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE, DEFAULT_SCALE, CURRENT_USER_ID); - mWindowMagnificationManager = new WindowMagnificationManager(mContext, CURRENT_USER_ID); - when(mService.getFullScreenMagnificationController()).thenReturn( - mScreenMagnificationController); - when(mService.getWindowMagnificationMgr()).thenReturn(mWindowMagnificationManager); + mWindowMagnificationManager = Mockito.spy( + new WindowMagnificationManager(mContext, CURRENT_USER_ID)); mMockConnection = new MockWindowMagnificationConnection(true); mWindowMagnificationManager.setConnection(mMockConnection.getConnection()); - mMagnificationTransitionController = new MagnificationTransitionController(mService, - new Object()); + mMagnificationController = new MagnificationController(mService, new Object(), mContext, + mScreenMagnificationController, mWindowMagnificationManager); } @After @@ -113,7 +111,7 @@ public class MagnificationTransitionControllerTest { @Test public void transitionToWindowMode_notMagnifying_doNothing() throws RemoteException { setMagnificationModeSettings(MODE_FULLSCREEN); - mMagnificationTransitionController.transitionMagnificationModeLocked(TEST_DISPLAY, + mMagnificationController.transitionMagnificationModeLocked(TEST_DISPLAY, MODE_WINDOW, mTransitionCallBack); @@ -130,7 +128,7 @@ public class MagnificationTransitionControllerTest { throws RemoteException { setMagnificationEnabled(MODE_FULLSCREEN); - mMagnificationTransitionController.transitionMagnificationModeLocked(TEST_DISPLAY, + mMagnificationController.transitionMagnificationModeLocked(TEST_DISPLAY, MODE_WINDOW, mTransitionCallBack); @@ -147,11 +145,11 @@ public class MagnificationTransitionControllerTest { public void transitionToWindowMode_disablingWindowMode_enablingWindowWithFormerCenter() throws RemoteException { setMagnificationEnabled(MODE_WINDOW); - mMagnificationTransitionController.transitionMagnificationModeLocked(TEST_DISPLAY, + mMagnificationController.transitionMagnificationModeLocked(TEST_DISPLAY, MODE_FULLSCREEN, mTransitionCallBack); - mMagnificationTransitionController.transitionMagnificationModeLocked(TEST_DISPLAY, + mMagnificationController.transitionMagnificationModeLocked(TEST_DISPLAY, MODE_WINDOW, mTransitionCallBack); @@ -166,7 +164,7 @@ public class MagnificationTransitionControllerTest { throws RemoteException { setMagnificationEnabled(MODE_WINDOW); - mMagnificationTransitionController.transitionMagnificationModeLocked(TEST_DISPLAY, + mMagnificationController.transitionMagnificationModeLocked(TEST_DISPLAY, MODE_FULLSCREEN, mTransitionCallBack); mMockConnection.invokeCallbacks(); @@ -186,7 +184,7 @@ public class MagnificationTransitionControllerTest { magnificationBounds.bottom + 100); setMagnificationEnabled(MODE_WINDOW, magnifiedCenter.x, magnifiedCenter.y); - mMagnificationTransitionController.transitionMagnificationModeLocked(TEST_DISPLAY, + mMagnificationController.transitionMagnificationModeLocked(TEST_DISPLAY, MODE_FULLSCREEN, mTransitionCallBack); mMockConnection.invokeCallbacks(); @@ -202,11 +200,11 @@ public class MagnificationTransitionControllerTest { public void transitionToFullScreenMode_disablingFullScreen_enableFullScreenWithFormerCenter() throws RemoteException { setMagnificationEnabled(MODE_FULLSCREEN); - mMagnificationTransitionController.transitionMagnificationModeLocked(TEST_DISPLAY, + mMagnificationController.transitionMagnificationModeLocked(TEST_DISPLAY, MODE_WINDOW, mTransitionCallBack); - mMagnificationTransitionController.transitionMagnificationModeLocked(TEST_DISPLAY, + mMagnificationController.transitionMagnificationModeLocked(TEST_DISPLAY, MODE_FULLSCREEN, mTransitionCallBack); @@ -221,7 +219,7 @@ public class MagnificationTransitionControllerTest { public void interruptDuringTransitionToFullScreenMode_windowMagnifying_notifyTransitionFailed() throws RemoteException { setMagnificationEnabled(MODE_WINDOW); - mMagnificationTransitionController.transitionMagnificationModeLocked(TEST_DISPLAY, + mMagnificationController.transitionMagnificationModeLocked(TEST_DISPLAY, MODE_FULLSCREEN, mTransitionCallBack); @@ -237,7 +235,23 @@ public class MagnificationTransitionControllerTest { verify(mTransitionCallBack).onResult(false); } + @Test + public void onDisplayRemoved_notifyAllModules() { + mMagnificationController.onDisplayRemoved(TEST_DISPLAY); + + verify(mScreenMagnificationController).onDisplayRemoved(TEST_DISPLAY); + verify(mWindowMagnificationManager).onDisplayRemoved(TEST_DISPLAY); + } + + @Test + public void updateUserIdIfNeeded_AllModulesAvailable_setUserId() { + mMagnificationController.updateUserIdIfNeeded(CURRENT_USER_ID); + + verify(mScreenMagnificationController).setUserId(CURRENT_USER_ID); + verify(mWindowMagnificationManager).setUserId(CURRENT_USER_ID); + } private void setMagnificationEnabled(int mode) throws RemoteException { + setMagnificationEnabled(mode, MAGNIFIED_CENTER_X, MAGNIFIED_CENTER_Y); } 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 89b0a03a25bb1..d5be3ede40d21 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 @@ -369,6 +369,16 @@ public class WindowMagnificationManagerTest { assertEquals(mWindowMagnificationManager.getCenterY(TEST_DISPLAY), 200f); } + @Test + public void onDisplayRemoved_enabledOnTestDisplay_disabled() { + mWindowMagnificationManager.requestConnection(true); + mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3f, 100f, 200f); + + mWindowMagnificationManager.onDisplayRemoved(TEST_DISPLAY); + + assertFalse(mWindowMagnificationManager.isWindowMagnifierEnabled(TEST_DISPLAY)); + } + private MotionEvent generatePointersDownEvent(PointF[] pointersLocation) { final int len = pointersLocation.length;