diff options
3 files changed, 10 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 1b893270b62b..d8a45387c5bf 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -9425,7 +9425,7 @@ public class WindowManagerService extends IWindowManager.Stub if (task != null && task.mStack.getBoundsAnimating()) { return; } - w.setInsetsChanged(); + w.setReportResizeHints(); boolean configChanged = w.isConfigChanged(); if (DEBUG_CONFIGURATION && configChanged) { Slog.v(TAG_WM, "Win " + w + " config changed: " @@ -9437,11 +9437,11 @@ public class WindowManagerService extends IWindowManager.Stub + ": configChanged=" + configChanged + " dragResizingChanged=" + dragResizingChanged + " last=" + w.mLastFrame + " frame=" + w.mFrame); - w.mLastFrame.set(w.mFrame); if (w.mContentInsetsChanged || w.mVisibleInsetsChanged || winAnimator.mSurfaceResized || w.mOutsetsChanged + || w.mFrameSizeChanged || configChanged || dragResizingChanged || !w.isResizedWhileNotDragResizingReported()) { @@ -9474,6 +9474,7 @@ public class WindowManagerService extends IWindowManager.Stub w.mLastVisibleInsets.set(w.mVisibleInsets); w.mLastStableInsets.set(w.mStableInsets); w.mLastOutsets.set(w.mOutsets); + w.mLastFrame.set(w.mFrame); makeWindowFreezingScreenIfNeededLocked(w); // If the orientation is changing, or we're starting or ending // a drag resizing action, then we need to hold off on unfreezing diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 1ac3d44c7a45..25ad07ef07a7 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -287,6 +287,7 @@ final class WindowState implements WindowManagerPolicy.WindowState { // "Real" frame that the application sees, in display coordinate space. final Rect mFrame = new Rect(); final Rect mLastFrame = new Rect(); + boolean mFrameSizeChanged = false; // Frame that is scaled to the application's coordinate space when in // screen size compatibility mode. final Rect mCompatFrame = new Rect(); @@ -1055,14 +1056,16 @@ final class WindowState implements WindowManagerPolicy.WindowState { return mAppToken != null && mAppToken.voiceInteraction; } - boolean setInsetsChanged() { + boolean setReportResizeHints() { mOverscanInsetsChanged |= !mLastOverscanInsets.equals(mOverscanInsets); mContentInsetsChanged |= !mLastContentInsets.equals(mContentInsets); mVisibleInsetsChanged |= !mLastVisibleInsets.equals(mVisibleInsets); mStableInsetsChanged |= !mLastStableInsets.equals(mStableInsets); mOutsetsChanged |= !mLastOutsets.equals(mOutsets); + mFrameSizeChanged |= (mLastFrame.width() != mFrame.width()) || + (mLastFrame.height() != mFrame.height()); return mOverscanInsetsChanged || mContentInsetsChanged || mVisibleInsetsChanged - || mOutsetsChanged; + || mOutsetsChanged || mFrameSizeChanged; } public DisplayContent getDisplayContent() { @@ -2344,6 +2347,7 @@ final class WindowState implements WindowManagerPolicy.WindowState { mVisibleInsetsChanged = false; mStableInsetsChanged = false; mOutsetsChanged = false; + mFrameSizeChanged = false; mResizedWhileNotDragResizingReported = true; mWinAnimator.mSurfaceResized = false; } catch (RemoteException e) { diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java index e5f972886ccf..0bd5eafa3293 100644 --- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java +++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java @@ -974,7 +974,7 @@ class WindowSurfacePlacer { // windows, since that means "perform layout as normal, // just don't display"). if (!gone || !win.mHaveFrame || win.mLayoutNeeded - || ((win.isConfigChanged() || win.setInsetsChanged()) + || ((win.isConfigChanged() || win.setReportResizeHints()) && !win.isGoneForLayoutLw() && ((win.mAttrs.privateFlags & PRIVATE_FLAG_KEYGUARD) != 0 || (win.mHasSurface && win.mAppToken != null && |