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 19e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.app.Dialog; 20e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.content.Context; 21e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.content.res.Resources; 22e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.os.Bundle; 23e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.text.TextUtils; 24e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.util.AttributeSet; 25e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.view.View; 26e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.widget.Button; 27e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng 28392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport com.android.contacts.R; 29392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport com.android.contacts.datepicker.DatePicker; 30392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport com.android.contacts.datepicker.DatePickerDialog; 31392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport com.android.contacts.datepicker.DatePickerDialog.OnDateSetListener; 32cd321f65f1e50409812976380ad1f0fdb3fa35cbYorke Leeimport com.android.contacts.common.model.RawContactDelta; 33738ff8623dc77dd91a1b9023861e924ba5e4c27eChiao Chengimport com.android.contacts.common.model.ValuesDelta; 34428f008513d1591cc08fcfe2cf0c9237fb313241Chiao Chengimport com.android.contacts.common.model.account.AccountType.EditField; 35428f008513d1591cc08fcfe2cf0c9237fb313241Chiao Chengimport com.android.contacts.common.model.account.AccountType.EventEditType; 36428f008513d1591cc08fcfe2cf0c9237fb313241Chiao Chengimport com.android.contacts.common.model.dataitem.DataKind; 37cd321f65f1e50409812976380ad1f0fdb3fa35cbYorke Leeimport com.android.contacts.common.util.CommonDateUtils; 38cd321f65f1e50409812976380ad1f0fdb3fa35cbYorke Leeimport com.android.contacts.common.util.DateUtils; 39392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 40392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport java.text.ParsePosition; 41392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport java.util.Calendar; 42392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport java.util.Date; 434b648485346462dc26c3a469caeae8589f5fbd58Daniel Lehmannimport java.util.Locale; 44392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 45392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann/** 46392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * Editor that allows editing Events using a {@link DatePickerDialog} 47392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann */ 48392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannpublic class EventFieldEditorView extends LabeledEditorView { 49392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 50fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan /** 51fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan * Default string to show when there is no date selected yet. 52fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan */ 53fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan private String mNoDateString; 54fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan private int mPrimaryTextColor; 55fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan private int mSecondaryTextColor; 56fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan 57135b44c8604e375699e22594e65f0daec14f5bbeDmitri Plotnikov private Button mDateView; 58392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 59392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann public EventFieldEditorView(Context context) { 60392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann super(context); 61392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 62392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 63392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann public EventFieldEditorView(Context context, AttributeSet attrs) { 64392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann super(context, attrs); 65392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 66392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 67392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann public EventFieldEditorView(Context context, AttributeSet attrs, int defStyle) { 68392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann super(context, attrs, defStyle); 69392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 70392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 7163ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan /** {@inheritDoc} */ 72392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann @Override 7363ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan protected void onFinishInflate() { 7463ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan super.onFinishInflate(); 7563ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan 76fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan Resources resources = mContext.getResources(); 77fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan mPrimaryTextColor = resources.getColor(R.color.primary_text_color); 78fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan mSecondaryTextColor = resources.getColor(R.color.secondary_text_color); 799574314dd24a045761453b51244fa75a1da36f6eKatherine Kuan mNoDateString = mContext.getString(R.string.event_edit_field_hint_text); 80fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan 8163ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan mDateView = (Button) findViewById(R.id.date_view); 8263ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan mDateView.setOnClickListener(new OnClickListener() { 8363ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan @Override 8463ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan public void onClick(View v) { 8563ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan showDialog(R.id.dialog_event_date_picker); 8663ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan } 8763ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan }); 88392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 89392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 90392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann @Override 9126918da1650c1ff7b6f92deb978ab976525c811aJosh Gargus public void editNewlyAddedField() { 9226918da1650c1ff7b6f92deb978ab976525c811aJosh Gargus showDialog(R.id.dialog_event_date_picker); 9326918da1650c1ff7b6f92deb978ab976525c811aJosh Gargus } 9426918da1650c1ff7b6f92deb978ab976525c811aJosh Gargus 9526918da1650c1ff7b6f92deb978ab976525c811aJosh Gargus @Override 96392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann protected void requestFocusForFirstEditField() { 9763ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan mDateView.requestFocus(); 98392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 99392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 100392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann @Override 101392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann public void setEnabled(boolean enabled) { 102392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann super.setEnabled(enabled); 103392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 10463ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan mDateView.setEnabled(!isReadOnly() && enabled); 105392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 106392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 107392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann @Override 108851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public void setValues(DataKind kind, ValuesDelta entry, RawContactDelta state, boolean readOnly, 109392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann ViewIdGenerator vig) { 110392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann if (kind.fieldList.size() != 1) throw new IllegalStateException("kind must have 1 field"); 111392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann super.setValues(kind, entry, state, readOnly, vig); 112392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 11363ffb90935d8aec295e4a8f62af6c77dafe1899fKatherine Kuan mDateView.setEnabled(isEnabled() && !readOnly); 114392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 115392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann rebuildDateView(); 116392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 117392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 118392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann private void rebuildDateView() { 119392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final EditField editField = getKind().fieldList.get(0); 120392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final String column = editField.column; 1214b294d6c96c4865b64338e5d222ff9dc87bad5b9Yorke Lee String data = DateUtils.formatDate(getContext(), getEntry().getAsString(column), 1224b294d6c96c4865b64338e5d222ff9dc87bad5b9Yorke Lee false /*Use the short DateFormat to ensure that it fits inside the EditText*/); 123135b44c8604e375699e22594e65f0daec14f5bbeDmitri Plotnikov if (TextUtils.isEmpty(data)) { 124fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan mDateView.setText(mNoDateString); 125fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan mDateView.setTextColor(mSecondaryTextColor); 1265e330ed98f1c2711b4cd3b375a1c0f76bedaf3e1Katherine Kuan setDeleteButtonVisible(false); 1275e330ed98f1c2711b4cd3b375a1c0f76bedaf3e1Katherine Kuan } else { 128fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan mDateView.setText(data); 129fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan mDateView.setTextColor(mPrimaryTextColor); 1305e330ed98f1c2711b4cd3b375a1c0f76bedaf3e1Katherine Kuan setDeleteButtonVisible(true); 131135b44c8604e375699e22594e65f0daec14f5bbeDmitri Plotnikov } 132392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 133392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 1342591436971bad3050c85929c8e0c5a8d48111f88Katherine Kuan @Override 1352591436971bad3050c85929c8e0c5a8d48111f88Katherine Kuan public boolean isEmpty() { 136296cca5522815fc51829203d326c335f9824f118Josh Gargus final EditField editField = getKind().fieldList.get(0); 137296cca5522815fc51829203d326c335f9824f118Josh Gargus final String column = editField.column; 138296cca5522815fc51829203d326c335f9824f118Josh Gargus return TextUtils.isEmpty(getEntry().getAsString(column)); 1391b22073590c1801c3e6c7bde2f4636632a049f6cKatherine Kuan } 1401b22073590c1801c3e6c7bde2f4636632a049f6cKatherine Kuan 141392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann @Override 142392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann public Dialog createDialog(Bundle bundle) { 143392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann if (bundle == null) throw new IllegalArgumentException("bundle must not be null"); 144392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int dialogId = bundle.getInt(DIALOG_ID_KEY); 145392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann switch (dialogId) { 146392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann case R.id.dialog_event_date_picker: 147392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann return createDatePickerDialog(); 148392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann default: 149392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann return super.createDialog(bundle); 150392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 151392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 152392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 153392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann @Override 154392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann protected EventEditType getType() { 155392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann return (EventEditType) super.getType(); 156392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 157392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 158392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann @Override 159392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann protected void onLabelRebuilt() { 160392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann // if we changed to a type that requires a year, ensure that it is actually set 161392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final String column = getKind().fieldList.get(0).column; 162392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final String oldValue = getEntry().getAsString(column); 163392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final DataKind kind = getKind(); 164392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 1654b648485346462dc26c3a469caeae8589f5fbd58Daniel Lehmann final Calendar calendar = Calendar.getInstance(DateUtils.UTC_TIMEZONE, Locale.US); 166392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final int defaultYear = calendar.get(Calendar.YEAR); 167392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 168392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann // Check whether the year is optional 169392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final boolean isYearOptional = getType().isYearOptional(); 170392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 17117e6f9d6c0dab8bb02f4f7e2f9f43f8b8449f55aDmitri Plotnikov if (!isYearOptional && !TextUtils.isEmpty(oldValue)) { 172392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final ParsePosition position = new ParsePosition(0); 173392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final Date date2 = kind.dateFormatWithoutYear.parse(oldValue, position); 174392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 175392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann // Don't understand the date, lets not change it 176392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann if (date2 == null) return; 177392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 178392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann // This value is missing the year. Add it now 179392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann calendar.setTime(date2); 180392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann calendar.set(defaultYear, calendar.get(Calendar.MONTH), 181cd321f65f1e50409812976380ad1f0fdb3fa35cbYorke Lee calendar.get(Calendar.DAY_OF_MONTH), CommonDateUtils.DEFAULT_HOUR, 0, 0); 182392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 183392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann onFieldChanged(column, kind.dateFormatWithYear.format(calendar.getTime())); 184392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann rebuildDateView(); 185392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 186392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 187392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 188392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann /** 189392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * Prepare dialog for entering a date 190392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann */ 191392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann private Dialog createDatePickerDialog() { 192392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final String column = getKind().fieldList.get(0).column; 193392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final String oldValue = getEntry().getAsString(column); 194392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final DataKind kind = getKind(); 195392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 1964b648485346462dc26c3a469caeae8589f5fbd58Daniel Lehmann final Calendar calendar = Calendar.getInstance(DateUtils.UTC_TIMEZONE, Locale.US); 197392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final int defaultYear = calendar.get(Calendar.YEAR); 198392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 199392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann // Check whether the year is optional 200392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final boolean isYearOptional = getType().isYearOptional(); 201392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 202392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final int oldYear, oldMonth, oldDay; 203ec6bfa0ce4a94edbafb97c7ae2b573abf2aa4a85Yorke Lee 204392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann if (TextUtils.isEmpty(oldValue)) { 20578253a9e7e8dc5724333fa6a61e537249adac90bYorke Lee // Default to the current date 206392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann oldYear = defaultYear; 20778253a9e7e8dc5724333fa6a61e537249adac90bYorke Lee oldMonth = calendar.get(Calendar.MONTH); 20878253a9e7e8dc5724333fa6a61e537249adac90bYorke Lee oldDay = calendar.get(Calendar.DAY_OF_MONTH); 209392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } else { 210392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann // Try parsing with year 211ec6bfa0ce4a94edbafb97c7ae2b573abf2aa4a85Yorke Lee Calendar cal = DateUtils.parseDate(oldValue, false); 212ec6bfa0ce4a94edbafb97c7ae2b573abf2aa4a85Yorke Lee if (cal != null) { 213ec6bfa0ce4a94edbafb97c7ae2b573abf2aa4a85Yorke Lee if (DateUtils.isYearSet(cal)) { 214ec6bfa0ce4a94edbafb97c7ae2b573abf2aa4a85Yorke Lee oldYear = cal.get(Calendar.YEAR); 2155a7a26962cc781d675280c790789e2dea28a7b34Daniel Lehmann } else { 216ec6bfa0ce4a94edbafb97c7ae2b573abf2aa4a85Yorke Lee //cal.set(Calendar.YEAR, 0); 2175a7a26962cc781d675280c790789e2dea28a7b34Daniel Lehmann oldYear = isYearOptional ? DatePickerDialog.NO_YEAR : defaultYear; 2185a7a26962cc781d675280c790789e2dea28a7b34Daniel Lehmann } 219ec6bfa0ce4a94edbafb97c7ae2b573abf2aa4a85Yorke Lee oldMonth = cal.get(Calendar.MONTH); 220ec6bfa0ce4a94edbafb97c7ae2b573abf2aa4a85Yorke Lee oldDay = cal.get(Calendar.DAY_OF_MONTH); 221ec6bfa0ce4a94edbafb97c7ae2b573abf2aa4a85Yorke Lee } else { 222ec6bfa0ce4a94edbafb97c7ae2b573abf2aa4a85Yorke Lee return null; 223392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 224392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 225392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final OnDateSetListener callBack = new OnDateSetListener() { 226392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann @Override 227392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 228392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann if (year == 0 && !isYearOptional) throw new IllegalStateException(); 2294b648485346462dc26c3a469caeae8589f5fbd58Daniel Lehmann final Calendar outCalendar = 2304b648485346462dc26c3a469caeae8589f5fbd58Daniel Lehmann Calendar.getInstance(DateUtils.UTC_TIMEZONE, Locale.US); 231392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 23211812c59ee140d62eaf3a8d826d2018767d490c5Daniel Lehmann // If no year specified, set it to 2000 (we could pick any leap year here). 23311812c59ee140d62eaf3a8d826d2018767d490c5Daniel Lehmann // The format string will ignore that year. 234392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann // For formats other than Exchange, the time of the day is ignored 235392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann outCalendar.clear(); 2365a7a26962cc781d675280c790789e2dea28a7b34Daniel Lehmann outCalendar.set(year == DatePickerDialog.NO_YEAR ? 2000 : year, monthOfYear, 237cd321f65f1e50409812976380ad1f0fdb3fa35cbYorke Lee dayOfMonth, CommonDateUtils.DEFAULT_HOUR, 0, 0); 238392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 239392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final String resultString; 240392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann if (year == 0) { 241392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann resultString = kind.dateFormatWithoutYear.format(outCalendar.getTime()); 242392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } else { 243392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann resultString = kind.dateFormatWithYear.format(outCalendar.getTime()); 244392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 245392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann onFieldChanged(column, resultString); 246392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann rebuildDateView(); 247392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 248392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann }; 249392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final DatePickerDialog resultDialog = new DatePickerDialog(getContext(), callBack, 250392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann oldYear, oldMonth, oldDay, isYearOptional); 251392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann return resultDialog; 252392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 253d37a891cb44cd17083c06d7be693c469403d16dfDaisuke Miyakawa 2542293e55d550fbc9974d1185960715e59acb14a85Katherine Kuan @Override 2552293e55d550fbc9974d1185960715e59acb14a85Katherine Kuan public void clearAllFields() { 2562293e55d550fbc9974d1185960715e59acb14a85Katherine Kuan // Update UI 257fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan mDateView.setText(mNoDateString); 258fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan mDateView.setTextColor(mSecondaryTextColor); 2592293e55d550fbc9974d1185960715e59acb14a85Katherine Kuan 2602293e55d550fbc9974d1185960715e59acb14a85Katherine Kuan // Update state 2612293e55d550fbc9974d1185960715e59acb14a85Katherine Kuan final String column = getKind().fieldList.get(0).column; 2622293e55d550fbc9974d1185960715e59acb14a85Katherine Kuan onFieldChanged(column, ""); 2632293e55d550fbc9974d1185960715e59acb14a85Katherine Kuan } 264392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann} 265