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

Commit 97237d81 authored by mincheli's avatar mincheli
Browse files

Updates magnification button after magnification mode transition is done

Magnification button may be incorrect after magnification mode
transition is done. So just update magnification button with the target
mode after magnification mode transition is done.
The new UI behavior would keep magnification button showing when
the magnification mode transition is happened.

Bug: 181000039
Test: atest MagnificationControllerTest
Change-Id: Icbe34aead2e63c8a65c3238bdc62ebb30974ac6a
parent eb467b99
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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,
@@ -401,6 +404,7 @@ public class MagnificationController implements WindowMagnificationManager.Callb
                    adjustCurrentCenterIfNeededLocked();
                    applyMagnificationModeLocked(mTargetMode);
                }
                updateMagnificationButton(mDisplayId, mTargetMode);
                mTransitionCallBack.onResult(success);
            }
        }
@@ -425,6 +429,7 @@ public class MagnificationController implements WindowMagnificationManager.Callb
                }
                setExpiredAndRemoveFromListLocked();
                applyMagnificationModeLocked(mCurrentMode);
                updateMagnificationButton(mDisplayId, mCurrentMode);
                mTransitionCallBack.onResult(true);
            }
        }
+52 −1
Original line number Diff line number Diff line
@@ -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;
@@ -173,6 +174,23 @@ public class MagnificationControllerTest {
        assertEquals(MAGNIFIED_CENTER_Y, mWindowMagnificationManager.getCenterY(TEST_DISPLAY), 0);
    }

    @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 {
@@ -228,7 +246,6 @@ public class MagnificationControllerTest {
        verify(mTransitionCallBack).onResult(true);
    }


    @Test
    public void interruptDuringTransitionToFullScreenMode_windowMagnifying_notifyTransitionFailed()
            throws RemoteException {
@@ -440,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);
@@ -472,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();