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

Commit f6880a49 authored by Daniel Norman's avatar Daniel Norman
Browse files

fix(magnify_ime): Stop magnifying the nav bar with this setting.

Magnifying the nav bar makes it difficult for 3-button navigation users to use the nav bar with muscle memory, since they now need to pan to
find it. This makes the CUJ of using the NavBar accessibility shortcut
to enable/disable magnification very tedious.

This change reverts the TYPE_NAVIGATION_BAR behavior to the
behavior before adding this flagged feature.

Bug: 342509709
Test: atest WindowStateTests
Test: manually observe 3-button nav is not magnified
Flag: com.android.server.accessibility.enable_magnification_magnify_nav_bar_and_ime
Change-Id: Icd42a530315717473cf93706aee625993821122e
parent cc0eedd6
Loading
Loading
Loading
Loading
+14 −14
Original line number Diff line number Diff line
@@ -698,8 +698,8 @@ public class WindowManagerService extends IWindowManager.Stub
    boolean mBootAnimationStopped = false;
    long mBootWaitForWindowsStartTime = -1;

    // Cache whether to Magnify the Navigation Bar and IME.
    private boolean mMagnifyNavAndIme = false;
    // Cache whether to Magnify the IME.
    private boolean mMagnifyIme = false;

    /** Dump of the windows and app tokens at the time of the last ANR. Cleared after
     * LAST_ANR_LIFETIME_DURATION_MSECS */
@@ -818,7 +818,7 @@ public class WindowManagerService extends IWindowManager.Stub
                Settings.Secure.getUriFor(Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS);
        private final Uri mDisableSecureWindowsUri =
                Settings.Secure.getUriFor(Settings.Secure.DISABLE_SECURE_WINDOWS);
        private final Uri mMagnifyNavAndImeEnabledUri = Settings.Secure.getUriFor(
        private final Uri mMagnifyImeEnabledUri = Settings.Secure.getUriFor(
                Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MAGNIFY_NAV_AND_IME);
        private final Uri mPolicyControlUri =
                Settings.Global.getUriFor(Settings.Global.POLICY_CONTROL);
@@ -853,7 +853,7 @@ public class WindowManagerService extends IWindowManager.Stub
            resolver.registerContentObserver(mDisableSecureWindowsUri, false, this,
                    UserHandle.USER_ALL);
            if (com.android.server.accessibility.Flags.enableMagnificationMagnifyNavBarAndIme()) {
                resolver.registerContentObserver(mMagnifyNavAndImeEnabledUri, false, this,
                resolver.registerContentObserver(mMagnifyImeEnabledUri, false, this,
                        UserHandle.USER_ALL);
            }
            resolver.registerContentObserver(mPolicyControlUri, false, this, UserHandle.USER_ALL);
@@ -917,8 +917,8 @@ public class WindowManagerService extends IWindowManager.Stub
                return;
            }

            if (mMagnifyNavAndImeEnabledUri.equals(uri)) {
                updateMagnifyNavAndIme();
            if (mMagnifyImeEnabledUri.equals(uri)) {
                updateMagnifyIme();
            }

            if (mDevelopmentOverrideDesktopExperienceUri.equals(uri)) {
@@ -945,7 +945,7 @@ public class WindowManagerService extends IWindowManager.Stub
        void loadSettings() {
            updateMaximumObscuringOpacityForTouch();
            updateDisableSecureWindows();
            updateMagnifyNavAndIme();
            updateMagnifyIme();
        }

        void updateMaximumObscuringOpacityForTouch() {
@@ -1055,23 +1055,23 @@ public class WindowManagerService extends IWindowManager.Stub
            }
        }

        void updateMagnifyNavAndIme() {
        void updateMagnifyIme() {
            if (!com.android.server.accessibility.Flags.enableMagnificationMagnifyNavBarAndIme()) {
                mMagnifyNavAndIme = false;
                mMagnifyIme = false;
                return;
            }

            boolean enabledMagnifyNavAndIme = Settings.Secure.getIntForUser(
            boolean enabledMagnifyIme = Settings.Secure.getIntForUser(
                    mContext.getContentResolver(),
                    Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MAGNIFY_NAV_AND_IME,
                    AccessibilityUtils.getMagnificationMagnifyKeyboardDefaultValue(mContext),
                    mCurrentUserId) == 1;
            if (mMagnifyNavAndIme == enabledMagnifyNavAndIme) {
            if (mMagnifyIme == enabledMagnifyIme) {
                return;
            }

            synchronized (mGlobalLock) {
                mMagnifyNavAndIme = enabledMagnifyNavAndIme;
                mMagnifyIme = enabledMagnifyIme;
            }
        }
    }
@@ -1513,8 +1513,8 @@ public class WindowManagerService extends IWindowManager.Stub
    }

    @VisibleForTesting
    boolean isMagnifyNavAndImeEnabled() {
        return mMagnifyNavAndIme;
    boolean isMagnifyImeEnabled() {
        return mMagnifyIme;
    }

    DisplayAreaPolicy.Provider getDisplayAreaPolicyProvider() {
+3 −3
Original line number Diff line number Diff line
@@ -4907,15 +4907,15 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
    boolean shouldMagnify() {
        if (mAttrs.type == TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY
                || mAttrs.type == TYPE_MAGNIFICATION_OVERLAY
                || mAttrs.type == TYPE_NAVIGATION_BAR
                // It's tempting to wonder: Have we forgotten the rounded corners overlay?
                // worry not: it's a fake TYPE_NAVIGATION_BAR_PANEL
                || mAttrs.type == TYPE_NAVIGATION_BAR_PANEL) {
            return false;
        }
        if (mAttrs.type == TYPE_INPUT_METHOD
                || mAttrs.type == TYPE_INPUT_METHOD_DIALOG
                || mAttrs.type == TYPE_NAVIGATION_BAR) {
            return mWmService.isMagnifyNavAndImeEnabled();
                || mAttrs.type == TYPE_INPUT_METHOD_DIALOG) {
            return mWmService.isMagnifyImeEnabled();
        }
        if ((mAttrs.privateFlags & PRIVATE_FLAG_NOT_MAGNIFIABLE) != 0) {
            return false;
+11 −17
Original line number Diff line number Diff line
@@ -285,7 +285,7 @@ public class WindowStateTests extends WindowTestsBase {
    @Test
    @DisableFlags(com.android.server.accessibility
            .Flags.FLAG_ENABLE_MAGNIFICATION_MAGNIFY_NAV_BAR_AND_IME)
    public void testMagnifyNavAndIme_flagOffAndSettingsEnabled_typeIsIme_shouldNotMagnify() {
    public void testMagnifyIme_flagOffAndSettingsEnabled_typeIsIme_shouldNotMagnify() {
        final ContentResolver cr = useFakeSettingsProvider();
        Settings.Secure.putInt(cr,
                Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MAGNIFY_NAV_AND_IME, 1);
@@ -301,7 +301,7 @@ public class WindowStateTests extends WindowTestsBase {
        imeDialogWindow.setHasSurface(true);
        navWindow.setHasSurface(true);

        assertFalse(mWm.isMagnifyNavAndImeEnabled());
        assertFalse(mWm.isMagnifyImeEnabled());
        assertFalse(imeWindow.shouldMagnify());
        assertFalse(imeDialogWindow.shouldMagnify());
        assertFalse(navWindow.shouldMagnify());
@@ -310,7 +310,7 @@ public class WindowStateTests extends WindowTestsBase {
    @Test
    @EnableFlags(com.android.server.accessibility
            .Flags.FLAG_ENABLE_MAGNIFICATION_MAGNIFY_NAV_BAR_AND_IME)
    public void testMagnifyNavAndIme_flagOnAndSettingsDisabled_typeIsIme_shouldNotMagnify() {
    public void testMagnifyIme_flagOnAndSettingsDisabled_typeIsIme_shouldNotMagnify() {
        final ContentResolver cr = useFakeSettingsProvider();
        Settings.Secure.putInt(cr,
                Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MAGNIFY_NAV_AND_IME, 0);
@@ -326,14 +326,14 @@ public class WindowStateTests extends WindowTestsBase {
        imeDialogWindow.setHasSurface(true);
        navWindow.setHasSurface(true);

        assertFalse(mWm.isMagnifyNavAndImeEnabled());
        assertFalse(mWm.isMagnifyImeEnabled());
        assertFalse(imeWindow.shouldMagnify());
        assertFalse(imeDialogWindow.shouldMagnify());
        assertFalse(navWindow.shouldMagnify());
    }

    @Test
    public void testMagnifyNavAndIme_typeIsMagnification_shouldNotMagnify() {
    public void testMagnifyIme_typeIsMagnification_shouldNotMagnify() {
        final WindowState a11yMagWindow = newWindowBuilder("a11yMagWindow",
                TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY).build();
        final WindowState magWindow = newWindowBuilder("magWindow",
@@ -353,7 +353,7 @@ public class WindowStateTests extends WindowTestsBase {
    @Test
    @EnableFlags(com.android.server.accessibility
            .Flags.FLAG_ENABLE_MAGNIFICATION_MAGNIFY_NAV_BAR_AND_IME)
    public void testMagnifyNavAndIme_flagOnAndSettingsEnabled_typeIsIme_shouldMagnify() {
    public void testMagnifyIme_flagOnAndSettingsEnabled_typeIsIme_shouldMagnify() {
        final ContentResolver cr = useFakeSettingsProvider();
        Settings.Secure.putInt(cr,
                Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MAGNIFY_NAV_AND_IME, 1);
@@ -363,22 +363,19 @@ public class WindowStateTests extends WindowTestsBase {
        final WindowState imeWindow = newWindowBuilder("imeWindow", TYPE_INPUT_METHOD).build();
        final WindowState imeDialogWindow =
                newWindowBuilder("imeDialogWindow", TYPE_INPUT_METHOD_DIALOG).build();
        final WindowState navWindow = newWindowBuilder("navWindow", TYPE_NAVIGATION_BAR).build();

        imeWindow.setHasSurface(true);
        imeDialogWindow.setHasSurface(true);
        navWindow.setHasSurface(true);

        assertTrue(mWm.isMagnifyNavAndImeEnabled());
        assertTrue(mWm.isMagnifyImeEnabled());
        assertTrue(imeWindow.shouldMagnify());
        assertTrue(imeDialogWindow.shouldMagnify());
        assertTrue(navWindow.shouldMagnify());
    }

    @Test
    @EnableFlags(com.android.server.accessibility
            .Flags.FLAG_ENABLE_MAGNIFICATION_MAGNIFY_NAV_BAR_AND_IME)
    public void testMagnifyNavAndIme_flagOnAndDefaultEnable_typeIsIme_shouldMagnify() {
    public void testMagnifyIme_flagOnAndDefaultEnable_typeIsIme_shouldMagnify() {
        useFakeSettingsProvider();  // This resets the Settings.Secure value.
        spyOn(mContext.getResources());
        when(mContext.getResources().getBoolean(
@@ -387,24 +384,21 @@ public class WindowStateTests extends WindowTestsBase {
        final WindowState imeWindow = newWindowBuilder("imeWindow", TYPE_INPUT_METHOD).build();
        final WindowState imeDialogWindow =
                newWindowBuilder("imeDialogWindow", TYPE_INPUT_METHOD_DIALOG).build();
        final WindowState navWindow = newWindowBuilder("navWindow", TYPE_NAVIGATION_BAR).build();

        imeWindow.setHasSurface(true);
        imeDialogWindow.setHasSurface(true);
        navWindow.setHasSurface(true);

        mWm.mSettingsObserver.loadSettings();

        assertTrue(mWm.isMagnifyNavAndImeEnabled());
        assertTrue(mWm.isMagnifyImeEnabled());
        assertTrue(imeWindow.shouldMagnify());
        assertTrue(imeDialogWindow.shouldMagnify());
        assertTrue(navWindow.shouldMagnify());
    }

    @Test
    @EnableFlags(com.android.server.accessibility
            .Flags.FLAG_ENABLE_MAGNIFICATION_MAGNIFY_NAV_BAR_AND_IME)
    public void testMagnifyNavAndIme_flagOnAndDefaultDisable_typeIsIme_shouldNotMagnify() {
    public void testMagnifyIme_flagOnAndDefaultDisable_typeIsIme_shouldNotMagnify() {
        useFakeSettingsProvider();  // This resets the Settings.Secure value.
        spyOn(mContext.getResources());
        when(mContext.getResources().getBoolean(
@@ -421,7 +415,7 @@ public class WindowStateTests extends WindowTestsBase {

        mWm.mSettingsObserver.loadSettings();

        assertFalse(mWm.isMagnifyNavAndImeEnabled());
        assertFalse(mWm.isMagnifyImeEnabled());
        assertFalse(imeWindow.shouldMagnify());
        assertFalse(imeDialogWindow.shouldMagnify());
        assertFalse(navWindow.shouldMagnify());