Merge "Modify image attachments previews to conform to UX specs" into jb-ub-mail-ur8
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 7f2c9f1..b615b17 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -80,4 +80,5 @@
 
     <color name="letter_tile_color">#d8d8d8</color>
     <color name="letter_tile_font_color">#ffffff</color>
+    <color name="tile_divider_color">#ffffff</color>
 </resources>
diff --git a/res/values/dimen.xml b/res/values/dimen.xml
index 76a6f65..1429704 100644
--- a/res/values/dimen.xml
+++ b/res/values/dimen.xml
@@ -112,13 +112,8 @@
     <dimen name="senders_textview_top_padding">-4dp</dimen>
     <dimen name="senders_textview_height">30dp</dimen>
     <integer name="chips_max_lines">2</integer>
-    <dimen name="tile_letter_font_size">24sp</dimen>
-    <dimen name="tile_letter_font_size_med">18sp</dimen>
-    <dimen name="tile_letter_font_size_small">12sp</dimen>
-    <dimen name="tile_letter_padding_bottom">15dp</dimen>
-    <dimen name="tile_letter_padding_left">16dp</dimen>
-    <dimen name="tile_letter_padding_bottom_half">18dp</dimen>
-    <dimen name="tile_letter_padding_left_half">7dp</dimen>
-    <dimen name="tile_letter_padding_bottom_quarter">8dp</dimen>
-    <dimen name="tile_letter_padding_left_quarter">8dp</dimen>
+    <dimen name="tile_letter_font_size">33dp</dimen>
+    <dimen name="tile_letter_font_size_med">16dp</dimen>
+    <dimen name="tile_letter_font_size_small">16dp</dimen>
+    <dimen name="tile_divider_width">1dp</dimen>
 </resources>
diff --git a/src/com/android/mail/photomanager/LetterTileProvider.java b/src/com/android/mail/photomanager/LetterTileProvider.java
index e939222..ab40234 100644
--- a/src/com/android/mail/photomanager/LetterTileProvider.java
+++ b/src/com/android/mail/photomanager/LetterTileProvider.java
@@ -25,6 +25,8 @@
 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;
@@ -47,15 +49,10 @@
 public class LetterTileProvider extends DefaultImageProvider {
     private Bitmap mDefaultBitmap;
     private final LruCache<Integer, Bitmap> mTileBitmapCache;
-    private static int sTilePaddingLeftHalf;
-    private static int sTilePaddingBottomHalf;
-    private static int sTilePaddingLeftQuarter;
-    private static int sTilePaddingBottomQuarter;
-    private static int sTilePaddingBottom;
-    private static int sTilePaddingLeft;
+    private static Typeface sSansSerifLight;
+    private static Rect sBounds;
     private static int sTileLetterFontSize = -1;
     private static int sTileLetterFontSizeSmall;
-    private static int sTileLetterFontSizeMed;
     private static int sTileColor;
     private static int sTileFontColor;
     private static TextPaint sPaint = new TextPaint();
@@ -90,31 +87,22 @@
                 if (sTileLetterFontSize == -1) {
                     final Resources res = view.getContext().getResources();
                     sTileLetterFontSize = res.getDimensionPixelSize(R.dimen.tile_letter_font_size);
-                    sTileLetterFontSizeMed = res
-                            .getDimensionPixelSize(R.dimen.tile_letter_font_size_med);
                     sTileLetterFontSizeSmall = res
                             .getDimensionPixelSize(R.dimen.tile_letter_font_size_small);
-                    sTilePaddingBottom = res
-                            .getDimensionPixelSize(R.dimen.tile_letter_padding_bottom);
-                    sTilePaddingBottomHalf = res
-                            .getDimensionPixelSize(R.dimen.tile_letter_padding_bottom_half);
-                    sTilePaddingBottomQuarter = res
-                            .getDimensionPixelSize(R.dimen.tile_letter_padding_bottom_quarter);
-                    sTilePaddingLeft = res.getDimensionPixelSize(R.dimen.tile_letter_padding_left);
-                    sTilePaddingLeftHalf = res
-                            .getDimensionPixelSize(R.dimen.tile_letter_padding_left_half);
-                    sTilePaddingLeftQuarter = res
-                            .getDimensionPixelSize(R.dimen.tile_letter_padding_left_quarter);
                     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.setTextSize(getFontSize(d.scale));
-                sPaint.setTypeface(Typeface.DEFAULT);
-                sPaint.setColor(sTileFontColor);
                 Canvas c = new Canvas(bitmap);
                 c.drawColor(sTileColor);
-                c.drawText(first, getLeftPadding(d.scale), d.height - getBottomPadding(d.scale),
-                        sPaint);
+                sPaint.setTextSize(getFontSize(d.scale));
+                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);
             }
         } else {
@@ -132,33 +120,11 @@
     private int getFontSize(float scale)  {
         if (scale == DividedImageCanvas.ONE) {
             return sTileLetterFontSize;
-        } else if (scale == DividedImageCanvas.HALF) {
-            return sTileLetterFontSizeMed;
         } else {
             return sTileLetterFontSizeSmall;
         }
     }
 
-    private int getBottomPadding(float scale)  {
-        if (scale == DividedImageCanvas.ONE) {
-            return sTilePaddingBottom;
-        } else if (scale == DividedImageCanvas.HALF){
-            return sTilePaddingBottomHalf;
-        } else {
-            return sTilePaddingBottomQuarter;
-        }
-    }
-
-    private int getLeftPadding(float scale)  {
-        if (scale == DividedImageCanvas.ONE) {
-            return sTilePaddingLeft;
-        } else if (scale == DividedImageCanvas.HALF){
-            return sTilePaddingLeftHalf;
-        } else {
-            return sTilePaddingLeftQuarter;
-        }
-    }
-
     private boolean isLetter(String letter) {
         Matcher m = ALPHABET.matcher(letter);
         return m.matches();
diff --git a/src/com/android/mail/ui/DividedImageCanvas.java b/src/com/android/mail/ui/DividedImageCanvas.java
index c46a8dd..9b6e782 100644
--- a/src/com/android/mail/ui/DividedImageCanvas.java
+++ b/src/com/android/mail/ui/DividedImageCanvas.java
@@ -17,12 +17,14 @@
 package com.android.mail.ui;
 
 import android.content.Context;
+import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Color;
 import android.graphics.Paint;
 import android.graphics.Rect;
 
+import com.android.mail.R;
 import com.android.mail.photomanager.BitmapUtil;
 import com.google.common.base.Objects;
 
@@ -51,6 +53,7 @@
     private final InvalidateCallback mCallback;
     private final ArrayList<Bitmap> mDivisionImages = new ArrayList<Bitmap>(MAX_DIVISIONS);
 
+
     private static final Paint sPaint = new Paint();
     private static final Rect sSrc = new Rect();
     private static final Rect sDest = new Rect();
@@ -61,9 +64,13 @@
 
     public static final float QUARTER = 0.25f;
 
+    private static int sDividerLineWidth = -1;
+    private static int sDividerColor;
+
     public DividedImageCanvas(Context context, InvalidateCallback callback) {
         mContext = context;
         mCallback = callback;
+        setupDividerLines();
     }
 
     /**
@@ -225,11 +232,14 @@
                             break;
                     }
                     complete = mDivisionImages.get(0) != null && mDivisionImages.get(1) != null;
+                    if (complete) {
+                        // Draw dividers
+                        drawVerticalDivider(width, height);
+                    }
                     break;
                 case 3:
                     // Draw 3 bitmaps: the first takes up all vertical
-                    // space,
-                    // the 2nd and 3rd are stacked in the second vertical
+                    // space, the 2nd and 3rd are stacked in the second vertical
                     // position.
                     switch (pos) {
                         case 0:
@@ -245,6 +255,11 @@
                     }
                     complete = mDivisionImages.get(0) != null && mDivisionImages.get(1) != null
                             && mDivisionImages.get(2) != null;
+                    if (complete) {
+                        // Draw dividers
+                        drawVerticalDivider(width, height);
+                        drawHorizontalDivider(width / 2, height / 2, width, height / 2);
+                    }
                     break;
                 default:
                     // Draw all 4 bitmaps in a grid
@@ -265,6 +280,11 @@
                     }
                     complete = mDivisionImages.get(0) != null && mDivisionImages.get(1) != null
                             && mDivisionImages.get(2) != null && mDivisionImages.get(3) != null;
+                    if (complete) {
+                        // Draw dividers
+                        drawVerticalDivider(width, height);
+                        drawHorizontalDivider(0, height / 2, width, height / 2);
+                    }
                     break;
             }
             // Create the new image bitmap.
@@ -274,6 +294,31 @@
         }
     }
 
+    private void setupDividerLines() {
+        if (sDividerLineWidth == -1) {
+            Resources res = getContext().getResources();
+            sDividerLineWidth = res
+                    .getDimensionPixelSize(R.dimen.tile_divider_width);
+            sDividerColor = res.getColor(R.color.tile_divider_color);
+        }
+    }
+
+    private void setupPaint() {
+        sPaint.setStrokeWidth(sDividerLineWidth);
+        sPaint.setColor(sDividerColor);
+    }
+
+    private void drawVerticalDivider(int width, int height) {
+        int x1 = width / 2, y1 = 0, x2 = width/2, y2 = height;
+        setupPaint();
+        mCanvas.drawLine(x1, y1, x2, y2, sPaint);
+    }
+
+    private void drawHorizontalDivider(int x1, int y1, int x2, int y2) {
+        setupPaint();
+        mCanvas.drawLine(x1, y1, x2, y2, sPaint);
+    }
+
     /**
      * Draw the contents of the DividedImageCanvas to the supplied canvas.
      */