From 48a87a542684bcfd4d5356c7489f9f5f37510c71 Mon Sep 17 00:00:00 2001 From: Chong Zhang Date: Thu, 3 Dec 2015 15:36:21 -0800 Subject: [PATCH] Fix window disappearing when docking a second app When moving app1 to docked stack, the app2 is resized while in background (fullscreen stack). Because of the config change, mWillReplaceWindow is marked true. But since the app2 is in GONE state, all updates of mFrame are skipped. When it's made visible again, because mWillReplaceWindow is set, update of mFrame in computeFrameLw() is still skipped, resulting in wrong mFrame being used. The fix here is to not set mWillReplaceWindow if the app is not visible, as we don't need to preserve old window. Also fix position change check. bug: 25937471 Change-Id: Iea506296ebd5c2a108368fb2d1d77cdc31a36cdc --- services/core/java/com/android/server/wm/Task.java | 2 +- .../core/java/com/android/server/wm/WindowManagerService.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 22f1d634e9556..e4f6c56454462 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -252,7 +252,7 @@ class Task implements DimLayer.DimLayerUser { } int boundsChange = BOUNDS_CHANGE_NONE; - if (mBounds.left != bounds.left || mBounds.right != bounds.right) { + if (mBounds.left != bounds.left || mBounds.top != bounds.top) { boundsChange |= BOUNDS_CHANGE_POSITION; } if (mBounds.width() != bounds.width() || mBounds.height() != bounds.height()) { diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 1bb5ad029c4c2..53689abf4aaad 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -10185,7 +10185,7 @@ public class WindowManagerService extends IWindowManager.Stub public void setReplacingWindow(IBinder token, boolean animate) { synchronized (mWindowMap) { AppWindowToken appWindowToken = findAppWindowToken(token); - if (appWindowToken == null) { + if (appWindowToken == null || !appWindowToken.isVisible()) { Slog.w(TAG, "Attempted to set replacing window on non-existing app token " + token); return; }