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