--- android/TrainInfo/src/dk/thoerup/traininfo/TrainInfoList.java 2009/08/10 19:44:52 260 +++ android/TrainInfo/src/dk/thoerup/traininfo/TrainInfoList.java 2009/09/07 13:23:48 302 @@ -2,16 +2,19 @@ import java.util.ArrayList; import java.util.List; +import java.util.Locale; import android.app.Dialog; import android.app.ListActivity; import android.app.ProgressDialog; import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; - +import android.util.Log; import android.view.View; import android.widget.ListView; import dk.thoerup.traininfo.util.MessageBox; @@ -124,7 +127,12 @@ dialog.dismiss(); if (isRunning) { locator.abortLocationListener(); - MessageBox.showMessage(TrainInfoList.this,"GPS fix timed out"); + if (locator.hasLocation()) { + msg.what = GOTLOCATION; + handleMessage( msg ); // ToDo: ugly recursive call !!! + } else { + MessageBox.showMessage(TrainInfoList.this,"GPS fix timed out"); + } } break; case LOOKUPSTATIONFAILED: @@ -141,20 +149,53 @@ @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); - - + StationBean station = stations.get(position); - + + double latitude = station.getLatitude(); + double longitude = station.getLongitude(); + String addr = station.getAddress(); + + if (addr == null || addr.trim().equals("") ) + addr = lookupAddress(latitude, longitude); + Intent intent = new Intent(this, DepartureList.class); intent.putExtra("name", station.getName()); - intent.putExtra("address", station.getAddress()); + intent.putExtra("address", addr); intent.putExtra("distance", station.getDistance()); - intent.putExtra("latitude", station.getLatitude()); - intent.putExtra("longitude", station.getLongitude()); + intent.putExtra("latitude", latitude); + intent.putExtra("longitude", longitude); + intent.putExtra("code", station.getCode()); startActivity(intent); } + String lookupAddress(double latitude, double longitude) { + + Geocoder coder = new Geocoder(this, new Locale("da")); + StringBuilder sb = new StringBuilder(); + Log.i("lookupaddr", "" + latitude + "/" + longitude); + try { + List
addressList = coder.getFromLocation(latitude, longitude, 1); + Address addr = addressList.get(0); + + + int max = addr.getMaxAddressLineIndex(); + for (int i=0; i0) + sb.append(", "); + + sb.append(addr.getAddressLine(i)); + } + + + } catch (Exception e) { + Log.e("DepartureList", "geocoder failed", e); + } + + return sb.toString(); + } + class LocatorTask extends AsyncTask { @Override