EventFieldEditorView.java revision 1b22073590c1801c3e6c7bde2f4636632a049f6c
1392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann/*
2392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * Copyright (C) 2010 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
1718ffaa2561cc7dd2e3ef81737e6537931c0a9a11Dmitri Plotnikovpackage com.android.contacts.editor;
18392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
19392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport com.android.contacts.R;
20392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport com.android.contacts.datepicker.DatePicker;
21392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport com.android.contacts.datepicker.DatePickerDialog;
22392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport com.android.contacts.datepicker.DatePickerDialog.OnDateSetListener;
234597c92d655d45447780b32c7572acef110b6ed1Dmitri Plotnikovimport com.android.contacts.model.AccountType.EditField;
244597c92d655d45447780b32c7572acef110b6ed1Dmitri Plotnikovimport com.android.contacts.model.AccountType.EventEditType;
25405671a7b42d97ebf7ae7c0eeb4721f881139673Daisuke Miyakawaimport com.android.contacts.model.DataKind;
26392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport com.android.contacts.model.EntityDelta;
27392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport com.android.contacts.model.EntityDelta.ValuesDelta;
28392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport com.android.contacts.util.DateUtils;
29392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
30392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport android.app.Dialog;
31392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport android.content.Context;
32392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport android.os.Bundle;
33392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport android.text.TextUtils;
34392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport android.util.AttributeSet;
35392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport android.view.View;
36135b44c8604e375699e22594e65f0daec14f5bbeDmitri Plotnikovimport android.widget.Button;
37392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
38392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport java.text.ParsePosition;
39392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport java.util.Calendar;
40392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport java.util.Date;
414b648485346462dc26c3a469caeae8589f5fbd58Daniel Lehmannimport java.util.Locale;
42392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
43392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann/**
44392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * Editor that allows editing Events using a {@link DatePickerDialog}
45392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann */
46392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannpublic class EventFieldEditorView extends LabeledEditorView {
47392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    /**
48392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann     * Exchange requires 8:00 for birthdays
49392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann     */
50392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    private final int DEFAULT_HOUR = 8;
51392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
52135b44c8604e375699e22594e65f0daec14f5bbeDmitri Plotnikov    private Button mDateView;
53392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
54392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    public EventFieldEditorView(Context context) {
55392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        super(context);
56392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    }
57392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
58392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    public EventFieldEditorView(Context context, AttributeSet attrs) {
59392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        super(context, attrs);
60392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    }
61392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
62392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    public EventFieldEditorView(Context context, AttributeSet attrs, int defStyle) {
63392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        super(context, attrs, defStyle);
64392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    }
65392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
6663ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan    /** {@inheritDoc} */
67392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    @Override
6863ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan    protected void onFinishInflate() {
6963ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan        super.onFinishInflate();
7063ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan
7163ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan        mDateView = (Button) findViewById(R.id.date_view);
7263ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan        mDateView.setOnClickListener(new OnClickListener() {
7363ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan            @Override
7463ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan            public void onClick(View v) {
7563ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan                showDialog(R.id.dialog_event_date_picker);
7663ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan            }
7763ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan        });
78392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    }
79392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
80392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    @Override
81392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    protected void requestFocusForFirstEditField() {
8263ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan        mDateView.requestFocus();
83392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    }
84392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
85392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    @Override
86392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    public void setEnabled(boolean enabled) {
87392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        super.setEnabled(enabled);
88392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
8963ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan        mDateView.setEnabled(!isReadOnly() && enabled);
90392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    }
91392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
92392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    @Override
93392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    public void setValues(DataKind kind, ValuesDelta entry, EntityDelta state, boolean readOnly,
94392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            ViewIdGenerator vig) {
95392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        if (kind.fieldList.size() != 1) throw new IllegalStateException("kind must have 1 field");
96392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        super.setValues(kind, entry, state, readOnly, vig);
97392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
9863ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan        mDateView.setEnabled(isEnabled() && !readOnly);
99392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
100392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        rebuildDateView();
101392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    }
102392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
103392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    private void rebuildDateView() {
104392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final EditField editField = getKind().fieldList.get(0);
105392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final String column = editField.column;
106135b44c8604e375699e22594e65f0daec14f5bbeDmitri Plotnikov        String data = DateUtils.formatDate(getContext(), getEntry().getAsString(column));
107135b44c8604e375699e22594e65f0daec14f5bbeDmitri Plotnikov        if (TextUtils.isEmpty(data)) {
108135b44c8604e375699e22594e65f0daec14f5bbeDmitri Plotnikov            data = " ";
109135b44c8604e375699e22594e65f0daec14f5bbeDmitri Plotnikov        }
110392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        mDateView.setText(data);
111392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    }
112392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
1131b22073590c1801c3e6c7bde2f4636632a049f6cKatherine Kuan    public boolean hasEmptyField() {
1141b22073590c1801c3e6c7bde2f4636632a049f6cKatherine Kuan        return TextUtils.isEmpty(mDateView.getText());
1151b22073590c1801c3e6c7bde2f4636632a049f6cKatherine Kuan    }
1161b22073590c1801c3e6c7bde2f4636632a049f6cKatherine Kuan
117392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    @Override
118392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    public Dialog createDialog(Bundle bundle) {
119392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        if (bundle == null) throw new IllegalArgumentException("bundle must not be null");
120392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        int dialogId = bundle.getInt(DIALOG_ID_KEY);
121392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        switch (dialogId) {
122392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            case R.id.dialog_event_date_picker:
123392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                return createDatePickerDialog();
124392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            default:
125392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                return super.createDialog(bundle);
126392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        }
127392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    }
128392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
129392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    @Override
130392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    protected EventEditType getType() {
131392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        return (EventEditType) super.getType();
132392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    }
133392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
134392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    @Override
135392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    protected void onLabelRebuilt() {
136392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        // if we changed to a type that requires a year, ensure that it is actually set
137392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final String column = getKind().fieldList.get(0).column;
138392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final String oldValue = getEntry().getAsString(column);
139392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final DataKind kind = getKind();
140392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
1414b648485346462dc26c3a469caeae8589f5fbd58Daniel Lehmann        final Calendar calendar = Calendar.getInstance(DateUtils.UTC_TIMEZONE, Locale.US);
142392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final int defaultYear = calendar.get(Calendar.YEAR);
143392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
144392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        // Check whether the year is optional
145392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final boolean isYearOptional = getType().isYearOptional();
146392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
14717e6f9d6c0dab8bb02f4f7e2f9f43f8b8449f55aDmitri Plotnikov        if (!isYearOptional && !TextUtils.isEmpty(oldValue)) {
148392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            final ParsePosition position = new ParsePosition(0);
149392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            final Date date2 = kind.dateFormatWithoutYear.parse(oldValue, position);
150392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
151392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            // Don't understand the date, lets not change it
152392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            if (date2 == null) return;
153392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
154392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            // This value is missing the year. Add it now
155392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            calendar.setTime(date2);
156392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            calendar.set(defaultYear, calendar.get(Calendar.MONTH),
157392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                    calendar.get(Calendar.DAY_OF_MONTH), DEFAULT_HOUR, 0, 0);
158392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
159392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            onFieldChanged(column, kind.dateFormatWithYear.format(calendar.getTime()));
160392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            rebuildDateView();
161392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        }
162392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    }
163392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
164392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    /**
165392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann     * Prepare dialog for entering a date
166392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann     */
167392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    private Dialog createDatePickerDialog() {
168392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final String column = getKind().fieldList.get(0).column;
169392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final String oldValue = getEntry().getAsString(column);
170392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final DataKind kind = getKind();
171392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
1724b648485346462dc26c3a469caeae8589f5fbd58Daniel Lehmann        final Calendar calendar = Calendar.getInstance(DateUtils.UTC_TIMEZONE, Locale.US);
173392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final int defaultYear = calendar.get(Calendar.YEAR);
174392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
175392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        // Check whether the year is optional
176392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final boolean isYearOptional = getType().isYearOptional();
177392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
178392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final int oldYear, oldMonth, oldDay;
179392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        if (TextUtils.isEmpty(oldValue)) {
180392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            // Default to January first, 30 years ago
181392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            oldYear = defaultYear;
182392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            oldMonth = 0;
183392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            oldDay = 1;
184392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        } else {
185392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            final ParsePosition position = new ParsePosition(0);
186392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            // Try parsing with year
1872b3f95cc12b76523410782d4178562ce241410efDmitri Plotnikov            Date date1 = kind.dateFormatWithYear.parse(oldValue, position);
1882b3f95cc12b76523410782d4178562ce241410efDmitri Plotnikov            if (date1 == null) {
1892b3f95cc12b76523410782d4178562ce241410efDmitri Plotnikov                // If that format does not fit, try guessing the right format
1902b3f95cc12b76523410782d4178562ce241410efDmitri Plotnikov                date1 = DateUtils.parseDate(oldValue);
1912b3f95cc12b76523410782d4178562ce241410efDmitri Plotnikov            }
192392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            if (date1 != null) {
193392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                calendar.setTime(date1);
194392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                oldYear = calendar.get(Calendar.YEAR);
195392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                oldMonth = calendar.get(Calendar.MONTH);
196392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                oldDay = calendar.get(Calendar.DAY_OF_MONTH);
197392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            } else {
198392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                final Date date2 = kind.dateFormatWithoutYear.parse(oldValue, position);
199392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                // Don't understand the date, lets not change it
200392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                if (date2 == null) return null;
201392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                calendar.setTime(date2);
202392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                oldYear = isYearOptional ? 0 : defaultYear;
203392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                oldMonth = calendar.get(Calendar.MONTH);
204392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                oldDay = calendar.get(Calendar.DAY_OF_MONTH);
205392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            }
206392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        }
207392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final OnDateSetListener callBack = new OnDateSetListener() {
208392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            @Override
209392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
210392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                if (year == 0 && !isYearOptional) throw new IllegalStateException();
2114b648485346462dc26c3a469caeae8589f5fbd58Daniel Lehmann                final Calendar outCalendar =
2124b648485346462dc26c3a469caeae8589f5fbd58Daniel Lehmann                        Calendar.getInstance(DateUtils.UTC_TIMEZONE, Locale.US);
213392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
214392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                // If no year specified, set it to 1900. The format string will ignore that year
215392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                // For formats other than Exchange, the time of the day is ignored
216392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                outCalendar.clear();
217392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                outCalendar.set(year == 0 ? 1900 : year, monthOfYear, dayOfMonth,
218392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                        DEFAULT_HOUR, 0, 0);
219392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
220392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                final String resultString;
221392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                if (year == 0) {
222392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                    resultString = kind.dateFormatWithoutYear.format(outCalendar.getTime());
223392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                } else {
224392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                    resultString = kind.dateFormatWithYear.format(outCalendar.getTime());
225392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                }
226392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                onFieldChanged(column, resultString);
227392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                rebuildDateView();
228392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            }
229392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        };
230392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final DatePickerDialog resultDialog = new DatePickerDialog(getContext(), callBack,
231392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                oldYear, oldMonth, oldDay, isYearOptional);
232392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        return resultDialog;
233392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    }
234392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann}
235