Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b13cea96 authored by Roy Chou's avatar Roy Chou Committed by Automerger Merge Worker
Browse files

Merge "fix(#Magnification): magnification gesture handler might not be...

Merge "fix(#Magnification): magnification gesture handler might not be activated after config transition" into udc-dev am: 9f67add0

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22612898



Change-Id: If003c177136fd879a117ab6a6018eb42a0198105
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 280f0a3f 9f67add0
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -231,6 +231,12 @@ public class MagnificationController implements WindowMagnificationManager.Callb
     */
    public void transitionMagnificationModeLocked(int displayId, int targetMode,
            @NonNull TransitionCallBack transitionCallBack) {
        // check if target mode is already activated
        if (isActivated(displayId, targetMode)) {
            transitionCallBack.onResult(displayId, true);
            return;
        }

        final PointF currentCenter = getCurrentMagnificationCenterLocked(displayId, targetMode);
        final DisableMagnificationCallback animationCallback =
                getDisableMagnificationEndRunnableLocked(displayId);
@@ -322,13 +328,16 @@ public class MagnificationController implements WindowMagnificationManager.Callb
                    : config.getScale();
            try {
                setTransitionState(displayId, targetMode);
                final MagnificationAnimationCallback magnificationAnimationCallback = animate
                        ? success -> mAms.changeMagnificationMode(displayId, targetMode)
                        : null;
                // Activate or deactivate target mode depending on config activated value
                if (targetMode == MAGNIFICATION_MODE_WINDOW) {
                    screenMagnificationController.reset(displayId, false);
                    if (targetActivated) {
                        windowMagnificationMgr.enableWindowMagnification(displayId,
                                targetScale, magnificationCenter.x, magnificationCenter.y,
                                animate ? STUB_ANIMATION_CALLBACK : null, id);
                                magnificationAnimationCallback, id);
                    } else {
                        windowMagnificationMgr.disableWindowMagnification(displayId, false);
                    }
@@ -339,8 +348,8 @@ public class MagnificationController implements WindowMagnificationManager.Callb
                            screenMagnificationController.register(displayId);
                        }
                        screenMagnificationController.setScaleAndCenter(displayId, targetScale,
                                magnificationCenter.x, magnificationCenter.y, animate,
                                id);
                                magnificationCenter.x, magnificationCenter.y,
                                magnificationAnimationCallback, id);
                    } else {
                        if (screenMagnificationController.isRegistered(displayId)) {
                            screenMagnificationController.reset(displayId, false);
@@ -348,6 +357,9 @@ public class MagnificationController implements WindowMagnificationManager.Callb
                    }
                }
            } finally {
                if (!animate) {
                    mAms.changeMagnificationMode(displayId, targetMode);
                }
                // Reset transition state after enabling target mode.
                setTransitionState(displayId, null);
            }
+40 −3
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -435,9 +436,9 @@ public class MagnificationControllerTest {
        mMockConnection.invokeCallbacks();

        assertFalse(mWindowMagnificationManager.isWindowMagnifierEnabled(TEST_DISPLAY));
        verify(mScreenMagnificationController).setScaleAndCenter(TEST_DISPLAY,
                DEFAULT_SCALE, MAGNIFIED_CENTER_X, MAGNIFIED_CENTER_Y,
                animate, TEST_SERVICE_ID);
        verify(mScreenMagnificationController).setScaleAndCenter(eq(TEST_DISPLAY),
                eq(DEFAULT_SCALE), eq(MAGNIFIED_CENTER_X), eq(MAGNIFIED_CENTER_Y),
                any(MagnificationAnimationCallback.class), eq(TEST_SERVICE_ID));
    }

    @Test
@@ -503,6 +504,42 @@ public class MagnificationControllerTest {
                0);
    }

    @Test
    public void configTransitionToFullScreenWithAnimation_windowMagnifying_notifyService()
            throws RemoteException {
        final boolean animate = true;
        activateMagnifier(MODE_WINDOW, MAGNIFIED_CENTER_X, MAGNIFIED_CENTER_Y);

        reset(mService);
        MagnificationConfig config = (new MagnificationConfig.Builder())
                .setMode(MODE_FULLSCREEN).build();
        mMagnificationController.transitionMagnificationConfigMode(TEST_DISPLAY,
                config, animate, TEST_SERVICE_ID);
        verify(mScreenMagnificationController).setScaleAndCenter(eq(TEST_DISPLAY),
                /* scale= */ anyFloat(), /* centerX= */ anyFloat(), /* centerY= */ anyFloat(),
                mCallbackArgumentCaptor.capture(), /* id= */ anyInt());
        mCallbackArgumentCaptor.getValue().onResult(true);
        mMockConnection.invokeCallbacks();

        verify(mService).changeMagnificationMode(TEST_DISPLAY, MODE_FULLSCREEN);
    }

    @Test
    public void configTransitionToFullScreenWithoutAnimation_windowMagnifying_notifyService()
            throws RemoteException {
        final boolean animate = false;
        activateMagnifier(MODE_WINDOW, MAGNIFIED_CENTER_X, MAGNIFIED_CENTER_Y);

        reset(mService);
        MagnificationConfig config = (new MagnificationConfig.Builder())
                .setMode(MODE_FULLSCREEN).build();
        mMagnificationController.transitionMagnificationConfigMode(TEST_DISPLAY,
                config, animate, TEST_SERVICE_ID);
        mMockConnection.invokeCallbacks();

        verify(mService).changeMagnificationMode(TEST_DISPLAY, MODE_FULLSCREEN);
    }

    @Test
    public void interruptDuringTransitionToWindow_disablingFullScreen_discardPreviousTransition()
            throws RemoteException {