k-9/src/com/fsck/k9/view/ColorChip.java

93 lines
2.8 KiB
Java

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;
}
}