1package eu.siacs.conversations.ui.widget;
2
3import android.content.Context;
4import android.content.res.TypedArray;
5import android.graphics.Canvas;
6import android.graphics.Color;
7import android.graphics.Paint;
8import android.graphics.Typeface;
9import android.support.v4.content.ContextCompat;
10import android.util.AttributeSet;
11import android.view.View;
12
13import eu.siacs.conversations.R;
14
15public class UnreadCountCustomView extends View {
16
17 private int unreadCount;
18 private Paint paint, textPaint;
19 private int backgroundColor = 0xff326130;
20
21 public UnreadCountCustomView(Context context) {
22 super(context);
23 init();
24 }
25
26 public UnreadCountCustomView(Context context, AttributeSet attrs) {
27 super(context, attrs);
28 initXMLAttrs(context, attrs);
29 init();
30 }
31
32 public UnreadCountCustomView(Context context, AttributeSet attrs, int defStyleAttr) {
33 super(context, attrs, defStyleAttr);
34 initXMLAttrs(context, attrs);
35 init();
36 }
37
38 private void initXMLAttrs(Context context, AttributeSet attrs) {
39 TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.UnreadCountCustomView);
40 setBackgroundColor(a.getColor(a.getIndex(0), ContextCompat.getColor(context, R.color.green700_desaturated)));
41 a.recycle();
42 }
43
44 void init() {
45 paint = new Paint();
46 paint.setColor(backgroundColor);
47 paint.setAntiAlias(true);
48 textPaint = new Paint();
49 textPaint.setColor(Color.WHITE);
50 textPaint.setTextAlign(Paint.Align.CENTER);
51 textPaint.setAntiAlias(true);
52 textPaint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.BOLD));
53 }
54
55 @Override
56 protected void onDraw(Canvas canvas) {
57 super.onDraw(canvas);
58 float midx = canvas.getWidth() / 2.0f;
59 float midy = canvas.getHeight() / 2.0f;
60 float radius = Math.min(canvas.getWidth(), canvas.getHeight()) / 2.0f;
61 float textOffset = canvas.getWidth() / 6.0f;
62 textPaint.setTextSize(0.95f * radius);
63 canvas.drawCircle(midx, midy, radius * 0.94f, paint);
64 canvas.drawText(unreadCount > 999 ? "\u221E" : String.valueOf(unreadCount), midx, midy + textOffset, textPaint);
65
66 }
67
68 public void setUnreadCount(int unreadCount) {
69 this.unreadCount = unreadCount;
70 invalidate();
71 }
72
73 public void setBackgroundColor(int backgroundColor) {
74 this.backgroundColor = backgroundColor;
75 }
76}