package com.evancharlton.mileage; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import android.app.Activity; import android.app.AlertDialog; import android.app.DatePickerDialog; import android.app.Dialog; import android.content.ContentValues; import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.DatePicker; import android.widget.EditText; import android.widget.SimpleCursorAdapter; import android.widget.Spinner; public class FillUpView extends Activity { private static final int DATE_DIALOG_ID = 0; private static final int DELETE_DIALOG_ID = 1; public static final int MENU_DELETE = Menu.FIRST; private EditText m_priceEdit; private EditText m_amountEdit; private EditText m_mileageEdit; private EditText m_commentEdit; private Button m_dateButton; private Button m_saveButton; private AlertDialog m_deleteDialog; private Spinner m_vehicleSpinner; private DatePickerDialog m_dateDlg = null; private int m_day; private int m_year; private int m_month; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fillup); initMembers(); loadData(); } private void initMembers() { m_priceEdit = (EditText) findViewById(R.id.price_edit); m_amountEdit = (EditText) findViewById(R.id.amount_edit); m_mileageEdit = (EditText) findViewById(R.id.odometer_edit); m_commentEdit = (EditText) findViewById(R.id.comment_edit); m_dateButton = (Button) findViewById(R.id.change_date_btn); m_saveButton = (Button) findViewById(R.id.save_btn); m_vehicleSpinner = (Spinner) findViewById(R.id.vehicle_spinner); m_deleteDialog = new AlertDialog.Builder(this).create(); m_deleteDialog.setMessage(getString(R.string.confirm_delete)); m_deleteDialog.setCancelable(false); m_deleteDialog.setButton(getString(R.string.yes), m_deleteListener); m_deleteDialog.setButton2(getString(R.string.no), m_deleteListener); Calendar cal = Calendar.getInstance(); m_day = cal.get(Calendar.DAY_OF_MONTH); m_year = cal.get(Calendar.YEAR); m_month = cal.get(Calendar.MONTH); // handlers m_dateButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { showDialog(DATE_DIALOG_ID); } }); m_saveButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // save the changes ContentValues values = new ContentValues(); boolean error = false; int errorMsg = 0; try { double cost = Double.parseDouble(m_priceEdit.getText().toString()); values.put(FillUps.COST, cost); } catch (NumberFormatException nfe) { error = true; errorMsg = R.string.error_cost; } try { double amount = Double.parseDouble(m_amountEdit.getText().toString()); values.put(FillUps.AMOUNT, amount); } catch (NumberFormatException nfe) { error = true; errorMsg = R.string.error_amount; } try { double mileage = Double.parseDouble(m_mileageEdit.getText().toString()); values.put(FillUps.MILEAGE, mileage); } catch (NumberFormatException nfe) { error = true; errorMsg = R.string.error_mileage; } if (error) { AlertDialog dlg = new AlertDialog.Builder(FillUpView.this).create(); dlg.setTitle(R.string.error); dlg.setMessage(getString(errorMsg)); dlg.show(); return; } values.put(FillUps.COMMENT, m_commentEdit.getText().toString().trim()); values.put(FillUps.VEHICLE_ID, m_vehicleSpinner.getSelectedItemId()); Calendar c = new GregorianCalendar(m_year, m_month, m_day); values.put(FillUps.DATE, c.getTimeInMillis()); getContentResolver().update(getIntent().getData(), values, null, null); finish(); } }); PreferencesProvider prefs = PreferencesProvider.getInstance(FillUpView.this); m_priceEdit.setHint(prefs.getString(R.array.unit_price_hints, SettingsView.CALCULATIONS)); m_amountEdit.setHint(prefs.getString(R.array.unit_amount_hints, SettingsView.CALCULATIONS)); // m_priceEdit.setKeyListener(new KeyFocuser(m_amountEdit)); // m_amountEdit.setKeyListener(new KeyFocuser(m_mileageEdit)); // m_mileageEdit.setKeyListener(new KeyFocuser(m_commentEdit)); // m_commentEdit.setKeyListener(new KeyFocuser(m_saveButton)); } private void delete() { getContentResolver().delete(getIntent().getData(), null, null); } private void updateDate() { GregorianCalendar gc = new GregorianCalendar(m_year, m_month, m_day); Date d = new Date(gc.getTimeInMillis()); m_dateButton.setText(PreferencesProvider.getInstance(FillUpView.this).format(d)); if (m_dateDlg != null) { m_dateDlg.updateDate(m_year, m_month, m_day); } } private void loadData() { Intent data = getIntent(); // load the data String[] projections = new String[] { FillUps._ID, FillUps.COST, FillUps.AMOUNT, FillUps.MILEAGE, FillUps.DATE, FillUps.VEHICLE_ID, FillUps.COMMENT }; Cursor c = managedQuery(data.getData(), projections, null, null, null); c.moveToFirst(); m_priceEdit.setText(c.getString(1)); m_amountEdit.setText(c.getString(2)); m_mileageEdit.setText(c.getString(3)); m_commentEdit.setText(c.getString(6)); int vehicleId = c.getInt(5); Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(c.getLong(4)); m_year = cal.get(Calendar.YEAR); m_month = cal.get(Calendar.MONTH); m_day = cal.get(Calendar.DAY_OF_MONTH); updateDate(); c = managedQuery(Vehicles.CONTENT_URI, new String[] { Vehicles._ID, Vehicles.TITLE }, null, null, Vehicles.DEFAULT_SORT_ORDER); SimpleCursorAdapter vehicleAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, c, new String[] { Vehicles.TITLE }, new int[] { android.R.id.text1 }); vehicleAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); m_vehicleSpinner.setAdapter(vehicleAdapter); int position = 0; for (int i = 0; i < vehicleAdapter.getCount(); i++) { if (vehicleId == vehicleAdapter.getItemId(i)) { position = i; break; } } m_vehicleSpinner.setSelection(position); } public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(Menu.NONE, MENU_DELETE, Menu.NONE, R.string.delete).setShortcut('1', 'd'); HelpDialog.injectHelp(menu, 'h'); return true; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case MENU_DELETE: showDialog(DELETE_DIALOG_ID); break; case HelpDialog.MENU_HELP: HelpDialog.create(this, R.string.help_title_fillup_edit, R.string.help_fillup_edit); break; } return super.onOptionsItemSelected(item); } @Override protected Dialog onCreateDialog(int id) { switch (id) { case DATE_DIALOG_ID: if (m_dateDlg == null) { m_dateDlg = new DatePickerDialog(this, m_dateSetListener, m_year, m_month, m_day); m_dateDlg.updateDate(m_year, m_month, m_day); m_dateDlg.setButton3(getString(R.string.today), m_todayListener); } return m_dateDlg; case DELETE_DIALOG_ID: return m_deleteDialog; } return null; } private DialogInterface.OnClickListener m_todayListener = new DialogInterface.OnClickListener() { public void onClick(DialogInterface intf, int which) { Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(System.currentTimeMillis()); m_year = cal.get(Calendar.YEAR); m_month = cal.get(Calendar.MONTH); m_day = cal.get(Calendar.DAY_OF_MONTH); updateDate(); } }; private DatePickerDialog.OnDateSetListener m_dateSetListener = new DatePickerDialog.OnDateSetListener() { public void onDateSet(DatePicker view, int year, int month, int day) { m_year = year; m_month = month; m_day = day; updateDate(); } }; private DialogInterface.OnClickListener m_deleteListener = new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); if (which == Dialog.BUTTON1) { delete(); finish(); } } }; }