Merge "Fix wallpaper not updating on initial boot." into jb-mr1-dev
diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
index a874c6d..356689f 100644
--- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
+++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
@@ -156,7 +156,7 @@
                     mBackgroundWidth = mBackgroundHeight = -1;
                     mBackground = null;
                     mRedrawNeeded = true;
-                    drawFrameLocked();
+                    drawFrameLocked(false);
                 }
             }
         }
@@ -234,7 +234,7 @@
                         Log.d(TAG, "Visibility changed to visible=" + visible);
                     }
                     mVisible = visible;
-                    drawFrameLocked();
+                    drawFrameLocked(false);
                 }
             }
         }
@@ -263,7 +263,7 @@
                     mYOffset = yOffset;
                     mOffsetsChanged = true;
                 }
-                drawFrameLocked();
+                drawFrameLocked(false);
             }
         }
 
@@ -277,7 +277,8 @@
 
             synchronized (mLock) {
                 mRedrawNeeded = true;
-                drawFrameLocked();
+                mBackgroundWidth = mBackgroundHeight = -1;
+                drawFrameLocked(true);
             }
         }
 
@@ -290,25 +291,26 @@
 
             synchronized (mLock) {
                 mRedrawNeeded = true;
-                drawFrameLocked();
+                drawFrameLocked(false);
             }
         }
 
-        void drawFrameLocked() {
-            if (!mVisible) {
-                if (DEBUG) {
-                    Log.d(TAG, "Suppressed drawFrame since wallpaper is not visible.");
+        void drawFrameLocked(boolean force) {
+            if (!force) {
+                if (!mVisible) {
+                    if (DEBUG) {
+                        Log.d(TAG, "Suppressed drawFrame since wallpaper is not visible.");
+                    }
+                    return;
                 }
-                return;
-            }
-            if (!mRedrawNeeded && !mOffsetsChanged) {
-                if (DEBUG) {
-                    Log.d(TAG, "Suppressed drawFrame since redraw is not needed "
-                            + "and offsets have not changed.");
+                if (!mRedrawNeeded && !mOffsetsChanged) {
+                    if (DEBUG) {
+                        Log.d(TAG, "Suppressed drawFrame since redraw is not needed "
+                                + "and offsets have not changed.");
+                    }
+                    return;
                 }
-                return;
             }
-
             // If we don't yet know the size of the wallpaper bitmap,
             // we need to get it now.
             boolean updateWallpaper = mBackgroundWidth < 0 || mBackgroundHeight < 0 ;
@@ -332,7 +334,8 @@
             int yPixels = availh < 0 ? (int)(availh * mYOffset + .5f) : (availh / 2);
 
             mOffsetsChanged = false;
-            if (!mRedrawNeeded && xPixels == mLastXTranslation && yPixels == mLastYTranslation) {
+            if (!force && !mRedrawNeeded
+                    && xPixels == mLastXTranslation && yPixels == mLastYTranslation) {
                 if (DEBUG) {
                     Log.d(TAG, "Suppressed drawFrame since the image has not "
                             + "actually moved an integral number of pixels.");
@@ -343,6 +346,11 @@
             mLastXTranslation = xPixels;
             mLastYTranslation = yPixels;
 
+            if (DEBUG) {
+                Log.d(TAG, "drawFrameUnlocked(" + force + "): mBackgroundWxH=" + mBackgroundWidth + "x"
+                        + mBackgroundHeight + " SurfaceFrame=" + frame.toShortString()
+                        + " X,YOffset=" + mXOffset + "," + mYOffset);
+            }
             if (mIsHwAccelerated) {
                 if (!drawWallpaperWithOpenGL(sh, availw, availh, xPixels, yPixels)) {
                     drawWallpaperWithCanvas(sh, availw, availh, xPixels, yPixels);