diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java index f8a454027ec55..f52f91cd6a3bc 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -1482,11 +1482,13 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree void layoutLetterbox(WindowState winHint) { final WindowState w = findMainWindow(); - if (w != winHint && winHint != null && w != null) { + if (w == null || winHint != null && w != winHint) { return; } - final boolean needsLetterbox = w != null && w.isLetterboxedAppWindow() - && fillsParent() && w.hasDrawnLw(); + final boolean surfaceReady = w.hasDrawnLw() // Regular case + || w.mWinAnimator.mSurfaceDestroyDeferred // The preserved surface is still ready. + || w.isDragResizeChanged(); // Waiting for relayoutWindow to call preserveSurface. + final boolean needsLetterbox = w.isLetterboxedAppWindow() && fillsParent() && surfaceReady; if (needsLetterbox) { if (mLetterbox == null) { mLetterbox = new Letterbox(() -> makeChildSurface(null));