package com.legind.swinedroid;
import java.util.Calendar;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.LinearLayout.LayoutParams;
import com.legind.sqlite.ServerDbAdapter;
public class AlertSearch extends Activity{
private Spinner mSpinner;
private EditText mSearchTerm;
private TextView mStartDateText;
private TextView mEndDateText;
private TextView mStartTimeText;
private TextView mEndTimeText;
private Button mSearchButton;
private Button mCancelButton;
private Long mRowId;
private int mCurrentYear;
private int mCurrentMonth;
private int mCurrentDay;
private int mCurrentHour;
private int mCurrentMinute;
private int mStartYear;
private int mStartMonth;
private int mStartDay;
private int mStartHour;
private int mStartMinute;
private int mEndYear;
private int mEndMonth;
private int mEndDay;
private int mEndHour;
private int mEndMinute;
static final int START_DATE_DIALOG_ID = 0;
static final int END_DATE_DIALOG_ID = 1;
static final int START_TIME_DIALOG_ID = 3;
static final int END_TIME_DIALOG_ID = 4;
private final int ACTIVITY_ALERT_LIST = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// get rid of title, also set the layout to fill parent. this doesn't function properly in the layout XML
getWindow().requestFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.alert_search);
getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
// get the current date
final Calendar c = Calendar.getInstance();
mCurrentYear = c.get(Calendar.YEAR);
mCurrentMonth = c.get(Calendar.MONTH);
mCurrentDay = c.get(Calendar.DAY_OF_MONTH);
mCurrentHour = c.get(Calendar.HOUR_OF_DAY);
mCurrentMinute = c.get(Calendar.MINUTE);
mSpinner = (Spinner) findViewById(R.id.alert_level_spinner);
mSearchTerm = (EditText) findViewById(R.id.search_term_edit_text);
mStartDateText = (TextView) findViewById(R.id.startDateText);
mEndDateText = (TextView) findViewById(R.id.endDateText);
mStartTimeText = (TextView) findViewById(R.id.startTimeText);
mEndTimeText = (TextView) findViewById(R.id.endTimeText);
mSearchButton = (Button) findViewById(R.id.search_button);
mCancelButton = (Button) findViewById(R.id.cancel_button);
// connect the spinner to the appropriate dropdown xml
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.alert_levels, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mSpinner.setAdapter(adapter);
if(savedInstanceState != null){
if(!savedInstanceState.getBoolean(ServerDbAdapter.KEY_ROWID + "_null")){
mRowId = savedInstanceState.getLong(ServerDbAdapter.KEY_ROWID);
} else {
mRowId = null;
}
// get some variables from the saved instance state. make sure to update time *first*
mStartYear = savedInstanceState.getInt("mStartYear");
mStartMonth = savedInstanceState.getInt("mStartMonth");
mStartDay = savedInstanceState.getInt("mStartDay");
mStartHour = savedInstanceState.getInt("mStartHour");
mStartMinute = savedInstanceState.getInt("mStartMinute");
if(mStartYear > 0){
updateStartTimeText();
updateStartDateText();
}
mEndYear = savedInstanceState.getInt("mEndYear");
mEndMonth = savedInstanceState.getInt("mEndMonth");
mEndDay = savedInstanceState.getInt("mEndDay");
mEndHour = savedInstanceState.getInt("mEndHour");
mEndMinute = savedInstanceState.getInt("mEndMinute");
if(mEndYear > 0){
updateEndTimeText();
updateEndDateText();
}
} else {
mRowId = null;
}
if (mRowId == null) {
Bundle extras = getIntent().getExtras();
mRowId = extras != null ? extras.getLong(ServerDbAdapter.KEY_ROWID)
: null;
}
// set up the click listeners...
mStartDateText.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showDialog(START_DATE_DIALOG_ID);
}
});
mEndDateText.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showDialog(END_DATE_DIALOG_ID);
}
});
// don't open a TimePicker if the date hasn't been picked yet
mStartTimeText.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(mStartYear > 0)
showDialog(START_TIME_DIALOG_ID);
}
});
mEndTimeText.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(mEndYear > 0)
showDialog(END_TIME_DIALOG_ID);
}
});
mSearchButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// send the current state of all search elements
Intent i = new Intent(AlertSearch.this, AlertList.class);
i.putExtra(ServerDbAdapter.KEY_ROWID, mRowId);
i.putExtra("mSpinnerText", mSpinner.getSelectedItem().toString());
i.putExtra("mSearchTermText", mSearchTerm.getText().toString());
i.putExtra("mStartYear", mStartYear);
i.putExtra("mStartMonth", mStartMonth);
i.putExtra("mStartDay", mStartDay);
i.putExtra("mStartHour", mStartHour);
i.putExtra("mStartMinute", mStartMinute);
i.putExtra("mEndYear", mEndYear);
i.putExtra("mEndMonth", mEndMonth);
i.putExtra("mEndDay", mEndDay);
i.putExtra("mEndHour", mEndHour);
i.putExtra("mEndMinute", mEndMinute);
startActivityForResult(i, ACTIVITY_ALERT_LIST);
finish();
}
});
mCancelButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
finish();
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if(mRowId != null){
outState.putBoolean(ServerDbAdapter.KEY_ROWID + "_null", false);
outState.putLong(ServerDbAdapter.KEY_ROWID, mRowId);
} else {
outState.putBoolean(ServerDbAdapter.KEY_ROWID + "_null", true);
}
outState.putInt("mStartYear", mStartYear);
outState.putInt("mStartMonth", mStartMonth);
outState.putInt("mStartDay", mStartDay);
outState.putInt("mStartHour", mStartHour);
outState.putInt("mStartMinute", mStartMinute);
outState.putInt("mEndYear", mEndYear);
outState.putInt("mEndMonth", mEndMonth);
outState.putInt("mEndDay", mEndDay);
outState.putInt("mEndHour", mEndHour);
outState.putInt("mEndMinute", mEndMinute);
}
@Override
protected Dialog onCreateDialog(int id) {
switch(id){
case START_DATE_DIALOG_ID:
return new DatePickerDialog(this,
mStartDateSetListener,
mCurrentYear, mCurrentMonth, mCurrentDay);
case END_DATE_DIALOG_ID:
return new DatePickerDialog(this,
mEndDateSetListener,
mCurrentYear, mCurrentMonth, mCurrentDay);
case START_TIME_DIALOG_ID:
return new TimePickerDialog(this,
mStartTimeSetListener, mCurrentHour, mCurrentMinute, false);
case END_TIME_DIALOG_ID:
return new TimePickerDialog(this,
mEndTimeSetListener, mCurrentHour, mCurrentMinute, false);
}
return null;
}
private void updateStartDateText() {
mStartDateText.setText(
new StringBuilder()
// Month is 0 based so add 1
.append(mStartMonth + 1).append("-")
.append(mStartDay).append("-")
.append(mStartYear).append(" "));
if(mStartTimeText.length() == 0){
mStartTimeText.setText("00:00");
mStartHour = 0;
mStartMinute = 0;
}
}
private void updateEndDateText() {
mEndDateText.setText(
new StringBuilder()
// Month is 0 based so add 1
.append(mEndMonth + 1).append("-")
.append(mEndDay).append("-")
.append(mEndYear).append(" "));
if(mEndTimeText.length() == 0){
mEndTimeText.setText("00:00");
mEndHour = 0;
mEndMinute = 0;
}
}
private void updateStartTimeText() {
mStartTimeText.setText(
new StringBuilder()
.append(pad(mStartHour)).append(":")
.append(pad(mStartMinute)));
}
private void updateEndTimeText() {
mEndTimeText.setText(
new StringBuilder()
.append(pad(mEndHour)).append(":")
.append(pad(mEndMinute)));
}
private DatePickerDialog.OnDateSetListener mStartDateSetListener =
new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
mStartYear = year;
mStartMonth = monthOfYear;
mStartDay = dayOfMonth;
updateStartDateText();
}
};
private DatePickerDialog.OnDateSetListener mEndDateSetListener =
new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
mEndYear = year;
mEndMonth = monthOfYear;
mEndDay = dayOfMonth;
updateEndDateText();
}
};
private TimePickerDialog.OnTimeSetListener mStartTimeSetListener =
new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
mStartHour = hourOfDay;
mStartMinute = minute;
updateStartTimeText();
}
};
private TimePickerDialog.OnTimeSetListener mEndTimeSetListener =
new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
mEndHour = hourOfDay;
mEndMinute = minute;
updateEndTimeText();
}
};
private static String pad(int c) {
if (c >= 10)
return String.valueOf(c);
else
return "0" + String.valueOf(c);
}
}