Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
e
os
android_packages_apps_Eleven
Commits
04f294bf
Commit
04f294bf
authored
Dec 22, 2014
by
linus_lee
Committed by
Danny Baumann
Dec 23, 2014
Browse files
Eleven: Add some caching logic to BitmapWithColors for perf optimization
Change-Id: I9fe5e83b9b1b5bb8ca24978436ed371eec2db399
parent
0107486c
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/com/cyanogenmod/eleven/cache/ImageFetcher.java
View file @
04f294bf
...
...
@@ -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
,
...
...
src/com/cyanogenmod/eleven/utils/BitmapWithColors.java
View file @
04f294bf
...
...
@@ -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,47 +56,52 @@ 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
)
{
return
;
}
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
();
}
swatch
=
p
.
getVibrantSwatch
();
if
(
swatch
!=
null
)
{
vibrantColor
=
swatch
.
getRgb
();
}
Palette
.
Swatch
swatch
=
p
.
getDarkVibrantSwatch
();
if
(
swatch
!=
null
)
{
vibrantDarkColor
=
swatch
.
getRgb
();
}
if
(
vibrantColor
==
Color
.
TRANSPARENT
&&
vibrantDarkColor
!=
Color
.
TRANSPARENT
)
{
vibrantColor
=
vibrantDarkColor
;
}
if
(
vibrantColor
!=
Color
.
TRANSPARENT
&&
vibrantDarkColor
==
Color
.
TRANSPARENT
)
{
vibrantDarkColor
=
vibrantColor
;
swatch
=
p
.
getVibrantSwatch
();
if
(
swatch
!=
null
)
{
vibrantColor
=
swatch
.
getRgb
();
}
synchronized
(
this
)
{
mColorsLoaded
=
true
;
mVibrantColor
=
vibrantColor
;
mVibrantDarkColor
=
vibrantDarkColor
;
mColors
=
new
BitmapColors
(
vibrantColor
,
vibrantDarkColor
);
synchronized
(
sCachedColors
)
{
sCachedColors
.
put
(
mBitmapKey
,
mColors
);
}
}
}
src/com/cyanogenmod/eleven/widgets/LetterTileDrawable.java
View file @
04f294bf
...
...
@@ -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
);
}
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment