diff options
| author | 2012-12-11 09:54:22 -0800 | |
|---|---|---|
| committer | 2012-12-11 09:54:22 -0800 | |
| commit | 07ce6511378ef2942f8238bb34cfa5116667cbb0 (patch) | |
| tree | 9519dea0865685b0358b97f4aae32c17a8280735 | |
| parent | 151cb90c6093d5b4371b9367b507f8aa7c1a4370 (diff) | |
| parent | ccc9e9b9365ee149c97589524b2abab2f381c6c8 (diff) | |
Merge "Further refine test for window gone."
| -rw-r--r-- | services/java/com/android/server/wm/WindowManagerService.java | 2 | ||||
| -rw-r--r-- | services/java/com/android/server/wm/WindowState.java | 13 |
2 files changed, 13 insertions, 2 deletions
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 9041a9bf09ef..61f00cb8313e 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -7688,7 +7688,7 @@ public class WindowManagerService extends IWindowManager.Stub // soon won't be visible, to avoid wasting time and funky // changes while a window is animating away. final boolean gone = (behindDream && mPolicy.canBeForceHidden(win, win.mAttrs)) - || (win.isGoneForLayoutLw() && !win.isOnScreen()); + || (win.isGoneForLayoutLw() && !(win.isOnScreen() && win.isDrawFinishedLw())); if (DEBUG_LAYOUT && !win.mLayoutAttached) { Slog.v(TAG, "1ST PASS " + win diff --git a/services/java/com/android/server/wm/WindowState.java b/services/java/com/android/server/wm/WindowState.java index 541e8594bb8a..e6441a13ee52 100644 --- a/services/java/com/android/server/wm/WindowState.java +++ b/services/java/com/android/server/wm/WindowState.java @@ -730,7 +730,7 @@ final class WindowState implements WindowManagerPolicy.WindowState { final AppWindowToken atoken = mAppToken; if (atoken != null) { return ((!mAttachedHidden && !atoken.hiddenRequested) - || mWinAnimator.mAnimation != null || atoken.mAppAnimator.animation != null); + || mWinAnimator.mAnimation != null || atoken.mAppAnimator.animation != null); } return !mAttachedHidden || mWinAnimator.mAnimation != null; } @@ -811,6 +811,17 @@ final class WindowState implements WindowManagerPolicy.WindowState { * Returns true if the window has a surface that it has drawn a * complete UI in to. */ + public boolean isDrawFinishedLw() { + return mHasSurface && !mDestroying && + (mWinAnimator.mDrawState == WindowStateAnimator.COMMIT_DRAW_PENDING + || mWinAnimator.mDrawState == WindowStateAnimator.READY_TO_SHOW + || mWinAnimator.mDrawState == WindowStateAnimator.HAS_DRAWN); + } + + /** + * Returns true if the window has a surface that it has drawn a + * complete UI in to. + */ public boolean isDrawnLw() { return mHasSurface && !mDestroying && (mWinAnimator.mDrawState == WindowStateAnimator.READY_TO_SHOW |