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

Commit 31d70a1d authored by wilsonshih's avatar wilsonshih Committed by Wei Sheng Shih
Browse files

Fix theme cannot change due to there is no wallpaper colors.

Device theme cannot changed because there is no wallpaper colors when
first boot with default image wallpaper. We can still calculate it
if there is no cropFile with the wallpaper component is ImageWallpaper.

Fix: 122660786
Test: manual test.
Test: atest WallpaperColorsTest WallpaperManagerTest WallpaperServiceTest

Change-Id: I26cc1d751dadd28185c650eff6e6ef60d5986aaa
parent 273e07d7
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -541,6 +541,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
     */
    private void extractColors(WallpaperData wallpaper) {
        String cropFile = null;
        boolean defaultImageWallpaper = false;
        int wallpaperId;

        synchronized (mLock) {
@@ -549,6 +550,8 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
                    || wallpaper.wallpaperComponent == null;
            if (imageWallpaper && wallpaper.cropFile != null && wallpaper.cropFile.exists()) {
                cropFile = wallpaper.cropFile.getAbsolutePath();
            } else if (imageWallpaper && !wallpaper.cropExists() && !wallpaper.sourceExists()) {
                defaultImageWallpaper = true;
            }
            wallpaperId = wallpaper.wallpaperId;
        }
@@ -560,6 +563,25 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
                colors = WallpaperColors.fromBitmap(bitmap);
                bitmap.recycle();
            }
        } else if (defaultImageWallpaper) {
            // There is no crop and source file because this is default image wallpaper.
            try (final InputStream is =
                         WallpaperManager.openDefaultWallpaper(mContext, FLAG_SYSTEM)) {
                if (is != null) {
                    try {
                        final BitmapFactory.Options options = new BitmapFactory.Options();
                        final Bitmap bitmap = BitmapFactory.decodeStream(is, null, options);
                        if (bitmap != null) {
                            colors = WallpaperColors.fromBitmap(bitmap);
                            bitmap.recycle();
                        }
                    } catch (OutOfMemoryError e) {
                        Slog.w(TAG, "Can't decode default wallpaper stream", e);
                    }
                }
            } catch (IOException e) {
                Slog.w(TAG, "Can't close default wallpaper stream", e);
            }
        }

        if (colors == null) {