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