EventFieldEditorView.java revision 392ccec3b56e8074a5a028af28106134b39f64bc
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 17392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannpackage com.android.contacts.views.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; 23392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport com.android.contacts.model.BaseAccountType.DataKind; 24392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport com.android.contacts.model.BaseAccountType.EditField; 25392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport com.android.contacts.model.BaseAccountType.EventEditType; 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; 36392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport android.widget.LinearLayout; 37392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport android.widget.TextView; 38392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 39392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport java.text.ParsePosition; 40392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport java.util.Calendar; 41392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmannimport java.util.Date; 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 52392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann private TextView 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 66392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann @Override 67392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann protected void onLayout(boolean changed, int l, int t, int r, int b) { 68392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann super.onLayout(changed, l, t, r, b); 69392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 70392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int l1 = getPaddingLeft(); 71392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int t1 = getPaddingTop(); 72392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int r1 = getMeasuredWidth() - getPaddingRight(); 73392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int b1 = getMeasuredHeight() - getPaddingBottom(); 74392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 75392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann // Fields 76392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann // Subtract buttons left and right if necessary 77392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final int l2 = (getLabel() != null) ? l1 + getLabel().getMeasuredWidth() : l1; 78392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final int r2 = r1 - ((getDelete() != null) ? getDelete().getMeasuredWidth() : 0); 79392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann if (mDateView != null) mDateView.layout(l2, t1, r2, b1); 80392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 81392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 82392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann @Override 83392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann protected int getEditorHeight() { 84392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann return mDateView != null ? mDateView.getMeasuredHeight() : 0; 85392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 86392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 87392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann @Override 88392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann protected void requestFocusForFirstEditField() { 89392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann if (mDateView != null) mDateView.requestFocus(); 90392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 91392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 92392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann @Override 93392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann public void setEnabled(boolean enabled) { 94392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann super.setEnabled(enabled); 95392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 96392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann if (mDateView != null) mDateView.setEnabled(enabled); 97392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 98392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 99392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann @Override 100392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann public void setValues(DataKind kind, ValuesDelta entry, EntityDelta state, boolean readOnly, 101392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann ViewIdGenerator vig) { 102392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann if (kind.fieldList.size() != 1) throw new IllegalStateException("kind must have 1 field"); 103392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann super.setValues(kind, entry, state, readOnly, vig); 104392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 105392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann if (mDateView == null) { 106392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann mDateView = new TextView(getContext(), null, android.R.attr.textAppearanceMedium); 107392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann mDateView.setFocusable(true); 108392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann mDateView.setBackgroundResource(R.drawable.edit_button_field_background); 109392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann mDateView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 110392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann LayoutParams.WRAP_CONTENT)); 111392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann mDateView.setEnabled(!readOnly); 112392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann mDateView.setOnClickListener(new OnClickListener() { 113392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann @Override 114392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann public void onClick(View v) { 115392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann showDialog(R.id.dialog_event_date_picker); 116392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 117392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann }); 118392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann addView(mDateView); 119392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 120392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 121392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann rebuildDateView(); 122392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 123392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 124392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann private void rebuildDateView() { 125392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final EditField editField = getKind().fieldList.get(0); 126392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final String column = editField.column; 127392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final String data = DateUtils.formatDate(getContext(), getEntry().getAsString(column)); 128392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann mDateView.setText(data); 129392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 130392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 131392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann @Override 132392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann public Dialog createDialog(Bundle bundle) { 133392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann if (bundle == null) throw new IllegalArgumentException("bundle must not be null"); 134392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann int dialogId = bundle.getInt(DIALOG_ID_KEY); 135392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann switch (dialogId) { 136392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann case R.id.dialog_event_date_picker: 137392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann return createDatePickerDialog(); 138392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann default: 139392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann return super.createDialog(bundle); 140392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 141392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 142392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 143392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann @Override 144392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann protected EventEditType getType() { 145392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann return (EventEditType) super.getType(); 146392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 147392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 148392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann @Override 149392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann protected void onLabelRebuilt() { 150392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann // if we changed to a type that requires a year, ensure that it is actually set 151392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final String column = getKind().fieldList.get(0).column; 152392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final String oldValue = getEntry().getAsString(column); 153392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final DataKind kind = getKind(); 154392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 155392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final Calendar calendar = Calendar.getInstance(); 156392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final int defaultYear = calendar.get(Calendar.YEAR); 157392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 158392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann // Check whether the year is optional 159392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final boolean isYearOptional = getType().isYearOptional(); 160392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 161392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann if (!isYearOptional) { 162392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final ParsePosition position = new ParsePosition(0); 163392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final Date date2 = kind.dateFormatWithoutYear.parse(oldValue, position); 164392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 165392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann // Don't understand the date, lets not change it 166392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann if (date2 == null) return; 167392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 168392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann // This value is missing the year. Add it now 169392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann calendar.setTime(date2); 170392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann calendar.set(defaultYear, calendar.get(Calendar.MONTH), 171392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann calendar.get(Calendar.DAY_OF_MONTH), DEFAULT_HOUR, 0, 0); 172392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 173392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann onFieldChanged(column, kind.dateFormatWithYear.format(calendar.getTime())); 174392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann rebuildDateView(); 175392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 176392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 177392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 178392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann /** 179392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann * Prepare dialog for entering a date 180392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann */ 181392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann private Dialog createDatePickerDialog() { 182392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final String column = getKind().fieldList.get(0).column; 183392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final String oldValue = getEntry().getAsString(column); 184392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final DataKind kind = getKind(); 185392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 186392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final Calendar calendar = Calendar.getInstance(); 187392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final int defaultYear = calendar.get(Calendar.YEAR); 188392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 189392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann // Check whether the year is optional 190392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final boolean isYearOptional = getType().isYearOptional(); 191392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 192392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final int oldYear, oldMonth, oldDay; 193392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann if (TextUtils.isEmpty(oldValue)) { 194392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann // Default to January first, 30 years ago 195392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann oldYear = defaultYear; 196392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann oldMonth = 0; 197392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann oldDay = 1; 198392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } else { 199392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final ParsePosition position = new ParsePosition(0); 200392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann // Try parsing with year 201392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final Date date1 = kind.dateFormatWithYear.parse(oldValue, position); 202392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann if (date1 != null) { 203392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann calendar.setTime(date1); 204392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann oldYear = calendar.get(Calendar.YEAR); 205392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann oldMonth = calendar.get(Calendar.MONTH); 206392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann oldDay = calendar.get(Calendar.DAY_OF_MONTH); 207392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } else { 208392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final Date date2 = kind.dateFormatWithoutYear.parse(oldValue, position); 209392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann // Don't understand the date, lets not change it 210392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann if (date2 == null) return null; 211392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann calendar.setTime(date2); 212392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann oldYear = isYearOptional ? 0 : defaultYear; 213392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann oldMonth = calendar.get(Calendar.MONTH); 214392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann oldDay = calendar.get(Calendar.DAY_OF_MONTH); 215392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 216392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 217392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final OnDateSetListener callBack = new OnDateSetListener() { 218392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann @Override 219392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 220392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann if (year == 0 && !isYearOptional) throw new IllegalStateException(); 221392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final Calendar outCalendar = Calendar.getInstance(); 222392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 223392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann // If no year specified, set it to 1900. The format string will ignore that year 224392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann // For formats other than Exchange, the time of the day is ignored 225392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann outCalendar.clear(); 226392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann outCalendar.set(year == 0 ? 1900 : year, monthOfYear, dayOfMonth, 227392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann DEFAULT_HOUR, 0, 0); 228392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann 229392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final String resultString; 230392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann if (year == 0) { 231392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann resultString = kind.dateFormatWithoutYear.format(outCalendar.getTime()); 232392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } else { 233392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann resultString = kind.dateFormatWithYear.format(outCalendar.getTime()); 234392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 235392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann onFieldChanged(column, resultString); 236392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann rebuildDateView(); 237392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 238392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann }; 239392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann final DatePickerDialog resultDialog = new DatePickerDialog(getContext(), callBack, 240392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann oldYear, oldMonth, oldDay, isYearOptional); 241392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann return resultDialog; 242392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann } 243392ccec3b56e8074a5a028af28106134b39f64bcDaniel Lehmann} 244