summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java16
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java3
2 files changed, 11 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 4c1142257218..1b799dfbdaab 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -733,15 +733,15 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
// dismissing during the task switching to keep the window focus because IME window has
// higher window hierarchy, we don't give it focus if the next IME layering target
// doesn't request IME visible.
- if (w.mIsImWindow && (mImeLayeringTarget == null
+ if (w.mIsImWindow && w.isChildWindow() && (mImeLayeringTarget == null
|| !mImeLayeringTarget.getRequestedVisibility(ITYPE_IME))) {
- if (w.mAttrs.type == TYPE_INPUT_METHOD_DIALOG) {
- return false;
- }
-
- if (w.isChildWindow()) {
- return false;
- }
+ return false;
+ }
+ if (w.mAttrs.type == TYPE_INPUT_METHOD_DIALOG && mImeLayeringTarget != null
+ && !mImeLayeringTarget.getRequestedVisibility(ITYPE_IME)
+ && mImeLayeringTarget.isAnimating(PARENTS | TRANSITION,
+ ANIMATION_TYPE_APP_TRANSITION)) {
+ return false;
}
final ActivityRecord activity = w.mActivityRecord;
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
index c60b8dcf67cf..12fc2f4ea1f4 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
@@ -2223,6 +2223,9 @@ public class DisplayContentTests extends WindowTestsBase {
// request IME visible.
final WindowState nextImeAppTarget =
createWindow(null, TYPE_BASE_APPLICATION, mDisplayContent, "nextImeAppTarget");
+ spyOn(nextImeAppTarget);
+ doReturn(true).when(nextImeAppTarget).isAnimating(PARENTS | TRANSITION,
+ ANIMATION_TYPE_APP_TRANSITION);
mDisplayContent.setImeLayeringTarget(nextImeAppTarget);
assertNotEquals(imeMenuDialog, mDisplayContent.findFocusedWindow());
}