am 47adf865: Merge "Fix exposing wallpaper on rotations and other." into jb-dev

* commit '47adf865bddf6c81051d457e04785408d2710f60':
  Fix exposing wallpaper on rotations and other.
This commit is contained in:
Craig Mautner
2012-06-12 12:41:50 -07:00
committed by Android Git Automerger
2 changed files with 21 additions and 15 deletions

View File

@@ -85,12 +85,19 @@ public class WindowAnimator {
mPolicy = policy; mPolicy = policy;
} }
void hideWallpapersLocked() { void hideWallpapersLocked(final WindowState w) {
for (final WindowToken token : mService.mWallpaperTokens) { if ((mService.mWallpaperTarget == w && mService.mLowerWallpaperTarget == null)
for (final WindowState wallpaper : token.windows) { || mService.mWallpaperTarget == null) {
wallpaper.mWinAnimator.hide(); 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++) { for (int i = 0; i < N; i++) {
final WindowStateAnimator winAnimator = mWinAnimators.get(i); final WindowStateAnimator winAnimator = mWinAnimators.get(i);
if (winAnimator.mWin.mIsWallpaper && mService.mWallpaperTarget == null) { 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; continue;
} }
winAnimator.prepareSurfaceLocked(true); winAnimator.prepareSurfaceLocked(true);

View File

@@ -16,7 +16,6 @@ import android.graphics.PointF;
import android.graphics.Rect; import android.graphics.Rect;
import android.graphics.Region; import android.graphics.Region;
import android.os.Debug; import android.os.Debug;
import android.os.RemoteException;
import android.util.Slog; import android.util.Slog;
import android.view.Surface; import android.view.Surface;
import android.view.SurfaceSession; import android.view.SurfaceSession;
@@ -379,10 +378,7 @@ class WindowStateAnimator {
mService.mPendingRemove.add(mWin); mService.mPendingRemove.add(mWin);
mWin.mRemoveOnExit = false; mWin.mRemoveOnExit = false;
} }
if (mService.mWallpaperTarget == mWin && mService.mLowerWallpaperTarget == null) { mAnimator.hideWallpapersLocked(mWin);
mAnimator.hideWallpapersLocked();
mAnimator.mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
}
} }
void hide() { void hide() {
@@ -738,6 +734,7 @@ class WindowStateAnimator {
} }
mSurface.destroy(); mSurface.destroy();
} }
mAnimator.hideWallpapersLocked(mWin);
} catch (RuntimeException e) { } catch (RuntimeException e) {
Slog.w(TAG, "Exception thrown when destroying Window " + this Slog.w(TAG, "Exception thrown when destroying Window " + this
+ " surface " + mSurface + " session " + mSession + " surface " + mSurface + " session " + mSession
@@ -763,6 +760,7 @@ class WindowStateAnimator {
WindowManagerService.logSurface(mWin, "DESTROY PENDING", e); WindowManagerService.logSurface(mWin, "DESTROY PENDING", e);
} }
mPendingDestroySurface.destroy(); mPendingDestroySurface.destroy();
mAnimator.hideWallpapersLocked(mWin);
} }
} catch (RuntimeException e) { } catch (RuntimeException e) {
Slog.w(TAG, "Exception thrown when destroying Window " Slog.w(TAG, "Exception thrown when destroying Window "
@@ -1067,11 +1065,8 @@ class WindowStateAnimator {
if (w.mAttachedHidden || !w.isReadyForDisplay()) { if (w.mAttachedHidden || !w.isReadyForDisplay()) {
hide(); hide();
// TODO: Consider moving the following into hide() and out of finishExit() as well. mAnimator.hideWallpapersLocked(w);
if (mService.mWallpaperTarget == mWin && mService.mLowerWallpaperTarget == null) {
mAnimator.hideWallpapersLocked();
mAnimator.mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
}
// If we are waiting for this window to handle an // If we are waiting for this window to handle an
// orientation change, well, it is hidden, so // orientation change, well, it is hidden, so
// doesn't really matter. Note that this does // doesn't really matter. Note that this does