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.util.AttributeSet;
24056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.view.View;
25056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
26056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
27056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
28056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
29056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson/**
30056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * A custom view for a color chip for an event that can be drawn differently
31056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * accroding to the event's status.
32056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson *
33056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson */
34056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonpublic class ColorChipView extends View {
35056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
36056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    private static final String TAG = "ColorChipView";
37056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    // Style of drawing
38056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    // Full rectangle for accepted events
39056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    // Border for tentative events
40056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    // Cross-hatched with 50% transparency for declined events
41056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
42980d530f002b335916e8b31662e50a94b43cae18Isaac Katzenelson    public static final int DRAW_FULL = 0;
43980d530f002b335916e8b31662e50a94b43cae18Isaac Katzenelson    public static final int DRAW_BORDER = 1;
44aeae98bf8f8c5c544f65f5b6b7f29cfd31366ad5Michael Chan    public static final int DRAW_FADED = 2;
45056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
46056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    int mDrawStyle = DRAW_FULL;
47056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
48980d530f002b335916e8b31662e50a94b43cae18Isaac Katzenelson    private static final int DEF_BORDER_WIDTH = 4;
49056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
50056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    int mBorderWidth = DEF_BORDER_WIDTH;
51056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
52056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    int mColor;
53056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
54056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public ColorChipView(Context context) {
55056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        super(context);
56056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
57056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
58056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public ColorChipView(Context context, AttributeSet attrs) {
59056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        super(context, attrs);
60056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
61056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
62056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public void setDrawStyle(int style) {
63aeae98bf8f8c5c544f65f5b6b7f29cfd31366ad5Michael Chan        if (style != DRAW_FULL && style != DRAW_BORDER && style != DRAW_FADED) {
64056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson            return;
65056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        }
66056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        mDrawStyle = style;
67d002bd24937d9c0823f283884961adc2c902558eIsaac Katzenelson        invalidate();
68056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
69056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
70056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public void setBorderWidth(int width) {
71056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        if (width >= 0) {
72056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson            mBorderWidth = width;
73d002bd24937d9c0823f283884961adc2c902558eIsaac Katzenelson            invalidate();
74056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        }
75056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
76056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
77056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public void setColor(int color) {
78056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        mColor = color;
79d002bd24937d9c0823f283884961adc2c902558eIsaac Katzenelson        invalidate();
80056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
81056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
82056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    @Override
83056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public void onDraw(Canvas c) {
84056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
85056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        int right = getWidth() - 1;
86056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        int bottom = getHeight() - 1;
87056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        Paint p = new Paint();
88210642aa1f8bec18f7275cddb9a3b50fad3f4218RoboErik        p.setColor(mDrawStyle == DRAW_FADED ? Utils.getDeclinedColorFromColor(mColor) : mColor);
89056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        p.setStyle(Style.FILL_AND_STROKE);
90056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
91056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        switch (mDrawStyle) {
92aeae98bf8f8c5c544f65f5b6b7f29cfd31366ad5Michael Chan            case DRAW_FADED:
93056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson            case DRAW_FULL:
94056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                c.drawRect(0, 0, right, bottom, p);
95056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                break;
96056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson            case DRAW_BORDER:
97056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                if (mBorderWidth <= 0) {
98056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                    return;
99056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                }
100980d530f002b335916e8b31662e50a94b43cae18Isaac Katzenelson                int halfBorderWidth = mBorderWidth / 2;
101056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                int top = halfBorderWidth;
102056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                int left = halfBorderWidth;
103056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                p.setStrokeWidth(mBorderWidth);
104056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
105980d530f002b335916e8b31662e50a94b43cae18Isaac Katzenelson                float[] lines = new float[16];
106056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                int ptr = 0;
107056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = 0;
108056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = top;
109056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = right;
110056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = top;
111056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = 0;
112056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = bottom - halfBorderWidth;
113056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = right;
114056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = bottom - halfBorderWidth;
115056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = left;
116056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = 0;
117056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = left;
118056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = bottom;
119056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = right - halfBorderWidth;
120056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = 0;
121056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = right - halfBorderWidth;
122056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = bottom;
123056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                c.drawLines(lines, p);
124056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                break;
125056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        }
126056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
127056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson}
128