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
46e35e4857c203cd46c666bf47f2aed3951dbc9cd0Isaac Katzenelson    private int mDrawStyle = DRAW_FULL;
47e35e4857c203cd46c666bf47f2aed3951dbc9cd0Isaac Katzenelson    private float mDefStrokeWidth;
48e35e4857c203cd46c666bf47f2aed3951dbc9cd0Isaac Katzenelson    private Paint mPaint;
49056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
50980d530f002b335916e8b31662e50a94b43cae18Isaac Katzenelson    private static final int DEF_BORDER_WIDTH = 4;
51056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
52056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    int mBorderWidth = DEF_BORDER_WIDTH;
53056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
54056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    int mColor;
55056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
56056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public ColorChipView(Context context) {
57056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        super(context);
58e35e4857c203cd46c666bf47f2aed3951dbc9cd0Isaac Katzenelson        init();
59056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
60056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
61056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public ColorChipView(Context context, AttributeSet attrs) {
62056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        super(context, attrs);
63e35e4857c203cd46c666bf47f2aed3951dbc9cd0Isaac Katzenelson        init();
64056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
65056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
66e35e4857c203cd46c666bf47f2aed3951dbc9cd0Isaac Katzenelson    private void init() {
67e35e4857c203cd46c666bf47f2aed3951dbc9cd0Isaac Katzenelson        mPaint = new Paint();
68e35e4857c203cd46c666bf47f2aed3951dbc9cd0Isaac Katzenelson        mDefStrokeWidth = mPaint.getStrokeWidth();
69e35e4857c203cd46c666bf47f2aed3951dbc9cd0Isaac Katzenelson        mPaint.setStyle(Style.FILL_AND_STROKE);
70e35e4857c203cd46c666bf47f2aed3951dbc9cd0Isaac Katzenelson    }
71e35e4857c203cd46c666bf47f2aed3951dbc9cd0Isaac Katzenelson
72e35e4857c203cd46c666bf47f2aed3951dbc9cd0Isaac Katzenelson
73056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public void setDrawStyle(int style) {
74aeae98bf8f8c5c544f65f5b6b7f29cfd31366ad5Michael Chan        if (style != DRAW_FULL && style != DRAW_BORDER && style != DRAW_FADED) {
75056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson            return;
76056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        }
77056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        mDrawStyle = style;
78d002bd24937d9c0823f283884961adc2c902558eIsaac Katzenelson        invalidate();
79056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
80056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
81056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public void setBorderWidth(int width) {
82056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        if (width >= 0) {
83056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson            mBorderWidth = width;
84d002bd24937d9c0823f283884961adc2c902558eIsaac Katzenelson            invalidate();
85056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        }
86056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
87056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
88056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public void setColor(int color) {
89056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        mColor = color;
90d002bd24937d9c0823f283884961adc2c902558eIsaac Katzenelson        invalidate();
91056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
92056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
93056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    @Override
94056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public void onDraw(Canvas c) {
95056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
96056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        int right = getWidth() - 1;
97056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        int bottom = getHeight() - 1;
98e35e4857c203cd46c666bf47f2aed3951dbc9cd0Isaac Katzenelson        mPaint.setColor(mDrawStyle == DRAW_FADED ?
99e35e4857c203cd46c666bf47f2aed3951dbc9cd0Isaac Katzenelson                Utils.getDeclinedColorFromColor(mColor) : mColor);
100056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
101056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        switch (mDrawStyle) {
102aeae98bf8f8c5c544f65f5b6b7f29cfd31366ad5Michael Chan            case DRAW_FADED:
103056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson            case DRAW_FULL:
104e35e4857c203cd46c666bf47f2aed3951dbc9cd0Isaac Katzenelson                mPaint.setStrokeWidth(mDefStrokeWidth);
105e35e4857c203cd46c666bf47f2aed3951dbc9cd0Isaac Katzenelson                c.drawRect(0, 0, right, bottom, mPaint);
106056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                break;
107056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson            case DRAW_BORDER:
108056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                if (mBorderWidth <= 0) {
109056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                    return;
110056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                }
111980d530f002b335916e8b31662e50a94b43cae18Isaac Katzenelson                int halfBorderWidth = mBorderWidth / 2;
112056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                int top = halfBorderWidth;
113056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                int left = halfBorderWidth;
114e35e4857c203cd46c666bf47f2aed3951dbc9cd0Isaac Katzenelson                mPaint.setStrokeWidth(mBorderWidth);
115056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
116980d530f002b335916e8b31662e50a94b43cae18Isaac Katzenelson                float[] lines = new float[16];
117056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                int ptr = 0;
118056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = 0;
119056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = top;
120056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = right;
121056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = top;
122056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = 0;
123056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = bottom - halfBorderWidth;
124056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = right;
125056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = bottom - halfBorderWidth;
126056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = left;
127056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = 0;
128056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = left;
129056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = bottom;
130056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = right - halfBorderWidth;
131056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = 0;
132056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = right - halfBorderWidth;
133056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = bottom;
134e35e4857c203cd46c666bf47f2aed3951dbc9cd0Isaac Katzenelson                c.drawLines(lines, mPaint);
135056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                break;
136056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        }
137056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
138056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson}
139