Commit 04f294bf authored by linus_lee's avatar linus_lee Committed by Danny Baumann
Browse files

Eleven: Add some caching logic to BitmapWithColors for perf optimization

Change-Id: I9fe5e83b9b1b5bb8ca24978436ed371eec2db399
parent 0107486c
......@@ -202,7 +202,7 @@ public class ImageFetcher extends ImageWorker {
artwork = mImageCache.getArtworkFromFile(mContext, albumId);
}
if (artwork != null) {
return new BitmapWithColors(artwork);
return new BitmapWithColors(artwork, key.hashCode());
}
return LetterTileDrawable.createDefaultBitmap(mContext, key, ImageType.ALBUM, false,
......
......@@ -18,25 +18,36 @@ package com.cyanogenmod.eleven.utils;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.support.v7.graphics.Palette;
import android.util.LruCache;
public class BitmapWithColors {
private static final class BitmapColors {
public int mVibrantColor;
public int mVibrantDarkColor;
public BitmapColors(int vibrantColor, int vibrantDarkColor) {
mVibrantColor = vibrantColor;
mVibrantDarkColor = vibrantDarkColor;
}
}
private static final int CACHE_SIZE_MAX = 20;
private static final LruCache<Integer, BitmapColors> sCachedColors =
new LruCache<Integer, BitmapColors>(CACHE_SIZE_MAX);
private Bitmap mBitmap;
private int mVibrantColor;
private int mVibrantDarkColor;
private boolean mColorsLoaded = false;
private int mBitmapKey;
private BitmapColors mColors;
public BitmapWithColors(Bitmap bitmap) {
public BitmapWithColors(Bitmap bitmap, int bitmapKey) {
mBitmap = bitmap;
mVibrantColor = Color.TRANSPARENT;
mVibrantDarkColor = Color.TRANSPARENT;
mColorsLoaded = false;
mBitmapKey = bitmapKey;
}
public BitmapWithColors(Bitmap bitmap, int vibrantColor, int vibrantDarkColor) {
public BitmapWithColors(Bitmap bitmap, int bitmapKey, int vibrantColor, int vibrantDarkColor) {
mBitmap = bitmap;
mVibrantColor = vibrantColor;
mVibrantDarkColor = vibrantDarkColor;
mColorsLoaded = true;
mBitmapKey = bitmapKey;
mColors = new BitmapColors(vibrantColor, vibrantDarkColor);
}
public Bitmap getBitmap() {
......@@ -45,26 +56,40 @@ public class BitmapWithColors {
public int getVibrantColor() {
loadColorsIfNeeded();
return mVibrantColor;
if (mColors.mVibrantColor == Color.TRANSPARENT) {
return mColors.mVibrantDarkColor;
}
return mColors.mVibrantColor;
}
public int getVibrantDarkColor() {
loadColorsIfNeeded();
return mVibrantDarkColor;
if (mColors.mVibrantDarkColor == Color.TRANSPARENT) {
return mColors.mVibrantColor;
}
return mColors.mVibrantDarkColor;
}
private void loadColorsIfNeeded() {
synchronized (this) {
if (mColorsLoaded) {
private synchronized void loadColorsIfNeeded() {
if (mColors != null) {
return;
}
synchronized (sCachedColors) {
mColors = sCachedColors.get(mBitmapKey);
}
if (mColors != null) {
return;
}
final Palette p = Palette.generate(mBitmap);
if (p == null) {
return;
}
int vibrantColor = Color.TRANSPARENT;
int vibrantDarkColor = Color.TRANSPARENT;
if (p != null) {
Palette.Swatch swatch = p.getDarkVibrantSwatch();
if (swatch != null) {
vibrantDarkColor = swatch.getRgb();
......@@ -73,19 +98,10 @@ public class BitmapWithColors {
if (swatch != null) {
vibrantColor = swatch.getRgb();
}
}
if (vibrantColor == Color.TRANSPARENT && vibrantDarkColor != Color.TRANSPARENT) {
vibrantColor = vibrantDarkColor;
}
if (vibrantColor != Color.TRANSPARENT && vibrantDarkColor == Color.TRANSPARENT) {
vibrantDarkColor = vibrantColor;
}
synchronized (this) {
mColorsLoaded = true;
mVibrantColor = vibrantColor;
mVibrantDarkColor = vibrantDarkColor;
mColors = new BitmapColors(vibrantColor, vibrantDarkColor);
synchronized (sCachedColors) {
sCachedColors.put(mBitmapKey, mColors);
}
}
}
......@@ -366,6 +366,6 @@ public class LetterTileDrawable extends Drawable {
drawBitmap(defaultBitmap, defaultBitmap.getWidth(), defaultBitmap.getHeight(), canvas,
bounds, 1, 0, paint);
return new BitmapWithColors(createdBitmap, color, vibrantDarkColor);
return new BitmapWithColors(createdBitmap, identifier.hashCode(), color, vibrantDarkColor);
}
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment