ColorChipView.java revision aeae98bf8f8c5c544f65f5b6b7f29cfd31366ad5
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;
20980d530f002b335916e8b31662e50a94b43cae18Isaac Katzenelsonimport android.graphics.BitmapFactory;
21056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.graphics.Canvas;
22056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.graphics.Paint;
23056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.graphics.Paint.Style;
24980d530f002b335916e8b31662e50a94b43cae18Isaac Katzenelsonimport android.graphics.PorterDuff;
2542dabd1e1e89b0d4af5afb776c6ecc53f6ae9fbaRoboErikimport android.graphics.Shader.TileMode;
2642dabd1e1e89b0d4af5afb776c6ecc53f6ae9fbaRoboErikimport android.graphics.drawable.BitmapDrawable;
27056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.util.AttributeSet;
28056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.view.View;
29056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
30056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
31056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
32056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
33056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson/**
34056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * A custom view for a color chip for an event that can be drawn differently
35056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * accroding to the event's status.
36056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson *
37056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson */
38056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonpublic class ColorChipView extends View {
39056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
40056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    private static final String TAG = "ColorChipView";
41056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    // Style of drawing
42056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    // Full rectangle for accepted events
43056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    // Border for tentative events
44056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    // Cross-hatched with 50% transparency for declined events
45056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
46980d530f002b335916e8b31662e50a94b43cae18Isaac Katzenelson    public static final int DRAW_FULL = 0;
47980d530f002b335916e8b31662e50a94b43cae18Isaac Katzenelson    public static final int DRAW_BORDER = 1;
48aeae98bf8f8c5c544f65f5b6b7f29cfd31366ad5Michael Chan    public static final int DRAW_FADED = 2;
49056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
50aeae98bf8f8c5c544f65f5b6b7f29cfd31366ad5Michael Chan    private static final float DECLINED_ALPHA = (float) 0.625;
51980d530f002b335916e8b31662e50a94b43cae18Isaac Katzenelson    private static final float DEFAULT_ALPHA = 1;
52056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
53056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    int mDrawStyle = DRAW_FULL;
54056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
55980d530f002b335916e8b31662e50a94b43cae18Isaac Katzenelson    private static final int DEF_BORDER_WIDTH = 4;
56056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
57056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    int mBorderWidth = DEF_BORDER_WIDTH;
58056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
59056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    int mColor;
60056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
61056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public ColorChipView(Context context) {
62056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        super(context);
63056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
64056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
65056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public ColorChipView(Context context, AttributeSet attrs) {
66056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        super(context, attrs);
67056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
68056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
69056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public void setDrawStyle(int style) {
70aeae98bf8f8c5c544f65f5b6b7f29cfd31366ad5Michael Chan        if (style != DRAW_FULL && style != DRAW_BORDER && style != DRAW_FADED) {
71056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson            return;
72056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        }
73056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        mDrawStyle = style;
74aeae98bf8f8c5c544f65f5b6b7f29cfd31366ad5Michael Chan        if (style == DRAW_FADED) {
75980d530f002b335916e8b31662e50a94b43cae18Isaac Katzenelson            setAlpha(DECLINED_ALPHA);
76980d530f002b335916e8b31662e50a94b43cae18Isaac Katzenelson        } else {
77980d530f002b335916e8b31662e50a94b43cae18Isaac Katzenelson            setBackgroundDrawable(null);
78980d530f002b335916e8b31662e50a94b43cae18Isaac Katzenelson            setAlpha(DEFAULT_ALPHA);
79980d530f002b335916e8b31662e50a94b43cae18Isaac Katzenelson        }
80d002bd24937d9c0823f283884961adc2c902558eIsaac Katzenelson        invalidate();
81056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
82056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
83056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public void setBorderWidth(int width) {
84056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        if (width >= 0) {
85056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson            mBorderWidth = width;
86d002bd24937d9c0823f283884961adc2c902558eIsaac Katzenelson            invalidate();
87056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        }
88056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
89056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
90056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public void setColor(int color) {
91056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        mColor = color;
92d002bd24937d9c0823f283884961adc2c902558eIsaac Katzenelson        invalidate();
93056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
94056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
95056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    @Override
96056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    public void onDraw(Canvas c) {
97056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
98056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        int right = getWidth() - 1;
99056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        int bottom = getHeight() - 1;
100056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        Paint p = new Paint();
101056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        p.setColor(mColor);
102056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        p.setStyle(Style.FILL_AND_STROKE);
103056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
104056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        switch (mDrawStyle) {
105aeae98bf8f8c5c544f65f5b6b7f29cfd31366ad5Michael Chan            case DRAW_FADED:
106056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson            case DRAW_FULL:
107056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                c.drawRect(0, 0, right, bottom, p);
108056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                break;
109056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson            case DRAW_BORDER:
110056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                if (mBorderWidth <= 0) {
111056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                    return;
112056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                }
113980d530f002b335916e8b31662e50a94b43cae18Isaac Katzenelson                int halfBorderWidth = mBorderWidth / 2;
114056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                int top = halfBorderWidth;
115056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                int left = halfBorderWidth;
116056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                p.setStrokeWidth(mBorderWidth);
117056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson
118980d530f002b335916e8b31662e50a94b43cae18Isaac Katzenelson                float[] lines = new float[16];
119056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                int ptr = 0;
120056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = 0;
121056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = top;
122056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = right;
123056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = top;
124056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = 0;
125056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = bottom - halfBorderWidth;
126056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = right;
127056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = bottom - halfBorderWidth;
128056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = left;
129056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = 0;
130056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = left;
131056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = bottom;
132056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = right - halfBorderWidth;
133056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = 0;
134056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = right - halfBorderWidth;
135056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                lines [ptr++] = bottom;
136056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                c.drawLines(lines, p);
137056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson                break;
138056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson        }
139056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson    }
140056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson}
141