diff options
| author | Alan Viverette <alanv@google.com> | 2016-03-04 13:18:48 -0500 |
|---|---|---|
| committer | Alan Viverette <alanv@google.com> | 2016-03-04 13:18:48 -0500 |
| commit | e264f9503b8ffcb2cae84e4e5bb2a03dd0610221 (patch) | |
| tree | dff182fd07fba66d42c0f5e5bffafb7c8b6f54db /core/java | |
| parent | 6bce68ed9b0f09df7f4a998ed58d2b4000c8677a (diff) | |
Clean up SimpleMonthView formatters
Only generates the month and day of week labels when necessary, rather
than every time the headers are drawn.
Change-Id: Ia20042753cba08bc6b29d4defb312617a2691016
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/widget/DayPickerPagerAdapter.java | 2 | ||||
| -rw-r--r-- | core/java/android/widget/SimpleMonthView.java | 71 |
2 files changed, 44 insertions, 29 deletions
diff --git a/core/java/android/widget/DayPickerPagerAdapter.java b/core/java/android/widget/DayPickerPagerAdapter.java index f5840dc4023a..8ce2f9cb470c 100644 --- a/core/java/android/widget/DayPickerPagerAdapter.java +++ b/core/java/android/widget/DayPickerPagerAdapter.java @@ -282,7 +282,7 @@ class DayPickerPagerAdapter extends PagerAdapter { public CharSequence getPageTitle(int position) { final SimpleMonthView v = mItems.get(position).calendar; if (v != null) { - return v.getTitle(); + return v.getMonthYearLabel(); } return null; } diff --git a/core/java/android/widget/SimpleMonthView.java b/core/java/android/widget/SimpleMonthView.java index 6edce91db504..8a7ce1280ad7 100644 --- a/core/java/android/widget/SimpleMonthView.java +++ b/core/java/android/widget/SimpleMonthView.java @@ -47,6 +47,7 @@ import com.android.internal.R; import com.android.internal.widget.ExploreByTouchHelper; import java.text.NumberFormat; +import java.util.Arrays; import java.util.Calendar; import java.util.Locale; @@ -55,13 +56,15 @@ import java.util.Locale; * within the specified month. */ class SimpleMonthView extends View { + private static final String LOG_TAG = "SimpleMonthView"; + private static final int DAYS_IN_WEEK = 7; private static final int MAX_WEEKS_IN_MONTH = 6; private static final int DEFAULT_SELECTED_DAY = -1; private static final int DEFAULT_WEEK_START = Calendar.SUNDAY; - private static final String DEFAULT_TITLE_FORMAT = "MMMMy"; + private static final String MONTH_YEAR_FORMAT = "MMMMy"; private static final String DAY_OF_WEEK_FORMAT = "EEEEE"; private static final int SELECTED_HIGHLIGHT_ALPHA = 0xB0; @@ -73,13 +76,13 @@ class SimpleMonthView extends View { private final Paint mDayHighlightPaint = new Paint(); private final Paint mDayHighlightSelectorPaint = new Paint(); - private final Calendar mCalendar = Calendar.getInstance(); - private final Calendar mDayOfWeekLabelCalendar = Calendar.getInstance(); + private final String[] mDayOfWeekLabels = new String[7]; + + private final Calendar mCalendar; + private final Locale mLocale; private final MonthViewTouchHelper mTouchHelper; - private final SimpleDateFormat mTitleFormatter; - private final SimpleDateFormat mDayOfWeekFormatter; private final NumberFormat mDayFormatter; // Desired dimensions. @@ -89,7 +92,7 @@ class SimpleMonthView extends View { private final int mDesiredCellWidth; private final int mDesiredDaySelectorRadius; - private CharSequence mTitle; + private String mMonthYearLabel; private int mMonth; private int mYear; @@ -168,15 +171,34 @@ class SimpleMonthView extends View { setAccessibilityDelegate(mTouchHelper); setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES); - final Locale locale = res.getConfiguration().locale; - final String titleFormat = DateFormat.getBestDateTimePattern(locale, DEFAULT_TITLE_FORMAT); - mTitleFormatter = new SimpleDateFormat(titleFormat, locale); - mDayOfWeekFormatter = new SimpleDateFormat(DAY_OF_WEEK_FORMAT, locale); - mDayFormatter = NumberFormat.getIntegerInstance(locale); + mLocale = res.getConfiguration().locale; + mCalendar = Calendar.getInstance(mLocale); + + mDayFormatter = NumberFormat.getIntegerInstance(mLocale); + + updateMonthYearLabel(); + updateDayOfWeekLabels(); initPaints(res); } + private void updateMonthYearLabel() { + final String format = DateFormat.getBestDateTimePattern(mLocale, MONTH_YEAR_FORMAT); + final SimpleDateFormat formatter = new SimpleDateFormat(format, mLocale); + mMonthYearLabel = formatter.format(mCalendar.getTime()); + } + + private void updateDayOfWeekLabels() { + final Calendar calendar = Calendar.getInstance(mLocale); + calendar.setFirstDayOfWeek(mWeekStart); + + final SimpleDateFormat formatter = new SimpleDateFormat(DAY_OF_WEEK_FORMAT, mLocale); + for (int i = 0; i < 7; i++) { + calendar.set(Calendar.DAY_OF_WEEK, i); + mDayOfWeekLabels[i] = formatter.format(calendar.getTime()); + } + } + /** * Applies the specified text appearance resource to a paint, returning the * text color if one is set in the text appearance. @@ -236,13 +258,6 @@ class SimpleMonthView extends View { invalidate(); } - public CharSequence getTitle() { - if (mTitle == null) { - mTitle = mTitleFormatter.format(mCalendar.getTime()); - } - return mTitle; - } - /** * Sets up the text and style properties for painting. */ @@ -607,7 +622,11 @@ class SimpleMonthView extends View { final float lineHeight = mMonthPaint.ascent() + mMonthPaint.descent(); final float y = (mMonthHeight - lineHeight) / 2f; - canvas.drawText(getTitle().toString(), x, y, mMonthPaint); + canvas.drawText(mMonthYearLabel, x, y, mMonthPaint); + } + + public String getMonthYearLabel() { + return mMonthYearLabel; } private void drawDaysOfWeek(Canvas canvas) { @@ -630,16 +649,11 @@ class SimpleMonthView extends View { } final int dayOfWeek = (col + mWeekStart) % DAYS_IN_WEEK; - final String label = getDayOfWeekLabel(dayOfWeek); + final String label = mDayOfWeekLabels[dayOfWeek]; canvas.drawText(label, colCenterRtl, rowCenter - halfLineHeight, p); } } - private String getDayOfWeekLabel(int dayOfWeek) { - mDayOfWeekLabelCalendar.set(Calendar.DAY_OF_WEEK, dayOfWeek); - return mDayOfWeekFormatter.format(mDayOfWeekLabelCalendar.getTime()); - } - /** * Draws the month days. */ @@ -752,6 +766,8 @@ class SimpleMonthView extends View { mWeekStart = mCalendar.getFirstDayOfWeek(); } + updateDayOfWeekLabels(); + // Invalidate cached accessibility information. mTouchHelper.invalidateRoot(); invalidate(); @@ -807,11 +823,10 @@ class SimpleMonthView extends View { mEnabledDayStart = MathUtils.constrain(enabledDayStart, 1, mDaysInMonth); mEnabledDayEnd = MathUtils.constrain(enabledDayEnd, mEnabledDayStart, mDaysInMonth); - // Invalidate the old title. - mTitle = null; - // Invalidate cached accessibility information. mTouchHelper.invalidateRoot(); + + updateMonthYearLabel(); } private static int getDaysInMonth(int month, int year) { |
