package com.evancharlton.mileage;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ListActivity;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.AdapterView.AdapterContextMenuInfo;
public class VehiclesView extends ListActivity implements View.OnCreateContextMenuListener {
public static final String TAG = "VehiclesList";
public static final int MENU_ADD = Menu.FIRST;
public static final int MENU_DEFAULT = Menu.FIRST;
public static final int MENU_EDIT = Menu.FIRST + 1;
public static final int MENU_DELETE = Menu.FIRST + 2;
public static final int DELETE_DIALOG_ID = 1;
private long m_deleteId;
private AlertDialog m_deleteDialog;
private static final String[] PROJECTIONS = new String[] {
Vehicles._ID,
Vehicles.TITLE
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
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);
setDefaultKeyMode(DEFAULT_KEYS_SHORTCUT);
Intent intent = getIntent();
if (intent.getData() == null) {
intent.setData(Vehicles.CONTENT_URI);
}
getListView().setOnCreateContextMenuListener(this);
Cursor c = managedQuery(intent.getData(), PROJECTIONS, null, null, Vehicles.DEFAULT_SORT_ORDER);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.vehicles, c, new String[] {
Vehicles.TITLE
}, new int[] {
android.R.id.text1
});
setListAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(Menu.NONE, MENU_ADD, 0, R.string.vehicle_add).setShortcut('1', 'v').setIcon(R.drawable.ic_menu_add);
HelpDialog.injectHelp(menu, 'h');
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_ADD:
Intent i = new Intent();
i.setClass(VehiclesView.this, AddVehicleView.class);
startActivity(i);
break;
case HelpDialog.MENU_HELP:
HelpDialog.create(this, R.string.help_title_vehicles, R.string.help_vehicles);
break;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onListItemClick(ListView lv, View v, int position, long id) {
Uri uri = ContentUris.withAppendedId(getIntent().getData(), id);
Intent intent = new Intent();
intent.setData(uri);
intent.setClass(VehiclesView.this, EditVehicleView.class);
startActivity(intent);
}
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo info) {
menu.setHeaderTitle(R.string.operations);
int count = getListView().getCount();
menu.add(Menu.NONE, MENU_EDIT, Menu.NONE, R.string.edit);
if (count >= 2) {
menu.add(Menu.NONE, MENU_DEFAULT, Menu.NONE, R.string.make_default_short);
menu.add(Menu.NONE, MENU_DELETE, Menu.NONE, R.string.delete);
}
}
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = null;
try {
info = (AdapterContextMenuInfo) item.getMenuInfo();
long id = getListAdapter().getItemId(info.position);
switch (item.getItemId()) {
case MENU_DELETE:
m_deleteId = id;
showDialog(DELETE_DIALOG_ID);
return true;
case MENU_EDIT:
onListItemClick(getListView(), info.targetView, info.position, id);
return true;
case MENU_DEFAULT:
Uri data = ContentUris.withAppendedId(Vehicles.CONTENT_URI, id);
ContentValues values = new ContentValues();
values.put(Vehicles.DEFAULT, System.currentTimeMillis());
getContentResolver().update(data, values, null, null);
return true;
}
} catch (ClassCastException e) {
// fail gracefully?
}
return super.onContextItemSelected(item);
}
public Dialog onCreateDialog(int id) {
switch (id) {
case DELETE_DIALOG_ID:
return m_deleteDialog;
}
return super.onCreateDialog(id);
}
private void delete() {
Uri uri = ContentUris.withAppendedId(Vehicles.CONTENT_URI, m_deleteId);
getContentResolver().delete(uri, null, null);
}
private DialogInterface.OnClickListener m_deleteListener = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
if (which == Dialog.BUTTON1) {
delete();
}
}
};
}