package mil.nga.giat.asam;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import mil.nga.giat.asam.db.AsamDbHelper;
import mil.nga.giat.asam.model.SubregionTextParser;
import mil.nga.giat.asam.model.TextQueryParametersBean;
import mil.nga.giat.asam.util.AsamUtils;
import mil.nga.giat.asam.util.CurrentSubregionHelper;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager.LayoutParams;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
public class TextQueryDialogFragment extends DialogFragment {
public interface OnTextQueryListener {
public void onTextQuery(TextQueryParametersBean textQueryParameters);
}
public static TextQueryDialogFragment newInstance() {
TextQueryDialogFragment dialogFragment = new TextQueryDialogFragment();
return dialogFragment;
}
private static final int SUBREGION_SPINNER_EMPTY_POSITION = 0;
private static final int SUBREGION_SPINNER_CURRENT_LOCATION_POSITION = 1;
private Spinner mSubregionSpinnerUI;
private EditText mReferenceNumberYearEditTextUI;
private EditText mReferenceNumberIdEditTextUI;
private EditText mDateFromEditTextUI;
private EditText mDateToEditTextUI;
private EditText mVictimEditTextUI;
private EditText mAggressorEditTextUI;
private Button mCancelButtonUI;
private Button mQueryButtonUI;
private Button mClearButtonUI;
private OnTextQueryListener mOnTextQueryListener;
private CurrentSubregionHelper mCurrentSubregionHelper;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NORMAL, 0);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
View view = getActivity().getLayoutInflater().inflate(R.layout.text_query_dialog_fragment, null);
mReferenceNumberYearEditTextUI = (EditText)view.findViewById(R.id.text_query_dialog_fragment_reference_number_year_edit_text_ui);
mReferenceNumberIdEditTextUI = (EditText)view.findViewById(R.id.text_query_dialog_fragment_reference_number_id_edit_text_ui);
mDateFromEditTextUI = (EditText)view.findViewById(R.id.text_query_dialog_fragment_date_from_edit_text_ui);
mDateToEditTextUI = (EditText)view.findViewById(R.id.text_query_dialog_fragment_date_to_edit_text_ui);
mVictimEditTextUI = (EditText)view.findViewById(R.id.text_query_dialog_fragment_victim_edit_text_ui);
mAggressorEditTextUI = (EditText)view.findViewById(R.id.text_query_dialog_fragment_aggressor_edit_text_ui);
mCancelButtonUI = (Button)view.findViewById(R.id.text_query_dialog_fragment_cancel_button_ui);
mQueryButtonUI = (Button)view.findViewById(R.id.text_query_dialog_fragment_query_button_ui);
mClearButtonUI = (Button)view.findViewById(R.id.text_query_dialog_fragment_clear_button_ui);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), R.array.subregions, R.layout.subregion_spinner_item);
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
mSubregionSpinnerUI = (Spinner)view.findViewById(R.id.text_query_dialog_fragment_subregion_spinner_ui);
mSubregionSpinnerUI.setAdapter(adapter);
mDateFromEditTextUI.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
DatePickerDialog.OnDateSetListener listener;
listener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
GregorianCalendar calendar = new GregorianCalendar(year, monthOfYear, dayOfMonth);
mDateFromEditTextUI.setText(AsamDbHelper.TEXT_QUERY_DATE_FORMAT.format(calendar.getTime()));
}
};
Calendar calendar = Calendar.getInstance();
if (mDateFromEditTextUI != null && !AsamUtils.isEmpty(mDateFromEditTextUI.getText().toString())) {
try {
Date date = AsamDbHelper.TEXT_QUERY_DATE_FORMAT.parse(mDateFromEditTextUI.getText().toString());
calendar.setTime(date);
}
catch (ParseException caught) {} // ignore.
}
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog mDateFromDialogUI = new DatePickerDialog(getActivity(), listener, year, month, day);
mDateFromDialogUI.show();
}
});
mDateToEditTextUI.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
DatePickerDialog.OnDateSetListener listener;
listener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
GregorianCalendar calendar = new GregorianCalendar(year, monthOfYear, dayOfMonth);
mDateToEditTextUI.setText(AsamDbHelper.TEXT_QUERY_DATE_FORMAT.format(calendar.getTime()));
}
};
Calendar calendar = Calendar.getInstance();
if (mDateToEditTextUI != null && !AsamUtils.isEmpty(mDateToEditTextUI.getText().toString())) {
try {
Date date = AsamDbHelper.TEXT_QUERY_DATE_FORMAT.parse(mDateToEditTextUI.getText().toString());
calendar.setTime(date);
}
catch (ParseException caught) {} // ignore.
}
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog mDateToDialogUI = new DatePickerDialog(getActivity(), listener, year, month, day);
mDateToDialogUI.show();
}
});
mCancelButtonUI.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
getDialog().dismiss();
}
});
mQueryButtonUI.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
TextQueryParametersBean parameters = new TextQueryParametersBean();
parameters.mDateFrom = mDateFromEditTextUI.getText().toString();
parameters.mDateTo = mDateToEditTextUI.getText().toString();
if (mSubregionSpinnerUI.getSelectedItemPosition() == SUBREGION_SPINNER_CURRENT_LOCATION_POSITION) {
parameters.mSubregion = mCurrentSubregionHelper.getCurrentSubregion() + "";
}
else if (mSubregionSpinnerUI.getSelectedItemPosition() != SUBREGION_SPINNER_EMPTY_POSITION) {
parameters.mSubregion = ((String)mSubregionSpinnerUI.getSelectedItem()).split(" ")[1]; // Looks like "Subregion 32".
}
parameters.mAggressor = mAggressorEditTextUI.getText().toString().trim();
parameters.mVictim = mVictimEditTextUI.getText().toString().trim();
String referenceNumberYear = mReferenceNumberYearEditTextUI.getText().toString();
String referenceNumberId = mReferenceNumberIdEditTextUI.getText().toString();
if (!AsamUtils.isEmpty(referenceNumberYear) && !AsamUtils.isEmpty(referenceNumberId)) {
parameters.mReferenceNumber = referenceNumberYear.trim() + "-" + referenceNumberId.trim();
}
if (!AsamUtils.isEmpty(referenceNumberYear) && AsamUtils.isEmpty(referenceNumberId) || AsamUtils.isEmpty(referenceNumberYear) && !AsamUtils.isEmpty(referenceNumberId)) {
Toast.makeText(getActivity(), String.format(getActivity().getString(R.string.text_query_dialog_fragment_malformed_reference_number_warning_text), referenceNumberYear, referenceNumberId), Toast.LENGTH_LONG).show();
getDialog().dismiss();
}
else if (parameters.isEmpty()) {
Toast.makeText(getActivity(), getActivity().getString(R.string.text_query_dialog_fragment_empty_query_warning_text), Toast.LENGTH_LONG).show();
getDialog().dismiss();
}
else {
getDialog().dismiss();
mOnTextQueryListener.onTextQuery(parameters);
}
}
});
mClearButtonUI.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
mSubregionSpinnerUI.setSelection(SUBREGION_SPINNER_EMPTY_POSITION);
mReferenceNumberYearEditTextUI.setText("");
mReferenceNumberIdEditTextUI.setText("");
mDateFromEditTextUI.setText("");
mDateToEditTextUI.setText("");
mVictimEditTextUI.setText("");
mAggressorEditTextUI.setText("");
}
});
mCurrentSubregionHelper = new CurrentSubregionHelper(getActivity(), new SubregionTextParser().parseSubregions(getActivity()));
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setView(view);
builder.setIcon(R.drawable.ic_launcher_pirate);
builder.setTitle(getString(R.string.text_query_dialog_fragment_title_text));
builder.setView(view);
Dialog dialog = builder.create();
dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
dialog.setCanceledOnTouchOutside(true);
return dialog;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mOnTextQueryListener = (OnTextQueryListener)activity;
}
catch (ClassCastException caught) {
throw new ClassCastException(activity.toString() + " must implement OnTextQueryListener");
}
}
}