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