diff --git a/DataExtractionOSM/src/com/osmand/ToDoConstants.java b/DataExtractionOSM/src/com/osmand/ToDoConstants.java index a06686367e..b6505229df 100644 --- a/DataExtractionOSM/src/com/osmand/ToDoConstants.java +++ b/DataExtractionOSM/src/com/osmand/ToDoConstants.java @@ -26,7 +26,7 @@ public class ToDoConstants { // Fix some missing turns in CloudMade (for secondary roads wo name). Add them (if dist to prev/next turn > 150m) [dacha] // 33. Build transport locations. Create transport index (transport-stops) (investigate) // DONE : Load transport routes in swing, init - // TODO : add progress calculating, add intermediate points, add menu for stops + // TODO : add intermediate points, add menu for stops (show map) // 66. Transport routing (show next stop, total distance, show stop get out). diff --git a/OsmAnd/src/com/osmand/activities/search/SearchTransportActivity.java b/OsmAnd/src/com/osmand/activities/search/SearchTransportActivity.java index 782a1a74fe..0332167c92 100644 --- a/OsmAnd/src/com/osmand/activities/search/SearchTransportActivity.java +++ b/OsmAnd/src/com/osmand/activities/search/SearchTransportActivity.java @@ -18,6 +18,7 @@ import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.ListView; +import android.widget.ProgressBar; import android.widget.TextView; import com.osmand.Messages; @@ -49,6 +50,7 @@ public class SearchTransportActivity extends ListActivity { private final static int finalZoom = 13; private final static int initialZoom = 17; private int zoom = initialZoom; + private ProgressBar progress; @@ -68,9 +70,11 @@ public class SearchTransportActivity extends ListActivity { } } }); - + progress = (ProgressBar) findViewById(R.id.ProgressBar); + progress.setVisibility(View.INVISIBLE); stopsAdapter = new TransportStopAdapter(new ArrayList()); setListAdapter(stopsAdapter); + searchArea.setText(getSearchArea()); } @@ -82,17 +86,22 @@ public class SearchTransportActivity extends ListActivity { } public void searchFurther(){ - // TODO use progress + // use progress + searchTransportLevel.setEnabled(false); if (lastKnownMapLocation != null) { List rs = ResourceManager.getResourceManager().searchTransportRepositories(lastKnownMapLocation.getLatitude(), lastKnownMapLocation.getLongitude()); if(!rs.isEmpty()){ repo = rs.get(0); - searchTransportLevel.setEnabled(isSearchFurtherAvailable()); - List res = repo.searchTransportRouteStops(lastKnownMapLocation.getLatitude(), lastKnownMapLocation.getLongitude(), - locationToGo, zoom); - - stopsAdapter.setNewModel(res); + progress.setVisibility(View.VISIBLE); + new Thread(new Runnable(){ + @Override + public void run() { + List res = repo.searchTransportRouteStops(lastKnownMapLocation.getLatitude(), lastKnownMapLocation.getLongitude(), + locationToGo, zoom); + updateUIList(res); + } + },"SearchingTransport").start(); //$NON-NLS-1$ } else { repo = null; stopsAdapter.clear(); @@ -100,8 +109,6 @@ public class SearchTransportActivity extends ListActivity { } else { stopsAdapter.clear(); } - searchTransportLevel.setEnabled(isSearchFurtherAvailable()); - searchArea.setText(getSearchArea()); } @Override @@ -111,8 +118,19 @@ public class SearchTransportActivity extends ListActivity { locationToGo = OsmandSettings.getPointToNavigate(this); searchFurther(); } - - + + protected void updateUIList(final List stopsList){ + runOnUiThread(new Runnable(){ + @Override + public void run() { + stopsAdapter.setNewModel(stopsList); + searchTransportLevel.setEnabled(isSearchFurtherAvailable()); + searchArea.setText(getSearchArea()); + progress.setVisibility(View.INVISIBLE); + } + }); + } + public void onListItemClick(ListView parent, View v, int position, long id) { RouteInfoLocation item = ((TransportStopAdapter)getListAdapter()).getItem(position); @@ -123,8 +141,9 @@ public class SearchTransportActivity extends ListActivity { String n = st.getName(OsmandSettings.usingEnglishNames(this)); if(locationToGo != null){ n += " - [" + MapUtils.getFormattedDistance((int) MapUtils.getDistance(locationToGo, st.getLocation())) +"]"; //$NON-NLS-1$ //$NON-NLS-2$ - } - n = MapUtils.getFormattedDistance((int) MapUtils.getDistance(lastKnownMapLocation, st.getLocation())) +" - " + n; //$NON-NLS-1$ + } else { + n = MapUtils.getFormattedDistance((int) MapUtils.getDistance(lastKnownMapLocation, st.getLocation())) +" - " + n; //$NON-NLS-1$ + } items.add(n); } // TODO show menu mark as intermediate mark on map @@ -167,12 +186,12 @@ public class SearchTransportActivity extends ListActivity { if (locationToGo != null) { labelW.append(MapUtils.getFormattedDistance(stop.getDistToLocation())); } else { - labelW.append("no target"); + labelW.append("none"); } labelW.append("]\n").append(route.getName(OsmandSettings.usingEnglishNames(SearchTransportActivity.this))); //$NON-NLS-1$ label.setText(labelW.toString()); // TODO icons - if (stop.getDistToLocation() < 400) { + if (locationToGo == null || stop.getDistToLocation() < 400) { icon.setImageResource(R.drawable.poi); } else { icon.setImageResource(R.drawable.closed_poi);