EventFieldEditorView.java revision 2591436971bad3050c85929c8e0c5a8d48111f88
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
1132591436971bad3050c85929c8e0c5a8d48111f88Katherine Kuan    @Override
1142591436971bad3050c85929c8e0c5a8d48111f88Katherine Kuan    public boolean isEmpty() {
1151b22073590c1801c3e6c7bde2f4636632a049f6cKatherine Kuan        return TextUtils.isEmpty(mDateView.getText());
1161b22073590c1801c3e6c7bde2f4636632a049f6cKatherine Kuan    }
1171b22073590c1801c3e6c7bde2f4636632a049f6cKatherine Kuan
118392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    @Override
119392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    public Dialog createDialog(Bundle bundle) {
120392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        if (bundle == null) throw new IllegalArgumentException("bundle must not be null");
121392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        int dialogId = bundle.getInt(DIALOG_ID_KEY);
122392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        switch (dialogId) {
123392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            case R.id.dialog_event_date_picker:
124392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                return createDatePickerDialog();
125392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            default:
126392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                return super.createDialog(bundle);
127392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        }
128392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    }
129392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
130392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    @Override
131392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    protected EventEditType getType() {
132392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        return (EventEditType) super.getType();
133392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    }
134392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
135392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    @Override
136392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    protected void onLabelRebuilt() {
137392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        // if we changed to a type that requires a year, ensure that it is actually set
138392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final String column = getKind().fieldList.get(0).column;
139392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final String oldValue = getEntry().getAsString(column);
140392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final DataKind kind = getKind();
141392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
1424b648485346462dc26c3a469caeae8589f5fbd58Daniel Lehmann        final Calendar calendar = Calendar.getInstance(DateUtils.UTC_TIMEZONE, Locale.US);
143392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final int defaultYear = calendar.get(Calendar.YEAR);
144392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
145392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        // Check whether the year is optional
146392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final boolean isYearOptional = getType().isYearOptional();
147392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
14817e6f9d6c0dab8bb02f4f7e2f9f43f8b8449f55aDmitri Plotnikov        if (!isYearOptional && !TextUtils.isEmpty(oldValue)) {
149392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            final ParsePosition position = new ParsePosition(0);
150392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            final Date date2 = kind.dateFormatWithoutYear.parse(oldValue, position);
151392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
152392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            // Don't understand the date, lets not change it
153392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            if (date2 == null) return;
154392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
155392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            // This value is missing the year. Add it now
156392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            calendar.setTime(date2);
157392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            calendar.set(defaultYear, calendar.get(Calendar.MONTH),
158392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                    calendar.get(Calendar.DAY_OF_MONTH), DEFAULT_HOUR, 0, 0);
159392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
160392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            onFieldChanged(column, kind.dateFormatWithYear.format(calendar.getTime()));
161392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            rebuildDateView();
162392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        }
163392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    }
164392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
165392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    /**
166392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann     * Prepare dialog for entering a date
167392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann     */
168392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    private Dialog createDatePickerDialog() {
169392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final String column = getKind().fieldList.get(0).column;
170392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final String oldValue = getEntry().getAsString(column);
171392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final DataKind kind = getKind();
172392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
1734b648485346462dc26c3a469caeae8589f5fbd58Daniel Lehmann        final Calendar calendar = Calendar.getInstance(DateUtils.UTC_TIMEZONE, Locale.US);
174392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final int defaultYear = calendar.get(Calendar.YEAR);
175392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
176392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        // Check whether the year is optional
177392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final boolean isYearOptional = getType().isYearOptional();
178392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
179392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final int oldYear, oldMonth, oldDay;
180392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        if (TextUtils.isEmpty(oldValue)) {
181392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            // Default to January first, 30 years ago
182392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            oldYear = defaultYear;
183392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            oldMonth = 0;
184392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            oldDay = 1;
185392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        } else {
186392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            final ParsePosition position = new ParsePosition(0);
187392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            // Try parsing with year
1882b3f95cc12b76523410782d4178562ce241410efDmitri Plotnikov            Date date1 = kind.dateFormatWithYear.parse(oldValue, position);
1892b3f95cc12b76523410782d4178562ce241410efDmitri Plotnikov            if (date1 == null) {
1902b3f95cc12b76523410782d4178562ce241410efDmitri Plotnikov                // If that format does not fit, try guessing the right format
1912b3f95cc12b76523410782d4178562ce241410efDmitri Plotnikov                date1 = DateUtils.parseDate(oldValue);
1922b3f95cc12b76523410782d4178562ce241410efDmitri Plotnikov            }
193392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            if (date1 != null) {
194392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                calendar.setTime(date1);
195392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                oldYear = calendar.get(Calendar.YEAR);
196392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                oldMonth = calendar.get(Calendar.MONTH);
197392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                oldDay = calendar.get(Calendar.DAY_OF_MONTH);
198392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            } else {
199392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                final Date date2 = kind.dateFormatWithoutYear.parse(oldValue, position);
200392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                // Don't understand the date, lets not change it
201392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                if (date2 == null) return null;
202392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                calendar.setTime(date2);
203392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                oldYear = isYearOptional ? 0 : defaultYear;
204392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                oldMonth = calendar.get(Calendar.MONTH);
205392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                oldDay = calendar.get(Calendar.DAY_OF_MONTH);
206392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            }
207392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        }
208392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final OnDateSetListener callBack = new OnDateSetListener() {
209392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            @Override
210392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
211392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                if (year == 0 && !isYearOptional) throw new IllegalStateException();
2124b648485346462dc26c3a469caeae8589f5fbd58Daniel Lehmann                final Calendar outCalendar =
2134b648485346462dc26c3a469caeae8589f5fbd58Daniel Lehmann                        Calendar.getInstance(DateUtils.UTC_TIMEZONE, Locale.US);
214392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
215392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                // If no year specified, set it to 1900. The format string will ignore that year
216392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                // For formats other than Exchange, the time of the day is ignored
217392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                outCalendar.clear();
218392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                outCalendar.set(year == 0 ? 1900 : year, monthOfYear, dayOfMonth,
219392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                        DEFAULT_HOUR, 0, 0);
220392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann
221392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                final String resultString;
222392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                if (year == 0) {
223392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                    resultString = kind.dateFormatWithoutYear.format(outCalendar.getTime());
224392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                } else {
225392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                    resultString = kind.dateFormatWithYear.format(outCalendar.getTime());
226392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                }
227392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                onFieldChanged(column, resultString);
228392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                rebuildDateView();
229392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann            }
230392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        };
231392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        final DatePickerDialog resultDialog = new DatePickerDialog(getContext(), callBack,
232392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann                oldYear, oldMonth, oldDay, isYearOptional);
233392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann        return resultDialog;
234392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann    }
235392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann}
236