diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index de485de3a8d5f..7f400793647de 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -2355,6 +2355,10 @@ final class WindowState implements WindowManagerPolicy.WindowState { return mDragResizing; } + boolean isDockedResizing() { + return mDragResizing && getResizeMode() == DRAG_RESIZE_MODE_DOCKED_DIVIDER; + } + void dump(PrintWriter pw, String prefix, boolean dumpAll) { final TaskStack stack = getStack(); pw.print(prefix); pw.print("mDisplayId="); pw.print(getDisplayId()); diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index 9e3a4db5345da..9c25f63dfa2ab 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -1125,13 +1125,21 @@ class WindowStateAnimator { final int top = w.mYOffset + w.mFrame.top; // Initialize the decor rect to the entire frame. - if (w.isDragResizing() && w.getResizeMode() == DRAG_RESIZE_MODE_DOCKED_DIVIDER) { + if (w.isDockedResizing() || + (w.isChildWindow() && w.mAttachedWindow.isDockedResizing())) { // If we are resizing with the divider, the task bounds might be smaller than the // stack bounds. The system decor is used to clip to the task bounds, which we don't // want in this case in order to avoid holes. + // + // We take care to not shrink the width, for surfaces which are larger than + // the display region. Of course this area will not eventually be visible + // but if we truncate the width now, we will calculate incorrectly + // when adjusting to the stack bounds. final DisplayInfo displayInfo = w.getDisplayContent().getDisplayInfo(); - mSystemDecorRect.set(0, 0, displayInfo.logicalWidth, displayInfo.logicalHeight); + mSystemDecorRect.set(0, 0, + Math.max(width, displayInfo.logicalWidth), + Math.max(height, displayInfo.logicalHeight)); } else { mSystemDecorRect.set(0, 0, width, height); }