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

Commit 4c4ba205 authored by Evan Rosky's avatar Evan Rosky
Browse files

Visible activity can be an ime target

While an activity is still visible, it is still an ime target
even if it is going away.

This fixes the problem with shell transitions where IME is
detached from the live tile while entering recents. During recents,
the the recents activity is on-top but has canBeImeTarget() -> false.
The IME code then searches for the next-highest ImeTarget candidate.
Since the live-tile activity is still visible, it should be the
next candidate.

Bug: 193565597
Test: open app and open IME. Go to recents. IME should be attached
      to app
      atest WindowStateTests
Change-Id: I197359e2c21da4c4f1dedaaa43fd1ca76a135ce8
parent 6489e997
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -2547,7 +2547,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP

        if (DEBUG_INPUT_METHOD) {
            Slog.i(TAG_WM, "isVisibleRequestedOrAdding " + this + ": "
                    + isVisibleRequestedOrAdding());
                    + isVisibleRequestedOrAdding() + " isVisible: " + (isVisible()
                    && mActivityRecord != null && mActivityRecord.isVisible()));
            if (!isVisibleRequestedOrAdding()) {
                Slog.i(TAG_WM, "  mSurfaceController=" + mWinAnimator.mSurfaceController
                        + " relayoutCalled=" + mRelayoutCalled
@@ -2562,7 +2563,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
                }
            }
        }
        return isVisibleRequestedOrAdding();
        return isVisibleRequestedOrAdding()
                || (isVisible() && mActivityRecord != null && mActivityRecord.isVisible());
    }

    private final class DeadWindowEventReceiver extends InputEventReceiver {
+5 −0
Original line number Diff line number Diff line
@@ -252,6 +252,11 @@ public class WindowStateTests extends WindowTestsBase {
        assertFalse(appWindow.canBeImeTarget());
        appWindow.mActivityRecord.setWindowingMode(initialMode);

        // Verify that app window can still be IME target as long as it is visible (even if
        // it is going to become invisible).
        appWindow.mActivityRecord.mVisibleRequested = false;
        assertTrue(appWindow.canBeImeTarget());

        // Make windows invisible
        appWindow.hide(false /* doAnimation */, false /* requestAnim */);
        imeWindow.hide(false /* doAnimation */, false /* requestAnim */);