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

Commit 74db862d authored by Daniel Hsieh's avatar Daniel Hsieh
Browse files

Enables following typing functionality when the window magnifier is on again.

There are 3 conditions that we have to reset the tracking typing focus
state to on.

1. IME is shown again. (It already exists.)
2. A user re-enable a window magnifier.
3. A user switch to a window magnifier from a full-screen magnifier.

In this CL, we add the 2nd and 3rd condition to turn on this
functionality in a window magnifier.

Bug: 216394179
Test: atest WindowMagnificationManagerTest
Change-Id: I78ca62b00559c242d5562f4247e3854e8386a512
parent 0dae9e4f
Loading
Loading
Loading
Loading
+6 −4
Original line number Original line Diff line number Diff line
@@ -360,7 +360,7 @@ public class WindowMagnificationManager implements
     * @param displayId The logical display id.
     * @param displayId The logical display id.
     * @param trackingTypingFocusEnabled Enabled or disable the function of tracking typing focus.
     * @param trackingTypingFocusEnabled Enabled or disable the function of tracking typing focus.
     */
     */
    private void setTrackingTypingFocusEnabled(int displayId, boolean trackingTypingFocusEnabled) {
    void setTrackingTypingFocusEnabled(int displayId, boolean trackingTypingFocusEnabled) {
        synchronized (mLock) {
        synchronized (mLock) {
            WindowMagnifier magnifier = mWindowMagnifiers.get(displayId);
            WindowMagnifier magnifier = mWindowMagnifiers.get(displayId);
            if (magnifier == null) {
            if (magnifier == null) {
@@ -503,9 +503,12 @@ public class WindowMagnificationManager implements
                    animationCallback, windowPosition, id);
                    animationCallback, windowPosition, id);
        }
        }


        if (enabled && !previousEnabled) {
        if (enabled) {
            setTrackingTypingFocusEnabled(displayId, true);
            if (!previousEnabled) {
                mCallback.onWindowMagnificationActivationState(displayId, true);
                mCallback.onWindowMagnificationActivationState(displayId, true);
            }
            }
        }
        return enabled;
        return enabled;
    }
    }


@@ -886,7 +889,6 @@ public class WindowMagnificationManager implements
            mWindowMagnificationManager = windowMagnificationManager;
            mWindowMagnificationManager = windowMagnificationManager;
        }
        }


        @GuardedBy("mLock")
        boolean enableWindowMagnificationInternal(float scale, float centerX, float centerY,
        boolean enableWindowMagnificationInternal(float scale, float centerX, float centerY,
                @Nullable MagnificationAnimationCallback animationCallback,
                @Nullable MagnificationAnimationCallback animationCallback,
                @WindowPosition int windowPosition, int id) {
                @WindowPosition int windowPosition, int id) {
+47 −9
Original line number Original line Diff line number Diff line
@@ -277,7 +277,7 @@ public class WindowMagnificationManagerTest {
    }
    }


    @Test
    @Test
    public void onRectangleOnScreenRequested_trackingDisabledByOnDrag_withoutMovingMagnification()
    public void onRectangleOnScreenRequested_trackingDisabledByOnDrag_withoutMovingMagnifier()
            throws RemoteException {
            throws RemoteException {
        mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
        mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
        mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f);
        mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f);
@@ -296,7 +296,7 @@ public class WindowMagnificationManagerTest {




    @Test
    @Test
    public void onRectangleOnScreenRequested_trackingDisabledByScroll_withoutMovingMagnification()
    public void onRectangleOnScreenRequested_trackingDisabledByScroll_withoutMovingMagnifier()
            throws RemoteException {
            throws RemoteException {
        final float distanceX = 10f;
        final float distanceX = 10f;
        final float distanceY = 10f;
        final float distanceY = 10f;
@@ -316,7 +316,7 @@ public class WindowMagnificationManagerTest {
    }
    }


    @Test
    @Test
    public void onRectangleOnScreenRequested_requestRectangleInBound_withoutMovingMagnification()
    public void onRectangleOnScreenRequested_requestRectangleInBound_withoutMovingMagnifier()
            throws RemoteException {
            throws RemoteException {
        mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
        mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
        mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f);
        mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f);
@@ -333,7 +333,7 @@ public class WindowMagnificationManagerTest {
    }
    }


    @Test
    @Test
    public void onRectangleOnScreenRequested_trackingEnabledByDefault_movingMagnification()
    public void onRectangleOnScreenRequested_trackingEnabledByDefault_movingMagnifier()
            throws RemoteException {
            throws RemoteException {
        mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
        mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
        mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f);
        mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f);
@@ -351,12 +351,10 @@ public class WindowMagnificationManagerTest {
    }
    }


    @Test
    @Test
    public void onRectangleOnScreenRequested_trackingEnabledByDragAndReset_movingMagnification()
    public void onRectangleOnScreenRequested_trackingEnabledByDragAndReset_movingMagnifier()
            throws RemoteException {
            throws RemoteException {
        final PointF initialPoint = new PointF(50f, 50f);
        mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
        mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
        mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f,
        mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f);
                initialPoint.x, initialPoint.y);
        mMockConnection.getConnectionCallback().onDrag(TEST_DISPLAY);
        mMockConnection.getConnectionCallback().onDrag(TEST_DISPLAY);
        mWindowMagnificationManager.onImeWindowVisibilityChanged(true);
        mWindowMagnificationManager.onImeWindowVisibilityChanged(true);
        final Region outRegion = new Region();
        final Region outRegion = new Region();
@@ -373,7 +371,7 @@ public class WindowMagnificationManagerTest {
    }
    }


    @Test
    @Test
    public void onRectangleOnScreenRequested_followTypingIsDisabled_withoutMovingMagnification() {
    public void onRectangleOnScreenRequested_followTypingIsDisabled_withoutMovingMagnifier() {
        mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
        mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
        mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f);
        mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f);
        final Region beforeRegion = new Region();
        final Region beforeRegion = new Region();
@@ -390,6 +388,46 @@ public class WindowMagnificationManagerTest {
        assertEquals(afterRegion, beforeRegion);
        assertEquals(afterRegion, beforeRegion);
    }
    }


    @Test
    public void onRectangleOnScreenRequested_trackingDisabled_withoutMovingMagnifier() {
        mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
        mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f);
        mWindowMagnificationManager.setTrackingTypingFocusEnabled(TEST_DISPLAY, false);
        final Region beforeRegion = new Region();
        mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, beforeRegion);
        final Rect requestedRect = beforeRegion.getBounds();
        requestedRect.offsetTo(requestedRect.right + 10, requestedRect.bottom + 10);

        mWindowMagnificationManager.onRectangleOnScreenRequested(TEST_DISPLAY,
                requestedRect.left, requestedRect.top, requestedRect.right, requestedRect.bottom);

        final Region afterRegion = new Region();
        mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, afterRegion);
        assertEquals(afterRegion, beforeRegion);
    }

    @Test
    public void onRectangleOnScreenRequested_trackingDisabledAndEnabledMagnifier_movingMagnifier()
            throws RemoteException {
        mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
        mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f);
        mWindowMagnificationManager.setTrackingTypingFocusEnabled(TEST_DISPLAY, false);
        final Region beforeRegion = new Region();
        mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, beforeRegion);
        final Rect requestedRect = beforeRegion.getBounds();
        requestedRect.offsetTo(requestedRect.right + 10, requestedRect.bottom + 10);
        mWindowMagnificationManager.disableWindowMagnification(TEST_DISPLAY, false);
        // Enabling a window magnifier again will turn on the tracking typing focus functionality.
        mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, NaN, NaN, NaN);

        mWindowMagnificationManager.onRectangleOnScreenRequested(TEST_DISPLAY,
                requestedRect.left, requestedRect.top, requestedRect.right, requestedRect.bottom);

        verify(mMockConnection.getConnection()).moveWindowMagnifierToPosition(eq(TEST_DISPLAY),
                eq(requestedRect.exactCenterX()), eq(requestedRect.exactCenterY()),
                any(IRemoteMagnificationAnimationCallback.class));
    }

    @Test
    @Test
    public void moveWindowMagnifier_enabled_invokeConnectionMethod() throws RemoteException {
    public void moveWindowMagnifier_enabled_invokeConnectionMethod() throws RemoteException {
        mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
        mWindowMagnificationManager.setConnection(mMockConnection.getConnection());