UnreadCountCustomView.java

 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}