DatePicker.java revision a911d4a2b1be7e9ea909a579167826e4a5bac1a3
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; 314bfd794475e6fb34c9dfa83d4302e9db365a3709Svetoslav 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 1004bfd794475e6fb34c9dfa83d4302e9db365a3709Svetoslav Ganov OnChangeListener onChangeListener = new OnChangeListener() { 1014bfd794475e6fb34c9dfa83d4302e9db365a3709Svetoslav Ganov public void onChange(NumberPicker picker, int oldVal, int newVal) { 102a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov updateDateUnchecked(mYearPicker.getCurrent(), mMonthPicker.getCurrent(), 103a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov mDayPicker.getCurrent()); 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); 1104bfd794475e6fb34c9dfa83d4302e9db365a3709Svetoslav Ganov mDayPicker.setOnLongPressUpdateInterval(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()); 1164bfd794475e6fb34c9dfa83d4302e9db365a3709Svetoslav Ganov mMonthPicker.setOnLongPressUpdateInterval(200); 11750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mMonthPicker.setOnChangeListener(onChangeListener); 11850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 11950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov // year 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mYearPicker = (NumberPicker) findViewById(R.id.year); 1214bfd794475e6fb34c9dfa83d4302e9db365a3709Svetoslav Ganov mYearPicker.setOnLongPressUpdateInterval(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) { 138a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov updateDateUnchecked(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) { 241a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov updateDateUnchecked(year, month, dayOfMonth); 242dddda8d188408ff18935b1b0e15a00fe012a03daKenny Root } 243dddda8d188408ff18935b1b0e15a00fe012a03daKenny Root } 244dddda8d188408ff18935b1b0e15a00fe012a03daKenny Root 24550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov // Override so we are in complete control of save / restore for this widget. 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void dispatchRestoreInstanceState(SparseArray<Parcelable> container) { 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchThawSelfOnly(container); 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected Parcelable onSaveInstanceState() { 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcelable superState = super.onSaveInstanceState(); 25450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov return new SavedState(superState, mYearPicker.getCurrent(), mMonthPicker.getCurrent(), 25550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mDayPicker.getCurrent()); 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onRestoreInstanceState(Parcelable state) { 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SavedState ss = (SavedState) state; 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onRestoreInstanceState(ss.getSuperState()); 26250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov updatePickers(ss.mYear, ss.mMonth, ss.mDay); 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 26650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * Initialize the state. If the provided values designate an inconsistent 26750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * date the values are normalized before updating the pickers. 26850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param year The initial year. 27050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * @param monthOfYear The initial month <strong>starting from zero</strong>. 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dayOfMonth The initial day of the month. 27250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * @param onDateChangedListener How user is notified date is changed by 27350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * user, can be null. 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void init(int year, int monthOfYear, int dayOfMonth, 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OnDateChangedListener onDateChangedListener) { 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mOnDateChangedListener = onDateChangedListener; 27850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov updateDate(year, monthOfYear, dayOfMonth); 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /** 282a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov * Updates the current date. 283a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov * 284a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov * @param year The year. 285a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov * @param month The month which is <strong>starting from zero</strong>. 286a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov * @param dayOfMonth The day of the month. 287a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov */ 288a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov private void updateDateUnchecked(int year, int month, int dayOfMonth) { 289a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov updatePickers(year, month, dayOfMonth); 290a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov updateMiniMonth(); 291a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov notifyDateChanged(); 292a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov } 293a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov 294a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov /** 295a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov * @return The short month abbreviations. 296a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov */ 297a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov private String[] getShortMonths() { 298a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov final Locale currentLocale = Locale.getDefault(); 299a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov if (currentLocale.equals(mMonthLocale)) { 300a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov return mShortMonths; 301a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov } else { 302a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov for (int i = 0; i < mNumberOfMonths; i++) { 303a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov mShortMonths[i] = DateUtils.getMonthString(Calendar.JANUARY + i, 304a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov DateUtils.LENGTH_MEDIUM); 305a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov } 306a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov mMonthLocale = currentLocale; 307a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov return mShortMonths; 308a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov } 309a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov } 310a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov 311a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov /** 31250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * Updates the pickers with the given <code>year</code>, <code>month</code>, 31350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * and <code>dayOfMonth</code>. If the provided values designate an inconsistent 31450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * date the values are normalized before updating the pickers. 31550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov */ 31650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private void updatePickers(int year, int month, int dayOfMonth) { 317a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov // larger fields are not updated and the day is adjusted without wrapping 318a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov mTempCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); 319a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov mTempCalendar.roll(Calendar.MONTH, month - mTempCalendar.get(Calendar.MONTH)); 320a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov mTempCalendar.roll(Calendar.YEAR, year - mTempCalendar.get(Calendar.YEAR)); 321a911d4a2b1be7e9ea909a579167826e4a5bac1a3Svetoslav Ganov 32250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mYearPicker.setCurrent(mTempCalendar.get(Calendar.YEAR)); 32350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mMonthPicker.setCurrent(mTempCalendar.get(Calendar.MONTH)); 32450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mDayPicker.setRange(1, mTempCalendar.getActualMaximum(Calendar.DAY_OF_MONTH)); 32550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mDayPicker.setCurrent(mTempCalendar.get(Calendar.DAY_OF_MONTH)); 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /** 32950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * Updates the mini-month with the given year, month, and day selected by the 33050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * number pickers. 33150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov */ 33250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private void updateMiniMonth() { 33350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov Calendar selectedDay = mMiniMonthDayPicker.getSelectedDay(); 33450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov if (selectedDay.get(Calendar.YEAR) != mYearPicker.getCurrent() 33550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov || selectedDay.get(Calendar.MONTH) != mMonthPicker.getCurrent() 33650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov || selectedDay.get(Calendar.DAY_OF_MONTH) != mDayPicker.getCurrent()) { 33750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mMiniMonthDayPicker.goTo(mYearPicker.getCurrent(), mMonthPicker.getCurrent(), 33850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mDayPicker.getCurrent(), false, true, false); 33950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov } 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 34250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /** 34350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * @return The selected year. 34450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov */ 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getYear() { 34650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov return mYearPicker.getCurrent(); 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 34950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /** 35050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * @return The selected month. 35150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov */ 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getMonth() { 35350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov return mMonthPicker.getCurrent(); 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /** 35750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * @return The selected day of month. 35850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov */ 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getDayOfMonth() { 36050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov return mDayPicker.getCurrent(); 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3622bf761c20253222a763bce9a63d14c48ab08a556Suchi Amalapurapu 36350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /** 36450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * Notifies the listener, if such, for a change in the selected date. 36550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov */ 36650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private void notifyDateChanged() { 36750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov if (mOnDateChangedListener != null) { 36850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mOnDateChangedListener.onDateChanged(DatePicker.this, mYearPicker.getCurrent(), 36950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mMonthPicker.getCurrent(), mDayPicker.getCurrent()); 3702bf761c20253222a763bce9a63d14c48ab08a556Suchi Amalapurapu } 3712bf761c20253222a763bce9a63d14c48ab08a556Suchi Amalapurapu } 372e3491b6b5f1d3fb871074766597b275d9f682faaKenneth Andersson 37350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /** 37450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * Class for managing state storing/restoring. 37550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov */ 37650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private static class SavedState extends BaseSavedState { 37750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 37850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private final int mYear; 37950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 38050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private final int mMonth; 38150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 38250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private final int mDay; 38350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 38450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /** 38550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * Constructor called from {@link DatePicker#onSaveInstanceState()} 38650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov */ 38750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private SavedState(Parcelable superState, int year, int month, int day) { 38850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov super(superState); 38950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mYear = year; 39050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mMonth = month; 39150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mDay = day; 39250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov } 39350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 39450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov /** 39550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov * Constructor called from {@link #CREATOR} 39650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov */ 39750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov private SavedState(Parcel in) { 39850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov super(in); 39950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mYear = in.readInt(); 40050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mMonth = in.readInt(); 40150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov mDay = in.readInt(); 402e3491b6b5f1d3fb871074766597b275d9f682faaKenneth Andersson } 40350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 40450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov @Override 40550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov public void writeToParcel(Parcel dest, int flags) { 40650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov super.writeToParcel(dest, flags); 40750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov dest.writeInt(mYear); 40850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov dest.writeInt(mMonth); 40950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov dest.writeInt(mDay); 41050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov } 41150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 41250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov @SuppressWarnings("all") 41350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov // suppress unused and hiding 41450f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov public static final Parcelable.Creator<SavedState> CREATOR = new Creator<SavedState>() { 41550f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 41650f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov public SavedState createFromParcel(Parcel in) { 41750f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov return new SavedState(in); 41850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov } 41950f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 42050f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov public SavedState[] newArray(int size) { 42150f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov return new SavedState[size]; 42250f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov } 42350f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov }; 424e3491b6b5f1d3fb871074766597b275d9f682faaKenneth Andersson } 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 426