diff options
author | Koji Fukui <koji.fukui@sonymobile.com> | 2014-03-14 21:20:21 +0900 |
---|---|---|
committer | Sascha Prueter <saschap@google.com> | 2014-03-25 17:04:27 +0000 |
commit | 9bc5f2f457844bd75747be40bd4593a2378d7c3d (patch) | |
tree | 8ac43ddd1c953ea5a6acf543fb8490364b8a9084 | |
parent | b78dc69c2be43852dcd7150db2b545f9b4110232 (diff) | |
download | frameworks_base-9bc5f2f457844bd75747be40bd4593a2378d7c3d.zip frameworks_base-9bc5f2f457844bd75747be40bd4593a2378d7c3d.tar.gz frameworks_base-9bc5f2f457844bd75747be40bd4593a2378d7c3d.tar.bz2 |
Don't wait for finishing animation when second display is disconnected
Basically WindowManagerService wait for finishing animation when
a window is removed. But when second display is disconnected, windows
on second display can't be shown even if animation is waited for.
On the contrary, it keeps on waiting for finishing the animation
in special case.
With this fix windows are immediately removed without waiting for
animation when second display is disconnected.
(Cherry picked from aosp 39f7068ed903f747d6885117dc1bac69f626ae91)
Change-Id: I1354c193c04db394a21a11c174e10c8e7da17a0e
Fixes bug: b/13632129
-rw-r--r-- | services/java/com/android/server/wm/WindowManagerService.java | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 3ed5076..f4b4db9 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -2373,6 +2373,11 @@ public class WindowManagerService extends IWindowManager.Stub } public void removeWindowLocked(Session session, WindowState win) { + removeWindowLocked(session, win, false); + } + + private void removeWindowLocked(Session session, WindowState win, + boolean forceRemove) { if (win.mAttrs.type == TYPE_APPLICATION_STARTING) { if (DEBUG_STARTING_WINDOW) Slog.d(TAG, "Starting window removed " + win); removeStartingWindowTimeout(win.mAppToken); @@ -2423,7 +2428,7 @@ public class WindowManagerService extends IWindowManager.Stub mDisplayMagnifier.onWindowTransitionLocked(win, transit); } } - if (win.mExiting || win.mWinAnimator.isAnimating()) { + if (!forceRemove && (win.mExiting || win.mWinAnimator.isAnimating())) { // The exit animation is running... wait for it! //Slog.i(TAG, "*** Running exit animation..."); win.mExiting = true; @@ -10840,7 +10845,7 @@ public class WindowManagerService extends IWindowManager.Stub WindowList windows = displayContent.getWindowList(); while (!windows.isEmpty()) { final WindowState win = windows.get(windows.size() - 1); - removeWindowLocked(win.mSession, win); + removeWindowLocked(win.mSession, win, true); } } mAnimator.removeDisplayLocked(displayId); |