package com.tomclaw.mandarin.main.views;
import android.app.DatePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.util.AttributeSet;
import android.view.View;
import android.widget.DatePicker;
import com.tomclaw.mandarin.R;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
/**
* Created by Solkin on 04.04.2015.
*/
public class DatePickerView extends PseudoSpinnerView {
/**
* Date format helper
*/
private static final transient DateFormat DATE_FORMAT = SimpleDateFormat.getDateInstance();
private int year, month, day;
public DatePickerView(final Context context, AttributeSet attrs) {
super(context, attrs);
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int initYear, initMonth, initDay;
// Check if date set or not. If not set - start choosing from current date.
if (isDateSet()) {
initYear = year;
initMonth = month;
initDay = day;
} else {
Calendar calendar = Calendar.getInstance();
initYear = calendar.get(Calendar.YEAR);
initMonth = calendar.get(Calendar.MONTH);
initDay = calendar.get(Calendar.DAY_OF_MONTH);
}
DatePickerDialog dialog = new DatePickerDialog(context,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
updateText(year, monthOfYear, dayOfMonth);
}
}, initYear, initMonth, initDay);
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, getResources().getString(R.string.cancel),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
dialog.show();
}
});
updateText(0, 0, 0);
}
private void updateText(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
if (isDateSet()) {
setText(DATE_FORMAT.format(new GregorianCalendar(year, month, day).getTimeInMillis()));
} else {
setText(R.string.date_not_set);
}
}
public void setDate(long milliseconds) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(milliseconds);
updateText(
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH));
}
public boolean isDateSet() {
return day != 0 || month != 0 || year != 0;
}
public long getDate() {
return new GregorianCalendar(year, month, day).getTimeInMillis();
}
public int getYear() {
return year;
}
public int getMonth() {
return month;
}
public int getDay() {
return day;
}
}