diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 91f75e57c092f..1a6743851f408 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -2409,6 +2409,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mDisplayPolicy.onConfigurationChanged(); mPinnedTaskController.onPostDisplayConfigurationChanged(); } + // Update IME parent if needed. + updateImeParent(); if (lastOrientation != getConfiguration().orientation) { getMetricsLogger().write( @@ -3947,7 +3949,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp } // Otherwise, we just attach it to where the display area policy put it. - return mImeWindowsContainer.getParent().getSurfaceControl(); + return mImeWindowsContainer.getParent() != null + ? mImeWindowsContainer.getParent().getSurfaceControl() : null; } void setLayoutNeeded() { 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 e09606e3389f2..4afad30b34fc0 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java @@ -349,7 +349,9 @@ public class DisplayContentTests extends WindowTestsBase { doReturn(imeSurfaceParent).when(mDisplayContent).computeImeParent(); spyOn(imeContainer); - mDisplayContent.updateImeParent(); + mDisplayContent.setImeInputTarget(startingWin); + mDisplayContent.onConfigurationChanged(new Configuration()); + verify(mDisplayContent).updateImeParent(); // Force reassign the relative layer when the IME surface parent is changed. verify(imeContainer).assignRelativeLayer(any(), eq(imeSurfaceParent), anyInt(), eq(true));