package com.mozu.mozuandroidinstoreassistant.app.order;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import com.mozu.mozuandroidinstoreassistant.app.R;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import butterknife.ButterKnife;
import butterknife.InjectView;
public class OrderFilterDialogFragment extends DialogFragment {
private static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ";
@InjectView(R.id.order_date_range_start)
TextView mStartDate;
@InjectView(R.id.order_date_range_end)
TextView mEndDate;
@InjectView(R.id.order_filter_status_group)
RadioGroup mStatusGroup;
@InjectView(R.id.order_filter_payment_status_group)
RadioGroup mPaymentStatusGroup;
private OrderFilterListener callback;
private String[] mStatus;
private String[] mPaymentStatus;
private String start;
private String end;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
callback = (OrderFilterListener) getTargetFragment();
} catch (ClassCastException e) {
throw new ClassCastException("Calling fragment must implement OrderFilterListener");
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
super.onCreateDialog(savedInstanceState);
AlertDialog.Builder b = new AlertDialog.Builder(getActivity());
View view = getActivity().getLayoutInflater().inflate(R.layout.order_filter_dialog_fragment, null);
ButterKnife.inject(this, view);
String[] previousFilter = getArguments().getStringArray("options");
mStatus = getActivity().getResources().getStringArray(R.array.order_statuses);
mPaymentStatus = getActivity().getResources().getStringArray(R.array.order_payment_statuses);
mStartDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), R.style.DialogMozu_Alert, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
mStartDate.setText((monthOfYear + 1) + "/" + dayOfMonth + "/" + year);
Calendar calendar = Calendar.getInstance();
calendar.set(year, monthOfYear, dayOfMonth);
start = new SimpleDateFormat(DATE_FORMAT).format(calendar.getTime());
}
}, 0, 0, 0);
datePickerDialog.getDatePicker().setSpinnersShown(false);
datePickerDialog.show();
}
});
mEndDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), R.style.DialogMozu_Alert, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
mEndDate.setText((monthOfYear + 1) + "/" + dayOfMonth + "/" + year);
Calendar calendar = Calendar.getInstance();
calendar.set(year, monthOfYear, dayOfMonth);
end = new SimpleDateFormat(DATE_FORMAT).format(calendar.getTime());
}
}, 0, 0, 0);
datePickerDialog.getDatePicker().setSpinnersShown(false);
datePickerDialog.show();
}
});
populateRadioGroup(mStatusGroup, mStatus);
populateRadioGroup(mPaymentStatusGroup, mPaymentStatus);
b.setView(view);
mStatusGroup.check(0);
mPaymentStatusGroup.check(0);
if (previousFilter != null) {
SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT);
if (previousFilter[0] != null && !previousFilter[0].isEmpty()) {
try {
Date startDate = format.parse(previousFilter[0]);
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
mStartDate.setText((calendar.get(Calendar.MONTH) + 1) + "/" + calendar.get(Calendar.DAY_OF_MONTH) + "/" + calendar.get(Calendar.YEAR));
start = previousFilter[0];
} catch (ParseException e) {
e.printStackTrace();
}
}
if (previousFilter[1] != null && !previousFilter[1].isEmpty()) {
try {
Date startDate = format.parse(previousFilter[1]);
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
mEndDate.setText((calendar.get(Calendar.MONTH) + 1) + "/" + calendar.get(Calendar.DAY_OF_MONTH) + "/" + calendar.get(Calendar.YEAR));
end = previousFilter[1];
} catch (ParseException e) {
e.printStackTrace();
}
}
if (previousFilter[2] == null || previousFilter[2].isEmpty()) {
mStatusGroup.check(0);
}
for (int i = 0; i < mStatus.length; i++) {
if (mStatus[i].equalsIgnoreCase(previousFilter[2])) {
mStatusGroup.check(i);
}
}
if (previousFilter[3] == null || previousFilter[3].isEmpty()) {
mPaymentStatusGroup.check(0);
} else {
for (int i = 0; i < mPaymentStatus.length; i++) {
if (mPaymentStatus[i].equalsIgnoreCase(previousFilter[3])) {
mPaymentStatusGroup.check(i);
}
}
}
}
b.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
});
b.setNeutralButton(R.string.clear, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mStartDate.setText("");
mEndDate.setText("");
mPaymentStatusGroup.clearCheck();
mStatusGroup.clearCheck();
callback.filter(null, null, null, null);
}
});
b.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String status = mStatusGroup.getCheckedRadioButtonId() != 0 ? mStatus[mStatusGroup.getCheckedRadioButtonId()] : null;
String paymentStatus = mPaymentStatusGroup.getCheckedRadioButtonId() != 0 ? mPaymentStatus[mPaymentStatusGroup.getCheckedRadioButtonId()] : null;
callback.filter(start, end, status, paymentStatus);
}
});
return b.create();
}
private void populateRadioGroup(RadioGroup radioGroup, String[] data) {
radioGroup.removeAllViews();
for (int i = 0; i < data.length; i++) {
RadioButton button = new RadioButton(getActivity());
button.setText(data[i]);
button.setId(i);
radioGroup.addView(button);
}
}
}