Merge "Import translations. DO NOT MERGE" into jb-ub-mail-ur8
diff --git a/src/com/android/mail/photomanager/LetterTileProvider.java b/src/com/android/mail/photomanager/LetterTileProvider.java
index 415ae9b..7a45167 100644
--- a/src/com/android/mail/photomanager/LetterTileProvider.java
+++ b/src/com/android/mail/photomanager/LetterTileProvider.java
@@ -19,24 +19,19 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
-import android.graphics.Color;
import android.graphics.Paint.Align;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.text.TextPaint;
import android.text.TextUtils;
-import android.util.LruCache;
-import android.util.TypedValue;
import com.android.mail.R;
import com.android.mail.photomanager.ContactPhotoManager.DefaultImageProvider;
import com.android.mail.ui.DividedImageCanvas;
-import com.google.common.base.Objects;
/**
* LetterTileProvider is an implementation of the DefaultImageProvider. When no
@@ -48,7 +43,7 @@
*/
public class LetterTileProvider extends DefaultImageProvider {
private Bitmap mDefaultBitmap;
- private final LruCache<Integer, Bitmap> mTileBitmapCache;
+ private static Bitmap[] sBitmapBackgroundCache;
private static Typeface sSansSerifLight;
private static Rect sBounds;
private static int sTileLetterFontSize = -1;
@@ -58,14 +53,10 @@
private static TextPaint sPaint = new TextPaint();
private static int DEFAULT_AVATAR_DRAWABLE = R.drawable.ic_contact_picture;
private static final Pattern ALPHABET = Pattern.compile("^[a-zA-Z0-9]+$");
+ private static final int POSSIBLE_BITMAP_SIZES = 3;
public LetterTileProvider() {
super();
- final float cacheSizeAdjustment =
- (MemoryUtils.getTotalMemorySize() >= MemoryUtils.LARGE_RAM_THRESHOLD) ?
- 1.0f : 0.5f;
- final int bitmapCacheSize = (int) (cacheSizeAdjustment * 36);
- mTileBitmapCache = new LruCache<Integer, Bitmap>(bitmapCacheSize);
}
@Override
@@ -76,35 +67,30 @@
final String firstChar = display.substring(0, 1);
// If its a valid english alphabet letter...
if (isLetter(firstChar)) {
- final String first = firstChar.toUpperCase();
- DividedImageCanvas.Dimensions d = view.getDesiredDimensions(address);
- int hash = Objects.hashCode(first, d);
- bitmap = mTileBitmapCache.get(hash);
- if (bitmap == null) {
- // Create bitmap based on the first char
- bitmap = Bitmap.createBitmap(d.width, d.height, Bitmap.Config.ARGB_8888);
- sPaint.setColor(Color.BLACK);
- if (sTileLetterFontSize == -1) {
- final Resources res = view.getContext().getResources();
- sTileLetterFontSize = res.getDimensionPixelSize(R.dimen.tile_letter_font_size);
- sTileLetterFontSizeSmall = res
- .getDimensionPixelSize(R.dimen.tile_letter_font_size_small);
- sTileColor = res.getColor(R.color.letter_tile_color);
- sTileFontColor = res.getColor(R.color.letter_tile_font_color);
- sSansSerifLight = Typeface.create("sans-serif-light", Typeface.NORMAL);
- sBounds = new Rect();
- }
- Canvas c = new Canvas(bitmap);
- c.drawColor(sTileColor);
- sPaint.setTextSize(getFontSize(d.scale));
+ if (sTileLetterFontSize == -1) {
+ final Resources res = view.getContext().getResources();
+ sTileLetterFontSize = res.getDimensionPixelSize(R.dimen.tile_letter_font_size);
+ sTileLetterFontSizeSmall = res
+ .getDimensionPixelSize(R.dimen.tile_letter_font_size_small);
+ sTileColor = res.getColor(R.color.letter_tile_color);
+ sTileFontColor = res.getColor(R.color.letter_tile_font_color);
+ sSansSerifLight = Typeface.create("sans-serif-light", Typeface.NORMAL);
+ sBounds = new Rect();
sPaint.setTypeface(sSansSerifLight);
sPaint.setColor(sTileFontColor);
sPaint.setTextAlign(Align.CENTER);
sPaint.setAntiAlias(true);
- sPaint.getTextBounds(first, 0, first.length(), sBounds);
- c.drawText(first, 0+d.width/2, 0+d.height/2+(sBounds.bottom-sBounds.top)/2, sPaint);
- mTileBitmapCache.put(hash, bitmap);
+ sBitmapBackgroundCache = new Bitmap[POSSIBLE_BITMAP_SIZES];
}
+ final String first = firstChar.toUpperCase();
+ DividedImageCanvas.Dimensions d = view.getDesiredDimensions(address);
+ bitmap = getBitmap(d);
+ Canvas c = new Canvas(bitmap);
+ c.drawColor(sTileColor);
+ sPaint.setTextSize(getFontSize(d.scale));
+ sPaint.getTextBounds(first, 0, first.length(), sBounds);
+ c.drawText(first, 0 + d.width / 2, 0 + d.height / 2 + (sBounds.bottom - sBounds.top)
+ / 2, sPaint);
} else {
if (mDefaultBitmap == null) {
BitmapFactory.Options options = new BitmapFactory.Options();
@@ -117,6 +103,25 @@
view.addDivisionImage(bitmap, address);
}
+ private Bitmap getBitmap(final DividedImageCanvas.Dimensions d) {
+ final int pos;
+ float scale = d.scale;
+ if (scale == DividedImageCanvas.ONE) {
+ pos = 0;
+ } else if (scale == DividedImageCanvas.HALF) {
+ pos = 1;
+ } else {
+ pos = 2;
+ }
+ Bitmap bitmap = sBitmapBackgroundCache[pos];
+ if (bitmap == null) {
+ // create and place the bitmap
+ bitmap = Bitmap.createBitmap(d.width, d.height, Bitmap.Config.ARGB_8888);
+ sBitmapBackgroundCache[pos] = bitmap;
+ }
+ return bitmap;
+ }
+
private int getFontSize(float scale) {
if (scale == DividedImageCanvas.ONE) {
return sTileLetterFontSize;