--- android/TrainInfo/src/dk/thoerup/traininfo/StationList.java 2010/06/25 23:59:58 906 +++ android/TrainInfo/src/dk/thoerup/traininfo/StationList.java 2010/07/11 15:15:04 983 @@ -48,13 +48,14 @@ public static final int OPTIONS_MAP = 2003; public static final int OPTIONS_GPSINFO = 2004; - - - public static final int DLG_PROGRESS = 3001; public static final int DLG_STATIONNAME = 3002; + + public static final int GPS_TIMEOUT_MS = 17500; //how long are we willing to wait for gps fix -in milliseconds + + static enum LookupMethod { ByLocation, ByName, @@ -122,8 +123,8 @@ case ListNearest: startLookup(); break; - case ListSearch: - this.showDialogSafe(DLG_STATIONNAME); + case ListSearch: + showDialog(DLG_STATIONNAME); //TODO: this.showDialogSafe(DLG_STATIONNAME); break; case ListFavorites: startFavoriteLookup(); @@ -139,6 +140,22 @@ } } + + + @Override + protected void onDestroy() { + super.onDestroy(); + + if (findStationsTask != null) { + findStationsTask.cancel(true); + } + if (locationLookup != null) { + locationLookup.stopSearch(); + } + isRunning = false; + } + + protected void setTitle() { String dialogTitle = getResources().getString(app_name); switch (listType) { @@ -165,7 +182,8 @@ * - android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@436aaef8 is not valid; is your activity running? * - java.lang.IllegalArgumentException: View not attached to window manager */ - + + /* public void showDialogSafe(int id) { try { showDialog(id); @@ -196,7 +214,8 @@ Log.e("StationList", "builder.show() failed", e); } - } + }*/ + /* EOF rude and ugly dialog hack */ @@ -376,15 +395,15 @@ public void startLookup() { isRunning = true; dialogMessage = getString( stationlist_waitforlocation ); - showDialogSafe(DLG_PROGRESS); + showDialog(DLG_PROGRESS);//TODO:showDialogSafe(DLG_PROGRESS); locationLookup.locateStations(); - stationsFetched.sendEmptyMessageDelayed(LOCATIONFIXTIMEOUT, 20000); + stationsFetched.sendEmptyMessageDelayed(LOCATIONFIXTIMEOUT, GPS_TIMEOUT_MS); } void startNameSearch(String name) { dialogMessage = getString( stationlist_findbyname ); - showDialogSafe(DLG_PROGRESS); + showDialog(DLG_PROGRESS);//TODO:showDialogSafe(DLG_PROGRESS); findStationsTask = new FindStationsTask(); findStationsTask.searchByName(name); @@ -396,7 +415,7 @@ if (favorites.size() > 0) { dialogMessage = getString( stationlist_loadfavorites ); - showDialogSafe(DLG_PROGRESS); + showDialog(DLG_PROGRESS);//TODO:showDialogSafe(DLG_PROGRESS); findStationsTask = new FindStationsTask(); findStationsTask.searchByIds( favorites.toString() ); @@ -411,7 +430,7 @@ void startLocatorTask() { dialogMessage = getString( stationlist_findingnearby ); - showDialogSafe(DLG_PROGRESS); + showDialog(DLG_PROGRESS);//TODO:showDialogSafe(DLG_PROGRESS); findStationsTask = new FindStationsTask(); findStationsTask.searchByLocation( locationLookup.getLocation() ); @@ -428,7 +447,7 @@ switch (msg.what) { case GOTLOCATION: - dismissDialogSafe(DLG_PROGRESS); + dismissDialog(DLG_PROGRESS);//TODO:dismissDialogSafe(DLG_PROGRESS); startLocatorTask(); location = GeoPair.fromLocation( locationLookup.getLocation() ); @@ -436,7 +455,7 @@ break; case NOPROVIDER: - dismissDialogSafe(DLG_PROGRESS); + dismissDialog(DLG_PROGRESS);//TODO:dismissDialogSafe(DLG_PROGRESS); MessageBox.showMessage(StationList.this, getString(stationlist_nolocationprovider), true ); //StationList.this.finish(); break; @@ -446,7 +465,7 @@ if (locationLookup.hasLocation()) { stationsFetched.sendEmptyMessage( GOTLOCATION ); } else { - dismissDialogSafe(DLG_PROGRESS); + dismissDialog(DLG_PROGRESS);//TODO:dismissDialogSafe(DLG_PROGRESS); AlertDialog.Builder builder = new AlertDialog.Builder(StationList.this); builder.setMessage( getString( stationlist_gpstimeout) ); @@ -463,7 +482,7 @@ dialog.dismiss(); } }); - builderShowSafe(builder); // builder.show() + builder.show();//TODO:builderShowSafe(builder); } } @@ -531,7 +550,7 @@ @Override protected void onPostExecute(Void result) { super.onPostExecute(result); - dismissDialogSafe(dialog); + dialog.dismiss();//TODO:dismissDialogSafe(dialog); if (success) { @@ -539,8 +558,11 @@ showMessageAndClose(getString(stationlist_nostations)); } stations = stationProvider.getStations(); + + StationList.this.getListView().invalidateViews(); adapter.setStations( stations ); + } else { //communication or parse errors AlertDialog.Builder builder = new AlertDialog.Builder(StationList.this); builder.setMessage(getString(stationlist_fetcherror)); @@ -587,7 +609,7 @@ } }); - builderShowSafe(builder); // builder.show() + builder.show();//TODO:builderShowSafe(builder); } } }