--- android/TrainInfo/src/dk/thoerup/traininfo/DepartureList.java 2010/06/26 11:02:53 918 +++ android/TrainInfo/src/dk/thoerup/traininfo/DepartureList.java 2010/08/03 06:12:10 1007 @@ -7,8 +7,7 @@ import java.text.NumberFormat; -import java.util.ArrayList; -import java.util.List; + import android.app.AlertDialog; import android.app.Dialog; @@ -20,6 +19,8 @@ import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; @@ -32,11 +33,13 @@ public class DepartureList extends ListActivity { public static final int DLG_PROGRESS = 1; + static final int MENU_MAP = 100; + static final int MENU_NOTIFICATIONS = 101; DepartureListAdapter adapter; DepartureProvider provider; - List departures; + DepartureBean departures; int selectedItemId; //DepartureBean currentDeparture; @@ -49,7 +52,7 @@ boolean arrival = false; - @SuppressWarnings("unchecked") + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -92,7 +95,7 @@ - findViewById(R.id.header).setOnClickListener( mapLauncher ); + // findViewById(R.id.header).setOnClickListener( mapLauncher ); int distance = station.getDistance(); if (distance != 0) { @@ -118,13 +121,25 @@ if (savedInstanceState == null) { startDepartureFetcher(); } else { - departures = (List) savedInstanceState.getSerializable("departures"); - adapter.setDepartures(departures); - selectedItemId = savedInstanceState.getInt("selectedItemId"); + departures = (DepartureBean) savedInstanceState.getSerializable("departures"); + + if ( (departures != null) && (departures.entries != null) ) { + adapter.setDepartures(departures.entries); + } + selectedItemId = savedInstanceState.getInt("selectedItemId"); + + if ( hasNotifications() ) { + findViewById(R.id.notifIcon).setVisibility(View.VISIBLE); + } + } } } + boolean hasNotifications() { + return (departures != null && departures.notifications.size() > 0); + } + @Override public void onSaveInstanceState(Bundle outState) { @@ -133,7 +148,7 @@ outState.putInt("selectedItemId", selectedItemId); - outState.putSerializable("departures", (ArrayList) departures); + outState.putSerializable("departures", departures); } @@ -153,7 +168,7 @@ selectedItemId = position; - DepartureBean dep = departures.get(selectedItemId); + DepartureEntry dep = departures.entries.get(selectedItemId); Intent intent = new Intent(this, TimetableList.class); intent.putExtra("departure", dep); @@ -188,6 +203,49 @@ return super.onCreateDialog(id); } } + + + + + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuItem item; + + item = menu.add(0, MENU_MAP, 0, getString(R.string.departurelist_showonmap) ); + item.setIcon(android.R.drawable.ic_menu_mapmode); + + item = menu.add(0, MENU_NOTIFICATIONS, 0, getString(R.string.departurelist_notifications) ); + item.setIcon(android.R.drawable.ic_menu_info_details); + + + boolean notifEnabled = hasNotifications(); + item.setEnabled(notifEnabled); + + + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + boolean res; + switch(item.getItemId()) { + case MENU_MAP: + Uri uri = Uri.parse("geo:" + station.getLatitude() + "," + station.getLongitude()); + startActivity( new Intent(Intent.ACTION_VIEW, uri)); + res = true; + break; + case MENU_NOTIFICATIONS: + Intent i = new Intent(this,dk.thoerup.traininfo.NotificationList.class); + i.putExtra(NotificationList.EXTRA_NOTIFICATIONS, departures.notifications); + startActivity(i); + res = true; + break; + default: + res = super.onOptionsItemSelected(item); + } + return res; + } void startDepartureFetcher() { showDialog(DLG_PROGRESS); @@ -209,19 +267,18 @@ } } - View.OnClickListener mapLauncher = new View.OnClickListener() { + /*View.OnClickListener mapLauncher = new View.OnClickListener() { @Override public void onClick(View v) { Uri uri = Uri.parse("geo:" + station.getLatitude() + "," + station.getLongitude()); startActivity( new Intent(Intent.ACTION_VIEW, uri)); } - }; + };*/ class DepartureFetcher extends AsyncTask { - boolean success; @Override protected void onPostExecute(Void result) { @@ -230,12 +287,17 @@ pgDialog.dismiss(); - if (success) { + if (departures != null) { DepartureList.this.getListView().setVisibility(View.GONE); //Experimental, inspired by http://osdir.com/ml/Android-Developers/2010-04/msg01198.html - adapter.setDepartures(departures); + adapter.setDepartures(departures.entries); DepartureList.this.getListView().setVisibility(View.VISIBLE); - if (departures.size() == 0) { + + if ( hasNotifications() ) { + findViewById(R.id.notifIcon).setVisibility(View.VISIBLE); + } + + if (departures.entries.size() == 0) { MessageBox.showMessage(DepartureList.this, "No departures found", true); } } else { // communication or parse error @@ -266,8 +328,7 @@ @Override protected Void doInBackground(Integer... params) { - success = provider.lookupDepartures(params[0], DepartureList.this.arrival); - departures = provider.getDepartures(params[0], DepartureList.this.arrival); + departures = provider.lookupDepartures(params[0], DepartureList.this.arrival); return null; }