diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java index 64a683e78953a..a68f79604b25f 100644 --- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java +++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java @@ -130,10 +130,7 @@ public class ImageWallpaper extends WallpaperService { .getBounds(); mHeight = window.height(); mWidth = window.width(); - mMiniBitmap = null; - if (mWorker != null && mWorker.getThreadHandler() != null) { - mWorker.getThreadHandler().post(this::updateMiniBitmap); - } + mRenderer.setOnBitmapChanged(this::updateMiniBitmap); } EglHelper getEglHelperInstance() { @@ -177,20 +174,19 @@ public class ImageWallpaper extends WallpaperService { mPageOffset = (1 - imgWidth) / (float) (mPages - 1); } - private void updateMiniBitmap() { - mRenderer.useBitmap(b -> { - int size = Math.min(b.getWidth(), b.getHeight()); - float scale = 1.0f; - if (size > MIN_SURFACE_WIDTH) { - scale = (float) MIN_SURFACE_WIDTH / (float) size; - } - mImgHeight = b.getHeight(); - mImgWidth = b.getWidth(); - mMiniBitmap = Bitmap.createScaledBitmap(b, (int) Math.max(scale * b.getWidth(), 1), - (int) Math.max(scale * b.getHeight(), 1), false); - computeAndNotifyLocalColors(mLocalColorsToAdd, mMiniBitmap); - mLocalColorsToAdd.clear(); - }); + private void updateMiniBitmap(Bitmap b) { + if (b == null) return; + int size = Math.min(b.getWidth(), b.getHeight()); + float scale = 1.0f; + if (size > MIN_SURFACE_WIDTH) { + scale = (float) MIN_SURFACE_WIDTH / (float) size; + } + mImgHeight = b.getHeight(); + mImgWidth = b.getWidth(); + mMiniBitmap = Bitmap.createScaledBitmap(b, (int) Math.max(scale * b.getWidth(), 1), + (int) Math.max(scale * b.getHeight(), 1), false); + computeAndNotifyLocalColors(mLocalColorsToAdd, mMiniBitmap); + mLocalColorsToAdd.clear(); } private void updateSurfaceSize() { diff --git a/packages/SystemUI/src/com/android/systemui/glwallpaper/ImageWallpaperRenderer.java b/packages/SystemUI/src/com/android/systemui/glwallpaper/ImageWallpaperRenderer.java index 01a353ce8f1f7..d30783c29f926 100644 --- a/packages/SystemUI/src/com/android/systemui/glwallpaper/ImageWallpaperRenderer.java +++ b/packages/SystemUI/src/com/android/systemui/glwallpaper/ImageWallpaperRenderer.java @@ -46,6 +46,7 @@ public class ImageWallpaperRenderer implements GLWallpaperRenderer { private final ImageGLWallpaper mWallpaper; private final Rect mSurfaceSize = new Rect(); private final WallpaperTexture mTexture; + private Consumer mOnBitmapUpdated; public ImageWallpaperRenderer(Context context) { final WallpaperManager wpm = context.getSystemService(WallpaperManager.class); @@ -60,10 +61,9 @@ public class ImageWallpaperRenderer implements GLWallpaperRenderer { /** * @hide - * @return */ - public void useBitmap(Consumer c) { - mTexture.use(c); + public void setOnBitmapChanged(Consumer c) { + mOnBitmapUpdated = c; } @Override @@ -80,6 +80,8 @@ public class ImageWallpaperRenderer implements GLWallpaperRenderer { mTexture.use(bitmap -> { if (bitmap == null) { Log.w(TAG, "reload texture failed!"); + } else if (mOnBitmapUpdated != null) { + mOnBitmapUpdated.accept(bitmap); } mWallpaper.setup(bitmap); });