diff --git a/src/it/reyboz/bustorino/ActivityMap.java b/src/it/reyboz/bustorino/ActivityMap.java --- a/src/it/reyboz/bustorino/ActivityMap.java +++ b/src/it/reyboz/bustorino/ActivityMap.java @@ -18,8 +18,14 @@ import org.osmdroid.util.BoundingBox; import org.osmdroid.util.GeoPoint; import org.osmdroid.views.MapView; +import org.osmdroid.views.overlay.FolderOverlay; import org.osmdroid.views.overlay.Marker; +import org.osmdroid.views.overlay.Overlay; import org.osmdroid.views.overlay.infowindow.InfoWindow; +import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider; +import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay; + +import java.util.List; import it.reyboz.bustorino.backend.Stop; import it.reyboz.bustorino.map.CustomInfoWindow; @@ -27,8 +33,15 @@ public class ActivityMap extends AppCompatActivity { + private static final String TAG = "Busto-MapActivity"; + private static final String MAP_CURRENT_ZOOM_KEY = "map-current-zoom"; + private static final String MAP_CENTER_LAT_KEY = "map-center-lat"; + private static final String MAP_CENTER_LON_KEY = "map-center-lon"; + private static MapView map = null; public Context ctx; + private MyLocationNewOverlay mLocationOverlay = null; + private FolderOverlay stopsFolderOverlay = null; @RequiresApi(api = Build.VERSION_CODES.HONEYCOMB) @Override public void onCreate(Bundle savedInstanceState) { @@ -54,6 +67,9 @@ // add ability to zoom with 2 fingers map.setMultiTouchControls(true); + //setup FolderOverlay + stopsFolderOverlay = new FolderOverlay(); + // take the parameters if it's called from other Activities Bundle b = getIntent().getExtras(); GeoPoint marker = null; @@ -68,6 +84,8 @@ } startMap(marker, name, ID); + + // on drag and zoom reload the markers map.addMapListener(new DelayedMapListener(new MapListener() { @@ -103,6 +121,19 @@ map.setMinZoomLevel(15.5); mapController.setCenter(startPoint); + // Location Overlay + // from OpenBikeSharing (THANK GOD) + GpsMyLocationProvider imlp = new GpsMyLocationProvider(this.getBaseContext()); + imlp.setLocationUpdateMinDistance(200); + imlp.setLocationUpdateMinTime(30000); + this.mLocationOverlay = new MyLocationNewOverlay(imlp,map); + this.mLocationOverlay.enableMyLocation(); + map.getOverlays().add(this.mLocationOverlay); + + //add stops overlay + map.getOverlays().add(this.stopsFolderOverlay); + + loadMarkers(); if (marker != null) { // make a marker with the info window open for the searched marker @@ -111,7 +142,7 @@ } - public void makeMarker(GeoPoint geoPoint, String stopName, String ID, boolean isStartMarker) { + public Marker makeMarker(GeoPoint geoPoint, String stopName, String ID, boolean isStartMarker) { // add a marker Marker marker = new Marker(map); @@ -152,8 +183,6 @@ // set its position marker.setPosition(geoPoint); marker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM); - // display the marker - map.getOverlays().add(marker); // add to it an icon marker.setIcon(getResources().getDrawable(R.drawable.bus_marker)); // add to it a title @@ -166,12 +195,18 @@ marker.showInfoWindow(); } + return marker; } public void loadMarkers() { // get rid of the previous markers - map.getOverlays().clear(); + //map.getOverlays().clear(); + //stopsFolderOverlay = new FolderOverlay(); + List stopsOverlays = stopsFolderOverlay.getItems(); + if (stopsOverlays != null){ + stopsOverlays.clear(); + } // get the top, bottom, left and right screen's coordinate BoundingBox bb = map.getBoundingBox(); @@ -189,7 +224,8 @@ // add new markers of those stops for (Stop stop : stops) { GeoPoint marker = new GeoPoint(stop.getLatitude(), stop.getLongitude()); - makeMarker(marker, stop.getStopDefaultName(), stop.ID, false); + Marker stopMarker = makeMarker(marker, stop.getStopDefaultName(), stop.ID, false); + stopsFolderOverlay.add(stopMarker); } } @@ -201,6 +237,7 @@ //SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); //Configuration.getInstance().load(this, PreferenceManager.getDefaultSharedPreferences(this)); map.onResume(); //needed for compass, my location overlays, v6.0.0 and up + mLocationOverlay.enableMyLocation(); } public void onPause(){ @@ -210,5 +247,7 @@ //SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); //Configuration.getInstance().save(this, prefs); map.onPause(); //needed for compass, my location overlays, v6.0.0 and up + mLocationOverlay.disableMyLocation(); } + } \ No newline at end of file diff --git a/src/it/reyboz/bustorino/middleware/AppLocationManager.java b/src/it/reyboz/bustorino/middleware/AppLocationManager.java --- a/src/it/reyboz/bustorino/middleware/AppLocationManager.java +++ b/src/it/reyboz/bustorino/middleware/AppLocationManager.java @@ -51,7 +51,7 @@ private AppLocationManager(Context con) { - this.con = con; + this.con = con.getApplicationContext(); locMan = (LocationManager) con.getSystemService(Context.LOCATION_SERVICE); }