/**
* Copyright (c) 2012 Vinayak Solutions Private Limited
* See the file license.txt for copying permission.
*/
package com.vinsol.expensetracker.helpers;
import java.util.Calendar;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.DatePicker.OnDateChangedListener;
import com.vinsol.expensetracker.R;
import com.vinsol.expensetracker.utils.GetMonth;
public class CustomDatePickerDialog extends AlertDialog implements OnClickListener, OnDateChangedListener {
private final String YEAR = "year";
private final String MONTH = "month";
private final String DAY = "day";
private final DatePicker mDatePicker;
private final OnDateSetListener mCallBack;
private final Calendar mCalendar;
private int mInitialYear;
private int mInitialMonth;
private int mInitialDay;
public interface OnDateSetListener {
void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth);
}
public CustomDatePickerDialog(Context context,OnDateSetListener callBack,TextView textView) {
super(context);
mCallBack = callBack;
String dateViewString = textView.getText().toString();
int year, month, day;
if(dateViewString != null && !dateViewString.equals("")) {
if (dateViewString.contains("Today")) {
Calendar mCalendar = Calendar.getInstance();
mCalendar.setFirstDayOfWeek(Calendar.MONDAY);
year = mCalendar.get(Calendar.YEAR);
dateViewString = (String) dateViewString.subSequence(7,dateViewString.length());
} else {
year = Integer.parseInt((String) dateViewString.subSequence(dateViewString.length() - 4, dateViewString.length()));
dateViewString = (String) dateViewString.subSequence(0,dateViewString.length() - 6);
}
month = new GetMonth().getMonth((String) dateViewString.subSequence(0, 3));
dateViewString = (String) dateViewString.subSequence(4,dateViewString.length());
day = Integer.parseInt(dateViewString);
} else {
Calendar tempCalendar = Calendar.getInstance();
tempCalendar.set(tempCalendar.get(Calendar.YEAR), tempCalendar.get(Calendar.MONTH), tempCalendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
tempCalendar.setFirstDayOfWeek(Calendar.MONDAY);
year = tempCalendar.get(Calendar.YEAR);
month = tempCalendar.get(Calendar.MONTH);
day = tempCalendar.get(Calendar.DAY_OF_MONTH);
}
mInitialYear = year;
mInitialMonth = month;
mInitialDay = day;
mCalendar = Calendar.getInstance();
updateTitle(mInitialYear, mInitialMonth, mInitialDay);
setButton(context.getText(R.string.date_time_set), this);
setButton2(context.getText(R.string.cancel), (OnClickListener) null);
setIcon(R.drawable.ic_dialog_time);
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.date_picker_dialog, null);
setView(view);
mDatePicker = (DatePicker) view.findViewById(R.id.datePicker);
mDatePicker.init(mInitialYear, mInitialMonth, mInitialDay, this);
}
@Override
public void onClick(DialogInterface dialog, int which) {
if (mCallBack != null) {
mDatePicker.clearFocus();
mCallBack.onDateSet(mDatePicker, mDatePicker.getYear(), mDatePicker.getMonth(), mDatePicker.getDayOfMonth());
}
}
@Override
public void onDateChanged(DatePicker view, int year,int month, int day) {
boolean color = true;
if (isDateAfter(view)) {
textViewVisible();
Calendar mCalendar = Calendar.getInstance();
mCalendar.setFirstDayOfWeek(Calendar.MONDAY);
if (color) {
view.init(mCalendar.get(Calendar.YEAR),mCalendar.get(Calendar.MONTH),mCalendar.get(Calendar.DAY_OF_MONTH), this);
color = false;
} else {
view.init(year, month, day, null);
}
} else {
textViewInvisible();
updateTitle(year, month, day);
}
}
private void updateTitle(int year, int month, int day) {
mCalendar.set(Calendar.YEAR, year);
mCalendar.set(Calendar.MONTH, month);
mCalendar.set(Calendar.DAY_OF_MONTH, day);
setTitle(new DisplayDate(mCalendar).getDisplayDate());
}
@Override
public Bundle onSaveInstanceState() {
Bundle state = super.onSaveInstanceState();
state.putInt(YEAR, mDatePicker.getYear());
state.putInt(MONTH, mDatePicker.getMonth());
state.putInt(DAY, mDatePicker.getDayOfMonth());
return state;
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
int year = savedInstanceState.getInt(YEAR);
int month = savedInstanceState.getInt(MONTH);
int day = savedInstanceState.getInt(DAY);
mDatePicker.init(year, month, day, this);
updateTitle(year, month, day);
}
private void textViewInvisible() {
((TextView) findViewById(R.id.new_date_label)).setVisibility(View.INVISIBLE);
}
private void textViewVisible() {
((TextView) findViewById(R.id.new_date_label)).setVisibility(View.VISIBLE);
}
private boolean isDateAfter(DatePicker tempView) {
Calendar mCalendar = Calendar.getInstance();
mCalendar.setFirstDayOfWeek(Calendar.MONDAY);
Calendar tempCalendar = Calendar.getInstance();
tempCalendar.set(tempView.getYear(), tempView.getMonth(),tempView.getDayOfMonth(), 0, 0, 0);
tempCalendar.setFirstDayOfWeek(Calendar.MONDAY);
if (tempCalendar.after(mCalendar))
return true;
else
return false;
}
}