--- android/TrainInfo/src/dk/thoerup/traininfo/StationList.java 2009/10/11 07:23:35 441 +++ android/TrainInfo/src/dk/thoerup/traininfo/StationList.java 2009/10/28 12:52:52 480 @@ -81,8 +81,8 @@ FavoritesMenu contextMenu = new FavoritesMenu(); IntSet favorites = new IntSet(); - - + boolean showingFavorites = false; + String dialogTitle; SharedPreferences prefs; /////////////////////////////////////////////////////////////////////////////////////////// @@ -116,6 +116,8 @@ stations = (ArrayList) savedInstanceState.getSerializable("stations"); adapter.setStations(stations); location = (GeoPair) savedInstanceState.getSerializable("location"); + dialogTitle = savedInstanceState.getString("title"); + setTitle(dialogTitle); } } @@ -127,6 +129,7 @@ dialog.dismiss(); outState.putSerializable("stations", (ArrayList) stations); outState.putSerializable("location", location); + outState.putString("title", dialogTitle); } @@ -460,15 +463,21 @@ @Override protected Void doInBackground(Void... params) { - - if (method.equals(LookupMethod.ByLocation)) + + switch (method) { + case ByLocation: success = stationProvider.lookupStations(loc); - - if (method.equals(LookupMethod.ByName)) + break; + case ByName: success = stationProvider.lookupStationsByName(name); - - if (method.equals(LookupMethod.ByList)) + break; + case ByList: success = stationProvider.lookupStationsByIds(ids); + break; + default: + success = false; // not possible + } + Location dummy = new Location("gps"); List stations = stationProvider.getStations(); @@ -477,11 +486,17 @@ String addr = lookupAddress(station.getLatitude(), station.getLongitude()); station.setAddress(addr); + if (method.equals(LookupMethod.ByName) || method.equals(LookupMethod.ByList)) { - dummy.setLatitude(station.getLatitude()); - dummy.setLongitude(station.getLongitude()); - station.setDistance( (int)loc.distanceTo(dummy) ); + if (loc != null) { //only do the distance calc if we have a location + dummy.setLatitude(station.getLatitude()); + dummy.setLongitude(station.getLongitude()); + station.setDistance( (int)loc.distanceTo(dummy) ); + } else { + station.setDistance(0); + } } + } return null; @@ -492,11 +507,31 @@ super.onPostExecute(result); dialog.dismiss(); + //set title + switch (method) { + case ByLocation: + dialogTitle = "Traininfo DK - Nearby stations"; + break; + case ByName: + dialogTitle = "Traininfo DK - Search"; + break; + case ByList: + dialogTitle = "Traininfo DK - Favorites"; + break; + default: + dialogTitle = "";//not possible + } + + StationList.this.setTitle(dialogTitle); + //set title end + if (success) { if (stationProvider.getStations().size() == 0) MessageBox.showMessage(StationList.this, "No stations found!"); // this should not be possible !?! stations = stationProvider.getStations(); - adapter.setStations( stations ); + adapter.setStations( stations ); + + showingFavorites = method.equals(LookupMethod.ByList); } else { //communication or parse errors AlertDialog.Builder builder = new AlertDialog.Builder(StationList.this); @@ -555,8 +590,14 @@ favorites.add(stationID); Toast.makeText(StationList.this, "Station added", Toast.LENGTH_SHORT).show(); } else { + favorites.remove(stationID); Toast.makeText(StationList.this, "Station removed", Toast.LENGTH_SHORT).show(); + + if (showingFavorites) { + stations.remove(selectedPosition); + adapter.notifyDataSetChanged(); + } } Editor ed = prefs.edit(); ed.putString("favorites", favorites.toString());