Merge "Fix exposing wallpaper on rotations and other." into jb-dev

This commit is contained in:
Craig Mautner
2012-06-11 13:10:01 -07:00
committed by Android (Google) Code Review
2 changed files with 21 additions and 15 deletions

View File

@@ -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);

View File

@@ -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