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

Commit f5886ece authored by Jean Chen's avatar Jean Chen Committed by Android (Google) Code Review
Browse files

Merge "fix(magnify_ime): Make inline suggestions tooltip is magnified by settings" into main

parents faf9f566 7b8ece07
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -3604,9 +3604,8 @@ public interface WindowManager extends ViewManager {
        public static final int PRIVATE_FLAG_EXCLUDE_FROM_SCREEN_MAGNIFICATION = 1 << 21;

        /**
         * Flag to prevent the window from being magnified by the accessibility magnifier.
         * Flag to prevent the window from being magnified by the accessibility magnification.
         *
         * TODO(b/190623172): This is a temporary solution and need to find out another way instead.
         * @hide
         */
        public static final int PRIVATE_FLAG_NOT_MAGNIFIABLE = 1 << 22;
@@ -3641,6 +3640,15 @@ public interface WindowManager extends ViewManager {
         */
        public static final int PRIVATE_FLAG_OPT_OUT_EDGE_TO_EDGE = 1 << 26;

        /**
         * Flag to indicate that this window is part of input method for being magnified by the
         * accessibility magnification
         *
         * TODO(b/190623172): This is a temporary solution and need to find out another way instead.
         * @hide
         */
        public static final int PRIVATE_FLAG_INPUT_METHOD_WINDOW = 1 << 27;

        /**
         * Flag to indicate that the window is controlling how it fits window insets on its own.
         * So we don't need to adjust its attributes for fitting window insets.
@@ -3711,6 +3719,7 @@ public interface WindowManager extends ViewManager {
                SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS,
                PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY,
                PRIVATE_FLAG_EXCLUDE_FROM_SCREEN_MAGNIFICATION,
                PRIVATE_FLAG_INPUT_METHOD_WINDOW,
                PRIVATE_FLAG_NOT_MAGNIFIABLE,
                PRIVATE_FLAG_COLOR_SPACE_AGNOSTIC,
                PRIVATE_FLAG_CONSUME_IME_INSETS,
@@ -3806,6 +3815,10 @@ public interface WindowManager extends ViewManager {
                        mask = PRIVATE_FLAG_EXCLUDE_FROM_SCREEN_MAGNIFICATION,
                        equals = PRIVATE_FLAG_EXCLUDE_FROM_SCREEN_MAGNIFICATION,
                        name = "EXCLUDE_FROM_SCREEN_MAGNIFICATION"),
                @ViewDebug.FlagToString(
                        mask = PRIVATE_FLAG_INPUT_METHOD_WINDOW,
                        equals = PRIVATE_FLAG_INPUT_METHOD_WINDOW,
                        name = "INPUT_METHOD_WINDOW"),
                @ViewDebug.FlagToString(
                        mask = PRIVATE_FLAG_NOT_MAGNIFIABLE,
                        equals = PRIVATE_FLAG_NOT_MAGNIFIABLE,
+1 −1
Original line number Diff line number Diff line
@@ -320,7 +320,7 @@ public final class InlineTooltipUi extends PopupWindow implements AutoCloseable
                params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                        | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
                params.privateFlags |=
                        WindowManager.LayoutParams.PRIVATE_FLAG_NOT_MAGNIFIABLE;
                        WindowManager.LayoutParams.PRIVATE_FLAG_INPUT_METHOD_WINDOW;
                mContentContainer.addOnLayoutChangeListener(mAnchoredOnLayoutChangeListener);
                mWm.addView(mContentContainer, params);
                mShowing = true;
+3 −1
Original line number Diff line number Diff line
@@ -91,6 +91,7 @@ import static android.view.WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON;
import static android.view.WindowManager.LayoutParams.LAST_SUB_WINDOW;
import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
import static android.view.WindowManager.LayoutParams.MATCH_PARENT;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_INPUT_METHOD_WINDOW;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NOT_MAGNIFIABLE;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_OPT_OUT_EDGE_TO_EDGE;
@@ -4949,7 +4950,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
                || mAttrs.type == TYPE_NAVIGATION_BAR_PANEL) {
            return false;
        }
        if (mAttrs.type == TYPE_INPUT_METHOD
        if ((mAttrs.privateFlags & PRIVATE_FLAG_INPUT_METHOD_WINDOW) != 0
                || mAttrs.type == TYPE_INPUT_METHOD
                || mAttrs.type == TYPE_INPUT_METHOD_DIALOG) {
            return mWmService.isMagnifyImeEnabled();
        }
+44 −30
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
import static android.view.WindowManager.LayoutParams.FLAG_SPLIT_TOUCH;
import static android.view.WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_INPUT_METHOD_WINDOW;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_SYSTEM_APPLICATION_OVERLAY;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY;
@@ -296,6 +297,24 @@ public class WindowStateTests extends WindowTestsBase {
        assertFalse(window.isVisibleByPolicy());
    }

    @Test
    public void testShouldMagnify_typeIsMagnificationAndNavBarPanel_shouldNotMagnify() {
        final WindowState a11yMagWindow = newWindowBuilder("a11yMagWindow",
                TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY).build();
        final WindowState magWindow = newWindowBuilder("magWindow",
                TYPE_MAGNIFICATION_OVERLAY).build();
        final WindowState navPanelWindow = newWindowBuilder("navPanelWindow",
                TYPE_NAVIGATION_BAR_PANEL).build();

        a11yMagWindow.setHasSurface(true);
        magWindow.setHasSurface(true);
        navPanelWindow.setHasSurface(true);

        assertFalse(a11yMagWindow.shouldMagnify());
        assertFalse(magWindow.shouldMagnify());
        assertFalse(navPanelWindow.shouldMagnify());
    }

    @Test
    @DisableFlags(com.android.server.accessibility
            .Flags.FLAG_ENABLE_MAGNIFICATION_MAGNIFY_NAV_BAR_AND_IME)
@@ -309,16 +328,18 @@ 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();
        final WindowState privateImeWindow = newWindowBuilder("appWindow",
                TYPE_APPLICATION).build();
        privateImeWindow.mAttrs.privateFlags |= PRIVATE_FLAG_INPUT_METHOD_WINDOW;

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

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

    @Test
@@ -334,37 +355,18 @@ 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();
        final WindowState privateImeWindow = newWindowBuilder("appWindow",
                TYPE_APPLICATION).build();
        privateImeWindow.mAttrs.privateFlags |= PRIVATE_FLAG_INPUT_METHOD_WINDOW;

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

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

    @Test
    public void testMagnifyIme_typeIsMagnification_shouldNotMagnify() {
        final WindowState a11yMagWindow = newWindowBuilder("a11yMagWindow",
                TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY).build();
        final WindowState magWindow = newWindowBuilder("magWindow",
                TYPE_MAGNIFICATION_OVERLAY).build();
        final WindowState navPanelWindow = newWindowBuilder("navPanelWindow",
                TYPE_NAVIGATION_BAR_PANEL).build();
        final WindowState navWindow = newWindowBuilder("navWindow", TYPE_NAVIGATION_BAR).build();

        a11yMagWindow.setHasSurface(true);
        magWindow.setHasSurface(true);
        navPanelWindow.setHasSurface(true);
        navWindow.setHasSurface(true);

        assertFalse(a11yMagWindow.shouldMagnify());
        assertFalse(magWindow.shouldMagnify());
        assertFalse(navPanelWindow.shouldMagnify());
        assertFalse(navWindow.shouldMagnify());
        assertFalse(privateImeWindow.shouldMagnify());
    }

    @Test
@@ -380,13 +382,18 @@ 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 privateImeWindow = newWindowBuilder("appWindow",
                TYPE_APPLICATION).build();
        privateImeWindow.mAttrs.privateFlags |= PRIVATE_FLAG_INPUT_METHOD_WINDOW;

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

        assertTrue(mWm.isMagnifyImeEnabled());
        assertTrue(imeWindow.shouldMagnify());
        assertTrue(imeDialogWindow.shouldMagnify());
        assertTrue(privateImeWindow.shouldMagnify());
    }

    @Test
@@ -401,15 +408,20 @@ 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 privateImeWindow = newWindowBuilder("appWindow",
                TYPE_APPLICATION).build();
        privateImeWindow.mAttrs.privateFlags |= PRIVATE_FLAG_INPUT_METHOD_WINDOW;

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

        mWm.mSettingsObserver.loadSettings();

        assertTrue(mWm.isMagnifyImeEnabled());
        assertTrue(imeWindow.shouldMagnify());
        assertTrue(imeDialogWindow.shouldMagnify());
        assertTrue(privateImeWindow.shouldMagnify());
    }

    @Test
@@ -424,18 +436,20 @@ 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();
        final WindowState privateImeWindow = newWindowBuilder("appWindow",
                TYPE_APPLICATION).build();
        privateImeWindow.mAttrs.privateFlags |= PRIVATE_FLAG_INPUT_METHOD_WINDOW;

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

        mWm.mSettingsObserver.loadSettings();

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

    @Test