diff options
| author | 2020-04-16 14:03:53 +0000 | |
|---|---|---|
| committer | 2020-04-16 14:03:53 +0000 | |
| commit | f9e220f03d7ad13f45ae9fa6eb95f478b76b1e62 (patch) | |
| tree | 7fbcc9eb75e24d640b69982ebb4e1ac9aa634aa8 | |
| parent | 5895295da0cb8648a5d4423561f61055b4e09f53 (diff) | |
| parent | b895e20c5261532d6eac0600463ca374b63d897a (diff) | |
Merge "Early out when window is no longer in hierarchy" into rvc-dev
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowState.java | 4 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java | 12 |
2 files changed, 15 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index af680701a33e..2b1f174d1175 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -5330,7 +5330,9 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP // this promotion. final WindowState imeTarget = getDisplayContent().mInputMethodTarget; boolean inTokenWithAndAboveImeTarget = imeTarget != null && imeTarget != this - && imeTarget.mToken == mToken && imeTarget.compareTo(this) <= 0; + && imeTarget.mToken == mToken + && getParent() != null + && imeTarget.compareTo(this) <= 0; return inTokenWithAndAboveImeTarget; } return false; diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java index 71b35b62366e..65fb2c0451d8 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java @@ -657,4 +657,16 @@ public class WindowStateTests extends WindowTestsBase { win0.mActivityRecord.getStack().setFocusable(false); assertTrue(win0.cantReceiveTouchInput()); } + + @Test + public void testNeedsRelativeLayeringToIme_notAttached() { + WindowState sameTokenWindow = createWindow(null, TYPE_BASE_APPLICATION, mAppWindow.mToken, + "SameTokenWindow"); + mDisplayContent.mInputMethodTarget = mAppWindow; + sameTokenWindow.mActivityRecord.getStack().setWindowingMode( + WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); + assertTrue(sameTokenWindow.needsRelativeLayeringToIme()); + sameTokenWindow.removeImmediately(); + assertFalse(sameTokenWindow.needsRelativeLayeringToIme()); + } } |