DatePicker.java revision 50f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5c
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.widget; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganovimport com.android.internal.R; 2050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.annotation.Widget; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.TypedArray; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.format.DateFormat; 27dddda8d188408ff18935b1b0e15a00fe012a03daKenny Rootimport android.text.format.DateUtils; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.SparseArray; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.LayoutInflater; 3150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganovimport android.widget.NumberPicker.OnChangeListener; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3303a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischerimport java.text.SimpleDateFormat; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Calendar; 35dddda8d188408ff18935b1b0e15a00fe012a03daKenny Rootimport java.util.Locale; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A view for selecting a month / year / day based on a calendar like layout. 3950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * <p> 4050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * See the <a href="{@docRoot} 4150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * resources/tutorials/views/hello-datepicker.html">Date Picker tutorial</a>. 4250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * </p> 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * For a dialog using this view, see {@link android.app.DatePickerDialog}. 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project@Widget 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class DatePicker extends FrameLayout { 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DEFAULT_START_YEAR = 1900; 49dddda8d188408ff18935b1b0e15a00fe012a03daKenny Root 5050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private static final int DEFAULT_END_YEAR = 2100; 51dddda8d188408ff18935b1b0e15a00fe012a03daKenny Root 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final NumberPicker mDayPicker; 5350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final NumberPicker mMonthPicker; 5550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final NumberPicker mYearPicker; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private final DayPicker mMiniMonthDayPicker; 5950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private OnDateChangedListener mOnDateChangedListener; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private Locale mMonthLocale; 6350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 6450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private final Calendar mTempCalendar = Calendar.getInstance(); 6550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 6650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private final int mNumberOfMonths = mTempCalendar.getActualMaximum(Calendar.MONTH) + 1; 6750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 6850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private final String[] mShortMonths = new String[mNumberOfMonths]; 69dddda8d188408ff18935b1b0e15a00fe012a03daKenny Root 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The callback used to indicate the user changes the date. 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface OnDateChangedListener { 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The view associated with this listener. 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param year The year that was set. 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param monthOfYear The month that was set (0-11) for compatibility 7950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * with {@link java.util.Calendar}. 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dayOfMonth The day of the month that was set. 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth); 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public DatePicker(Context context) { 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this(context, null); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public DatePicker(Context context, AttributeSet attrs) { 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this(context, attrs, 0); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public DatePicker(Context context, AttributeSet attrs, int defStyle) { 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(context, attrs, defStyle); 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov LayoutInflater inflater = (LayoutInflater) context 9750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inflater.inflate(R.layout.date_picker, this, true); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov OnChangeListener onChangeListener = new OnChangeListener() { 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onChanged(NumberPicker picker, int oldVal, int newVal) { 102e3491b6b5f1d3fb871074766597b275d9f682faaKenneth Andersson notifyDateChanged(); 10350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov updateMiniMonth(); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov }; 1065fe1e6221ea3bab3120f5b9c0ceacaf59d116c05Eric Fischer 10750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov // day 10850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mDayPicker = (NumberPicker) findViewById(R.id.day); 10950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mDayPicker.setFormatter(NumberPicker.TWO_DIGIT_FORMATTER); 11050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mDayPicker.setSpeed(100); 11150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mDayPicker.setOnChangeListener(onChangeListener); 1125fe1e6221ea3bab3120f5b9c0ceacaf59d116c05Eric Fischer 11350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov // month 11450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mMonthPicker = (NumberPicker) findViewById(R.id.month); 11550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mMonthPicker.setRange(0, mNumberOfMonths - 1, getShortMonths()); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMonthPicker.setSpeed(200); 11750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mMonthPicker.setOnChangeListener(onChangeListener); 11850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 11950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov // year 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mYearPicker = (NumberPicker) findViewById(R.id.year); 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mYearPicker.setSpeed(100); 12250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mYearPicker.setOnChangeListener(onChangeListener); 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DatePicker); 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mStartYear = a.getInt(R.styleable.DatePicker_startYear, DEFAULT_START_YEAR); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mEndYear = a.getInt(R.styleable.DatePicker_endYear, DEFAULT_END_YEAR); 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mYearPicker.setRange(mStartYear, mEndYear); 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.recycle(); 12850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 12950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov // mini-month day-picker 13050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mMiniMonthDayPicker = (DayPicker) findViewById(R.id.mini_month_day_picker); 13150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mTempCalendar.clear(); 13250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mTempCalendar.set(mStartYear, 0, 1); 13350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov Calendar endRangeDate = (Calendar) mTempCalendar.clone(); 13450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov endRangeDate.set(mEndYear, 11, 31); 13550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mMiniMonthDayPicker.setRange(mTempCalendar, endRangeDate); 13650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mMiniMonthDayPicker.setOnDateChangeListener(new DayPicker.OnSelectedDayChangeListener() { 13750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov public void onSelectedDayChange(DayPicker view, int year, int month, int monthDay) { 13850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov updateDate(year, month, monthDay); 13950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov } 14050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov }); 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // initialize to current date 14350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mTempCalendar.setTimeInMillis(System.currentTimeMillis()); 14450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov init(mTempCalendar.get(Calendar.YEAR), mTempCalendar.get(Calendar.MONTH), 14550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mTempCalendar.get(Calendar.DAY_OF_MONTH), null); 14650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // re-order the number pickers to match the current date format 14850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov reorderPickers(); 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setEnabled(boolean enabled) { 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.setEnabled(enabled); 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDayPicker.setEnabled(enabled); 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMonthPicker.setEnabled(enabled); 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mYearPicker.setEnabled(enabled); 15750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mMiniMonthDayPicker.setEnabled(enabled); 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /** 16150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * Reorders the pickers according to the date format in the current locale. 16250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov */ 16350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private void reorderPickers() { 16403a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer java.text.DateFormat format; 16503a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer String order; 16603a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer 16703a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer /* 16850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * If the user is in a locale where the medium date format is still 16950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * numeric (Japanese and Czech, for example), respect the date format 17050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * order setting. Otherwise, use the order that the locale says is 17150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * appropriate for a spelled-out date. 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17303a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer 17450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov if (getShortMonths()[0].startsWith("1")) { 17503a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer format = DateFormat.getDateFormat(getContext()); 17603a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer } else { 17703a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer format = DateFormat.getMediumDateFormat(getContext()); 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17903a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer 18003a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer if (format instanceof SimpleDateFormat) { 18103a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer order = ((SimpleDateFormat) format).toPattern(); 18203a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer } else { 18303a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer // Shouldn't happen, but just in case. 18403a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer order = new String(DateFormat.getDateFormatOrder(getContext())); 18503a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer } 18603a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer 18750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /* 18850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * Remove the 3 pickers from their parent and then add them back in the 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * required order. 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov LinearLayout parent = (LinearLayout) findViewById(R.id.pickers); 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parent.removeAllViews(); 19303a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer 19403a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer boolean quoted = false; 19503a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer boolean didDay = false, didMonth = false, didYear = false; 19603a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer 19703a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer for (int i = 0; i < order.length(); i++) { 19803a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer char c = order.charAt(i); 19903a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer 20003a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer if (c == '\'') { 20103a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer quoted = !quoted; 20203a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer } 20303a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer 20403a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer if (!quoted) { 20503a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer if (c == DateFormat.DATE && !didDay) { 20603a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer parent.addView(mDayPicker); 20703a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer didDay = true; 20803a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer } else if ((c == DateFormat.MONTH || c == 'L') && !didMonth) { 20903a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer parent.addView(mMonthPicker); 21003a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer didMonth = true; 21103a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer } else if (c == DateFormat.YEAR && !didYear) { 21250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov parent.addView(mYearPicker); 21303a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer didYear = true; 21403a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer } 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21703a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer 21803a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer // Shouldn't happen, but just in case. 21903a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer if (!didMonth) { 22003a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer parent.addView(mMonthPicker); 22103a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer } 22203a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer if (!didDay) { 22303a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer parent.addView(mDayPicker); 22403a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer } 22503a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer if (!didYear) { 22603a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer parent.addView(mYearPicker); 22703a8017d0fe3b55b69c4328aa0d27bd96a2f1360Eric Fischer } 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /** 23150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * Updates the current date. 23250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * 23350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * @param year The year. 23450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * @param month The month which is <strong>starting from zero</strong>. 23550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * @param dayOfMonth The day of the month. 23650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov */ 23750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov public void updateDate(int year, int month, int dayOfMonth) { 23850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov if (mYearPicker.getCurrent() != year 23950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov || mDayPicker.getCurrent() != dayOfMonth 24050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov || mMonthPicker.getCurrent() != month) { 24150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov updatePickers(year, month, dayOfMonth); 24250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov updateMiniMonth(); 243e3491b6b5f1d3fb871074766597b275d9f682faaKenneth Andersson notifyDateChanged(); 244e3491b6b5f1d3fb871074766597b275d9f682faaKenneth Andersson } 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /** 24850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * @return The short month abbreviations. 24950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov */ 250dddda8d188408ff18935b1b0e15a00fe012a03daKenny Root private String[] getShortMonths() { 251dddda8d188408ff18935b1b0e15a00fe012a03daKenny Root final Locale currentLocale = Locale.getDefault(); 25250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov if (currentLocale.equals(mMonthLocale)) { 253dddda8d188408ff18935b1b0e15a00fe012a03daKenny Root return mShortMonths; 254dddda8d188408ff18935b1b0e15a00fe012a03daKenny Root } else { 25550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov for (int i = 0; i < mNumberOfMonths; i++) { 25650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mShortMonths[i] = DateUtils.getMonthString(Calendar.JANUARY + i, 25750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov DateUtils.LENGTH_MEDIUM); 258dddda8d188408ff18935b1b0e15a00fe012a03daKenny Root } 25950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mMonthLocale = currentLocale; 260dddda8d188408ff18935b1b0e15a00fe012a03daKenny Root return mShortMonths; 261dddda8d188408ff18935b1b0e15a00fe012a03daKenny Root } 262dddda8d188408ff18935b1b0e15a00fe012a03daKenny Root } 263dddda8d188408ff18935b1b0e15a00fe012a03daKenny Root 26450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov // Override so we are in complete control of save / restore for this widget. 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void dispatchRestoreInstanceState(SparseArray<Parcelable> container) { 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchThawSelfOnly(container); 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected Parcelable onSaveInstanceState() { 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcelable superState = super.onSaveInstanceState(); 27350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov return new SavedState(superState, mYearPicker.getCurrent(), mMonthPicker.getCurrent(), 27450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mDayPicker.getCurrent()); 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onRestoreInstanceState(Parcelable state) { 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SavedState ss = (SavedState) state; 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onRestoreInstanceState(ss.getSuperState()); 28150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov updatePickers(ss.mYear, ss.mMonth, ss.mDay); 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 28550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * Initialize the state. If the provided values designate an inconsistent 28650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * date the values are normalized before updating the pickers. 28750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param year The initial year. 28950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * @param monthOfYear The initial month <strong>starting from zero</strong>. 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dayOfMonth The initial day of the month. 29150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * @param onDateChangedListener How user is notified date is changed by 29250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * user, can be null. 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void init(int year, int monthOfYear, int dayOfMonth, 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OnDateChangedListener onDateChangedListener) { 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mOnDateChangedListener = onDateChangedListener; 29750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov updateDate(year, monthOfYear, dayOfMonth); 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /** 30150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * Updates the pickers with the given <code>year</code>, <code>month</code>, 30250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * and <code>dayOfMonth</code>. If the provided values designate an inconsistent 30350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * date the values are normalized before updating the pickers. 30450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov */ 30550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private void updatePickers(int year, int month, int dayOfMonth) { 30650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov // make sure the date is normalized 30750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mTempCalendar.clear(); 30850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mTempCalendar.set(year, month, dayOfMonth); 30950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mYearPicker.setCurrent(mTempCalendar.get(Calendar.YEAR)); 31050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mMonthPicker.setCurrent(mTempCalendar.get(Calendar.MONTH)); 31150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mDayPicker.setRange(1, mTempCalendar.getActualMaximum(Calendar.DAY_OF_MONTH)); 31250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mDayPicker.setCurrent(mTempCalendar.get(Calendar.DAY_OF_MONTH)); 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 31550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /** 31650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * Updates the mini-month with the given year, month, and day selected by the 31750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * number pickers. 31850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov */ 31950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private void updateMiniMonth() { 32050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov Calendar selectedDay = mMiniMonthDayPicker.getSelectedDay(); 32150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov if (selectedDay.get(Calendar.YEAR) != mYearPicker.getCurrent() 32250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov || selectedDay.get(Calendar.MONTH) != mMonthPicker.getCurrent() 32350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov || selectedDay.get(Calendar.DAY_OF_MONTH) != mDayPicker.getCurrent()) { 32450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mMiniMonthDayPicker.goTo(mYearPicker.getCurrent(), mMonthPicker.getCurrent(), 32550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mDayPicker.getCurrent(), false, true, false); 32650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov } 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /** 33050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * @return The selected year. 33150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov */ 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getYear() { 33350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov return mYearPicker.getCurrent(); 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 33650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /** 33750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * @return The selected month. 33850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov */ 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getMonth() { 34050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov return mMonthPicker.getCurrent(); 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 34350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /** 34450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * @return The selected day of month. 34550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov */ 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getDayOfMonth() { 34750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov return mDayPicker.getCurrent(); 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3492bf761c20253222a763bce9a63d14c48ab08a556Suchi Amalapurapu 35050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /** 35150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * Notifies the listener, if such, for a change in the selected date. 35250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov */ 35350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private void notifyDateChanged() { 35450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov if (mOnDateChangedListener != null) { 35550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mOnDateChangedListener.onDateChanged(DatePicker.this, mYearPicker.getCurrent(), 35650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mMonthPicker.getCurrent(), mDayPicker.getCurrent()); 3572bf761c20253222a763bce9a63d14c48ab08a556Suchi Amalapurapu } 3582bf761c20253222a763bce9a63d14c48ab08a556Suchi Amalapurapu } 359e3491b6b5f1d3fb871074766597b275d9f682faaKenneth Andersson 36050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /** 36150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * Class for managing state storing/restoring. 36250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov */ 36350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private static class SavedState extends BaseSavedState { 36450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 36550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private final int mYear; 36650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 36750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private final int mMonth; 36850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 36950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private final int mDay; 37050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 37150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /** 37250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * Constructor called from {@link DatePicker#onSaveInstanceState()} 37350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov */ 37450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private SavedState(Parcelable superState, int year, int month, int day) { 37550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov super(superState); 37650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mYear = year; 37750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mMonth = month; 37850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mDay = day; 37950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov } 38050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 38150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /** 38250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * Constructor called from {@link #CREATOR} 38350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov */ 38450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private SavedState(Parcel in) { 38550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov super(in); 38650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mYear = in.readInt(); 38750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mMonth = in.readInt(); 38850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mDay = in.readInt(); 389e3491b6b5f1d3fb871074766597b275d9f682faaKenneth Andersson } 39050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 39150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov @Override 39250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov public void writeToParcel(Parcel dest, int flags) { 39350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov super.writeToParcel(dest, flags); 39450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov dest.writeInt(mYear); 39550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov dest.writeInt(mMonth); 39650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov dest.writeInt(mDay); 39750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov } 39850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 39950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov @SuppressWarnings("all") 40050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov // suppress unused and hiding 40150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov public static final Parcelable.Creator<SavedState> CREATOR = new Creator<SavedState>() { 40250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 40350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov public SavedState createFromParcel(Parcel in) { 40450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov return new SavedState(in); 40550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov } 40650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 40750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov public SavedState[] newArray(int size) { 40850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov return new SavedState[size]; 40950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov } 41050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov }; 411e3491b6b5f1d3fb871074766597b275d9f682faaKenneth Andersson } 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 413