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