package com.android.launcher;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RadialGradient;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.graphics.Paint.FontMetrics;
import android.graphics.Shader.TileMode;
import android.util.AttributeSet;
import android.widget.ImageView;
public class CounterImageView extends ImageView {
//ADW custom notifier counters
private String mCounter=null;
private int mCounterSize=0;
private int mCounterPadding=0;
private final Rect mRect2 = new Rect();
private Paint mStrokePaint;
private Paint mTextPaint;
private FontMetrics fm;
private int mBubbleColor=0xFF00FF00;
private int mBubbleColor2=0xFFFF6666;
public CounterImageView(Context context) {
super(context);
init();
}
public CounterImageView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CounterImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init(){
final float scale =getResources().getDisplayMetrics().density;
final int fontSize = (int)(AlmostNexusSettingsHelper.getNotifSize(getContext()) * scale + 0.5f);
mStrokePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mTextPaint.setARGB(255, 255, 255, 255);
mTextPaint.setTextAlign(Paint.Align.CENTER);
mTextPaint.setTextSize(fontSize);
mTextPaint.setTypeface(Typeface.DEFAULT_BOLD);
mTextPaint.setShadowLayer(2f, 1, 1, 0xFF000000);
fm=mTextPaint.getFontMetrics();
mCounterPadding=getContext().getResources().getDimensionPixelSize(R.dimen.counter_circle_padding);
}
public void setCounter(int counter, int color){
if(color!=0 && color!=mBubbleColor){
mBubbleColor=color;
float[] hsv = new float[3];
Color.colorToHSV(mBubbleColor, hsv);
hsv[2]=.1f;
mBubbleColor2=Color.HSVToColor(hsv);
}
if(counter>0){
mCounter=String.valueOf(counter);
mTextPaint.getTextBounds(mCounter, 0, mCounter.length(), mRect2);
mCounterSize=(Math.max(mRect2.width(), mRect2.height())/2)+mCounterPadding;
RadialGradient shader = new RadialGradient(0, -mCounterSize, mCounterSize*1.5f, mBubbleColor,mBubbleColor2, TileMode.MIRROR);
mStrokePaint.setShader(shader);
}else if(counter==-1){
mCounter="?";
mTextPaint.getTextBounds(mCounter, 0, mCounter.length(), mRect2);
mCounterSize=(Math.max(mRect2.width(), mRect2.height())/2)+mCounterPadding;
RadialGradient shader = new RadialGradient(0, -mCounterSize, mCounterSize*1.5f, mBubbleColor,mBubbleColor2, TileMode.MIRROR);
mStrokePaint.setShader(shader);
}else{
mCounter=null;
}
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
//OVERLAY COUNTERS
if(mCounter!=null){
canvas.save();
canvas.translate(getScrollX()+getWidth()-(mCounterSize)-(mCounterPadding), getScrollY()+(mCounterSize)-(fm.top/2));
mTextPaint.setAlpha(150);
canvas.drawCircle(0, -mRect2.height()/2, mCounterSize+1, mTextPaint);
canvas.drawCircle(0, -mRect2.height()/2, mCounterSize, mStrokePaint);
mTextPaint.setAlpha(255);
canvas.drawText(mCounter, 0, 0, mTextPaint);
canvas.restore();
}
}
}