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

Commit 6c240d14 authored by Taran Singh's avatar Taran Singh
Browse files

Don't allow pinned window to be IME target

SysUi's PIP window (PipMenuActivity) is always focusable,
transparent and yet never should be an IME target.

Bug: 158881678
Test: atest WindowStateTests#testCanBeImeTarget
Change-Id: Ie863dd1037d0c446f35a8b1ec07c18efaddb1840
parent 06b2e1cb
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -2339,6 +2339,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
            return false;
            return false;
        }
        }


        if (inPinnedWindowingMode()) {
            return false;
        }

        final boolean windowsAreFocusable = mActivityRecord == null || mActivityRecord.windowsAreFocusable();
        final boolean windowsAreFocusable = mActivityRecord == null || mActivityRecord.windowsAreFocusable();
        if (!windowsAreFocusable) {
        if (!windowsAreFocusable) {
            // This window can't be an IME target if the app's windows should not be focusable.
            // This window can't be an IME target if the app's windows should not be focusable.
+7 −0
Original line number Original line Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.server.wm;


import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
import static android.hardware.camera2.params.OutputConfiguration.ROTATION_90;
import static android.hardware.camera2.params.OutputConfiguration.ROTATION_90;
import static android.view.InsetsState.ITYPE_STATUS_BAR;
import static android.view.InsetsState.ITYPE_STATUS_BAR;
@@ -244,6 +245,12 @@ public class WindowStateTests extends WindowTestsBase {
        appWindow.mAttrs.flags &= ~FLAG_NOT_FOCUSABLE;
        appWindow.mAttrs.flags &= ~FLAG_NOT_FOCUSABLE;
        assertTrue(appWindow.canBeImeTarget());
        assertTrue(appWindow.canBeImeTarget());


        // Verify PINNED windows can't be IME target.
        int initialMode = appWindow.mActivityRecord.getWindowingMode();
        appWindow.mActivityRecord.setWindowingMode(WINDOWING_MODE_PINNED);
        assertFalse(appWindow.canBeImeTarget());
        appWindow.mActivityRecord.setWindowingMode(initialMode);

        // Make windows invisible
        // Make windows invisible
        appWindow.hideLw(false /* doAnimation */);
        appWindow.hideLw(false /* doAnimation */);
        imeWindow.hideLw(false /* doAnimation */);
        imeWindow.hideLw(false /* doAnimation */);