Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c92f150a authored by Craig Mautner's avatar Craig Mautner
Browse files

Fix wallpaper not updating on initial boot.

Update the wallpaper and redraw it unconditionally when the surface
changes. Previously we were not updating the wallpaper when the
surface changed which meant that it remained at the original surface
dimensions. Also, the indication that it was visible comes in too
late to display it cleanly without jank.

Bug: 7310334 fixed.
Change-Id: Ic2ae95ea0b0704183053da1d7a906818651c62c9
parent 4c38e24a
Loading
Loading
Loading
Loading
+26 −18
Original line number Diff line number Diff line
@@ -156,7 +156,7 @@ public class ImageWallpaper extends WallpaperService {
                    mBackgroundWidth = mBackgroundHeight = -1;
                    mBackground = null;
                    mRedrawNeeded = true;
                    drawFrameLocked();
                    drawFrameLocked(false);
                }
            }
        }
@@ -234,7 +234,7 @@ public class ImageWallpaper extends WallpaperService {
                        Log.d(TAG, "Visibility changed to visible=" + visible);
                    }
                    mVisible = visible;
                    drawFrameLocked();
                    drawFrameLocked(false);
                }
            }
        }
@@ -263,7 +263,7 @@ public class ImageWallpaper extends WallpaperService {
                    mYOffset = yOffset;
                    mOffsetsChanged = true;
                }
                drawFrameLocked();
                drawFrameLocked(false);
            }
        }

@@ -277,7 +277,8 @@ public class ImageWallpaper extends WallpaperService {

            synchronized (mLock) {
                mRedrawNeeded = true;
                drawFrameLocked();
                mBackgroundWidth = mBackgroundHeight = -1;
                drawFrameLocked(true);
            }
        }

@@ -290,11 +291,12 @@ public class ImageWallpaper extends WallpaperService {

            synchronized (mLock) {
                mRedrawNeeded = true;
                drawFrameLocked();
                drawFrameLocked(false);
            }
        }

        void drawFrameLocked() {
        void drawFrameLocked(boolean force) {
            if (!force) {
                if (!mVisible) {
                    if (DEBUG) {
                        Log.d(TAG, "Suppressed drawFrame since wallpaper is not visible.");
@@ -308,7 +310,7 @@ public class ImageWallpaper extends WallpaperService {
                    }
                    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 @@ public class ImageWallpaper extends WallpaperService {
            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 @@ public class ImageWallpaper extends WallpaperService {
            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);