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

Commit f5816e7d authored by Tarandeep Singh's avatar Tarandeep Singh Committed by Taran Singh
Browse files

Fix FLAG_NOT_FOCUSABLE ime target

Windows with FLAG_NOT_FOCUSABLE can not be IME target unless alpha is
zero (i.e. app is using transparent window to detect IME for legacy
reasons).
Going forward we can improve this with the todo already mentioned in the
code block.

Bug: 145812508
Fix: 149899590
Test: Manually verified using steps in bug.

Merged-In: I0e7db484dd4f9b584998b9f922fd46030fb6fb72
Change-Id: I0e7db484dd4f9b584998b9f922fd46030fb6fb72
(cherry picked from commit f3a2b52e)
parent d506a78e
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -2256,9 +2256,9 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
            return false;
        }

        if (PixelFormat.formatHasAlpha(mAttrs.format)) {
            // Support legacy use cases where transparent windows can still be ime target with
            // FLAG_NOT_FOCUSABLE and ALT_FOCUSABLE_IM set.
        if (PixelFormat.formatHasAlpha(mAttrs.format) && mAttrs.alpha == 0) {
            // Support legacy use cases where completely transparent windows can still be ime target
            // with FLAG_NOT_FOCUSABLE and ALT_FOCUSABLE_IM set.
            // Certain apps listen for IME insets using transparent windows and ADJUST_NOTHING to
            // manually synchronize app content to IME animation b/144619551.
            // TODO(b/145812508): remove this once new focus management is complete b/141738570
+2 −0
Original line number Diff line number Diff line
@@ -251,9 +251,11 @@ public class WindowStateTests extends WindowTestsBase {

        // b/145812508: special legacy use-case for transparent/translucent windows.
        appWindow.mAttrs.format = PixelFormat.TRANSPARENT;
        appWindow.mAttrs.alpha = 0;
        assertTrue(appWindow.canBeImeTarget());

        appWindow.mAttrs.format = PixelFormat.OPAQUE;
        appWindow.mAttrs.alpha = 1;
        appWindow.mAttrs.flags &= ~FLAG_ALT_FOCUSABLE_IM;
        assertFalse(appWindow.canBeImeTarget());
        appWindow.mAttrs.flags &= ~FLAG_NOT_FOCUSABLE;