/**
* 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 java.util.HashMap;
import java.util.Map;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.DatePicker;
import android.widget.ImageButton;
import android.widget.TextView;
import com.flurry.android.FlurryAgent;
import com.vinsol.expensetracker.R;
public class DateHandler implements OnClickListener {
private ImageButton previousArrow;
private ImageButton nextArrow;
private TextView dateview;
private DisplayDate mDisplayDate;
private Calendar mCalendar;
private CustomDatePickerDialog dialog;
public Calendar tempCalenderOnCancel;
private Activity activity;
public DateHandler(Activity activity) {
mCalendar = Calendar.getInstance();
doCommonTaskAfter(activity);
}
public DateHandler(Activity activity, long long1) {
mCalendar = Calendar.getInstance();
mCalendar.setTimeInMillis(long1);
doCommonTaskAfter(activity);
}
private void doCommonTaskAfter(Activity activity) {
this.activity = activity;
mCalendar.setFirstDayOfWeek(Calendar.MONDAY);
mDisplayDate = new DisplayDate(mCalendar);
dateview = (TextView) activity.findViewById(R.id.edit_date_bar_dateview);
previousArrow = (ImageButton) activity.findViewById(R.id.edit_date_bar_previous_arrow);
nextArrow = (ImageButton) activity.findViewById(R.id.edit_date_bar_next_arrow);
if (!beforeCurrentDate(mCalendar)) {nextArrow.setVisibility(View.INVISIBLE);}
dateview.setText(mDisplayDate.getDisplayDate());
dialog = new CustomDatePickerDialog(activity, dateSetListener , dateview);
previousArrow.setOnClickListener(this);
nextArrow.setOnClickListener(this);
dateview.setOnClickListener(this);
}
private CustomDatePickerDialog.OnDateSetListener dateSetListener = new CustomDatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) {
Calendar mCalendar = Calendar.getInstance();
mCalendar.set(year, monthOfYear, dayOfMonth, 0, 0, 0);
mCalendar.setFirstDayOfWeek(Calendar.MONDAY);
dateview.setText(new DisplayDate(mCalendar).getDisplayDate());
tempCalenderOnCancel = Calendar.getInstance();
tempCalenderOnCancel.setFirstDayOfWeek(Calendar.MONDAY);
tempCalenderOnCancel.setTime(mCalendar.getTime());
}
};
@Override
public void onClick(View v) {
Map<String, String> map = new HashMap<String, String>();
switch (v.getId()) {
case R.id.edit_date_bar_next_arrow:
map.put("Using", "Next Arrow");
FlurryAgent.onEvent(activity.getString(R.string.date_changed),map);
mCalendar.add(Calendar.DATE, 1);
mDisplayDate = new DisplayDate(mCalendar);
dateview.setText(mDisplayDate.getDisplayDate());
if (isCurrentDate(mCalendar)) {
nextArrow.setVisibility(View.INVISIBLE);
}
break;
case R.id.edit_date_bar_previous_arrow:
map.put("Using", "Previous Arrow");
FlurryAgent.onEvent(activity.getString(R.string.date_changed),map);
mCalendar.add(Calendar.DATE, -1);
mDisplayDate = new DisplayDate(mCalendar);
if (!nextArrow.isShown()) {
nextArrow.setVisibility(View.VISIBLE);
}
dateview.setText(mDisplayDate.getDisplayDate());
break;
case R.id.edit_date_bar_dateview:
map.put("Using", "Date Picker Dialog");
FlurryAgent.onEvent(activity.getString(R.string.date_changed),map);
dialog.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
if (tempCalenderOnCancel != null) {
if (beforeCurrentDate(tempCalenderOnCancel)) {
nextArrow.setVisibility(View.VISIBLE);
} else {
nextArrow.setVisibility(View.INVISIBLE);
}
mCalendar.setTime(tempCalenderOnCancel.getTime());
mCalendar.setFirstDayOfWeek(Calendar.MONDAY);
tempCalenderOnCancel = null;
}
}
});
dialog.show();
break;
default:
break;
}
}
private boolean beforeCurrentDate(Calendar pCalendar) {
Calendar mCalendar = Calendar.getInstance();
mCalendar.setFirstDayOfWeek(Calendar.MONDAY);
if (mCalendar.get(Calendar.YEAR) > pCalendar.get(Calendar.YEAR)) {
return true;
} else if ((mCalendar.get(Calendar.MONTH) > pCalendar.get(Calendar.MONTH))) {
return true;
} else if ((mCalendar.get(Calendar.DAY_OF_MONTH) > pCalendar.get(Calendar.DAY_OF_MONTH))) {
return true;
} else {
return false;
}
}
private boolean isCurrentDate(Calendar pCalendar) {
Calendar mCalendar = Calendar.getInstance();
mCalendar.setFirstDayOfWeek(Calendar.MONDAY);
if ((mCalendar.get(Calendar.MONTH) == pCalendar.get(Calendar.MONTH))&& (mCalendar.get(Calendar.YEAR) == pCalendar.get(Calendar.YEAR))&& (mCalendar.get(Calendar.DAY_OF_MONTH) == pCalendar.get(Calendar.DAY_OF_MONTH))) {
return true;
}
return false;
}
}