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

Commit 68b8d34e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Do not extract colors of live wallpapers." into oc-dr1-dev

parents d2d4282e 284836b0
Loading
Loading
Loading
Loading
+10 −43
Original line number Diff line number Diff line
@@ -379,54 +379,31 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {

    /**
     * We can easily extract colors from an ImageWallpaper since it's only a bitmap.
     * In this case, using the crop is more than enough.
     *
     * In case of a live wallpaper, the best we can do is to extract colors from its
     * preview image. Anyway, the live wallpaper can also implement the wallpaper colors API
     * to report when colors change.
     * In this case, using the crop is more than enough. Live wallpapers are just ignored.
     *
     * @param wallpaper a wallpaper representation
     */
    private void extractColors(WallpaperData wallpaper) {
        String cropFile = null;
        Drawable thumbnail = null;
        // This represents a maximum pixel count in an image.
        // It prevents color extraction on big bitmaps.
        int wallpaperId = -1;
        int wallpaperId;

        boolean imageWallpaper = false;
        synchronized (mLock) {
            imageWallpaper = mImageWallpaper.equals(wallpaper.wallpaperComponent)
            // Not having a wallpaperComponent means it's a lock screen wallpaper.
            final boolean imageWallpaper = mImageWallpaper.equals(wallpaper.wallpaperComponent)
                    || wallpaper.wallpaperComponent == null;
            if (imageWallpaper) {
                if (wallpaper.cropFile != null && wallpaper.cropFile.exists()) {
            if (imageWallpaper && wallpaper.cropFile != null && wallpaper.cropFile.exists()) {
                cropFile = wallpaper.cropFile.getAbsolutePath();
            }
            } else {
                if (wallpaper.connection == null) {
                    Slog.w(TAG, "Can't extract colors, wallpaper not connected. " +
                            wallpaper.wallpaperId);
                    return;
                }
                WallpaperInfo info = wallpaper.connection.mInfo;
                if (info == null) {
                    Slog.w(TAG, "Something is really wrong, live wallpaper doesn't have " +
                           "a WallpaperInfo object! " + wallpaper.wallpaperId);
                    return;
                }
                thumbnail = info.loadThumbnail(mContext.getPackageManager());
            }

            wallpaperId = wallpaper.wallpaperId;
        }

        WallpaperColors colors = null;
        if (cropFile != null) {
            Bitmap bitmap = BitmapFactory.decodeFile(cropFile);
            if (bitmap != null) {
                colors = WallpaperColors.fromBitmap(bitmap);
                bitmap.recycle();
        } else if (thumbnail != null) {
            colors = WallpaperColors.fromDrawable(thumbnail);
            }
        }

        if (colors == null) {
@@ -434,16 +411,6 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
            return;
        }

        // Even though we can extract colors from live wallpaper thumbnails,
        // it's risky to assume that it might support dark text on top of it:
        //    • Thumbnail might not be accurate.
        //    • Colors might change over time.
        if (!imageWallpaper) {
            int colorHints = colors.getColorHints();
            colorHints &= ~WallpaperColors.HINT_SUPPORTS_DARK_TEXT;
            colors.setColorHints(colorHints);
        }

        synchronized (mLock) {
            if (wallpaper.wallpaperId == wallpaperId) {
                wallpaper.primaryColors = colors;