diff options
4 files changed, 40 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 0d3535495aff..f0808acee636 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -631,7 +631,7 @@ class Task implements DimLayer.DimLayerUser { // windows since they aren't at the base layer and could be moved around anyway. if (!win.computeDragResizing() && win.mAttrs.type == TYPE_BASE_APPLICATION && !mStack.getBoundsAnimating() && !win.isGoneForLayoutLw()) { - win.mResizedWhileNotDragResizing = true; + win.setResizedWhileNotDragResizing(true); } } if (win.isGoneForLayoutLw()) { diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 3e8e50258e6e..82cd0fa0c25d 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -3066,9 +3066,9 @@ public class WindowManagerService extends IWindowManager.Stub // If we're starting a drag-resize, we'll be changing the surface size as well as // notifying the client to render to with an offset from the surface's top-left. - if (win.isDragResizeChanged() || win.mResizedWhileNotDragResizing) { + if (win.isDragResizeChanged() || win.isResizedWhileNotDragResizing()) { win.setDragResizing(); - win.mResizedWhileNotDragResizing = false; + win.setResizedWhileNotDragResizing(false); // We can only change top level windows to the full-screen surface when // resizing (as we only have one full-screen surface). So there is no need // to preserve and destroy windows which are attached to another, they @@ -9272,7 +9272,7 @@ public class WindowManagerService extends IWindowManager.Stub || w.mOutsetsChanged || configChanged || dragResizingChanged - || w.mResizedWhileNotDragResizing) { + || !w.isResizedWhileNotDragResizingReported()) { if (DEBUG_RESIZE || DEBUG_ORIENTATION) { Slog.v(TAG_WM, "Resize reasons for w=" + w + ": " + " contentInsetsChanged=" + w.mContentInsetsChanged @@ -9286,7 +9286,8 @@ public class WindowManagerService extends IWindowManager.Stub + " surfaceResized=" + winAnimator.mSurfaceResized + " configChanged=" + configChanged + " dragResizingChanged=" + dragResizingChanged - + " resizedWhileNotDragResizing=" + w.mResizedWhileNotDragResizing); + + " resizedWhileNotDragResizingReported=" + + w.isResizedWhileNotDragResizingReported()); } // If it's a dead window left on screen, and the configuration changed, @@ -9308,7 +9309,7 @@ public class WindowManagerService extends IWindowManager.Stub // we need to go through the process of getting informed by the // application when it has finished drawing. if (w.mOrientationChanging || dragResizingChanged - || w.mResizedWhileNotDragResizing) { + || w.isResizedWhileNotDragResizing()) { if (DEBUG_SURFACE_TRACE || DEBUG_ANIM || DEBUG_ORIENTATION || DEBUG_RESIZE) { Slog.v(TAG_WM, "Orientation or resize start waiting for draw" + ", mDrawState=DRAW_PENDING in " + w diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 25709548254f..e5e74a663eb0 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -486,12 +486,11 @@ final class WindowState implements WindowManagerPolicy.WindowState { */ boolean mResizedWhileGone = false; - /** - * Indicates whether we got resized but drag resizing flag was false. In this case, we also - * need to recreate the surface and defer surface bound updates in order to make sure the - * buffer contents and the positioning/size stay in sync. - */ - boolean mResizedWhileNotDragResizing; + /** @see #isResizedWhileNotDragResizing(). */ + private boolean mResizedWhileNotDragResizing; + + /** @see #isResizedWhileNotDragResizingReported(). */ + private boolean mResizedWhileNotDragResizingReported; WindowState(WindowManagerService service, Session s, IWindow c, WindowToken token, WindowState attachedWindow, int appOp, int seq, WindowManager.LayoutParams a, @@ -2326,6 +2325,7 @@ final class WindowState implements WindowManagerPolicy.WindowState { mVisibleInsetsChanged = false; mStableInsetsChanged = false; mOutsetsChanged = false; + mResizedWhileNotDragResizingReported = true; mWinAnimator.mSurfaceResized = false; } catch (RemoteException e) { mOrientationChanging = false; @@ -2428,6 +2428,32 @@ final class WindowState implements WindowManagerPolicy.WindowState { mDragResizingChangeReported = false; } + /** + * Set whether we got resized but drag resizing flag was false. + * @see #isResizedWhileNotDragResizing(). + */ + void setResizedWhileNotDragResizing(boolean resizedWhileNotDragResizing) { + mResizedWhileNotDragResizing = resizedWhileNotDragResizing; + mResizedWhileNotDragResizingReported = !resizedWhileNotDragResizing; + } + + /** + * Indicates whether we got resized but drag resizing flag was false. In this case, we also + * need to recreate the surface and defer surface bound updates in order to make sure the + * buffer contents and the positioning/size stay in sync. + */ + boolean isResizedWhileNotDragResizing() { + return mResizedWhileNotDragResizing; + } + + /** + * @return Whether we reported "resize while not drag resizing" to the application. + * @see #isResizedWhileNotDragResizing() + */ + boolean isResizedWhileNotDragResizingReported() { + return mResizedWhileNotDragResizingReported; + } + int getResizeMode() { return mResizeMode; } diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index 54c421406ebc..aea395de6c0f 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -1408,7 +1408,7 @@ class WindowStateAnimator { final Task task = w.getTask(); // We got resized, so block all updates until we got the new surface. - if (w.mResizedWhileNotDragResizing && !w.isGoneForLayoutLw()) { + if (w.isResizedWhileNotDragResizing() && !w.isGoneForLayoutLw()) { return; } |