diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/DisplayContent.java | 2 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java | 22 |
2 files changed, 23 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 57812c1d604c..fa5da306d5f5 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -1884,7 +1884,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp /** Returns {@code true} if the IME is possible to show on the launching activity. */ boolean mayImeShowOnLaunchingActivity(@NonNull ActivityRecord r) { - final WindowState win = r.findMainWindow(); + final WindowState win = r.findMainWindow(false /* exclude starting window */); if (win == null) { 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 7330411d1dd7..340b591e4086 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java @@ -53,6 +53,8 @@ import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_M import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_UNRESTRICTED_GESTURE_EXCLUSION; +import static android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN; +import static android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; @@ -2827,6 +2829,26 @@ public class DisplayContentTests extends WindowTestsBase { mDisplayContent.getKeepClearAreas()); } + @Test + public void testMayImeShowOnLaunchingActivity_negativeWhenSoftInputModeHidden() { + final ActivityRecord app = createActivityRecord(mDisplayContent); + final WindowState appWin = createWindow(null, TYPE_BASE_APPLICATION, app, "appWin"); + createWindow(null, TYPE_APPLICATION_STARTING, app, "startingWin"); + app.mStartingData = mock(SnapshotStartingData.class); + // Assume the app has shown IME before and warm launching with a snapshot window. + doReturn(true).when(app.mStartingData).hasImeSurface(); + + // Expect true when this IME focusable activity will show IME during launching. + assertTrue(WindowManager.LayoutParams.mayUseInputMethod(appWin.mAttrs.flags)); + assertTrue(mDisplayContent.mayImeShowOnLaunchingActivity(app)); + + // Not expect IME will be shown during launching if the app's softInputMode is hidden. + appWin.mAttrs.softInputMode = SOFT_INPUT_STATE_ALWAYS_HIDDEN; + assertFalse(mDisplayContent.mayImeShowOnLaunchingActivity(app)); + appWin.mAttrs.softInputMode = SOFT_INPUT_STATE_HIDDEN; + assertFalse(mDisplayContent.mayImeShowOnLaunchingActivity(app)); + } + private void removeRootTaskTests(Runnable runnable) { final TaskDisplayArea taskDisplayArea = mRootWindowContainer.getDefaultTaskDisplayArea(); final Task rootTask1 = taskDisplayArea.createRootTask(WINDOWING_MODE_FULLSCREEN, |