Fix issue #2069662: The wallpaper doesn't move along with the home screen
The wallpaper target was being lost when an activity was restarted.
Change-Id: Ib05622591c9bb2f01bb8f2c0a0a8e77fe657ae88
diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java
index 1384ede..4321b0d 100644
--- a/services/java/com/android/server/WindowManagerService.java
+++ b/services/java/com/android/server/WindowManagerService.java
@@ -1217,7 +1217,8 @@
+ w.isReadyForDisplay() + " drawpending=" + w.mDrawPending
+ " commitdrawpending=" + w.mCommitDrawPending);
if ((w.mAttrs.flags&FLAG_SHOW_WALLPAPER) != 0 && w.isReadyForDisplay()
- && !w.mDrawPending && !w.mCommitDrawPending) {
+ && (mWallpaperTarget == w
+ || (!w.mDrawPending && !w.mCommitDrawPending))) {
if (DEBUG_WALLPAPER) Log.v(TAG,
"Found wallpaper activity: #" + i + "=" + w);
foundW = w;
@@ -6779,10 +6780,10 @@
}
// This must be called while inside a transaction.
- void commitFinishDrawingLocked(long currentTime) {
+ boolean commitFinishDrawingLocked(long currentTime) {
//Log.i(TAG, "commitFinishDrawingLocked: " + mSurface);
if (!mCommitDrawPending) {
- return;
+ return false;
}
mCommitDrawPending = false;
mReadyToShow = true;
@@ -6791,6 +6792,7 @@
if (atoken == null || atoken.allDrawn || starting) {
performShowLocked();
}
+ return true;
}
// This must be called while inside a transaction.
@@ -8639,6 +8641,7 @@
restart = false;
boolean tokenMayBeDrawn = false;
+ boolean wallpaperMayChange = false;
mPolicy.beginAnimationLw(dw, dh);
@@ -8649,7 +8652,12 @@
if (w.mSurface != null) {
// Execute animation.
- w.commitFinishDrawingLocked(currentTime);
+ if (w.commitFinishDrawingLocked(currentTime)) {
+ if ((w.mAttrs.flags
+ & WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER) != 0) {
+ wallpaperMayChange = true;
+ }
+ }
if (w.stepAnimationLocked(currentTime, dw, dh)) {
animating = true;
//w.dump(" ");
@@ -8787,6 +8795,8 @@
mH.removeMessages(H.APP_TRANSITION_TIMEOUT);
adjustWallpaperWindowsLocked();
+ wallpaperMayChange = false;
+
if (DEBUG_APP_TRANSITIONS) Log.v(TAG,
"New wallpaper target=" + mWallpaperTarget
+ ", lower target=" + mLowerWallpaperTarget
@@ -8885,6 +8895,13 @@
restart = true;
}
}
+
+ if (wallpaperMayChange) {
+ if (adjustWallpaperWindowsLocked()) {
+ assignLayersLocked();
+ }
+ }
+
} while (restart);
// THIRD LOOP: Update the surfaces of all windows.