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.DateUtils;
import java.util.Date;
public class TimeButton extends Button {
private Date time;
@SuppressLint("SetTextI18n")
public TimeButton(Context context, AttributeSet attrs) {
super(context, attrs);
if (isInEditMode()) {
setText("11:13 PM");
}
}
public void init(final Fragment fragment, final Date defaultTime, final int requestCode) {
setTime(defaultTime);
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
TimePickerDialogFragment.show(fragment, time, requestCode);
}
});
}
public void init(Fragment fragment, Date defaultTime) {
init(fragment, defaultTime, 1);
}
public void setTime(Date time) {
this.time = time;
setText(AndroidDateUtils.formatTime(time));
}
public Date getTime() {
return time;
}
@Override
public Parcelable onSaveInstanceState() {
Parcelable superState = super.onSaveInstanceState();
return new SavedState(superState, time);
}
@Override
public void onRestoreInstanceState(Parcelable state) {
SavedState ss = (SavedState)state;
super.onRestoreInstanceState(ss.getSuperState());
setTime(ss.time);
}
/**
* Class for managing state storing/restoring.
*/
private static class SavedState extends BaseSavedState {
private Date time;
/**
* Constructor called from {@link DatePicker#onSaveInstanceState()}
*/
private SavedState(Parcelable superState, Date time) {
super(superState);
this.time = time;
}
/**
* Constructor called from {@link #CREATOR}
*/
private SavedState(Parcel in) {
super(in);
time = DateUtils.getTime(in.readInt(), in.readInt());
}
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeInt(DateUtils.getHour(time, true));
dest.writeInt(DateUtils.getMinute(time));
}
@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];
}
};
}
}