ColorChipView.java revision 056079920bc9d141241648662ad4ebdea91b1fd4
1056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson/*
2056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * Copyright (C) 2011 The Android Open Source Project
3056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson *
4056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * Licensed under the Apache License, Version 2.0 (the "License");
5056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * you may not use this file except in compliance with the License.
6056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * You may obtain a copy of the License at
7056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson *
8056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson *      http://www.apache.org/licenses/LICENSE-2.0
9056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson *
10056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * Unless required by applicable law or agreed to in writing, software
11056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * distributed under the License is distributed on an "AS IS" BASIS,
12056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * See the License for the specific language governing permissions and
14056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * limitations under the License.
15056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson */
16056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
17056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonpackage com.android.calendar;
18056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
19056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.content.Context;
20056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.graphics.Canvas;
21056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.graphics.Paint;
22056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.graphics.Paint.Style;
23056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.graphics.drawable.Drawable;
24056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.util.AttributeSet;
25056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.util.Log;
26056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.view.View;
27056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
28056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
29056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
30056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
31056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson/**
32056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * A custom view for a color chip for an event that can be drawn differently
33056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * accroding to the event's status.
34056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson *
35056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson */
36056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonpublic class ColorChipView extends View {
37056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
38056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    private static final String TAG = "ColorChipView";
39056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    // Style of drawing
40056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    // Full rectangle for accepted events
41056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    // Border for tentative events
42056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    // Cross-hatched with 50% transparency for declined events
43056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
44056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public static final int  DRAW_FULL = 0;
45056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public static final int  DRAW_BORDER = 1;
46056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public static final int  DRAW_CROSS_HATCHED = 2;
47056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
48056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public static final float  DECLINED_ALPHA = (float)0.5;
49056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public static final float  DEFAULT_ALPHA = (float)1;
50056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
51056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
52056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    int mDrawStyle = DRAW_FULL;
53056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
54056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    private static final int DEF_BORDER_WIDTH = 3;
55056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
56056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    int mBorderWidth = DEF_BORDER_WIDTH;
57056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
58056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    int mColor;
59056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
60056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public ColorChipView(Context context) {
61056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        super(context);
62056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
63056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
64056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public ColorChipView(Context context, AttributeSet attrs) {
65056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        super(context, attrs);
66056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
67056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
68056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public void setDrawStyle(int style) {
69056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        if (style != DRAW_FULL && style != DRAW_BORDER && style != DRAW_CROSS_HATCHED) {
70056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson            return;
71056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        }
72056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        mDrawStyle = style;
73056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
74056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
75056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public void setBorderWidth(int width) {
76056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        if (width >= 0) {
77056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson            mBorderWidth = width;
78056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        }
79056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
80056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
81056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public void setColor(int color) {
82056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        mColor = color;
83056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
84056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
85056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    @Override
86056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public void onDraw(Canvas c) {
87056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
88056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        int right = getWidth() - 1;
89056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        int bottom = getHeight() - 1;
90056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        Paint p = new Paint();
91056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        p.setColor(mColor);
92056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        p.setStyle(Style.FILL_AND_STROKE);
93056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
94056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        switch (mDrawStyle) {
95056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson            case DRAW_FULL:
96056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                c.drawRect(0, 0, right, bottom, p);
97056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                setAlpha(DEFAULT_ALPHA);
98056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                break;
99056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson            case DRAW_BORDER:
100056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                if (mBorderWidth <= 0) {
101056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                    return;
102056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                }
103056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                int halfBorderWidth =  mBorderWidth / 2;
104056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                int top = halfBorderWidth;
105056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                int left = halfBorderWidth;
106056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                p.setStrokeWidth(mBorderWidth);
107056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
108056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                float [] lines = new float [16];
109056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                int ptr = 0;
110056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = 0;
111056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = top;
112056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = right;
113056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = top;
114056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = 0;
115056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = bottom - halfBorderWidth;
116056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = right;
117056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = bottom - halfBorderWidth;
118056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = left;
119056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = 0;
120056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = left;
121056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = bottom;
122056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = right - halfBorderWidth;
123056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = 0;
124056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = right - halfBorderWidth;
125056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = bottom;
126056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                c.drawLines(lines, p);
127056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                setAlpha(DEFAULT_ALPHA);
128056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                break;
129056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson            case DRAW_CROSS_HATCHED:
130056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                // TODO: replace this with  an asset
131056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                c.drawLine(0, 0, right, bottom, p);
132056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                c.drawLine(0, bottom, right, 0, p);
133056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                setAlpha(DECLINED_ALPHA);
134056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                break;
135056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson            default:
136056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                break;
137056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        }
138056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
139056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson}
140