1392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann/* 2392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * Copyright (C) 2007 The Android Open Source Project 3392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * 4392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * Licensed under the Apache License, Version 2.0 (the "License"); 5392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * you may not use this file except in compliance with the License. 6392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * You may obtain a copy of the License at 7392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * 8392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * http://www.apache.org/licenses/LICENSE-2.0 9392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * 10392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * Unless required by applicable law or agreed to in writing, software 11392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * distributed under the License is distributed on an "AS IS" BASIS, 12392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * See the License for the specific language governing permissions and 14392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * limitations under the License. 15392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann */ 16392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 17392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannpackage com.android.contacts.datepicker; 18392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 19392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann// This is a fork of the standard Android DatePicker that additionally allows toggling the year 20ee89164751f62370e74e72f1204a6e248e614527Brian Attwell// on/off. 21392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 22392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport android.app.AlertDialog; 23392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport android.content.Context; 24392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport android.content.DialogInterface; 25392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport android.content.DialogInterface.OnClickListener; 26392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport android.os.Bundle; 27392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport android.view.LayoutInflater; 28392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport android.view.View; 29392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 30e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.R; 31cd321f65f1e50409812976380ad1f0fdb3fa35cbYorke Leeimport com.android.contacts.common.util.DateUtils; 32e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.datepicker.DatePicker.OnDateChangedListener; 33e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng 3411812c59ee140d62eaf3a8d826d2018767d490c5Daniel Lehmannimport java.text.DateFormat; 35392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport java.util.Calendar; 36392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 37392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann/** 38392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * A simple dialog containing an {@link DatePicker}. 39392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * 40392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * <p>See the <a href="{@docRoot}resources/tutorials/views/hello-datepicker.html">Date Picker 41392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * tutorial</a>.</p> 42392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann */ 43392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannpublic class DatePickerDialog extends AlertDialog implements OnClickListener, 44392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann OnDateChangedListener { 45392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 465a7a26962cc781d675280c790789e2dea28a7b34Daniel Lehmann /** Magic year that represents "no year" */ 475a7a26962cc781d675280c790789e2dea28a7b34Daniel Lehmann public static int NO_YEAR = DatePicker.NO_YEAR; 485a7a26962cc781d675280c790789e2dea28a7b34Daniel Lehmann 49392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann private static final String YEAR = "year"; 50392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann private static final String MONTH = "month"; 51392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann private static final String DAY = "day"; 52392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann private static final String YEAR_OPTIONAL = "year_optional"; 53392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 54392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann private final DatePicker mDatePicker; 55392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann private final OnDateSetListener mCallBack; 5611812c59ee140d62eaf3a8d826d2018767d490c5Daniel Lehmann private final DateFormat mTitleDateFormat; 5711812c59ee140d62eaf3a8d826d2018767d490c5Daniel Lehmann private final DateFormat mTitleNoYearDateFormat; 58392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 59392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann private int mInitialYear; 60392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann private int mInitialMonth; 61392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann private int mInitialDay; 62392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 63392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann /** 64392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * The callback used to indicate the user is done filling in the date. 65392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann */ 66392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann public interface OnDateSetListener { 67392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann /** 68392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param view The view associated with this listener. 695a7a26962cc781d675280c790789e2dea28a7b34Daniel Lehmann * @param year The year that was set or {@link DatePickerDialog#NO_YEAR} if the user has 705a7a26962cc781d675280c790789e2dea28a7b34Daniel Lehmann * not specified a year 71392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param monthOfYear The month that was set (0-11) for compatibility 72392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * with {@link java.util.Calendar}. 73392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param dayOfMonth The day of the month that was set. 74392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann */ 75392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth); 76392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 77392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 78392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann /** 79392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param context The context the dialog is to run in. 80392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param callBack How the parent is notified that the date is set. 81392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param year The initial year of the dialog 82392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param monthOfYear The initial month of the dialog. 83392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param dayOfMonth The initial day of the dialog. 84392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann */ 85392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann public DatePickerDialog(Context context, 86392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann OnDateSetListener callBack, 87392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int year, 88392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int monthOfYear, 89392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int dayOfMonth) { 90392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann this(context, callBack, year, monthOfYear, dayOfMonth, false); 91392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 92392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 93392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann /** 94392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param context The context the dialog is to run in. 95392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param callBack How the parent is notified that the date is set. 965a7a26962cc781d675280c790789e2dea28a7b34Daniel Lehmann * @param year The initial year of the dialog or {@link DatePickerDialog#NO_YEAR} if no year 975a7a26962cc781d675280c790789e2dea28a7b34Daniel Lehmann * has been specified 98392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param monthOfYear The initial month of the dialog. 99392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param dayOfMonth The initial day of the dialog. 100392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param yearOptional Whether the year can be toggled by the user 101392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann */ 102392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann public DatePickerDialog(Context context, 103392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann OnDateSetListener callBack, 104392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int year, 105392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int monthOfYear, 106392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int dayOfMonth, 107392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann boolean yearOptional) { 108ec0e096b3165c09f74b5c7cfe391a52e41a42fecBrian Attwell // Don't pass a theme id. Instead use the default alert dialog theme. 109ec0e096b3165c09f74b5c7cfe391a52e41a42fecBrian Attwell this(context, /* themeId = */ -1, callBack, year, monthOfYear, dayOfMonth, 110ee89164751f62370e74e72f1204a6e248e614527Brian Attwell yearOptional); 111392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 112392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 113392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann /** 114392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param context The context the dialog is to run in. 115392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param theme the theme to apply to this dialog 116392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param callBack How the parent is notified that the date is set. 1175a7a26962cc781d675280c790789e2dea28a7b34Daniel Lehmann * @param year The initial year of the dialog or {@link DatePickerDialog#NO_YEAR} if no year 1185a7a26962cc781d675280c790789e2dea28a7b34Daniel Lehmann * has been specified 119392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param monthOfYear The initial month of the dialog. 120392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param dayOfMonth The initial day of the dialog. 121392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann */ 122392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann public DatePickerDialog(Context context, 123392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int theme, 124392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann OnDateSetListener callBack, 125392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int year, 126392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int monthOfYear, 127392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int dayOfMonth) { 128392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann this(context, theme, callBack, year, monthOfYear, dayOfMonth, false); 129392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 130392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 131392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann /** 132392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param context The context the dialog is to run in. 133392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param theme the theme to apply to this dialog 134392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param callBack How the parent is notified that the date is set. 1355a7a26962cc781d675280c790789e2dea28a7b34Daniel Lehmann * @param year The initial year of the dialog or {@link DatePickerDialog#NO_YEAR} if no 1365a7a26962cc781d675280c790789e2dea28a7b34Daniel Lehmann * year has been specified. 137392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param monthOfYear The initial month of the dialog. 138392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param dayOfMonth The initial day of the dialog. 139392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * @param yearOptional Whether the year can be toggled by the user 140392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann */ 141392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann public DatePickerDialog(Context context, 142392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int theme, 143392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann OnDateSetListener callBack, 144392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int year, 145392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int monthOfYear, 146392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int dayOfMonth, 147392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann boolean yearOptional) { 148392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann super(context, theme); 149392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 150392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann mCallBack = callBack; 151392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann mInitialYear = year; 152392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann mInitialMonth = monthOfYear; 153392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann mInitialDay = dayOfMonth; 154392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 15511812c59ee140d62eaf3a8d826d2018767d490c5Daniel Lehmann mTitleDateFormat = DateFormat.getDateInstance(DateFormat.FULL); 156c7ea6e965339cd7a6936f418d729ac92ac7eaf79Yorke Lee mTitleNoYearDateFormat = DateUtils.getLocalizedDateFormatWithoutYear(getContext()); 157392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann updateTitle(mInitialYear, mInitialMonth, mInitialDay); 158392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 159ee89164751f62370e74e72f1204a6e248e614527Brian Attwell setButton(BUTTON_POSITIVE, context.getText(R.string.date_time_set), 160392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann this); 161392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann setButton(BUTTON_NEGATIVE, context.getText(android.R.string.cancel), 162392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann (OnClickListener) null); 163392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 164392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann LayoutInflater inflater = 165392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 166392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann View view = inflater.inflate(R.layout.date_picker_dialog, null); 167392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann setView(view); 168392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann mDatePicker = (DatePicker) view.findViewById(R.id.datePicker); 169392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann mDatePicker.init(mInitialYear, mInitialMonth, mInitialDay, yearOptional, this); 170392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 171392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 172392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann @Override 173392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann public void onClick(DialogInterface dialog, int which) { 174392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann if (mCallBack != null) { 175392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann mDatePicker.clearFocus(); 176392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann mCallBack.onDateSet(mDatePicker, mDatePicker.getYear(), 177392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann mDatePicker.getMonth(), mDatePicker.getDayOfMonth()); 178392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 179392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 180392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 18111812c59ee140d62eaf3a8d826d2018767d490c5Daniel Lehmann @Override 18211812c59ee140d62eaf3a8d826d2018767d490c5Daniel Lehmann public void onDateChanged(DatePicker view, int year, int month, int day) { 183392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann updateTitle(year, month, day); 184392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 185392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 186392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann public void updateDate(int year, int monthOfYear, int dayOfMonth) { 187392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann mInitialYear = year; 188392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann mInitialMonth = monthOfYear; 189392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann mInitialDay = dayOfMonth; 190392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann mDatePicker.updateDate(year, monthOfYear, dayOfMonth); 191392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 192392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 193392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann private void updateTitle(int year, int month, int day) { 1945a7a26962cc781d675280c790789e2dea28a7b34Daniel Lehmann final Calendar calendar = Calendar.getInstance(); 1955a7a26962cc781d675280c790789e2dea28a7b34Daniel Lehmann calendar.set(Calendar.YEAR, year); 1965a7a26962cc781d675280c790789e2dea28a7b34Daniel Lehmann calendar.set(Calendar.MONTH, month); 1975a7a26962cc781d675280c790789e2dea28a7b34Daniel Lehmann calendar.set(Calendar.DAY_OF_MONTH, day); 19811812c59ee140d62eaf3a8d826d2018767d490c5Daniel Lehmann final DateFormat dateFormat = 1995a7a26962cc781d675280c790789e2dea28a7b34Daniel Lehmann year == NO_YEAR ? mTitleNoYearDateFormat : mTitleDateFormat; 2005a7a26962cc781d675280c790789e2dea28a7b34Daniel Lehmann setTitle(dateFormat.format(calendar.getTime())); 201392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 202392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 203392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann @Override 204392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann public Bundle onSaveInstanceState() { 205392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann Bundle state = super.onSaveInstanceState(); 206392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann state.putInt(YEAR, mDatePicker.getYear()); 207392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann state.putInt(MONTH, mDatePicker.getMonth()); 208392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann state.putInt(DAY, mDatePicker.getDayOfMonth()); 209392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann state.putBoolean(YEAR_OPTIONAL, mDatePicker.isYearOptional()); 210392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann return state; 211392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 212392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 213392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann @Override 214392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann public void onRestoreInstanceState(Bundle savedInstanceState) { 215392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann super.onRestoreInstanceState(savedInstanceState); 216392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int year = savedInstanceState.getInt(YEAR); 217392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int month = savedInstanceState.getInt(MONTH); 218392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int day = savedInstanceState.getInt(DAY); 219392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann boolean yearOptional = savedInstanceState.getBoolean(YEAR_OPTIONAL); 220392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann mDatePicker.init(year, month, day, yearOptional, this); 221392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann updateTitle(year, month, day); 222392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 223392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann} 224