diff options
| author | 2012-06-11 13:10:01 -0700 | |
|---|---|---|
| committer | 2012-06-11 13:10:01 -0700 | |
| commit | 47adf865bddf6c81051d457e04785408d2710f60 (patch) | |
| tree | a208ea18c2004f950022304ff709e95a891e25a3 | |
| parent | 0f6471ace77387560988964ed0679f843bba6f1f (diff) | |
| parent | b9836b9185132974f6cfa9296bb3c28d1c9b668a (diff) | |
Merge "Fix exposing wallpaper on rotations and other." into jb-dev
| -rw-r--r-- | services/java/com/android/server/wm/WindowAnimator.java | 21 | ||||
| -rw-r--r-- | services/java/com/android/server/wm/WindowStateAnimator.java | 15 |
2 files changed, 21 insertions, 15 deletions
diff --git a/services/java/com/android/server/wm/WindowAnimator.java b/services/java/com/android/server/wm/WindowAnimator.java index d25a96078031..b5cf20135bc3 100644 --- a/services/java/com/android/server/wm/WindowAnimator.java +++ b/services/java/com/android/server/wm/WindowAnimator.java @@ -85,12 +85,19 @@ public class WindowAnimator { mPolicy = policy; } - void hideWallpapersLocked() { - for (final WindowToken token : mService.mWallpaperTokens) { - for (final WindowState wallpaper : token.windows) { - wallpaper.mWinAnimator.hide(); + void hideWallpapersLocked(final WindowState w) { + if ((mService.mWallpaperTarget == w && mService.mLowerWallpaperTarget == null) + || mService.mWallpaperTarget == null) { + for (final WindowToken token : mService.mWallpaperTokens) { + for (final WindowState wallpaper : token.windows) { + final WindowStateAnimator winAnimator = wallpaper.mWinAnimator; + if (!winAnimator.mLastHidden) { + winAnimator.hide(); + mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER; + } + } + token.hidden = true; } - token.hidden = true; } } @@ -491,6 +498,10 @@ public class WindowAnimator { for (int i = 0; i < N; i++) { final WindowStateAnimator winAnimator = mWinAnimators.get(i); if (winAnimator.mWin.mIsWallpaper && mService.mWallpaperTarget == null) { + if (!winAnimator.mWin.mWallpaperVisible && !winAnimator.mLastHidden) { + // Wallpaper is no longer visible and there is no wp target => hide it. + winAnimator.hide(); + } continue; } winAnimator.prepareSurfaceLocked(true); diff --git a/services/java/com/android/server/wm/WindowStateAnimator.java b/services/java/com/android/server/wm/WindowStateAnimator.java index 5908958d6c00..d140aca9204a 100644 --- a/services/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/java/com/android/server/wm/WindowStateAnimator.java @@ -16,7 +16,6 @@ import android.graphics.PointF; import android.graphics.Rect; import android.graphics.Region; import android.os.Debug; -import android.os.RemoteException; import android.util.Slog; import android.view.Surface; import android.view.SurfaceSession; @@ -379,10 +378,7 @@ class WindowStateAnimator { mService.mPendingRemove.add(mWin); mWin.mRemoveOnExit = false; } - if (mService.mWallpaperTarget == mWin && mService.mLowerWallpaperTarget == null) { - mAnimator.hideWallpapersLocked(); - mAnimator.mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER; - } + mAnimator.hideWallpapersLocked(mWin); } void hide() { @@ -738,6 +734,7 @@ class WindowStateAnimator { } mSurface.destroy(); } + mAnimator.hideWallpapersLocked(mWin); } catch (RuntimeException e) { Slog.w(TAG, "Exception thrown when destroying Window " + this + " surface " + mSurface + " session " + mSession @@ -763,6 +760,7 @@ class WindowStateAnimator { WindowManagerService.logSurface(mWin, "DESTROY PENDING", e); } mPendingDestroySurface.destroy(); + mAnimator.hideWallpapersLocked(mWin); } } catch (RuntimeException e) { Slog.w(TAG, "Exception thrown when destroying Window " @@ -1067,11 +1065,8 @@ class WindowStateAnimator { if (w.mAttachedHidden || !w.isReadyForDisplay()) { hide(); - // TODO: Consider moving the following into hide() and out of finishExit() as well. - if (mService.mWallpaperTarget == mWin && mService.mLowerWallpaperTarget == null) { - mAnimator.hideWallpapersLocked(); - mAnimator.mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER; - } + mAnimator.hideWallpapersLocked(w); + // 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 |