summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorAlan Viverette <alanv@google.com>2016-03-04 13:18:48 -0500
committerAlan Viverette <alanv@google.com>2016-03-04 13:18:48 -0500
commite264f9503b8ffcb2cae84e4e5bb2a03dd0610221 (patch)
treedff182fd07fba66d42c0f5e5bffafb7c8b6f54db /core/java
parent6bce68ed9b0f09df7f4a998ed58d2b4000c8677a (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.java2
-rw-r--r--core/java/android/widget/SimpleMonthView.java71
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) {