From 1f4f5938b51b6b4de21631c67ab4995dcb10f089 Mon Sep 17 00:00:00 2001 From: dkeen Date: Wed, 25 May 2011 08:31:55 -0700 Subject: [PATCH] Added view and delete context menu options --- res/menu/favorite_context_menu.xml | 5 + res/values/strings.xml | 10 +- .../bart/FavoritesDashboardActivity.java | 92 ++++++++++++++++++- .../dougkeen/bart/ViewArrivalsActivity.java | 6 ++ src/com/dougkeen/bart/data/CursorUtils.java | 5 + 5 files changed, 114 insertions(+), 4 deletions(-) create mode 100644 res/menu/favorite_context_menu.xml diff --git a/res/menu/favorite_context_menu.xml b/res/menu/favorite_context_menu.xml new file mode 100644 index 0000000..1bf258c --- /dev/null +++ b/res/menu/favorite_context_menu.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/res/values/strings.xml b/res/values/strings.xml index 4be41e5..608bde4 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1,6 +1,6 @@ - Don\'t Miss The Bart + Bart Catcher Favorite Routes Press the menu button and select "Add favorite" to @@ -10,9 +10,15 @@ Origin Destination Save - Cancel The origin and destination stations must be different You must select a destination station You must select an origin station Please wait while real time arrival data is loaded... + No arrival data is currently available for this route + View + View arrivals + Delete + Yes + Cancel + diff --git a/src/com/dougkeen/bart/FavoritesDashboardActivity.java b/src/com/dougkeen/bart/FavoritesDashboardActivity.java index 535ef97..3a23a02 100644 --- a/src/com/dougkeen/bart/FavoritesDashboardActivity.java +++ b/src/com/dougkeen/bart/FavoritesDashboardActivity.java @@ -1,24 +1,40 @@ package com.dougkeen.bart; -import com.dougkeen.bart.data.FavoritesColumns; - +import android.app.AlertDialog; +import android.app.Dialog; import android.app.ListActivity; +import android.app.AlertDialog.Builder; import android.content.ContentUris; +import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; +import android.database.CursorWrapper; +import android.net.Uri; import android.os.Bundle; +import android.view.ContextMenu; +import android.view.ContextMenu.ContextMenuInfo; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; +import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.ListView; import android.widget.SimpleCursorAdapter; import android.widget.SimpleCursorAdapter.ViewBinder; import android.widget.TextView; +import com.dougkeen.bart.data.CursorUtils; +import com.dougkeen.bart.data.FavoritesColumns; + public class FavoritesDashboardActivity extends ListActivity { + private static final int DIALOG_DELETE_EVENT = 0; + protected Cursor mQuery; + private Uri mCurrentlySelectedUri; + + private String mCurrentlySelectedRouteName; + /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { @@ -54,6 +70,8 @@ public class FavoritesDashboardActivity extends ListActivity { }); setListAdapter(adapter); + + registerForContextMenu(getListView()); } @Override @@ -80,4 +98,74 @@ public class FavoritesDashboardActivity extends ListActivity { startActivity(new Intent(Intent.ACTION_VIEW, ContentUris.withAppendedId(Constants.FAVORITE_CONTENT_URI, id))); } + + @Override + public void onCreateContextMenu(ContextMenu menu, View v, + ContextMenuInfo menuInfo) { + super.onCreateContextMenu(menu, v, menuInfo); + + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.favorite_context_menu, menu); + + AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; + CursorWrapper item = (CursorWrapper) getListAdapter().getItem( + info.position); + Station orig = Station.getByAbbreviation(CursorUtils.getString(item, + FavoritesColumns.FROM_STATION)); + Station dest = Station.getByAbbreviation(CursorUtils.getString(item, + FavoritesColumns.TO_STATION)); + mCurrentlySelectedRouteName = orig.name + " - " + dest.name; + menu.setHeaderTitle(mCurrentlySelectedRouteName); + } + + @Override + public boolean onContextItemSelected(MenuItem item) { + AdapterContextMenuInfo info = (AdapterContextMenuInfo) item + .getMenuInfo(); + mCurrentlySelectedUri = ContentUris.withAppendedId( + Constants.FAVORITE_CONTENT_URI, + info.id); + + if (item.getItemId() == R.id.view) { + startActivity(new Intent(Intent.ACTION_VIEW, mCurrentlySelectedUri)); + return true; + } else if (item.getItemId() == R.id.delete) { + showDialog(DIALOG_DELETE_EVENT); + return true; + } + return super.onContextItemSelected(item); + } + + @Override + protected Dialog onCreateDialog(int id) { + if (id == DIALOG_DELETE_EVENT && mCurrentlySelectedUri != null) { + final AlertDialog.Builder builder = new Builder(this); + builder.setTitle(mCurrentlySelectedRouteName); + builder.setCancelable(false); + builder.setMessage("Are you sure you want to delete this route?"); + builder.setPositiveButton(R.string.yes, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + getContentResolver().delete(mCurrentlySelectedUri, + null, null); + mCurrentlySelectedUri = null; + mCurrentlySelectedRouteName = null; + removeDialog(DIALOG_DELETE_EVENT); + } + }); + builder.setNegativeButton(R.string.cancel, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + mCurrentlySelectedUri = null; + mCurrentlySelectedRouteName = null; + removeDialog(DIALOG_DELETE_EVENT); + } + }); + return builder.create(); + } + return super.onCreateDialog(id); + } + } \ No newline at end of file diff --git a/src/com/dougkeen/bart/ViewArrivalsActivity.java b/src/com/dougkeen/bart/ViewArrivalsActivity.java index cfcf1fd..15c373c 100644 --- a/src/com/dougkeen/bart/ViewArrivalsActivity.java +++ b/src/com/dougkeen/bart/ViewArrivalsActivity.java @@ -113,6 +113,12 @@ public class ViewArrivalsActivity extends ListActivity { } protected void processLatestArrivals(RealTimeArrivals result) { + if (result.getArrivals().isEmpty()) { + ((TextView) findViewById(android.R.id.empty)) + .setText(R.string.no_data_message); + return; + } + Arrival firstArrival = null; final List arrivals = result.getArrivals(); if (mArrivalsAdapter.getCount() > 0) { diff --git a/src/com/dougkeen/bart/data/CursorUtils.java b/src/com/dougkeen/bart/data/CursorUtils.java index 593d6e3..5288f72 100644 --- a/src/com/dougkeen/bart/data/CursorUtils.java +++ b/src/com/dougkeen/bart/data/CursorUtils.java @@ -12,4 +12,9 @@ public final class CursorUtils { cursor.close(); } } + + public static final String getString(Cursor cursor, FavoritesColumns column) { + return cursor.getString(cursor.getColumnIndex(column.string)); + } + }