diff options
| author | 2012-03-01 15:57:22 -0800 | |
|---|---|---|
| committer | 2012-03-01 21:31:34 -0800 | |
| commit | ff37505cb13f96ddec09594517ad6f4fa2fd1def (patch) | |
| tree | a89c2fcf878c15e900c97e5fc9947b75e761a4b7 | |
| parent | d0f4e09cba152a2c6cdb14e6a5ff36e864cb5adf (diff) | |
Adding getter/setter for all public attributes in CalendarView.
bug:6094713
Change-Id: Iff4a1d903d597ae8a3d74a4e4734376acca417f3
| -rw-r--r-- | api/current.txt | 19 | ||||
| -rw-r--r-- | core/java/android/widget/CalendarView.java | 319 | ||||
| -rwxr-xr-x | core/res/res/values/attrs.xml | 6 |
3 files changed, 309 insertions, 35 deletions
diff --git a/api/current.txt b/api/current.txt index cce28a48366f..a0d2bd06833e 100644 --- a/api/current.txt +++ b/api/current.txt @@ -26093,17 +26093,36 @@ package android.widget { ctor public CalendarView(android.content.Context, android.util.AttributeSet); ctor public CalendarView(android.content.Context, android.util.AttributeSet, int); method public long getDate(); + method public int getDateTextAppearance(); method public int getFirstDayOfWeek(); + method public int getFocusedMonthDateColor(); method public long getMaxDate(); method public long getMinDate(); + method public android.graphics.drawable.Drawable getSelectedDateVerticalBar(); + method public int getSelectedWeekBackgroundColor(); method public boolean getShowWeekNumber(); + method public int getShownWeekCount(); + method public int getUnfocusedMonthDateColor(); + method public int getWeekDayTextAppearance(); + method public int getWeekNumberColor(); + method public int getWeekSeparatorLineColor(); method public void setDate(long); method public void setDate(long, boolean, boolean); + method public void setDateTextAppearance(int); method public void setFirstDayOfWeek(int); + method public void setFocusedMonthDateColor(int); method public void setMaxDate(long); method public void setMinDate(long); method public void setOnDateChangeListener(android.widget.CalendarView.OnDateChangeListener); + method public void setSelectedDateVerticalBar(int); + method public void setSelectedDateVerticalBar(android.graphics.drawable.Drawable); + method public void setSelectedWeekBackgroundColor(int); method public void setShowWeekNumber(boolean); + method public void setShownWeekCount(int); + method public void setUnfocusedMonthDateColor(int); + method public void setWeekDayTextAppearance(int); + method public void setWeekNumberColor(int); + method public void setWeekSeparatorLineColor(int); } public static abstract interface CalendarView.OnDateChangeListener { diff --git a/core/java/android/widget/CalendarView.java b/core/java/android/widget/CalendarView.java index 85252af68f01..2a74f6a5d797 100644 --- a/core/java/android/widget/CalendarView.java +++ b/core/java/android/widget/CalendarView.java @@ -154,21 +154,25 @@ public class CalendarView extends FrameLayout { private final int mWeekSeperatorLineWidth; - private final int mDateTextSize; + private int mDateTextSize; - private final Drawable mSelectedDateVerticalBar; + private Drawable mSelectedDateVerticalBar; private final int mSelectedDateVerticalBarWidth; - private final int mSelectedWeekBackgroundColor; + private int mSelectedWeekBackgroundColor; - private final int mFocusedMonthDateColor; + private int mFocusedMonthDateColor; - private final int mUnfocusedMonthDateColor; + private int mUnfocusedMonthDateColor; - private final int mWeekSeparatorLineColor; + private int mWeekSeparatorLineColor; - private final int mWeekNumberColor; + private int mWeekNumberColor; + + private int mWeekDayTextAppearanceResId; + + private int mDateTextAppearanceResId; /** * The top offset of the weeks list. @@ -366,15 +370,11 @@ public class CalendarView extends FrameLayout { mSelectedDateVerticalBar = attributesArray.getDrawable( R.styleable.CalendarView_selectedDateVerticalBar); - int dateTextAppearanceResId= attributesArray.getResourceId( + mDateTextAppearanceResId = attributesArray.getResourceId( R.styleable.CalendarView_dateTextAppearance, R.style.TextAppearance_Small); - TypedArray dateTextAppearance = context.obtainStyledAttributes(dateTextAppearanceResId, - com.android.internal.R.styleable.TextAppearance); - mDateTextSize = dateTextAppearance.getDimensionPixelSize( - R.styleable.TextAppearance_textSize, DEFAULT_DATE_TEXT_SIZE); - dateTextAppearance.recycle(); + updateDateTextSize(); - int weekDayTextAppearanceResId = attributesArray.getResourceId( + mWeekDayTextAppearanceResId = attributesArray.getResourceId( R.styleable.CalendarView_weekDayTextAppearance, DEFAULT_WEEK_DAY_TEXT_APPEARANCE_RES_ID); attributesArray.recycle(); @@ -400,7 +400,7 @@ public class CalendarView extends FrameLayout { mDayNamesHeader = (ViewGroup) content.findViewById(com.android.internal.R.id.day_names); mMonthName = (TextView) content.findViewById(com.android.internal.R.id.month_name); - setUpHeader(weekDayTextAppearanceResId); + setUpHeader(); setUpListView(); setUpAdapter(); @@ -417,6 +417,235 @@ public class CalendarView extends FrameLayout { invalidate(); } + /** + * Sets the number of weeks to be shown. + * + * @param count The shown week count. + */ + public void setShownWeekCount(int count) { + if (mShownWeekCount != count) { + mShownWeekCount = count; + invalidate(); + } + } + + /** + * Gets the number of weeks to be shown. + * + * @return The shown week count. + */ + public int getShownWeekCount() { + return mShownWeekCount; + } + + /** + * Sets the background color for the selected week. + * + * @param color The week background color. + */ + public void setSelectedWeekBackgroundColor(int color) { + if (mSelectedWeekBackgroundColor != color) { + mSelectedWeekBackgroundColor = color; + final int childCount = mListView.getChildCount(); + for (int i = 0; i < childCount; i++) { + WeekView weekView = (WeekView) mListView.getChildAt(i); + if (weekView.mHasSelectedDay) { + weekView.invalidate(); + } + } + } + } + + /** + * Gets the background color for the selected week. + * + * @return The week background color. + */ + public int getSelectedWeekBackgroundColor() { + return mSelectedWeekBackgroundColor; + } + + /** + * Sets the color for the dates of the focused month. + * + * @param color The focused month date color. + */ + public void setFocusedMonthDateColor(int color) { + if (mFocusedMonthDateColor != color) { + mFocusedMonthDateColor = color; + final int childCount = mListView.getChildCount(); + for (int i = 0; i < childCount; i++) { + WeekView weekView = (WeekView) mListView.getChildAt(i); + if (weekView.mHasFocusedDay) { + weekView.invalidate(); + } + } + } + } + + /** + * Gets the color for the dates in the focused month. + * + * @return The focused month date color. + */ + public int getFocusedMonthDateColor() { + return mFocusedMonthDateColor; + } + + /** + * Sets the color for the dates of a not focused month. + * + * @param color A not focused month date color. + */ + public void setUnfocusedMonthDateColor(int color) { + if (mUnfocusedMonthDateColor != color) { + mUnfocusedMonthDateColor = color; + final int childCount = mListView.getChildCount(); + for (int i = 0; i < childCount; i++) { + WeekView weekView = (WeekView) mListView.getChildAt(i); + if (weekView.mHasUnfocusedDay) { + weekView.invalidate(); + } + } + } + } + + /** + * Gets the color for the dates in a not focused month. + * + * @return A not focused month date color. + */ + public int getUnfocusedMonthDateColor() { + return mFocusedMonthDateColor; + } + + /** + * Sets the color for the week numbers. + * + * @param color The week number color. + */ + public void setWeekNumberColor(int color) { + if (mWeekNumberColor != color) { + mWeekNumberColor = color; + if (mShowWeekNumber) { + invalidateAllWeekViews(); + } + } + } + + /** + * Gets the color for the week numbers. + * + * @return The week number color. + */ + public int getWeekNumberColor() { + return mWeekNumberColor; + } + + /** + * Sets the color for the separator line between weeks. + * + * @param color The week separator color. + */ + public void setWeekSeparatorLineColor(int color) { + if (mWeekSeparatorLineColor != color) { + mWeekSeparatorLineColor = color; + invalidateAllWeekViews(); + } + } + + /** + * Gets the color for the separator line between weeks. + * + * @return The week separator color. + */ + public int getWeekSeparatorLineColor() { + return mWeekSeparatorLineColor; + } + + /** + * Sets the drawable for the vertical bar shown at the beginning and at + * the end of the selected date. + * + * @param resourceId The vertical bar drawable resource id. + */ + public void setSelectedDateVerticalBar(int resourceId) { + Drawable drawable = getResources().getDrawable(resourceId); + setSelectedDateVerticalBar(drawable); + } + + /** + * Sets the drawable for the vertical bar shown at the beginning and at + * the end of the selected date. + * + * @param drawable The vertical bar drawable. + */ + public void setSelectedDateVerticalBar(Drawable drawable) { + if (mSelectedDateVerticalBar != drawable) { + mSelectedDateVerticalBar = drawable; + final int childCount = mListView.getChildCount(); + for (int i = 0; i < childCount; i++) { + WeekView weekView = (WeekView) mListView.getChildAt(i); + if (weekView.mHasSelectedDay) { + weekView.invalidate(); + } + } + } + } + + /** + * Gets the drawable for the vertical bar shown at the beginning and at + * the end of the selected date. + * + * @return The vertical bar drawable. + */ + public Drawable getSelectedDateVerticalBar() { + return mSelectedDateVerticalBar; + } + + /** + * Sets the text appearance for the week day abbreviation of the calendar header. + * + * @param resourceId The text appearance resource id. + */ + public void setWeekDayTextAppearance(int resourceId) { + if (mWeekDayTextAppearanceResId != resourceId) { + mWeekDayTextAppearanceResId = resourceId; + setUpHeader(); + } + } + + /** + * Gets the text appearance for the week day abbreviation of the calendar header. + * + * @return The text appearance resource id. + */ + public int getWeekDayTextAppearance() { + return mWeekDayTextAppearanceResId; + } + + /** + * Sets the text appearance for the calendar dates. + * + * @param resourceId The text appearance resource id. + */ + public void setDateTextAppearance(int resourceId) { + if (mDateTextAppearanceResId != resourceId) { + mDateTextAppearanceResId = resourceId; + updateDateTextSize(); + invalidateAllWeekViews(); + } + } + + /** + * Gets the text appearance for the calendar dates. + * + * @return The text appearance resource id. + */ + public int getDateTextAppearance() { + return mDateTextAppearanceResId; + } + @Override public void setEnabled(boolean enabled) { mListView.setEnabled(enabled); @@ -545,7 +774,7 @@ public class CalendarView extends FrameLayout { } mShowWeekNumber = showWeekNumber; mAdapter.notifyDataSetChanged(); - setUpHeader(DEFAULT_WEEK_DAY_TEXT_APPEARANCE_RES_ID); + setUpHeader(); } /** @@ -594,7 +823,7 @@ public class CalendarView extends FrameLayout { mFirstDayOfWeek = firstDayOfWeek; mAdapter.init(); mAdapter.notifyDataSetChanged(); - setUpHeader(DEFAULT_WEEK_DAY_TEXT_APPEARANCE_RES_ID); + setUpHeader(); } /** @@ -655,6 +884,25 @@ public class CalendarView extends FrameLayout { goTo(mTempDate, animate, true, center); } + private void updateDateTextSize() { + TypedArray dateTextAppearance = getContext().obtainStyledAttributes( + mDateTextAppearanceResId, R.styleable.TextAppearance); + mDateTextSize = dateTextAppearance.getDimensionPixelSize( + R.styleable.TextAppearance_textSize, DEFAULT_DATE_TEXT_SIZE); + dateTextAppearance.recycle(); + } + + /** + * Invalidates all week views. + */ + private void invalidateAllWeekViews() { + final int childCount = mListView.getChildCount(); + for (int i = 0; i < childCount; i++) { + View view = mListView.getChildAt(i); + view.invalidate(); + } + } + /** * Sets the current locale. * @@ -727,7 +975,7 @@ public class CalendarView extends FrameLayout { /** * Sets up the strings to be used by the header. */ - private void setUpHeader(int weekDayTextAppearanceResId) { + private void setUpHeader() { mDayLabels = new String[mDaysPerWeek]; for (int i = mFirstDayOfWeek, count = mFirstDayOfWeek + mDaysPerWeek; i < count; i++) { int calendarDay = (i > Calendar.SATURDAY) ? i - Calendar.SATURDAY : i; @@ -743,8 +991,8 @@ public class CalendarView extends FrameLayout { } for (int i = 1, count = mDayNamesHeader.getChildCount(); i < count; i++) { label = (TextView) mDayNamesHeader.getChildAt(i); - if (weekDayTextAppearanceResId > -1) { - label.setTextAppearance(mContext, weekDayTextAppearanceResId); + if (mWeekDayTextAppearanceResId > -1) { + label.setTextAppearance(mContext, mWeekDayTextAppearanceResId); } if (i < mDaysPerWeek + 1) { label.setText(mDayLabels[i - 1]); @@ -1198,6 +1446,12 @@ public class CalendarView extends FrameLayout { // Quick lookup for checking which days are in the focus month private boolean[] mFocusDay; + // Whether this view has a focused day. + private boolean mHasFocusedDay; + + // Whether this view has only focused days. + private boolean mHasUnfocusedDay; + // The first day displayed by this item private Calendar mFirstDay; @@ -1235,11 +1489,8 @@ public class CalendarView extends FrameLayout { public WeekView(Context context) { super(context); - mHeight = (mListView.getHeight() - mListView.getPaddingTop() - mListView - .getPaddingBottom()) / mShownWeekCount; - // Sets up any standard paints that will be used - setPaintProperties(); + initilaizePaints(); } /** @@ -1281,8 +1532,12 @@ public class CalendarView extends FrameLayout { mFirstDay = (Calendar) mTempDate.clone(); mMonthOfFirstWeekDay = mTempDate.get(Calendar.MONTH); + mHasUnfocusedDay = true; for (; i < mNumCells; i++) { - mFocusDay[i] = (mTempDate.get(Calendar.MONTH) == focusedMonth); + final boolean isFocusedDay = (mTempDate.get(Calendar.MONTH) == focusedMonth); + mFocusDay[i] = isFocusedDay; + mHasFocusedDay |= isFocusedDay; + mHasUnfocusedDay &= !isFocusedDay; // do not draw dates outside the valid range to avoid user confusion if (mTempDate.before(mMinDate) || mTempDate.after(mMaxDate)) { mDayNumbers[i] = ""; @@ -1302,18 +1557,15 @@ public class CalendarView extends FrameLayout { } /** - * Sets up the text and style properties for painting. + * Initialize the paint isntances. */ - private void setPaintProperties() { + private void initilaizePaints() { mDrawPaint.setFakeBoldText(false); mDrawPaint.setAntiAlias(true); - mDrawPaint.setTextSize(mDateTextSize); mDrawPaint.setStyle(Style.FILL); mMonthNumDrawPaint.setFakeBoldText(true); mMonthNumDrawPaint.setAntiAlias(true); - mMonthNumDrawPaint.setTextSize(mDateTextSize); - mMonthNumDrawPaint.setColor(mFocusedMonthDateColor); mMonthNumDrawPaint.setStyle(Style.FILL); mMonthNumDrawPaint.setTextAlign(Align.CENTER); } @@ -1369,7 +1621,7 @@ public class CalendarView extends FrameLayout { @Override protected void onDraw(Canvas canvas) { drawBackground(canvas); - drawWeekNumbers(canvas); + drawWeekNumbersAndDates(canvas); drawWeekSeparators(canvas); drawSelectedDateVerticalBars(canvas); } @@ -1401,12 +1653,13 @@ public class CalendarView extends FrameLayout { * * @param canvas The canvas to draw on */ - private void drawWeekNumbers(Canvas canvas) { + private void drawWeekNumbersAndDates(Canvas canvas) { float textHeight = mDrawPaint.getTextSize(); int y = (int) ((mHeight + textHeight) / 2) - mWeekSeperatorLineWidth; int nDays = mNumCells; mDrawPaint.setTextAlign(Align.CENTER); + mDrawPaint.setTextSize(mDateTextSize); int i = 0; int divisor = 2 * nDays; if (mShowWeekNumber) { @@ -1487,6 +1740,8 @@ public class CalendarView extends FrameLayout { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + mHeight = (mListView.getHeight() - mListView.getPaddingTop() - mListView + .getPaddingBottom()) / mShownWeekCount; setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), mHeight); } } diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 93757303a9ae..7de32f80cc2c 100755 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -3593,15 +3593,15 @@ <attr name="shownWeekCount" format="integer"/> <!-- The background color for the selected week. --> <attr name="selectedWeekBackgroundColor" format="color|reference" /> - <!-- The color for the dates of the selected month. --> + <!-- The color for the dates of the focused month. --> <attr name="focusedMonthDateColor" format="color|reference" /> <!-- The color for the dates of an unfocused month. --> <attr name="unfocusedMonthDateColor" format="color|reference" /> <!-- The color for the week numbers. --> <attr name="weekNumberColor" format="color|reference" /> - <!-- The color for the sepatator line between weeks. --> + <!-- The color for the separator line between weeks. --> <attr name="weekSeparatorLineColor" format="color|reference" /> - <!-- Drawable for the vertical bar shown at the beggining and at the end of a selected date. --> + <!-- Drawable for the vertical bar shown at the beginning and at the end of the selected date. --> <attr name="selectedDateVerticalBar" format="reference" /> <!-- The text appearance for the week day abbreviation of the calendar header. --> <attr name="weekDayTextAppearance" format="reference" /> |