diff options
| author | 2024-08-20 01:26:56 +0000 | |
|---|---|---|
| committer | 2024-08-20 01:26:56 +0000 | |
| commit | 856e94e08939bc3b61ee23280b29a07d940ada63 (patch) | |
| tree | a4073b12323f36abc43efbefc1ab1164f2baffa4 | |
| parent | 5548a776acf7f8692b91e056e1ae9e2ee0a1871f (diff) | |
| parent | 5679e2f887965412e8d8e1db783d2843b53e0d83 (diff) | |
Merge "Do not keep focus on IME dialog if its target is invisible" into main
| -rw-r--r-- | services/core/java/com/android/server/wm/DisplayContent.java | 4 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java | 8 |
2 files changed, 7 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 86285fbc58bb..129931e92822 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -857,8 +857,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp return false; } if (w.mAttrs.type == TYPE_INPUT_METHOD_DIALOG && mImeLayeringTarget != null - && !mImeLayeringTarget.isRequestedVisible(ime()) - && !mImeLayeringTarget.isVisibleRequested()) { + && !(mImeLayeringTarget.isRequestedVisible(ime()) + && mImeLayeringTarget.isVisibleRequested())) { return false; } 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 ec5e51e7b842..58e919dda964 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java @@ -2796,15 +2796,17 @@ public class DisplayContentTests extends WindowTestsBase { final WindowState imeAppTarget = createWindow(null, TYPE_BASE_APPLICATION, mDisplayContent, "imeAppTarget"); mDisplayContent.setImeLayeringTarget(imeAppTarget); - spyOn(imeAppTarget); - doReturn(true).when(imeAppTarget).isRequestedVisible(ime()); + imeAppTarget.setRequestedVisibleTypes(ime()); assertEquals(imeMenuDialog, mDisplayContent.findFocusedWindow()); // Verify imeMenuDialog doesn't be focused window if the next IME target is closing. final WindowState nextImeAppTarget = createWindow(null, TYPE_BASE_APPLICATION, mDisplayContent, "nextImeAppTarget"); makeWindowVisibleAndDrawn(nextImeAppTarget); - nextImeAppTarget.mActivityRecord.commitVisibility(false, false); + // Even if the app still requests IME, the ime dialog should not gain focus if the target + // app is invisible. + nextImeAppTarget.setRequestedVisibleTypes(ime()); + nextImeAppTarget.mActivityRecord.setVisibility(false); mDisplayContent.setImeLayeringTarget(nextImeAppTarget); assertNotEquals(imeMenuDialog, mDisplayContent.findFocusedWindow()); } |