diff options
author | Craig Mautner <cmautner@google.com> | 2013-10-22 14:29:01 -0700 |
---|---|---|
committer | Craig Mautner <cmautner@google.com> | 2013-10-22 14:50:52 -0700 |
commit | 798adeffb0b9c22707b493895453e7dd2f608b75 (patch) | |
tree | e8ca6dbd92507ab12a48446194c0a12b2a74b8ac /services/java | |
parent | 40006309990c40f5b4b26646b98df222d8d27922 (diff) | |
download | frameworks_base-798adeffb0b9c22707b493895453e7dd2f608b75.zip frameworks_base-798adeffb0b9c22707b493895453e7dd2f608b75.tar.gz frameworks_base-798adeffb0b9c22707b493895453e7dd2f608b75.tar.bz2 |
Don't use transient states for wallpaper animation.
The WindowManagerService member mLowerWallpaperTarget is not stable
throughout an app transition. Relying on it to be stable causes the
intra-wallpaper animation to start out right but after the windows
have been relayed out there is no longer a lower wallpaper target.
This causes the wallpaper to start tracking the animation of the
current wallpaper target rather than remain stable.
Switching to a new variable that saves the state of wallpaper
animation at the start of the animation fixes bug 11240590.
Change-Id: I336a59c47665fcf61019f567b8663956ff0e4940
Diffstat (limited to 'services/java')
3 files changed, 10 insertions, 11 deletions
diff --git a/services/java/com/android/server/wm/WindowAnimator.java b/services/java/com/android/server/wm/WindowAnimator.java index ca87b4f..cd46bb8 100644 --- a/services/java/com/android/server/wm/WindowAnimator.java +++ b/services/java/com/android/server/wm/WindowAnimator.java @@ -121,12 +121,6 @@ public class WindowAnimator { mDisplayContentsAnimators.delete(displayId); } - AppWindowAnimator getWallpaperAppAnimator() { - return mService.mWallpaperTarget == null - ? null : mService.mWallpaperTarget.mAppToken == null - ? null : mService.mWallpaperTarget.mAppToken.mAppAnimator; - } - void hideWallpapersLocked(final WindowState w) { final WindowState wallpaperTarget = mService.mWallpaperTarget; final WindowState lowerWallpaperTarget = mService.mLowerWallpaperTarget; diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 55d2e5d..f2a0cbd 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -530,6 +530,7 @@ public class WindowManagerService extends IWindowManager.Stub static final long WALLPAPER_TIMEOUT = 150; // Time we wait after a timeout before trying to wait again. static final long WALLPAPER_TIMEOUT_RECOVERY = 10000; + boolean mAnimateWallpaperWithTarget; AppWindowToken mFocusedApp = null; @@ -8490,6 +8491,7 @@ public class WindowManagerService extends IWindowManager.Stub } } + mAnimateWallpaperWithTarget = false; if (closingAppHasWallpaper && openingAppHasWallpaper) { if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "Wallpaper animation!"); switch (transit) { @@ -8517,6 +8519,8 @@ public class WindowManagerService extends IWindowManager.Stub transit = AppTransition.TRANSIT_WALLPAPER_OPEN; if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "New transit into wallpaper: " + transit); + } else { + mAnimateWallpaperWithTarget = true; } // If all closing windows are obscured, then there is diff --git a/services/java/com/android/server/wm/WindowStateAnimator.java b/services/java/com/android/server/wm/WindowStateAnimator.java index e2fae89..af00d83 100644 --- a/services/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/java/com/android/server/wm/WindowStateAnimator.java @@ -845,9 +845,9 @@ class WindowStateAnimator { // Wallpapers are animated based on the "real" window they // are currently targeting. - if (mIsWallpaper && mService.mLowerWallpaperTarget == null - && mService.mWallpaperTarget != null) { - final WindowStateAnimator wallpaperAnimator = mService.mWallpaperTarget.mWinAnimator; + final WindowState wallpaperTarget = mService.mWallpaperTarget; + if (mIsWallpaper && wallpaperTarget != null && mService.mAnimateWallpaperWithTarget) { + final WindowStateAnimator wallpaperAnimator = wallpaperTarget.mWinAnimator; if (wallpaperAnimator.mHasLocalTransformation && wallpaperAnimator.mAnimation != null && !wallpaperAnimator.mAnimation.getDetachWallpaper()) { @@ -856,8 +856,9 @@ class WindowStateAnimator { Slog.v(TAG, "WP target attached xform: " + attachedTransformation); } } - final AppWindowAnimator wpAppAnimator = mAnimator.getWallpaperAppAnimator(); - if (wpAppAnimator != null && wpAppAnimator.hasTransformation + final AppWindowAnimator wpAppAnimator = wallpaperTarget.mAppToken == null ? + null : wallpaperTarget.mAppToken.mAppAnimator; + if (wpAppAnimator != null && wpAppAnimator.hasTransformation && wpAppAnimator.animation != null && !wpAppAnimator.animation.getDetachWallpaper()) { appTransformation = wpAppAnimator.transformation; |