summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/Task.java3
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java3
-rw-r--r--services/core/java/com/android/server/wm/WindowOrganizerController.java11
-rw-r--r--services/core/java/com/android/server/wm/WindowState.java13
4 files changed, 16 insertions, 14 deletions
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 944b82112482..7805e2951a45 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -4623,7 +4623,10 @@ class Task extends TaskFragment {
}
final WindowState w = getTopVisibleAppMainWindow();
if (w != null) {
+ w.mIsSurfacePositionPaused = true;
w.applyWithNextDraw((d) -> {
+ w.mIsSurfacePositionPaused = false;
+ w.updateSurfacePosition(d);
d.merge(t);
});
} else {
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 06bfbacde046..f76bd43ac0ff 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -2529,9 +2529,6 @@ public class WindowManagerService extends IWindowManager.Stub
if (displayPolicy.areSystemBarsForcedConsumedLw()) {
result |= WindowManagerGlobal.RELAYOUT_RES_CONSUME_ALWAYS_SYSTEM_BARS;
}
- if (!win.isGoneForLayout()) {
- win.mResizedWhileGone = false;
- }
if (outFrames != null && outMergedConfiguration != null) {
win.fillClientWindowFramesAndConfiguration(outFrames, outMergedConfiguration,
diff --git a/services/core/java/com/android/server/wm/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java
index e0b959d2c9c8..927c483cc0ea 100644
--- a/services/core/java/com/android/server/wm/WindowOrganizerController.java
+++ b/services/core/java/com/android/server/wm/WindowOrganizerController.java
@@ -826,9 +826,14 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
}
private int applyTaskChanges(Task tr, WindowContainerTransaction.Change c) {
- int effects = applyChanges(tr, c);
final SurfaceControl.Transaction t = c.getBoundsChangeTransaction();
+ // Check bounds change transaction at the beginning because it may pause updating window
+ // surface position. Then the following changes won't apply intermediate position.
+ if (t != null) {
+ tr.setMainWindowSizeChangeTransaction(t);
+ }
+ int effects = applyChanges(tr, c);
if ((c.getChangeMask() & WindowContainerTransaction.Change.CHANGE_HIDDEN) != 0) {
if (tr.setForceHidden(FLAG_FORCE_HIDDEN_FOR_TASK_ORG, c.getHidden())) {
effects = TRANSACT_EFFECTS_LIFECYCLE;
@@ -849,10 +854,6 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
tr.forAllActivities(a -> { a.setWindowingMode(childWindowingMode); });
}
- if (t != null) {
- tr.setMainWindowSizeChangeTransaction(t);
- }
-
Rect enterPipBounds = c.getEnterPipBounds();
if (enterPipBounds != null) {
tr.mDisplayContent.mPinnedTaskController.setEnterPipBounds(enterPipBounds);
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 8bdcff70f88f..6730694bba8a 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -653,9 +653,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
private final Transaction mTmpTransaction;
/**
- * Whether the window was resized by us while it was gone for layout.
+ * Whether the surface position of window is paused to update. Currently it is only used for
+ * {@link Task#setMainWindowSizeChangeTransaction(Transaction)} to synchronize position.
*/
- boolean mResizedWhileGone = false;
+ boolean mIsSurfacePositionPaused;
/**
* During seamless rotation we have two phases, first the old window contents
@@ -2156,9 +2157,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
ProtoLog.d(WM_DEBUG_RESIZE, "onResize: Resizing %s", this);
resizingWindows.add(this);
}
- if (isGoneForLayout()) {
- mResizedWhileGone = true;
- }
super.onResize();
}
@@ -4112,6 +4110,9 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
pw.println(prefix + "mHasSurface=" + mHasSurface
+ " isReadyForDisplay()=" + isReadyForDisplay()
+ " mWindowRemovalAllowed=" + mWindowRemovalAllowed);
+ if (mIsSurfacePositionPaused) {
+ pw.println(prefix + "mIsSurfacePositionPaused=true");
+ }
if (mInvGlobalScale != 1f) {
pw.println(prefix + "mCompatFrame=" + mWindowFrames.mCompatFrame.toShortString(sTmpSB));
}
@@ -5197,7 +5198,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
@Override
@VisibleForTesting
void updateSurfacePosition(Transaction t) {
- if (mSurfaceControl == null) {
+ if (mSurfaceControl == null || mIsSurfacePositionPaused) {
return;
}
if (mActivityRecord != null && mActivityRecord.isConfigurationDispatchPaused()) {