blob: f5d28edb6f9b85d6384092993dbda8d4e86c9031 [file] [log] [blame]
package com.android.mail.bitmap;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import com.android.bitmap.BitmapCache;
import com.android.bitmap.DecodeAggregator;
import com.android.mail.R;
import com.android.mail.browse.ConversationItemViewCoordinates;
/**
* A 2x1 grid of attachment drawables. Supports showing a small "+N" badge in the corner.
*/
public class AttachmentGridDrawable extends CompositeDrawable<AttachmentDrawable>
implements Parallaxable {
public static final int MAX_VISIBLE_ATTACHMENT_COUNT = 2;
private BitmapCache mCache;
private DecodeAggregator mDecodeAggregator;
private String mOverflowText;
private ConversationItemViewCoordinates mCoordinates;
private float mParallaxFraction = 0.5f;
private final Resources mResources;
private final Drawable mPlaceholder;
private final Drawable mProgress;
private final int mOverflowTextColor;
private final int mOverflowBadgeColor;
private final Paint mPaint = new Paint();
private final Rect mRect = new Rect();
public AttachmentGridDrawable(Resources res, Drawable placeholder, Drawable progress) {
super(MAX_VISIBLE_ATTACHMENT_COUNT);
mResources = res;
mPlaceholder = placeholder;
mProgress = progress;
mOverflowTextColor = res.getColor(R.color.ap_overflow_text_color);
mOverflowBadgeColor = res.getColor(R.color.ap_overflow_badge_color);
mPaint.setAntiAlias(true);
}
@Override
protected AttachmentDrawable createDivisionDrawable() {
final AttachmentDrawable result = new AttachmentDrawable(mResources, mCache,
mDecodeAggregator, mCoordinates, mPlaceholder, mProgress);
return result;
}
public void setBitmapCache(BitmapCache cache) {
mCache = cache;
}
public void setDecodeAggregator(final DecodeAggregator decodeAggregator) {
this.mDecodeAggregator = decodeAggregator;
}
public void setOverflowText(String text) {
mOverflowText = text;
layoutOverflowBadge();
}
public void setCoordinates(ConversationItemViewCoordinates coordinates) {
mCoordinates = coordinates;
layoutOverflowBadge();
}
private void layoutOverflowBadge() {
if (mCoordinates == null || mOverflowText == null) {
return;
}
mPaint.setTextSize(mCoordinates.overflowFontSize);
mPaint.setTypeface(mCoordinates.overflowTypeface);
mPaint.setTextAlign(Align.CENTER);
mPaint.getTextBounds(mOverflowText, 0, mOverflowText.length(), mRect);
}
@Override
public void draw(Canvas canvas) {
for (int i = 0; i < mCount; i++) {
mDrawables.get(i).setParallaxFraction(mParallaxFraction);
}
super.draw(canvas);
// Overflow badge and count
if (mOverflowText != null && mCoordinates != null) {
final float radius = mCoordinates.overflowDiameter / 2f;
// transform item-level coordinates into local drawable coordinate space
final float x = mCoordinates.overflowXEnd - mCoordinates.attachmentPreviewsX - radius;
final float y = mCoordinates.overflowYEnd - mCoordinates.attachmentPreviewsY - radius;
mPaint.setColor(mOverflowBadgeColor);
canvas.drawCircle(x, y, radius, mPaint);
mPaint.setColor(mOverflowTextColor);
canvas.drawText(mOverflowText, x, y + (mRect.height() / 2f), mPaint);
}
}
@Override
public void setParallaxFraction(float fraction) {
mParallaxFraction = fraction;
}
}