diff --git a/api/current.txt b/api/current.txt index fd72d340da475..f59fd4fe7be27 100644 --- a/api/current.txt +++ b/api/current.txt @@ -37562,6 +37562,7 @@ package android.widget { method public android.widget.CalendarView getCalendarView(); method public boolean getCalendarViewShown(); method public int getDayOfMonth(); + method public int getFirstDayOfWeek(); method public long getMaxDate(); method public long getMinDate(); method public int getMonth(); @@ -37569,6 +37570,7 @@ package android.widget { method public int getYear(); method public void init(int, int, int, android.widget.DatePicker.OnDateChangedListener); method public void setCalendarViewShown(boolean); + method public void setFirstDayOfWeek(int); method public void setMaxDate(long); method public void setMinDate(long); method public void setSpinnersShown(boolean); diff --git a/core/java/android/widget/DatePicker.java b/core/java/android/widget/DatePicker.java index 2729bd084a559..d77f0b2b6e8c0 100644 --- a/core/java/android/widget/DatePicker.java +++ b/core/java/android/widget/DatePicker.java @@ -125,6 +125,7 @@ public class DatePicker extends FrameLayout { final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DatePicker, defStyleAttr, defStyleRes); final int mode = a.getInt(R.styleable.DatePicker_datePickerMode, MODE_SPINNER); + final int firstDayOfWeek = a.getInt(R.styleable.DatePicker_firstDayOfWeek, 0); a.recycle(); switch (mode) { @@ -136,6 +137,10 @@ public class DatePicker extends FrameLayout { mDelegate = createSpinnerUIDelegate(context, attrs, defStyleAttr, defStyleRes); break; } + + if (firstDayOfWeek != 0) { + setFirstDayOfWeek(firstDayOfWeek); + } } private DatePickerDelegate createSpinnerUIDelegate(Context context, AttributeSet attrs, @@ -299,6 +304,47 @@ public class DatePicker extends FrameLayout { mDelegate.onConfigurationChanged(newConfig); } + /** + * Sets the first day of week. + * + * @param firstDayOfWeek The first day of the week conforming to the + * {@link CalendarView} APIs. + * @see Calendar#SUNDAY + * @see Calendar#MONDAY + * @see Calendar#TUESDAY + * @see Calendar#WEDNESDAY + * @see Calendar#THURSDAY + * @see Calendar#FRIDAY + * @see Calendar#SATURDAY + * + * @attr ref android.R.styleable#DatePicker_firstDayOfWeek + */ + public void setFirstDayOfWeek(int firstDayOfWeek) { + if (firstDayOfWeek < Calendar.SUNDAY || firstDayOfWeek > Calendar.SATURDAY) { + throw new IllegalArgumentException("firstDayOfWeek must be between 1 and 7"); + } + mDelegate.setFirstDayOfWeek(firstDayOfWeek); + } + + /** + * Gets the first day of week. + * + * @return The first day of the week conforming to the {@link CalendarView} + * APIs. + * @see Calendar#SUNDAY + * @see Calendar#MONDAY + * @see Calendar#TUESDAY + * @see Calendar#WEDNESDAY + * @see Calendar#THURSDAY + * @see Calendar#FRIDAY + * @see Calendar#SATURDAY + * + * @attr ref android.R.styleable#DatePicker_firstDayOfWeek + */ + public int getFirstDayOfWeek() { + return mDelegate.getFirstDayOfWeek(); + } + /** * Gets whether the {@link CalendarView} is shown. * @@ -315,7 +361,7 @@ public class DatePicker extends FrameLayout { * @return The calendar view. * @see #getCalendarViewShown() */ - public CalendarView getCalendarView () { + public CalendarView getCalendarView() { return mDelegate.getCalendarView(); } @@ -382,6 +428,9 @@ public class DatePicker extends FrameLayout { int getMonth(); int getDayOfMonth(); + void setFirstDayOfWeek(int firstDayOfWeek); + int getFirstDayOfWeek(); + void setMinDate(long minDate); Calendar getMinDate(); @@ -698,6 +747,16 @@ public class DatePicker extends FrameLayout { return mCurrentDate.get(Calendar.DAY_OF_MONTH); } + @Override + public void setFirstDayOfWeek(int firstDayOfWeek) { + mCalendarView.setFirstDayOfWeek(firstDayOfWeek); + } + + @Override + public int getFirstDayOfWeek() { + return mCalendarView.getFirstDayOfWeek(); + } + @Override public void setMinDate(long minDate) { mTempDate.setTimeInMillis(minDate); diff --git a/core/java/android/widget/DatePickerCalendarDelegate.java b/core/java/android/widget/DatePickerCalendarDelegate.java index eed49bf21ea55..b962962118cb9 100644 --- a/core/java/android/widget/DatePickerCalendarDelegate.java +++ b/core/java/android/widget/DatePickerCalendarDelegate.java @@ -49,6 +49,7 @@ import java.util.Locale; */ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate implements View.OnClickListener, DatePickerController { + private static final int USE_LOCALE = 0; private static final int UNINITIALIZED = -1; private static final int MONTH_AND_DAY_VIEW = 0; @@ -99,6 +100,8 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate i private Calendar mMinDate; private Calendar mMaxDate; + private int mFirstDayOfWeek = USE_LOCALE; + private HashSet mListeners = new HashSet(); public DatePickerCalendarDelegate(DatePicker delegator, Context context, AttributeSet attrs, @@ -437,8 +440,16 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate i return mMaxDate; } + @Override + public void setFirstDayOfWeek(int firstDayOfWeek) { + mFirstDayOfWeek = firstDayOfWeek; + } + @Override public int getFirstDayOfWeek() { + if (mFirstDayOfWeek != USE_LOCALE) { + return mFirstDayOfWeek; + } return mCurrentDate.getFirstDayOfWeek(); } diff --git a/core/java/android/widget/DatePickerController.java b/core/java/android/widget/DatePickerController.java index 6a074da697269..059709d55156e 100644 --- a/core/java/android/widget/DatePickerController.java +++ b/core/java/android/widget/DatePickerController.java @@ -35,6 +35,7 @@ interface DatePickerController { Calendar getSelectedDay(); + void setFirstDayOfWeek(int firstDayOfWeek); int getFirstDayOfWeek(); int getMinYear(); diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index d1cc1fd7a3140..cf4064ffb55e9 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -4341,6 +4341,8 @@ + +