From cef37fb481d16eda2b304887a8738ed599bc1b21 Mon Sep 17 00:00:00 2001 From: satok Date: Mon, 24 Oct 2011 21:49:38 +0900 Subject: [PATCH] Fix a bug where surface crashes when the enter animation starts while the exit animation has not yet finished Bug: 5446482 Change-Id: I2e9f2e91ab5e8b22896d12e08fac76c72c997274 --- .../android/server/wm/WindowManagerService.java | 6 +----- .../java/com/android/server/wm/WindowState.java | 14 +++++++++++++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 3af3e06d3b368..f52a580354641 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -2578,11 +2578,7 @@ public class WindowManagerService extends IWindowManager.Stub (win.mAppToken == null || !win.mAppToken.clientHidden)) { displayed = !win.isVisibleLw(); if (win.mExiting) { - win.mExiting = false; - if (win.mAnimation != null) { - win.mAnimation.cancel(); - win.mAnimation = null; - } + win.cancelExitAnimationForNextAnimationLocked(); } if (win.mDestroying) { win.mDestroying = false; diff --git a/services/java/com/android/server/wm/WindowState.java b/services/java/com/android/server/wm/WindowState.java index eeffb028c0cd1..6988979f85422 100644 --- a/services/java/com/android/server/wm/WindowState.java +++ b/services/java/com/android/server/wm/WindowState.java @@ -596,6 +596,18 @@ final class WindowState implements WindowManagerPolicy.WindowState { } } + // TODO: Fix and call finishExit() instead of cancelExitAnimationForNextAnimationLocked() + // for avoiding the code duplication. + void cancelExitAnimationForNextAnimationLocked() { + if (!mExiting) return; + if (mAnimation != null) { + mAnimation.cancel(); + mAnimation = null; + destroySurfaceLocked(); + } + mExiting = false; + } + Surface createSurfaceLocked() { if (mSurface == null) { mReportDestroySurface = false; @@ -1742,4 +1754,4 @@ final class WindowState implements WindowManagerPolicy.WindowState { } return mStringNameCache; } -} \ No newline at end of file +}