Loading services/core/java/com/android/server/wm/ActivityRecord.java +1 −1 Original line number Diff line number Diff line Loading @@ -6865,7 +6865,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } // An activity in size compatibility mode may have override bounds which equals to its // parent bounds, so the exact bounds should also be checked to allow IME window to attach // to the activity. See {@link DisplayContent#isImeAttachedToApp}. // to the activity. See {@link DisplayContent#shouldImeAttachedToApp}. final WindowContainer parent = getParent(); return parent == null || parent.getBounds().equals(overrideBounds); } Loading services/core/java/com/android/server/wm/DisplayContent.java +20 −4 Original line number Diff line number Diff line Loading @@ -1539,7 +1539,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp // to cover the activity configuration change. return false; } if (r.mStartingData != null && r.mStartingData.hasImeSurface()) { if ((r.mStartingData != null && r.mStartingData.hasImeSurface()) || (mInsetsStateController.getImeSourceProvider() .getSource().getVisibleFrame() != null)) { // Currently it is unknown that when will IME window be ready. Reject the case to // avoid flickering by showing IME in inconsistent orientation. return false; Loading Loading @@ -3633,7 +3635,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp return mImeInputTarget != null && !mImeInputTarget.inMultiWindowMode(); } boolean isImeAttachedToApp() { boolean shouldImeAttachedToApp() { return isImeControlledByApp() && mImeLayeringTarget != null && mImeLayeringTarget.mActivityRecord != null Loading @@ -3646,6 +3648,20 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp && mImeLayeringTarget.matchesDisplayAreaBounds(); } /** * Unlike {@link #shouldImeAttachedToApp()}, this method returns {@code @true} only when both * the IME layering target is valid to attach the IME surface to the app, and the * {@link #mInputMethodSurfaceParent} of the {@link ImeContainer} has actually attached to * the app. (i.e. Even if {@link #shouldImeAttachedToApp()} returns {@code true}, calling this * method will return {@code false} if the IME surface doesn't actually attach to the app.) */ boolean isImeAttachedToApp() { return shouldImeAttachedToApp() && mInputMethodSurfaceParent != null && mInputMethodSurfaceParent.isSameSurface( mImeLayeringTarget.mActivityRecord.getSurfaceControl()); } /** * Finds the window which can host IME if IME target cannot host it. * e.g. IME target cannot host IME when it's display has a parent display OR when display Loading Loading @@ -3774,7 +3790,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp @VisibleForTesting void attachAndShowImeScreenshotOnTarget() { // No need to attach screenshot if the IME target not exists or screen is off. if (!isImeAttachedToApp() || !mWmService.mPolicy.isScreenOn()) { if (!shouldImeAttachedToApp() || !mWmService.mPolicy.isScreenOn()) { return; } Loading Loading @@ -3942,7 +3958,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp // Attach it to app if the target is part of an app and such app is covering the entire // screen. If it's not covering the entire screen the IME might extend beyond the apps // bounds. if (allowAttachToApp && isImeAttachedToApp()) { if (allowAttachToApp && shouldImeAttachedToApp()) { return mImeLayeringTarget.mActivityRecord.getSurfaceControl(); } Loading services/core/java/com/android/server/wm/TaskSnapshotController.java +1 −1 Original line number Diff line number Diff line Loading @@ -425,7 +425,7 @@ class TaskSnapshotController { final WindowState imeWindow = task.getDisplayContent().mInputMethodWindow; // Exclude IME window snapshot when IME isn't proper to attach to app. final boolean excludeIme = imeWindow != null && imeWindow.getSurfaceControl() != null && !task.getDisplayContent().isImeAttachedToApp(); && !task.getDisplayContent().shouldImeAttachedToApp(); final WindowState navWindow = task.getDisplayContent().getDisplayPolicy().getNavigationBar(); // If config_attachNavBarToAppDuringTransition is true, the nav bar will be reparent to the Loading services/core/java/com/android/server/wm/WindowState.java +1 −1 Original line number Diff line number Diff line Loading @@ -2309,7 +2309,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP // When the window configuration changed, we need to update the IME control target in // case the app may lose the IME inets control when exiting from split-screen mode, or the // IME parent may failed to attach to the app during rotating the screen. // See DisplayContent#isImeAttachedToApp, DisplayContent#isImeControlledByApp // See DisplayContent#shouldImeAttachedToApp, DisplayContent#isImeControlledByApp if (windowConfigChanged) { getDisplayContent().updateImeControlTarget(); } Loading services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +1 −1 Original line number Diff line number Diff line Loading @@ -1904,7 +1904,7 @@ public class DisplayContentTests extends WindowTestsBase { mDisplayContent.setImeInputTarget(appWin2); mDisplayContent.computeImeTarget(true); assertEquals(appWin2, mDisplayContent.getImeTarget(IME_TARGET_LAYERING)); assertTrue(mDisplayContent.isImeAttachedToApp()); assertTrue(mDisplayContent.shouldImeAttachedToApp()); verify(mDisplayContent, atLeast(1)).attachAndShowImeScreenshotOnTarget(); verify(mWm.mTaskSnapshotController).snapshotImeFromAttachedTask(appWin1.getTask()); Loading Loading
services/core/java/com/android/server/wm/ActivityRecord.java +1 −1 Original line number Diff line number Diff line Loading @@ -6865,7 +6865,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } // An activity in size compatibility mode may have override bounds which equals to its // parent bounds, so the exact bounds should also be checked to allow IME window to attach // to the activity. See {@link DisplayContent#isImeAttachedToApp}. // to the activity. See {@link DisplayContent#shouldImeAttachedToApp}. final WindowContainer parent = getParent(); return parent == null || parent.getBounds().equals(overrideBounds); } Loading
services/core/java/com/android/server/wm/DisplayContent.java +20 −4 Original line number Diff line number Diff line Loading @@ -1539,7 +1539,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp // to cover the activity configuration change. return false; } if (r.mStartingData != null && r.mStartingData.hasImeSurface()) { if ((r.mStartingData != null && r.mStartingData.hasImeSurface()) || (mInsetsStateController.getImeSourceProvider() .getSource().getVisibleFrame() != null)) { // Currently it is unknown that when will IME window be ready. Reject the case to // avoid flickering by showing IME in inconsistent orientation. return false; Loading Loading @@ -3633,7 +3635,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp return mImeInputTarget != null && !mImeInputTarget.inMultiWindowMode(); } boolean isImeAttachedToApp() { boolean shouldImeAttachedToApp() { return isImeControlledByApp() && mImeLayeringTarget != null && mImeLayeringTarget.mActivityRecord != null Loading @@ -3646,6 +3648,20 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp && mImeLayeringTarget.matchesDisplayAreaBounds(); } /** * Unlike {@link #shouldImeAttachedToApp()}, this method returns {@code @true} only when both * the IME layering target is valid to attach the IME surface to the app, and the * {@link #mInputMethodSurfaceParent} of the {@link ImeContainer} has actually attached to * the app. (i.e. Even if {@link #shouldImeAttachedToApp()} returns {@code true}, calling this * method will return {@code false} if the IME surface doesn't actually attach to the app.) */ boolean isImeAttachedToApp() { return shouldImeAttachedToApp() && mInputMethodSurfaceParent != null && mInputMethodSurfaceParent.isSameSurface( mImeLayeringTarget.mActivityRecord.getSurfaceControl()); } /** * Finds the window which can host IME if IME target cannot host it. * e.g. IME target cannot host IME when it's display has a parent display OR when display Loading Loading @@ -3774,7 +3790,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp @VisibleForTesting void attachAndShowImeScreenshotOnTarget() { // No need to attach screenshot if the IME target not exists or screen is off. if (!isImeAttachedToApp() || !mWmService.mPolicy.isScreenOn()) { if (!shouldImeAttachedToApp() || !mWmService.mPolicy.isScreenOn()) { return; } Loading Loading @@ -3942,7 +3958,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp // Attach it to app if the target is part of an app and such app is covering the entire // screen. If it's not covering the entire screen the IME might extend beyond the apps // bounds. if (allowAttachToApp && isImeAttachedToApp()) { if (allowAttachToApp && shouldImeAttachedToApp()) { return mImeLayeringTarget.mActivityRecord.getSurfaceControl(); } Loading
services/core/java/com/android/server/wm/TaskSnapshotController.java +1 −1 Original line number Diff line number Diff line Loading @@ -425,7 +425,7 @@ class TaskSnapshotController { final WindowState imeWindow = task.getDisplayContent().mInputMethodWindow; // Exclude IME window snapshot when IME isn't proper to attach to app. final boolean excludeIme = imeWindow != null && imeWindow.getSurfaceControl() != null && !task.getDisplayContent().isImeAttachedToApp(); && !task.getDisplayContent().shouldImeAttachedToApp(); final WindowState navWindow = task.getDisplayContent().getDisplayPolicy().getNavigationBar(); // If config_attachNavBarToAppDuringTransition is true, the nav bar will be reparent to the Loading
services/core/java/com/android/server/wm/WindowState.java +1 −1 Original line number Diff line number Diff line Loading @@ -2309,7 +2309,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP // When the window configuration changed, we need to update the IME control target in // case the app may lose the IME inets control when exiting from split-screen mode, or the // IME parent may failed to attach to the app during rotating the screen. // See DisplayContent#isImeAttachedToApp, DisplayContent#isImeControlledByApp // See DisplayContent#shouldImeAttachedToApp, DisplayContent#isImeControlledByApp if (windowConfigChanged) { getDisplayContent().updateImeControlTarget(); } Loading
services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +1 −1 Original line number Diff line number Diff line Loading @@ -1904,7 +1904,7 @@ public class DisplayContentTests extends WindowTestsBase { mDisplayContent.setImeInputTarget(appWin2); mDisplayContent.computeImeTarget(true); assertEquals(appWin2, mDisplayContent.getImeTarget(IME_TARGET_LAYERING)); assertTrue(mDisplayContent.isImeAttachedToApp()); assertTrue(mDisplayContent.shouldImeAttachedToApp()); verify(mDisplayContent, atLeast(1)).attachAndShowImeScreenshotOnTarget(); verify(mWm.mTaskSnapshotController).snapshotImeFromAttachedTask(appWin1.getTask()); Loading