package com.jdroid.android.date; import android.annotation.SuppressLint; import android.content.Context; import android.os.Parcel; import android.os.Parcelable; import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.util.AttributeSet; import android.view.View; import android.widget.Button; import android.widget.DatePicker; import com.jdroid.java.date.DateTimeFormat; import com.jdroid.java.date.DateUtils; import java.util.Date; public class DateButton extends Button { private Date date; @SuppressLint("SetTextI18n") public DateButton(Context context, AttributeSet attrs) { super(context, attrs); if (isInEditMode()) { setText("Sat, Dec 15, 2012"); } } public void init(Fragment targetFragment, final Date defaultDate) { init(targetFragment, defaultDate, null); } public void init(Fragment targetFragment, Date defaultDate, Integer titleResId) { init(targetFragment, defaultDate, titleResId, null); } public void init(Fragment targetFragment, Date defaultDate, Integer titleResId, Date minDate) { init(targetFragment, defaultDate, titleResId, minDate, null); } public void init(Fragment targetFragment, Date defaultDate, Integer titleResId, Date minDate, Date maxDate) { init(targetFragment, defaultDate, titleResId, minDate, maxDate, 1); } public void init(final Fragment targetFragment, final Date defaultDate, final Integer titleResId, final Date minDate, final Date maxDate, final int requestCode) { setDate(defaultDate); setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { DatePickerDialogFragment.show(targetFragment, defaultDate, titleResId, minDate, maxDate, requestCode); } }); } public void setDate(Date date) { this.date = date; setText(DateUtils.format(date, DateTimeFormat.EEMMMDYYYY)); } public Date getDate() { return date; } @Override public Parcelable onSaveInstanceState() { Parcelable superState = super.onSaveInstanceState(); return new SavedState(superState, date); } @Override public void onRestoreInstanceState(Parcelable state) { SavedState ss = (SavedState)state; super.onRestoreInstanceState(ss.getSuperState()); setDate(ss.date); } /** * Class for managing state storing/restoring. */ private static class SavedState extends BaseSavedState { private Date date; /** * Constructor called from {@link DatePicker#onSaveInstanceState()} */ private SavedState(Parcelable superState, Date date) { super(superState); this.date = date; } /** * Constructor called from {@link #CREATOR} */ private SavedState(Parcel in) { super(in); date = DateUtils.getDate(in.readInt(), in.readInt(), in.readInt()); } @Override public void writeToParcel(@NonNull Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeInt(DateUtils.getYear(date)); dest.writeInt(DateUtils.getMonth(date)); dest.writeInt(DateUtils.getDayOfMonth(date)); } @SuppressWarnings({ "hiding", "unused" }) public static final Parcelable.Creator<SavedState> CREATOR = new Creator<SavedState>() { @Override public SavedState createFromParcel(Parcel in) { return new SavedState(in); } @Override public SavedState[] newArray(int size) { return new SavedState[size]; } }; } }