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.