13e9818e0267619fecebd55095ab26c53eff92e93James Kung/* 23e9818e0267619fecebd55095ab26c53eff92e93James Kung * Copyright (C) 2013 The Android Open Source Project 33e9818e0267619fecebd55095ab26c53eff92e93James Kung * 43e9818e0267619fecebd55095ab26c53eff92e93James Kung * Licensed under the Apache License, Version 2.0 (the "License"); 53e9818e0267619fecebd55095ab26c53eff92e93James Kung * you may not use this file except in compliance with the License. 63e9818e0267619fecebd55095ab26c53eff92e93James Kung * You may obtain a copy of the License at 73e9818e0267619fecebd55095ab26c53eff92e93James Kung * 83e9818e0267619fecebd55095ab26c53eff92e93James Kung * http://www.apache.org/licenses/LICENSE-2.0 93e9818e0267619fecebd55095ab26c53eff92e93James Kung * 103e9818e0267619fecebd55095ab26c53eff92e93James Kung * Unless required by applicable law or agreed to in writing, software 113e9818e0267619fecebd55095ab26c53eff92e93James Kung * distributed under the License is distributed on an "AS IS" BASIS, 123e9818e0267619fecebd55095ab26c53eff92e93James Kung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133e9818e0267619fecebd55095ab26c53eff92e93James Kung * See the License for the specific language governing permissions and 143e9818e0267619fecebd55095ab26c53eff92e93James Kung * limitations under the License. 153e9818e0267619fecebd55095ab26c53eff92e93James Kung */ 163e9818e0267619fecebd55095ab26c53eff92e93James Kung 173e9818e0267619fecebd55095ab26c53eff92e93James Kungpackage com.android.datetimepicker.date; 183e9818e0267619fecebd55095ab26c53eff92e93James Kung 193e9818e0267619fecebd55095ab26c53eff92e93James Kungimport android.content.Context; 203e9818e0267619fecebd55095ab26c53eff92e93James Kungimport android.content.res.Resources; 213e9818e0267619fecebd55095ab26c53eff92e93James Kungimport android.graphics.Canvas; 223e9818e0267619fecebd55095ab26c53eff92e93James Kungimport android.graphics.Paint; 233e9818e0267619fecebd55095ab26c53eff92e93James Kungimport android.graphics.Paint.Align; 243e9818e0267619fecebd55095ab26c53eff92e93James Kungimport android.graphics.Paint.Style; 25cb3f2522609186db6239ad154af275957118295cSam Blitzsteinimport android.text.format.DateUtils; 263e9818e0267619fecebd55095ab26c53eff92e93James Kungimport android.util.AttributeSet; 27cb3f2522609186db6239ad154af275957118295cSam Blitzsteinimport android.view.accessibility.AccessibilityEvent; 283e9818e0267619fecebd55095ab26c53eff92e93James Kungimport android.widget.TextView; 293e9818e0267619fecebd55095ab26c53eff92e93James Kung 303e9818e0267619fecebd55095ab26c53eff92e93James Kungimport com.android.datetimepicker.R; 313e9818e0267619fecebd55095ab26c53eff92e93James Kung 323e9818e0267619fecebd55095ab26c53eff92e93James Kung/** 332e00aa34c051111529290cf23c6ba940c2c0c142James Kung * A text view which, when pressed or activated, displays a blue circle around the text. 343e9818e0267619fecebd55095ab26c53eff92e93James Kung */ 352e00aa34c051111529290cf23c6ba940c2c0c142James Kungpublic class TextViewWithCircularIndicator extends TextView { 363e9818e0267619fecebd55095ab26c53eff92e93James Kung 373e9818e0267619fecebd55095ab26c53eff92e93James Kung private static final int SELECTED_CIRCLE_ALPHA = 60; 383e9818e0267619fecebd55095ab26c53eff92e93James Kung 393e9818e0267619fecebd55095ab26c53eff92e93James Kung Paint mCirclePaint = new Paint(); 403e9818e0267619fecebd55095ab26c53eff92e93James Kung 413e9818e0267619fecebd55095ab26c53eff92e93James Kung private final int mRadius; 423e9818e0267619fecebd55095ab26c53eff92e93James Kung private final int mCircleColor; 43cb3f2522609186db6239ad154af275957118295cSam Blitzstein private final String mItemIsSelectedText; 44cb3f2522609186db6239ad154af275957118295cSam Blitzstein 452e00aa34c051111529290cf23c6ba940c2c0c142James Kung private boolean mDrawCircle; 463e9818e0267619fecebd55095ab26c53eff92e93James Kung 472e00aa34c051111529290cf23c6ba940c2c0c142James Kung public TextViewWithCircularIndicator(Context context, AttributeSet attrs) { 483e9818e0267619fecebd55095ab26c53eff92e93James Kung super(context, attrs); 493e9818e0267619fecebd55095ab26c53eff92e93James Kung Resources res = context.getResources(); 502e00aa34c051111529290cf23c6ba940c2c0c142James Kung mCircleColor = res.getColor(R.color.blue); 513e9818e0267619fecebd55095ab26c53eff92e93James Kung mRadius = res.getDimensionPixelOffset(R.dimen.month_select_circle_radius); 52cb3f2522609186db6239ad154af275957118295cSam Blitzstein mItemIsSelectedText = context.getResources().getString(R.string.item_is_selected); 53cb3f2522609186db6239ad154af275957118295cSam Blitzstein 543e9818e0267619fecebd55095ab26c53eff92e93James Kung init(); 553e9818e0267619fecebd55095ab26c53eff92e93James Kung } 563e9818e0267619fecebd55095ab26c53eff92e93James Kung 573e9818e0267619fecebd55095ab26c53eff92e93James Kung private void init() { 583e9818e0267619fecebd55095ab26c53eff92e93James Kung mCirclePaint.setFakeBoldText(true); 593e9818e0267619fecebd55095ab26c53eff92e93James Kung mCirclePaint.setAntiAlias(true); 603e9818e0267619fecebd55095ab26c53eff92e93James Kung mCirclePaint.setColor(mCircleColor); 613e9818e0267619fecebd55095ab26c53eff92e93James Kung mCirclePaint.setTextAlign(Align.CENTER); 623e9818e0267619fecebd55095ab26c53eff92e93James Kung mCirclePaint.setStyle(Style.FILL); 633e9818e0267619fecebd55095ab26c53eff92e93James Kung mCirclePaint.setAlpha(SELECTED_CIRCLE_ALPHA); 643e9818e0267619fecebd55095ab26c53eff92e93James Kung } 653e9818e0267619fecebd55095ab26c53eff92e93James Kung 662e00aa34c051111529290cf23c6ba940c2c0c142James Kung public void drawIndicator(boolean drawCircle) { 672e00aa34c051111529290cf23c6ba940c2c0c142James Kung mDrawCircle = drawCircle; 682e00aa34c051111529290cf23c6ba940c2c0c142James Kung } 692e00aa34c051111529290cf23c6ba940c2c0c142James Kung 703e9818e0267619fecebd55095ab26c53eff92e93James Kung @Override 713e9818e0267619fecebd55095ab26c53eff92e93James Kung public void onDraw(Canvas canvas) { 723e9818e0267619fecebd55095ab26c53eff92e93James Kung super.onDraw(canvas); 732e00aa34c051111529290cf23c6ba940c2c0c142James Kung if (mDrawCircle) { 742e00aa34c051111529290cf23c6ba940c2c0c142James Kung final int width = getWidth(); 752e00aa34c051111529290cf23c6ba940c2c0c142James Kung final int height = getHeight(); 762e00aa34c051111529290cf23c6ba940c2c0c142James Kung int radius = Math.min(width, height) / 2; 772e00aa34c051111529290cf23c6ba940c2c0c142James Kung canvas.drawCircle(width / 2, height / 2, radius, mCirclePaint); 782e00aa34c051111529290cf23c6ba940c2c0c142James Kung } 793e9818e0267619fecebd55095ab26c53eff92e93James Kung } 80cb3f2522609186db6239ad154af275957118295cSam Blitzstein 81cb3f2522609186db6239ad154af275957118295cSam Blitzstein @Override 82cb3f2522609186db6239ad154af275957118295cSam Blitzstein public CharSequence getContentDescription() { 83cb3f2522609186db6239ad154af275957118295cSam Blitzstein CharSequence itemText = getText(); 84cb3f2522609186db6239ad154af275957118295cSam Blitzstein if (mDrawCircle) { 85cb3f2522609186db6239ad154af275957118295cSam Blitzstein return String.format(mItemIsSelectedText, itemText); 86cb3f2522609186db6239ad154af275957118295cSam Blitzstein } else { 87cb3f2522609186db6239ad154af275957118295cSam Blitzstein return itemText; 88cb3f2522609186db6239ad154af275957118295cSam Blitzstein } 89cb3f2522609186db6239ad154af275957118295cSam Blitzstein } 903e9818e0267619fecebd55095ab26c53eff92e93James Kung} 91