summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java5
-rw-r--r--services/core/java/com/android/server/wm/WindowState.java8
-rw-r--r--services/core/java/com/android/server/wm/WindowSurfacePlacer.java2
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 &&