package com.fsck.k9.view; import android.graphics.Paint; import android.graphics.Path; import android.graphics.RectF; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.shapes.PathShape; public class ColorChip { public static final Path CIRCULAR = new Path(); public static final Path LEFT_POINTING = new Path(); public static final Path RIGHT_POINTING = new Path(); public static final Path RIGHT_NOTCH = new Path(); public static final Path STAR = new Path(); public static final Path CHECKMARK = new Path(); static { CIRCULAR.addCircle(160,160,70f,Path.Direction.CW); CIRCULAR.close(); RIGHT_POINTING.addArc(new RectF(80f,80f,240f,240f) , 90, 180); RIGHT_POINTING.arcTo(new RectF(160f,0f,320f,160f), 180, -90); RIGHT_POINTING.arcTo(new RectF(160f,160f,320f,320f), 270,-90); RIGHT_POINTING.close(); RIGHT_NOTCH.addArc(new RectF(80f,80f,240f,240f) , 90, 180); RIGHT_NOTCH.arcTo(new RectF(160f,0f,320f,160f), 180, -90); RIGHT_NOTCH.arcTo(new RectF(160f,160f,320f,320f), 270,-90); RIGHT_NOTCH.close(); LEFT_POINTING.addArc(new RectF(80f,80f,240f,240f) , 90, -180); LEFT_POINTING.arcTo(new RectF(00f,00f,160f,160f), 0, 90); LEFT_POINTING.arcTo(new RectF(00f,160f,160f,320f), 270,90); LEFT_POINTING.close(); STAR.moveTo(140f,60f); STAR.lineTo(170f,110f); STAR.lineTo(220f,120f); STAR.lineTo(180f,160f); STAR.lineTo(200f,220f); STAR.lineTo(140f,190f); STAR.lineTo(80f,220f); STAR.lineTo(100f,160f); STAR.lineTo(60f,120f); STAR.lineTo(110f,110f); STAR.lineTo(140f,60f); STAR.close(); CHECKMARK.moveTo(10f,160f); CHECKMARK.lineTo(120f,280f); CHECKMARK.lineTo(300f,40f); } private ShapeDrawable mDrawable; public ColorChip(int color, boolean messageRead, Path shape) { if (shape.equals(STAR)) { mDrawable = new ShapeDrawable(new PathShape(shape, 280f, 280f)); } else { mDrawable = new ShapeDrawable(new PathShape(shape, 320f, 320f)); } if (shape.equals(CHECKMARK)) { mDrawable.getPaint().setStrokeWidth(50); } else { mDrawable.getPaint().setStrokeWidth(20); } if (messageRead) { // Read messages get an outlined circle mDrawable.getPaint().setStyle(Paint.Style.STROKE); } else { // Unread messages get filled, while retaining the outline, so that they stay the same size mDrawable.getPaint().setStyle(Paint.Style.FILL_AND_STROKE); } mDrawable.getPaint().setColor(color); } public ShapeDrawable drawable() { return mDrawable; } }