diff options
| author | 2012-05-08 17:01:43 -0700 | |
|---|---|---|
| committer | 2012-05-08 17:01:43 -0700 | |
| commit | 79b7742cf17c79c529bbcbd1acc2d871a90e8fbc (patch) | |
| tree | 9d914aeca89fa0e4028243e41c13c3e322913818 | |
| parent | a3b6728933c13599f3b2f22aad7016cdaa04d706 (diff) | |
| parent | 0afddcb7f11ddfcaa5d1f5a5db75fce1b5d40253 (diff) | |
Merge "Fix wallpaper exposure bugs." into jb-dev
3 files changed, 43 insertions, 23 deletions
diff --git a/services/java/com/android/server/wm/WindowAnimator.java b/services/java/com/android/server/wm/WindowAnimator.java index 2e817cadc801..55365597eb8e 100644 --- a/services/java/com/android/server/wm/WindowAnimator.java +++ b/services/java/com/android/server/wm/WindowAnimator.java @@ -85,6 +85,15 @@ public class WindowAnimator { mPolicy = policy; } + void hideWallpapersLocked() { + for (final WindowToken token : mService.mWallpaperTokens) { + for (final WindowState wallpaper : token.windows) { + wallpaper.mWinAnimator.hide(); + } + token.hidden = true; + } + } + private void testWallpaperAndBackgroundLocked() { if (mWindowDetachedWallpaper != mDetachedWallpaper) { if (WindowManagerService.DEBUG_WALLPAPER) Slog.v(TAG, diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 6caa3e8a1730..204a6cdd35ff 100755 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -3825,7 +3825,8 @@ public class WindowManagerService extends IWindowManager.Stub synchronized(mWindowMap) { if (DEBUG_APP_TRANSITIONS) Slog.v( TAG, "Prepare app transition: transit=" + transit - + " mNextAppTransition=" + mNextAppTransition); + + " mNextAppTransition=" + mNextAppTransition + + "\nCallers=" + Debug.getCallers(3)); if (okToDisplay()) { if (mNextAppTransition == WindowManagerPolicy.TRANSIT_UNSET || mNextAppTransition == WindowManagerPolicy.TRANSIT_NONE) { @@ -4237,7 +4238,7 @@ public class WindowManagerService extends IWindowManager.Stub e = new RuntimeException(); e.fillInStackTrace(); } - Slog.v(TAG, "setAppVisibility(" + token + ", " + visible + Slog.v(TAG, "setAppVisibility(" + token + ", visible=" + visible + "): mNextAppTransition=" + mNextAppTransition + " hidden=" + wtoken.hidden + " hiddenRequested=" + wtoken.hiddenRequested, e); @@ -7866,8 +7867,10 @@ public class WindowManagerService extends IWindowManager.Stub mToTopApps.clear(); } + // if wallpaper is animating in or out set oldWallpaper to null else to wallpaper WindowState oldWallpaper = mWallpaperTarget != null && mWallpaperTarget.mWinAnimator.isAnimating() + && !mWallpaperTarget.mWinAnimator.isDummyAnimation() ? null : mWallpaperTarget; adjustWallpaperWindowsLocked(); diff --git a/services/java/com/android/server/wm/WindowStateAnimator.java b/services/java/com/android/server/wm/WindowStateAnimator.java index 4f08d92af3db..642de73cd828 100644 --- a/services/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/java/com/android/server/wm/WindowStateAnimator.java @@ -177,6 +177,13 @@ class WindowStateAnimator { || atoken.inPendingTransaction)); } + /** Is the window animating the DummyAnimation? */ + boolean isDummyAnimation() { + final AppWindowToken atoken = mWin.mAppToken; + return atoken != null + && atoken.mAppAnimator.animation == AppWindowAnimator.sDummyAnimation; + } + /** Is this window currently animating? */ boolean isWindowAnimating() { return mAnimation != null; @@ -363,19 +370,33 @@ class WindowStateAnimator { mWin.mDestroying = true; if (WindowState.SHOW_TRANSACTIONS) WindowManagerService.logSurface( mWin, "HIDE (finishExit)", null); - mSurfaceShown = false; - try { - mSurface.hide(); - } catch (RuntimeException e) { - Slog.w(TAG, "Error hiding surface in " + this, e); - } - mLastHidden = true; + hide(); } mWin.mExiting = false; if (mWin.mRemoveOnExit) { mService.mPendingRemove.add(mWin); mWin.mRemoveOnExit = false; } + if (mService.mWallpaperTarget == mWin) { + mAnimator.hideWallpapersLocked(); + } + } + + void hide() { + if (!mLastHidden) { + //dump(); + mLastHidden = true; + if (WindowManagerService.SHOW_TRANSACTIONS) WindowManagerService.logSurface(mWin, + "HIDE (performLayout)", null); + if (mSurface != null) { + mSurfaceShown = false; + try { + mSurface.hide(); + } catch (RuntimeException e) { + Slog.w(TAG, "Exception hiding surface in " + mWin); + } + } + } } boolean finishDrawingLocked() { @@ -987,20 +1008,7 @@ class WindowStateAnimator { setSurfaceBoundaries(recoveringMemory); if (w.mAttachedHidden || !w.isReadyForDisplay()) { - if (!mLastHidden) { - //dump(); - mLastHidden = true; - if (WindowManagerService.SHOW_TRANSACTIONS) WindowManagerService.logSurface(w, - "HIDE (performLayout)", null); - if (mSurface != null) { - mSurfaceShown = false; - try { - mSurface.hide(); - } catch (RuntimeException e) { - Slog.w(TAG, "Exception hiding surface in " + w); - } - } - } + hide(); // If we are waiting for this window to handle an // orientation change, well, it is hidden, so // doesn't really matter. Note that this does |