Simple refactoring MapActivity
This commit is contained in:
parent
76ea95f3ce
commit
1a1d45aff3
3 changed files with 537 additions and 461 deletions
|
@ -1,18 +1,13 @@
|
||||||
package net.osmand.plus;
|
package net.osmand.plus;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import net.osmand.LogUtil;
|
|
||||||
import net.osmand.map.ITileSource;
|
import net.osmand.map.ITileSource;
|
||||||
import net.osmand.map.TileSourceManager;
|
import net.osmand.map.TileSourceManager;
|
||||||
import net.osmand.map.TileSourceManager.TileSourceTemplate;
|
import net.osmand.map.TileSourceManager.TileSourceTemplate;
|
||||||
|
@ -33,7 +28,6 @@ import android.location.LocationManager;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.NetworkInfo;
|
import android.net.NetworkInfo;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
public class OsmandSettings {
|
public class OsmandSettings {
|
||||||
// GLOBAL instance - make instance global for application
|
// GLOBAL instance - make instance global for application
|
||||||
|
@ -451,7 +445,7 @@ public class OsmandSettings {
|
||||||
new IntPreference("map_screen_orientation", ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, true);
|
new IntPreference("map_screen_orientation", ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, true);
|
||||||
|
|
||||||
// this value string is synchronized with settings_pref.xml preference name
|
// this value string is synchronized with settings_pref.xml preference name
|
||||||
public final CommonPreference<Boolean> SHOW_VIEW_ANGLE = new BooleanPreference("show_view_angle", false, true);
|
public final CommonPreference<Boolean> SHOW_VIEW_ANGLE = new BooleanPreference("show_view_angle", false, true, true);
|
||||||
{
|
{
|
||||||
SHOW_VIEW_ANGLE.setModeDefaultValue(ApplicationMode.BICYCLE, true);
|
SHOW_VIEW_ANGLE.setModeDefaultValue(ApplicationMode.BICYCLE, true);
|
||||||
SHOW_VIEW_ANGLE.setModeDefaultValue(ApplicationMode.PEDESTRIAN, true);
|
SHOW_VIEW_ANGLE.setModeDefaultValue(ApplicationMode.PEDESTRIAN, true);
|
||||||
|
@ -469,7 +463,7 @@ public class OsmandSettings {
|
||||||
public static final int ROTATE_MAP_BEARING = 1;
|
public static final int ROTATE_MAP_BEARING = 1;
|
||||||
public static final int ROTATE_MAP_COMPASS = 2;
|
public static final int ROTATE_MAP_COMPASS = 2;
|
||||||
public final CommonPreference<Integer> ROTATE_MAP =
|
public final CommonPreference<Integer> ROTATE_MAP =
|
||||||
new IntPreference("rotate_map", ROTATE_MAP_NONE, false);
|
new IntPreference("rotate_map", ROTATE_MAP_NONE, false, true);
|
||||||
{
|
{
|
||||||
ROTATE_MAP.setModeDefaultValue(ApplicationMode.CAR, ROTATE_MAP_BEARING);
|
ROTATE_MAP.setModeDefaultValue(ApplicationMode.CAR, ROTATE_MAP_BEARING);
|
||||||
ROTATE_MAP.setModeDefaultValue(ApplicationMode.BICYCLE, ROTATE_MAP_BEARING);
|
ROTATE_MAP.setModeDefaultValue(ApplicationMode.BICYCLE, ROTATE_MAP_BEARING);
|
||||||
|
|
|
@ -1,58 +1,29 @@
|
||||||
package net.osmand.plus.activities;
|
package net.osmand.plus.activities;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import net.osmand.Algoritms;
|
import net.osmand.Algoritms;
|
||||||
import net.osmand.FavouritePoint;
|
|
||||||
import net.osmand.GPXUtilities;
|
|
||||||
import net.osmand.LogUtil;
|
import net.osmand.LogUtil;
|
||||||
import net.osmand.OsmAndFormatter;
|
|
||||||
import net.osmand.Version;
|
import net.osmand.Version;
|
||||||
import net.osmand.GPXUtilities.GPXFileResult;
|
import net.osmand.GPXUtilities.GPXFileResult;
|
||||||
import net.osmand.GPXUtilities.WptPt;
|
|
||||||
import net.osmand.data.AmenityType;
|
|
||||||
import net.osmand.data.MapTileDownloader;
|
import net.osmand.data.MapTileDownloader;
|
||||||
import net.osmand.data.MapTileDownloader.DownloadRequest;
|
import net.osmand.data.MapTileDownloader.DownloadRequest;
|
||||||
import net.osmand.data.MapTileDownloader.IMapDownloaderCallback;
|
import net.osmand.data.MapTileDownloader.IMapDownloaderCallback;
|
||||||
import net.osmand.map.IMapLocationListener;
|
import net.osmand.map.IMapLocationListener;
|
||||||
import net.osmand.map.ITileSource;
|
|
||||||
import net.osmand.osm.LatLon;
|
import net.osmand.osm.LatLon;
|
||||||
import net.osmand.plus.BusyIndicator;
|
import net.osmand.plus.BusyIndicator;
|
||||||
import net.osmand.plus.FavouritesDbHelper;
|
import net.osmand.plus.FavouritesDbHelper;
|
||||||
import net.osmand.plus.OsmandSettings;
|
import net.osmand.plus.OsmandSettings;
|
||||||
import net.osmand.plus.PoiFilter;
|
|
||||||
import net.osmand.plus.PoiFiltersHelper;
|
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.ResourceManager;
|
import net.osmand.plus.ResourceManager;
|
||||||
import net.osmand.plus.SQLiteTileSource;
|
|
||||||
import net.osmand.plus.activities.search.SearchActivity;
|
import net.osmand.plus.activities.search.SearchActivity;
|
||||||
import net.osmand.plus.activities.search.SearchPoiFilterActivity;
|
import net.osmand.plus.activities.search.SearchPoiFilterActivity;
|
||||||
import net.osmand.plus.activities.search.SearchTransportActivity;
|
import net.osmand.plus.activities.search.SearchTransportActivity;
|
||||||
import net.osmand.plus.render.MapRenderRepositories;
|
|
||||||
import net.osmand.plus.render.MapVectorLayer;
|
|
||||||
import net.osmand.plus.views.AnimateDraggingMapThread;
|
import net.osmand.plus.views.AnimateDraggingMapThread;
|
||||||
import net.osmand.plus.views.ContextMenuLayer;
|
|
||||||
import net.osmand.plus.views.FavoritesLayer;
|
|
||||||
import net.osmand.plus.views.GPXLayer;
|
|
||||||
import net.osmand.plus.views.MapControlsLayer;
|
|
||||||
import net.osmand.plus.views.MapInfoLayer;
|
|
||||||
import net.osmand.plus.views.MapTileLayer;
|
|
||||||
import net.osmand.plus.views.OsmBugsLayer;
|
|
||||||
import net.osmand.plus.views.OsmandMapTileView;
|
import net.osmand.plus.views.OsmandMapTileView;
|
||||||
import net.osmand.plus.views.POIMapLayer;
|
|
||||||
import net.osmand.plus.views.PointLocationLayer;
|
import net.osmand.plus.views.PointLocationLayer;
|
||||||
import net.osmand.plus.views.PointNavigationLayer;
|
|
||||||
import net.osmand.plus.views.RouteInfoLayer;
|
|
||||||
import net.osmand.plus.views.RouteLayer;
|
|
||||||
import net.osmand.plus.views.TransportInfoLayer;
|
|
||||||
import net.osmand.plus.views.TransportStopsLayer;
|
|
||||||
import net.osmand.plus.views.YandexTrafficLayer;
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
|
@ -83,7 +54,6 @@ import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
import android.os.PowerManager.WakeLock;
|
import android.os.PowerManager.WakeLock;
|
||||||
|
@ -101,7 +71,6 @@ import android.view.animation.Animation;
|
||||||
import android.view.animation.Transformation;
|
import android.view.animation.Transformation;
|
||||||
import android.widget.CompoundButton;
|
import android.widget.CompoundButton;
|
||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
import android.widget.LinearLayout;
|
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import android.widget.ToggleButton;
|
import android.widget.ToggleButton;
|
||||||
|
|
||||||
|
@ -119,53 +88,43 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
private static final int SHOW_POSITION_MSG_ID = 7;
|
private static final int SHOW_POSITION_MSG_ID = 7;
|
||||||
private static final int SHOW_POSITION_DELAY = 2500;
|
private static final int SHOW_POSITION_DELAY = 2500;
|
||||||
|
|
||||||
|
|
||||||
|
private String currentLocationProvider = null;
|
||||||
private boolean providerSupportsBearing = false;
|
private boolean providerSupportsBearing = false;
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private boolean providerSupportsSpeed = false;
|
private boolean providerSupportsSpeed = false;
|
||||||
private String currentLocationProvider = null;
|
|
||||||
|
|
||||||
private long lastTimeAutoZooming = 0;
|
private long lastTimeAutoZooming = 0;
|
||||||
private long lastTimeGPXLocationFixed = 0;
|
|
||||||
|
private long lastTimeGPSLocationFixed = 0;
|
||||||
|
|
||||||
/** Called when the activity is first created. */
|
/** Called when the activity is first created. */
|
||||||
private OsmandMapTileView mapView;
|
private OsmandMapTileView mapView;
|
||||||
private MapActivityActions mapActions = new MapActivityActions(this);
|
private MapActivityActions mapActions = new MapActivityActions(this);
|
||||||
|
private MapActivityLayers mapLayers = new MapActivityLayers(this);
|
||||||
|
|
||||||
private ImageButton backToLocation;
|
private ImageButton backToLocation;
|
||||||
|
|
||||||
// the order of layer should be preserved ! when you are inserting new layer
|
|
||||||
private MapTileLayer mapTileLayer;
|
|
||||||
private MapVectorLayer mapVectorLayer;
|
|
||||||
private GPXLayer gpxLayer;
|
|
||||||
private RouteLayer routeLayer;
|
|
||||||
private YandexTrafficLayer trafficLayer;
|
|
||||||
private OsmBugsLayer osmBugsLayer;
|
|
||||||
private POIMapLayer poiMapLayer;
|
|
||||||
private FavoritesLayer favoritesLayer;
|
|
||||||
private TransportStopsLayer transportStopsLayer;
|
|
||||||
private TransportInfoLayer transportInfoLayer;
|
|
||||||
private PointLocationLayer locationLayer;
|
|
||||||
private PointNavigationLayer navigationLayer;
|
|
||||||
private MapInfoLayer mapInfoLayer;
|
|
||||||
private ContextMenuLayer contextMenuLayer;
|
|
||||||
private RouteInfoLayer routeInfoLayer;
|
|
||||||
|
|
||||||
private SavingTrackHelper savingTrackHelper;
|
private SavingTrackHelper savingTrackHelper;
|
||||||
private RoutingHelper routingHelper;
|
private RoutingHelper routingHelper;
|
||||||
|
|
||||||
|
|
||||||
private WakeLock wakeLock;
|
private WakeLock wakeLock;
|
||||||
private boolean sensorRegistered = false;
|
private boolean sensorRegistered = false;
|
||||||
|
|
||||||
|
// Notification status
|
||||||
private NotificationManager mNotificationManager;
|
private NotificationManager mNotificationManager;
|
||||||
private Handler mapPositionHandler = null;
|
|
||||||
private int APP_NOTIFICATION_ID;
|
private int APP_NOTIFICATION_ID;
|
||||||
|
// handler to show/hide trackball position
|
||||||
|
private Handler mapPositionHandler = null;
|
||||||
|
// Current screen orientation
|
||||||
private int currentScreenOrientation;
|
private int currentScreenOrientation;
|
||||||
private int currentMapRotation;
|
//
|
||||||
private boolean currentShowingAngle;
|
|
||||||
|
|
||||||
private Dialog progressDlg = null;
|
private Dialog progressDlg = null;
|
||||||
|
// App settings
|
||||||
private OsmandSettings settings;
|
private OsmandSettings settings;
|
||||||
|
|
||||||
|
|
||||||
private boolean isMapLinkedToLocation(){
|
private boolean isMapLinkedToLocation(){
|
||||||
return settings.isMapSyncToGpsLocation();
|
return settings.isMapSyncToGpsLocation();
|
||||||
}
|
}
|
||||||
|
@ -228,67 +187,11 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
mapView.setMapLocationListener(this);
|
|
||||||
routingHelper = ((OsmandApplication) getApplication()).getRoutingHelper();
|
|
||||||
|
|
||||||
mapTileLayer = new MapTileLayer();
|
|
||||||
mapView.addLayer(mapTileLayer, 0.0f);
|
|
||||||
mapView.setMainLayer(mapTileLayer);
|
|
||||||
|
|
||||||
// 0.5 layer
|
|
||||||
mapVectorLayer = new MapVectorLayer(mapTileLayer);
|
|
||||||
mapView.addLayer(mapVectorLayer, 0.5f);
|
|
||||||
|
|
||||||
// 0.6 gpx layer
|
|
||||||
gpxLayer = new GPXLayer();
|
|
||||||
mapView.addLayer(gpxLayer, 0.6f);
|
|
||||||
|
|
||||||
// 1. route layer
|
|
||||||
routeLayer = new RouteLayer(routingHelper);
|
|
||||||
mapView.addLayer(routeLayer, 1);
|
|
||||||
|
|
||||||
// 1.5. traffic layer
|
|
||||||
trafficLayer = new YandexTrafficLayer();
|
|
||||||
mapView.addLayer(trafficLayer, 1.5f);
|
|
||||||
|
|
||||||
|
|
||||||
// 2. osm bugs layer
|
|
||||||
osmBugsLayer = new OsmBugsLayer(this);
|
|
||||||
// 3. poi layer
|
|
||||||
poiMapLayer = new POIMapLayer();
|
|
||||||
// 4. favorites layer
|
|
||||||
favoritesLayer = new FavoritesLayer();
|
|
||||||
// 5. transport layer
|
|
||||||
transportStopsLayer = new TransportStopsLayer();
|
|
||||||
// 5.5 transport info layer
|
|
||||||
transportInfoLayer = new TransportInfoLayer(TransportRouteHelper.getInstance());
|
|
||||||
mapView.addLayer(transportInfoLayer, 5.5f);
|
|
||||||
// 6. point navigation layer
|
|
||||||
navigationLayer = new PointNavigationLayer();
|
|
||||||
mapView.addLayer(navigationLayer, 6);
|
|
||||||
// 7. point location layer
|
|
||||||
locationLayer = new PointLocationLayer();
|
|
||||||
mapView.addLayer(locationLayer, 7);
|
|
||||||
// 8. map info layer
|
|
||||||
mapInfoLayer = new MapInfoLayer(this, routeLayer);
|
|
||||||
mapView.addLayer(mapInfoLayer, 8);
|
|
||||||
// 9. context menu layer
|
|
||||||
contextMenuLayer = new ContextMenuLayer(this);
|
|
||||||
mapView.addLayer(contextMenuLayer, 9);
|
|
||||||
// 10. route info layer
|
|
||||||
routeInfoLayer = new RouteInfoLayer(routingHelper, (LinearLayout) findViewById(R.id.RouteLayout));
|
|
||||||
mapView.addLayer(routeInfoLayer, 10);
|
|
||||||
|
|
||||||
// 11. route info layer
|
|
||||||
MapControlsLayer mapControlsLayer = new MapControlsLayer(this);
|
|
||||||
mapView.addLayer(mapControlsLayer, 11);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
savingTrackHelper = new SavingTrackHelper(this);
|
savingTrackHelper = new SavingTrackHelper(this);
|
||||||
|
routingHelper = ((OsmandApplication) getApplication()).getRoutingHelper();
|
||||||
|
|
||||||
LatLon pointToNavigate = settings.getPointToNavigate();
|
LatLon pointToNavigate = settings.getPointToNavigate();
|
||||||
|
|
||||||
// This situtation could be when navigation suddenly crashed and after restarting
|
// This situtation could be when navigation suddenly crashed and after restarting
|
||||||
// it tries to continue the last route
|
// it tries to continue the last route
|
||||||
if(!Algoritms.objectEquals(routingHelper.getFinalLocation(), pointToNavigate)){
|
if(!Algoritms.objectEquals(routingHelper.getFinalLocation(), pointToNavigate)){
|
||||||
|
@ -323,7 +226,9 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
navigationLayer.setPointToNavigate(pointToNavigate);
|
mapView.setMapLocationListener(this);
|
||||||
|
mapLayers.createLayers(mapView);
|
||||||
|
mapLayers.getNavigationLayer().setPointToNavigate(pointToNavigate);
|
||||||
|
|
||||||
if(!settings.isLastKnownMapLocation()){
|
if(!settings.isLastKnownMapLocation()){
|
||||||
LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
|
LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
|
||||||
|
@ -507,13 +412,15 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
|
|
||||||
|
|
||||||
private void registerUnregisterSensor(Location location){
|
private void registerUnregisterSensor(Location location){
|
||||||
|
boolean currentShowingAngle = settings.SHOW_VIEW_ANGLE.get();
|
||||||
|
int currentMapRotation = settings.ROTATE_MAP.get();
|
||||||
boolean show = (currentShowingAngle && location != null) || currentMapRotation == OsmandSettings.ROTATE_MAP_COMPASS;
|
boolean show = (currentShowingAngle && location != null) || currentMapRotation == OsmandSettings.ROTATE_MAP_COMPASS;
|
||||||
// show point view only if gps enabled
|
// show point view only if gps enabled
|
||||||
if (sensorRegistered && !show) {
|
if (sensorRegistered && !show) {
|
||||||
Log.d(LogUtil.TAG, "Disable sensor"); //$NON-NLS-1$
|
Log.d(LogUtil.TAG, "Disable sensor"); //$NON-NLS-1$
|
||||||
((SensorManager) getSystemService(SENSOR_SERVICE)).unregisterListener(this);
|
((SensorManager) getSystemService(SENSOR_SERVICE)).unregisterListener(this);
|
||||||
sensorRegistered = false;
|
sensorRegistered = false;
|
||||||
locationLayer.setHeading(null);
|
mapLayers.getLocationLayer().setHeading(null);
|
||||||
} else if (!sensorRegistered && show) {
|
} else if (!sensorRegistered && show) {
|
||||||
Log.d(LogUtil.TAG, "Enable sensor"); //$NON-NLS-1$
|
Log.d(LogUtil.TAG, "Enable sensor"); //$NON-NLS-1$
|
||||||
SensorManager sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
|
SensorManager sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
|
||||||
|
@ -527,6 +434,7 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
|
|
||||||
protected void backToLocationImpl() {
|
protected void backToLocationImpl() {
|
||||||
backToLocation.setVisibility(View.INVISIBLE);
|
backToLocation.setVisibility(View.INVISIBLE);
|
||||||
|
PointLocationLayer locationLayer = mapLayers.getLocationLayer();
|
||||||
if(!isMapLinkedToLocation()){
|
if(!isMapLinkedToLocation()){
|
||||||
settings.setSyncMapToGpsLocation(true);
|
settings.setSyncMapToGpsLocation(true);
|
||||||
if(locationLayer.getLastKnownLocation() != null){
|
if(locationLayer.getLastKnownLocation() != null){
|
||||||
|
@ -545,6 +453,7 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
// For network/gps it's bad way (not accurate). It's widely used for testing purposes
|
// For network/gps it's bad way (not accurate). It's widely used for testing purposes
|
||||||
// possibly keep using only for emulator case
|
// possibly keep using only for emulator case
|
||||||
// if (!providerSupportsSpeed
|
// if (!providerSupportsSpeed
|
||||||
|
PointLocationLayer locationLayer = mapLayers.getLocationLayer();
|
||||||
if (isRunningOnEmulator()
|
if (isRunningOnEmulator()
|
||||||
&& locationLayer.getLastKnownLocation() != null && location != null) {
|
&& locationLayer.getLastKnownLocation() != null && location != null) {
|
||||||
if (locationLayer.getLastKnownLocation().distanceTo(location) > 3) {
|
if (locationLayer.getLastKnownLocation().distanceTo(location) > 3) {
|
||||||
|
@ -580,8 +489,7 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
}
|
}
|
||||||
registerUnregisterSensor(location);
|
registerUnregisterSensor(location);
|
||||||
updateSpeedBearing(location);
|
updateSpeedBearing(location);
|
||||||
|
mapLayers.getLocationLayer().setLastKnownLocation(location);
|
||||||
locationLayer.setLastKnownLocation(location);
|
|
||||||
if(routingHelper.isFollowingMode()){
|
if(routingHelper.isFollowingMode()){
|
||||||
routingHelper.setCurrentLocation(location);
|
routingHelper.setCurrentLocation(location);
|
||||||
}
|
}
|
||||||
|
@ -598,6 +506,7 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
int currentMapRotation = settings.ROTATE_MAP.get();
|
||||||
if (location.hasBearing() && currentMapRotation == OsmandSettings.ROTATE_MAP_BEARING) {
|
if (location.hasBearing() && currentMapRotation == OsmandSettings.ROTATE_MAP_BEARING) {
|
||||||
mapView.setRotate(-location.getBearing());
|
mapView.setRotate(-location.getBearing());
|
||||||
}
|
}
|
||||||
|
@ -641,11 +550,11 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
routingHelper.setFollowingMode(false);
|
routingHelper.setFollowingMode(false);
|
||||||
settings.FOLLOW_TO_THE_ROUTE.set(false);
|
settings.FOLLOW_TO_THE_ROUTE.set(false);
|
||||||
}
|
}
|
||||||
navigationLayer.setPointToNavigate(point);
|
mapLayers.getNavigationLayer().setPointToNavigate(point);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Location getLastKnownLocation(){
|
public Location getLastKnownLocation(){
|
||||||
return locationLayer.getLastKnownLocation();
|
return mapLayers.getLocationLayer().getLastKnownLocation();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LatLon getMapLocation(){
|
public LatLon getMapLocation(){
|
||||||
|
@ -653,7 +562,7 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
}
|
}
|
||||||
|
|
||||||
public LatLon getPointToNavigate(){
|
public LatLon getPointToNavigate(){
|
||||||
return navigationLayer.getPointToNavigate();
|
return mapLayers.getNavigationLayer().getPointToNavigate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public RoutingHelper getRoutingHelper() {
|
public RoutingHelper getRoutingHelper() {
|
||||||
|
@ -669,7 +578,7 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
|
|
||||||
private boolean useOnlyGPS() {
|
private boolean useOnlyGPS() {
|
||||||
return (routingHelper != null && routingHelper.isFollowingMode())
|
return (routingHelper != null && routingHelper.isFollowingMode())
|
||||||
|| (System.currentTimeMillis() - lastTimeGPXLocationFixed) < USE_ONLY_GPS_INTERVAL || isRunningOnEmulator();
|
|| (System.currentTimeMillis() - lastTimeGPSLocationFixed) < USE_ONLY_GPS_INTERVAL || isRunningOnEmulator();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -708,7 +617,7 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
@Override
|
@Override
|
||||||
public void onLocationChanged(Location location) {
|
public void onLocationChanged(Location location) {
|
||||||
if (location != null) {
|
if (location != null) {
|
||||||
lastTimeGPXLocationFixed = location.getTime();
|
lastTimeGPSLocationFixed = location.getTime();
|
||||||
}
|
}
|
||||||
setLocation(location);
|
setLocation(location);
|
||||||
}
|
}
|
||||||
|
@ -790,78 +699,20 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateApplicationModeSettings(){
|
private void updateApplicationModeSettings(){
|
||||||
currentMapRotation = settings.ROTATE_MAP.get();
|
boolean currentShowingAngle = settings.SHOW_VIEW_ANGLE.get();
|
||||||
currentShowingAngle = settings.SHOW_VIEW_ANGLE.get();
|
int currentMapRotation = settings.ROTATE_MAP.get();
|
||||||
if(currentMapRotation == OsmandSettings.ROTATE_MAP_NONE){
|
if(currentMapRotation == OsmandSettings.ROTATE_MAP_NONE){
|
||||||
mapView.setRotate(0);
|
mapView.setRotate(0);
|
||||||
}
|
}
|
||||||
if(!currentShowingAngle){
|
if(!currentShowingAngle){
|
||||||
locationLayer.setHeading(null);
|
mapLayers.getLocationLayer().setHeading(null);
|
||||||
}
|
}
|
||||||
routingHelper.setAppMode(settings.getApplicationMode());
|
routingHelper.setAppMode(settings.getApplicationMode());
|
||||||
mapView.setMapPosition(settings.POSITION_ON_MAP.get());
|
mapView.setMapPosition(settings.POSITION_ON_MAP.get());
|
||||||
registerUnregisterSensor(getLastKnownLocation());
|
registerUnregisterSensor(getLastKnownLocation());
|
||||||
updateLayers();
|
mapLayers.updateLayers(mapView);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateLayers(){
|
|
||||||
if(mapView.getLayers().contains(transportStopsLayer) != settings.SHOW_TRANSPORT_OVER_MAP.get()){
|
|
||||||
if(settings.SHOW_TRANSPORT_OVER_MAP.get()){
|
|
||||||
mapView.addLayer(transportStopsLayer, 5);
|
|
||||||
} else {
|
|
||||||
mapView.removeLayer(transportStopsLayer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(mapView.getLayers().contains(osmBugsLayer) != settings.SHOW_OSM_BUGS.get()){
|
|
||||||
if(settings.SHOW_OSM_BUGS.get()){
|
|
||||||
mapView.addLayer(osmBugsLayer, 2);
|
|
||||||
} else {
|
|
||||||
mapView.removeLayer(osmBugsLayer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(mapView.getLayers().contains(poiMapLayer) != settings.SHOW_POI_OVER_MAP.get()){
|
|
||||||
if(settings.SHOW_POI_OVER_MAP.get()){
|
|
||||||
mapView.addLayer(poiMapLayer, 3);
|
|
||||||
} else {
|
|
||||||
mapView.removeLayer(poiMapLayer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(mapView.getLayers().contains(favoritesLayer) != settings.SHOW_FAVORITES.get()){
|
|
||||||
if(settings.SHOW_FAVORITES.get()){
|
|
||||||
mapView.addLayer(favoritesLayer, 4);
|
|
||||||
} else {
|
|
||||||
mapView.removeLayer(favoritesLayer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
trafficLayer.setVisible(settings.SHOW_YANDEX_TRAFFIC.get());
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateMapSource(){
|
|
||||||
boolean vectorData = settings.isUsingMapVectorData();
|
|
||||||
OsmandApplication app = ((OsmandApplication)getApplication());
|
|
||||||
ResourceManager rm = app.getResourceManager();
|
|
||||||
if(vectorData && !app.isApplicationInitializing()){
|
|
||||||
if(rm.getRenderer().isEmpty()){
|
|
||||||
Toast.makeText(MapActivity.this, getString(R.string.no_vector_map_loaded), Toast.LENGTH_LONG).show();
|
|
||||||
vectorData = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ITileSource newSource = settings.getMapTileSource();
|
|
||||||
ITileSource oldMap = mapTileLayer.getMap();
|
|
||||||
if(oldMap instanceof SQLiteTileSource){
|
|
||||||
((SQLiteTileSource)oldMap).closeDB();
|
|
||||||
}
|
|
||||||
mapTileLayer.setMap(newSource);
|
|
||||||
mapTileLayer.setVisible(!vectorData);
|
|
||||||
mapVectorLayer.setVisible(vectorData);
|
|
||||||
if(vectorData){
|
|
||||||
mapView.setMainLayer(mapVectorLayer);
|
|
||||||
} else {
|
|
||||||
mapView.setMainLayer(mapTileLayer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
|
@ -872,16 +723,10 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
}
|
}
|
||||||
currentScreenOrientation = getWindow().getWindowManager().getDefaultDisplay().getOrientation();
|
currentScreenOrientation = getWindow().getWindowManager().getDefaultDisplay().getOrientation();
|
||||||
|
|
||||||
boolean showTiles = !settings.isUsingMapVectorData();
|
mapLayers.updateMapSource(mapView);
|
||||||
ITileSource source = showTiles ? settings.getMapTileSource() : null;
|
|
||||||
if (showTiles != mapTileLayer.isVisible() || !Algoritms.objectEquals(mapTileLayer.getMap(), source)) {
|
|
||||||
updateMapSource();
|
|
||||||
}
|
|
||||||
|
|
||||||
updateApplicationModeSettings();
|
updateApplicationModeSettings();
|
||||||
|
|
||||||
|
mapLayers.getPoiMapLayer().setFilter(settings.getPoiFilterForMap((OsmandApplication) getApplication()));
|
||||||
poiMapLayer.setFilter(settings.getPoiFilterForMap((OsmandApplication) getApplication()));
|
|
||||||
backToLocation.setVisibility(View.INVISIBLE);
|
backToLocation.setVisibility(View.INVISIBLE);
|
||||||
|
|
||||||
routingHelper.setUiActivity(this);
|
routingHelper.setUiActivity(this);
|
||||||
|
@ -988,7 +833,7 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
@Override
|
@Override
|
||||||
public void locationChanged(double newLatitude, double newLongitude, Object source) {
|
public void locationChanged(double newLatitude, double newLongitude, Object source) {
|
||||||
// when user start dragging
|
// when user start dragging
|
||||||
if(locationLayer.getLastKnownLocation() != null){
|
if(mapLayers.getLocationLayer().getLastKnownLocation() != null){
|
||||||
if(isMapLinkedToLocation()){
|
if(isMapLinkedToLocation()){
|
||||||
settings.setSyncMapToGpsLocation(false);
|
settings.setSyncMapToGpsLocation(false);
|
||||||
}
|
}
|
||||||
|
@ -1019,12 +864,12 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
if(currentScreenOrientation == 1){
|
if(currentScreenOrientation == 1){
|
||||||
val += 90;
|
val += 90;
|
||||||
}
|
}
|
||||||
if (currentMapRotation == OsmandSettings.ROTATE_MAP_COMPASS) {
|
if (settings.ROTATE_MAP.get() == OsmandSettings.ROTATE_MAP_COMPASS) {
|
||||||
mapView.setRotate(-val);
|
mapView.setRotate(-val);
|
||||||
}
|
}
|
||||||
if(currentShowingAngle){
|
if(settings.SHOW_VIEW_ANGLE.get().booleanValue()){
|
||||||
if(locationLayer.getHeading() == null || Math.abs(locationLayer.getHeading() - val) > 10){
|
if(mapLayers.getLocationLayer().getHeading() == null || Math.abs(mapLayers.getLocationLayer().getHeading() - val) > 10){
|
||||||
locationLayer.setHeading(val);
|
mapLayers.getLocationLayer().setHeading(val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1094,14 +939,11 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
builder.show();
|
builder.show();
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
// } else if (item.getItemId() == R.id.map_mark_point) {
|
|
||||||
// contextMenuPoint(mapView.getLatitude(), mapView.getLongitude());
|
|
||||||
// return true;
|
|
||||||
} else if (item.getItemId() == R.id.map_get_directions) {
|
} else if (item.getItemId() == R.id.map_get_directions) {
|
||||||
getDirections(mapView.getLatitude(), mapView.getLongitude(), true);
|
getDirections(mapView.getLatitude(), mapView.getLongitude(), true);
|
||||||
return true;
|
return true;
|
||||||
} else if (item.getItemId() == R.id.map_layers) {
|
} else if (item.getItemId() == R.id.map_layers) {
|
||||||
openLayerSelectionDialog();
|
mapLayers.openLayerSelectionDialog(mapView);
|
||||||
return true;
|
return true;
|
||||||
} else if (item.getItemId() == R.id.map_specify_point) {
|
} else if (item.getItemId() == R.id.map_specify_point) {
|
||||||
NavigatePointActivity dlg = new NavigatePointActivity(this);
|
NavigatePointActivity dlg = new NavigatePointActivity(this);
|
||||||
|
@ -1111,7 +953,7 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
routingHelper.getVoiceRouter().setMute(!routingHelper.getVoiceRouter().isMute());
|
routingHelper.getVoiceRouter().setMute(!routingHelper.getVoiceRouter().isMute());
|
||||||
return true;
|
return true;
|
||||||
} else if (item.getItemId() == R.id.map_navigate_to_point) {
|
} else if (item.getItemId() == R.id.map_navigate_to_point) {
|
||||||
if(navigationLayer.getPointToNavigate() != null){
|
if(mapLayers.getNavigationLayer().getPointToNavigate() != null){
|
||||||
if(routingHelper.isRouteCalculated()){
|
if(routingHelper.isRouteCalculated()){
|
||||||
routingHelper.setFinalAndCurrentLocation(null, null);
|
routingHelper.setFinalAndCurrentLocation(null, null);
|
||||||
settings.FOLLOW_TO_THE_ROUTE.set(false);
|
settings.FOLLOW_TO_THE_ROUTE.set(false);
|
||||||
|
@ -1124,7 +966,7 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
}
|
}
|
||||||
mapView.refreshMap();
|
mapView.refreshMap();
|
||||||
} else if (item.getItemId() == R.id.map_gpx_routing) {
|
} else if (item.getItemId() == R.id.map_gpx_routing) {
|
||||||
useGPXFileLayer(true, navigationLayer.getPointToNavigate());
|
mapLayers.useGPXFileLayer(true, mapLayers.getNavigationLayer().getPointToNavigate(), mapView);
|
||||||
return true;
|
return true;
|
||||||
} else if (item.getItemId() == R.id.map_show_point_options) {
|
} else if (item.getItemId() == R.id.map_show_point_options) {
|
||||||
contextMenuPoint(mapView.getLatitude(), mapView.getLongitude());
|
contextMenuPoint(mapView.getLatitude(), mapView.getLongitude());
|
||||||
|
@ -1144,7 +986,7 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
|
|
||||||
|
|
||||||
protected void getDirections(final double lat, final double lon, boolean followEnabled){
|
protected void getDirections(final double lat, final double lon, boolean followEnabled){
|
||||||
if(navigationLayer.getPointToNavigate() == null){
|
if(mapLayers.getNavigationLayer().getPointToNavigate() == null){
|
||||||
Toast.makeText(this, R.string.mark_final_location_first, Toast.LENGTH_LONG).show();
|
Toast.makeText(this, R.string.mark_final_location_first, Toast.LENGTH_LONG).show();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1203,7 +1045,7 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
routingHelper.setAppMode(mode);
|
routingHelper.setAppMode(mode);
|
||||||
settings.FOLLOW_TO_THE_ROUTE.set(false);
|
settings.FOLLOW_TO_THE_ROUTE.set(false);
|
||||||
routingHelper.setFollowingMode(false);
|
routingHelper.setFollowingMode(false);
|
||||||
routingHelper.setFinalAndCurrentLocation(navigationLayer.getPointToNavigate(), map);
|
routingHelper.setFinalAndCurrentLocation(getPointToNavigate(), map);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1218,7 +1060,7 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
mapView.refreshMap();
|
mapView.refreshMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
Location location = locationLayer.getLastKnownLocation();
|
Location location = getLastKnownLocation();
|
||||||
if(location == null){
|
if(location == null){
|
||||||
location = new Location("map"); //$NON-NLS-1$
|
location = new Location("map"); //$NON-NLS-1$
|
||||||
location.setLatitude(lat);
|
location.setLatitude(lat);
|
||||||
|
@ -1227,7 +1069,7 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
routingHelper.setAppMode(mode);
|
routingHelper.setAppMode(mode);
|
||||||
settings.FOLLOW_TO_THE_ROUTE.set(true);
|
settings.FOLLOW_TO_THE_ROUTE.set(true);
|
||||||
routingHelper.setFollowingMode(true);
|
routingHelper.setFollowingMode(true);
|
||||||
routingHelper.setFinalAndCurrentLocation(navigationLayer.getPointToNavigate(), location);
|
routingHelper.setFinalAndCurrentLocation(getPointToNavigate(), location);
|
||||||
|
|
||||||
((OsmandApplication) getApplication()).showDialogInitializingCommandPlayer(MapActivity.this);
|
((OsmandApplication) getApplication()).showDialogInitializingCommandPlayer(MapActivity.this);
|
||||||
|
|
||||||
|
@ -1286,175 +1128,11 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void openLayerSelectionDialog(){
|
|
||||||
List<String> layersList = new ArrayList<String>();
|
|
||||||
layersList.add(getString(R.string.layer_map));
|
|
||||||
layersList.add(getString(R.string.layer_poi));
|
|
||||||
layersList.add(getString(R.string.layer_transport));
|
|
||||||
layersList.add(getString(R.string.layer_osm_bugs));
|
|
||||||
layersList.add(getString(R.string.layer_favorites));
|
|
||||||
layersList.add(getString(R.string.layer_gpx_layer));
|
|
||||||
final int routeInfoInd = routeInfoLayer.couldBeVisible() ? layersList.size() : -1;
|
|
||||||
if(routeInfoLayer.couldBeVisible()){
|
|
||||||
layersList.add(getString(R.string.layer_route));
|
|
||||||
}
|
|
||||||
final int transportRouteInfoInd = !TransportRouteHelper.getInstance().routeIsCalculated() ? - 1 : layersList.size();
|
|
||||||
if(transportRouteInfoInd > -1){
|
|
||||||
layersList.add(getString(R.string.layer_transport_route));
|
|
||||||
}
|
|
||||||
final int trafficInd = layersList.size();
|
|
||||||
layersList.add(getString(R.string.layer_yandex_traffic));
|
|
||||||
|
|
||||||
final boolean[] selected = new boolean[layersList.size()];
|
|
||||||
Arrays.fill(selected, true);
|
|
||||||
selected[1] = settings.SHOW_POI_OVER_MAP.get();
|
|
||||||
selected[2] = settings.SHOW_TRANSPORT_OVER_MAP.get();
|
|
||||||
selected[3] = settings.SHOW_OSM_BUGS.get();
|
|
||||||
selected[4] = settings.SHOW_FAVORITES.get();
|
|
||||||
selected[5] = gpxLayer.isVisible();
|
|
||||||
selected[trafficInd] = trafficLayer.isVisible();
|
|
||||||
if(routeInfoInd != -1){
|
|
||||||
selected[routeInfoInd] = routeInfoLayer.isUserDefinedVisible();
|
|
||||||
}
|
|
||||||
if(transportRouteInfoInd != -1){
|
|
||||||
selected[transportRouteInfoInd] = transportInfoLayer.isVisible();
|
|
||||||
}
|
|
||||||
|
|
||||||
Builder builder = new AlertDialog.Builder(this);
|
|
||||||
builder.setMultiChoiceItems(layersList.toArray(new String[layersList.size()]), selected, new DialogInterface.OnMultiChoiceClickListener() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int item, boolean isChecked) {
|
|
||||||
if (item == 0) {
|
|
||||||
dialog.dismiss();
|
|
||||||
selectMapLayer();
|
|
||||||
} else if(item == 1){
|
|
||||||
if(isChecked){
|
|
||||||
selectPOIFilterLayer();
|
|
||||||
}
|
|
||||||
settings.SHOW_POI_OVER_MAP.set(isChecked);
|
|
||||||
} else if(item == 2){
|
|
||||||
settings.SHOW_TRANSPORT_OVER_MAP.set(isChecked);
|
|
||||||
} else if(item == 3){
|
|
||||||
settings.SHOW_OSM_BUGS.set(isChecked);
|
|
||||||
} else if(item == 4){
|
|
||||||
settings.SHOW_FAVORITES.set(isChecked);
|
|
||||||
} else if(item == 5){
|
|
||||||
if(gpxLayer.isVisible()){
|
|
||||||
gpxLayer.clearCurrentGPX();
|
|
||||||
getFavoritesHelper().setFavoritePointsFromGPXFile(null);
|
|
||||||
} else {
|
|
||||||
dialog.dismiss();
|
|
||||||
useGPXFileLayer(false, null);
|
|
||||||
}
|
|
||||||
} else if(item == routeInfoInd){
|
|
||||||
routeInfoLayer.setVisible(isChecked);
|
|
||||||
} else if(item == transportRouteInfoInd){
|
|
||||||
transportInfoLayer.setVisible(isChecked);
|
|
||||||
} else if(item == trafficInd){
|
|
||||||
settings.SHOW_YANDEX_TRAFFIC.set(isChecked);
|
|
||||||
}
|
|
||||||
updateLayers();
|
|
||||||
mapView.refreshMap();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
builder.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void useGPXFileLayer(final boolean useRouting, final LatLon endForRouting) {
|
|
||||||
final List<String> list = new ArrayList<String>();
|
|
||||||
final File dir = settings.extendOsmandPath(ResourceManager.APP_DIR + SavingTrackHelper.TRACKS_PATH);
|
|
||||||
if (dir != null && dir.canRead()) {
|
|
||||||
File[] files = dir.listFiles();
|
|
||||||
if (files != null) {
|
|
||||||
Arrays.sort(files, new Comparator<File>() {
|
|
||||||
@Override
|
|
||||||
public int compare(File object1, File object2) {
|
|
||||||
if (object1.lastModified() > object2.lastModified()) {
|
|
||||||
return -1;
|
|
||||||
} else if (object1.lastModified() == object2.lastModified()) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
for (File f : files) {
|
|
||||||
if (f.getName().endsWith(".gpx")) { //$NON-NLS-1$
|
|
||||||
list.add(f.getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(list.isEmpty()){
|
|
||||||
Toast.makeText(this, R.string.gpx_files_not_found, Toast.LENGTH_LONG).show();
|
|
||||||
} else {
|
|
||||||
Builder builder = new AlertDialog.Builder(this);
|
|
||||||
builder.setItems(list.toArray(new String[list.size()]), new DialogInterface.OnClickListener() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
dialog.dismiss();
|
|
||||||
final ProgressDialog dlg = ProgressDialog.show(MapActivity.this, getString(R.string.loading),
|
|
||||||
getString(R.string.loading_data));
|
|
||||||
final File f = new File(dir, list.get(which));
|
|
||||||
new Thread(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
Looper.prepare();
|
|
||||||
final GPXFileResult res = GPXUtilities.loadGPXFile(MapActivity.this, f);
|
|
||||||
if (res.error != null) {
|
|
||||||
runOnUiThread(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
Toast.makeText(MapActivity.this, res.error, Toast.LENGTH_LONG).show();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
dlg.dismiss();
|
|
||||||
if(useRouting){
|
|
||||||
runOnUiThread(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
useGPXRouting(endForRouting, res);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
settings.SHOW_FAVORITES.set(true);
|
|
||||||
List<FavouritePoint> pts = new ArrayList<FavouritePoint>();
|
|
||||||
for(WptPt p : res.wayPoints){
|
|
||||||
FavouritePoint pt = new FavouritePoint();
|
|
||||||
pt.setLatitude(p.lat);
|
|
||||||
pt.setLongitude(p.lon);
|
|
||||||
pt.setName(p.name);
|
|
||||||
pts.add(pt);
|
|
||||||
}
|
|
||||||
getFavoritesHelper().setFavoritePointsFromGPXFile(pts);
|
|
||||||
gpxLayer.setTracks(res.locations);
|
|
||||||
}
|
|
||||||
mapView.refreshMap();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}, "Loading gpx").start(); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
builder.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public FavouritesDbHelper getFavoritesHelper() {
|
public FavouritesDbHelper getFavoritesHelper() {
|
||||||
return ((OsmandApplication)getApplication()).getFavorites();
|
return ((OsmandApplication)getApplication()).getFavorites();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void useGPXRouting(final LatLon endForRouting, final GPXFileResult res) {
|
public void useGPXRouting(final LatLon endForRouting, final GPXFileResult res) {
|
||||||
Builder builder = new AlertDialog.Builder(this);
|
Builder builder = new AlertDialog.Builder(this);
|
||||||
builder.setItems(new String[]{getString(R.string.gpx_direct_route), getString(R.string.gpx_reverse_route)},
|
builder.setItems(new String[]{getString(R.string.gpx_direct_route), getString(R.string.gpx_reverse_route)},
|
||||||
new DialogInterface.OnClickListener() {
|
new DialogInterface.OnClickListener() {
|
||||||
|
@ -1470,7 +1148,7 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
if(reverse){
|
if(reverse){
|
||||||
Collections.reverse(l);
|
Collections.reverse(l);
|
||||||
}
|
}
|
||||||
Location startForRouting = locationLayer.getLastKnownLocation();
|
Location startForRouting = getLastKnownLocation();
|
||||||
if(startForRouting == null && !l.isEmpty()){
|
if(startForRouting == null && !l.isEmpty()){
|
||||||
startForRouting = l.get(0);
|
startForRouting = l.get(0);
|
||||||
}
|
}
|
||||||
|
@ -1479,7 +1157,7 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
LatLon point = new LatLon(l.get(l.size() - 1).getLatitude(), l.get(l.size() - 1).getLongitude());
|
LatLon point = new LatLon(l.get(l.size() - 1).getLatitude(), l.get(l.size() - 1).getLongitude());
|
||||||
settings.setPointToNavigate(point.getLatitude(), point.getLongitude());
|
settings.setPointToNavigate(point.getLatitude(), point.getLongitude());
|
||||||
endPoint = point;
|
endPoint = point;
|
||||||
navigationLayer.setPointToNavigate(point);
|
mapLayers.getNavigationLayer().setPointToNavigate(point);
|
||||||
}
|
}
|
||||||
if(endForRouting != null){
|
if(endForRouting != null){
|
||||||
settings.FOLLOW_TO_THE_ROUTE.set(true);
|
settings.FOLLOW_TO_THE_ROUTE.set(true);
|
||||||
|
@ -1494,82 +1172,6 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
builder.show();
|
builder.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void selectPOIFilterLayer(){
|
|
||||||
final List<PoiFilter> userDefined = new ArrayList<PoiFilter>();
|
|
||||||
List<String> list = new ArrayList<String>();
|
|
||||||
list.add(getString(R.string.any_poi));
|
|
||||||
|
|
||||||
final PoiFiltersHelper poiFilters = ((OsmandApplication)getApplication()).getPoiFilters();
|
|
||||||
for (PoiFilter f : poiFilters.getUserDefinedPoiFilters()) {
|
|
||||||
userDefined.add(f);
|
|
||||||
list.add(f.getName());
|
|
||||||
}
|
|
||||||
for(AmenityType t : AmenityType.values()){
|
|
||||||
list.add(OsmAndFormatter.toPublicString(t, this));
|
|
||||||
}
|
|
||||||
Builder builder = new AlertDialog.Builder(this);
|
|
||||||
builder.setItems(list.toArray(new String[list.size()]), new DialogInterface.OnClickListener(){
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
String filterId;
|
|
||||||
if (which == 0) {
|
|
||||||
filterId = PoiFiltersHelper.getOsmDefinedFilterId(null);
|
|
||||||
} else if (which <= userDefined.size()) {
|
|
||||||
filterId = userDefined.get(which - 1).getFilterId();
|
|
||||||
} else {
|
|
||||||
filterId = PoiFiltersHelper.getOsmDefinedFilterId(AmenityType.values()[which - userDefined.size() - 1]);
|
|
||||||
}
|
|
||||||
if(filterId.equals(PoiFilter.CUSTOM_FILTER_ID)){
|
|
||||||
Intent newIntent = new Intent(MapActivity.this, EditPOIFilterActivity.class);
|
|
||||||
newIntent.putExtra(EditPOIFilterActivity.AMENITY_FILTER, filterId);
|
|
||||||
newIntent.putExtra(EditPOIFilterActivity.SEARCH_LAT, mapView.getLatitude());
|
|
||||||
newIntent.putExtra(EditPOIFilterActivity.SEARCH_LON, mapView.getLongitude());
|
|
||||||
startActivity(newIntent);
|
|
||||||
} else {
|
|
||||||
settings.setPoiFilterForMap(filterId);
|
|
||||||
poiMapLayer.setFilter(poiFilters.getFilterById(filterId));
|
|
||||||
mapView.refreshMap();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
builder.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void selectMapLayer(){
|
|
||||||
Map<String, String> entriesMap = settings.getTileSourceEntries();
|
|
||||||
Builder builder = new AlertDialog.Builder(this);
|
|
||||||
final ArrayList<String> keys = new ArrayList<String>(entriesMap.keySet());
|
|
||||||
String[] items = new String[entriesMap.size() + 1];
|
|
||||||
items[0] = getString(R.string.vector_data);
|
|
||||||
int i = 1;
|
|
||||||
for(String it : entriesMap.values()){
|
|
||||||
items[i++] = it;
|
|
||||||
}
|
|
||||||
builder.setItems(items, new DialogInterface.OnClickListener(){
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
if(which == 0){
|
|
||||||
MapRenderRepositories r = ((OsmandApplication)getApplication()).getResourceManager().getRenderer();
|
|
||||||
if(r.isEmpty()){
|
|
||||||
Toast.makeText(MapActivity.this, getString(R.string.no_vector_map_loaded), Toast.LENGTH_LONG).show();
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
settings.setUsingMapVectorData(true);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
settings.setMapTileSource(keys.get(which - 1));
|
|
||||||
settings.setUsingMapVectorData(false);
|
|
||||||
}
|
|
||||||
updateMapSource();
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
builder.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void contextMenuPoint(final double latitude, final double longitude){
|
public void contextMenuPoint(final double latitude, final double longitude){
|
||||||
contextMenuPoint(latitude, longitude, null, null);
|
contextMenuPoint(latitude, longitude, null, null);
|
||||||
}
|
}
|
||||||
|
@ -1633,7 +1235,7 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
} else if(standardId == R.string.context_menu_item_add_waypoint){
|
} else if(standardId == R.string.context_menu_item_add_waypoint){
|
||||||
mapActions.addWaypoint(latitude, longitude, savingTrackHelper);
|
mapActions.addWaypoint(latitude, longitude, savingTrackHelper);
|
||||||
} else if(standardId == R.string.context_menu_item_open_bug){
|
} else if(standardId == R.string.context_menu_item_open_bug){
|
||||||
osmBugsLayer.openBug(MapActivity.this, getLayoutInflater(), mapView, latitude, longitude);
|
mapLayers.getOsmBugsLayer().openBug(MapActivity.this, getLayoutInflater(), mapView, latitude, longitude);
|
||||||
} else if(standardId == R.string.context_menu_item_update_map){
|
} else if(standardId == R.string.context_menu_item_update_map){
|
||||||
mapActions.reloadTile(mapView.getZoom(), latitude, longitude);
|
mapActions.reloadTile(mapView.getZoom(), latitude, longitude);
|
||||||
} else if(standardId == R.string.context_menu_item_download_map){
|
} else if(standardId == R.string.context_menu_item_download_map){
|
||||||
|
@ -1650,6 +1252,4 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
|
||||||
public void onAccuracyChanged(Sensor sensor, int accuracy) {
|
public void onAccuracyChanged(Sensor sensor, int accuracy) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
482
OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java
Normal file
482
OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java
Normal file
|
@ -0,0 +1,482 @@
|
||||||
|
package net.osmand.plus.activities;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import net.osmand.Algoritms;
|
||||||
|
import net.osmand.FavouritePoint;
|
||||||
|
import net.osmand.GPXUtilities;
|
||||||
|
import net.osmand.OsmAndFormatter;
|
||||||
|
import net.osmand.GPXUtilities.GPXFileResult;
|
||||||
|
import net.osmand.GPXUtilities.WptPt;
|
||||||
|
import net.osmand.data.AmenityType;
|
||||||
|
import net.osmand.map.ITileSource;
|
||||||
|
import net.osmand.osm.LatLon;
|
||||||
|
import net.osmand.plus.OsmandSettings;
|
||||||
|
import net.osmand.plus.PoiFilter;
|
||||||
|
import net.osmand.plus.PoiFiltersHelper;
|
||||||
|
import net.osmand.plus.R;
|
||||||
|
import net.osmand.plus.ResourceManager;
|
||||||
|
import net.osmand.plus.SQLiteTileSource;
|
||||||
|
import net.osmand.plus.render.MapRenderRepositories;
|
||||||
|
import net.osmand.plus.render.MapVectorLayer;
|
||||||
|
import net.osmand.plus.views.ContextMenuLayer;
|
||||||
|
import net.osmand.plus.views.FavoritesLayer;
|
||||||
|
import net.osmand.plus.views.GPXLayer;
|
||||||
|
import net.osmand.plus.views.MapControlsLayer;
|
||||||
|
import net.osmand.plus.views.MapInfoLayer;
|
||||||
|
import net.osmand.plus.views.MapTileLayer;
|
||||||
|
import net.osmand.plus.views.OsmBugsLayer;
|
||||||
|
import net.osmand.plus.views.OsmandMapTileView;
|
||||||
|
import net.osmand.plus.views.POIMapLayer;
|
||||||
|
import net.osmand.plus.views.PointLocationLayer;
|
||||||
|
import net.osmand.plus.views.PointNavigationLayer;
|
||||||
|
import net.osmand.plus.views.RouteInfoLayer;
|
||||||
|
import net.osmand.plus.views.RouteLayer;
|
||||||
|
import net.osmand.plus.views.TransportInfoLayer;
|
||||||
|
import net.osmand.plus.views.TransportStopsLayer;
|
||||||
|
import net.osmand.plus.views.YandexTrafficLayer;
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.app.ProgressDialog;
|
||||||
|
import android.app.AlertDialog.Builder;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Looper;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object is responsible to maintain layers using by map activity
|
||||||
|
*/
|
||||||
|
public class MapActivityLayers {
|
||||||
|
|
||||||
|
private final MapActivity activity;
|
||||||
|
|
||||||
|
// the order of layer should be preserved ! when you are inserting new layer
|
||||||
|
private MapTileLayer mapTileLayer;
|
||||||
|
private MapVectorLayer mapVectorLayer;
|
||||||
|
private GPXLayer gpxLayer;
|
||||||
|
private RouteLayer routeLayer;
|
||||||
|
private YandexTrafficLayer trafficLayer;
|
||||||
|
private OsmBugsLayer osmBugsLayer;
|
||||||
|
private POIMapLayer poiMapLayer;
|
||||||
|
private FavoritesLayer favoritesLayer;
|
||||||
|
private TransportStopsLayer transportStopsLayer;
|
||||||
|
private TransportInfoLayer transportInfoLayer;
|
||||||
|
private PointLocationLayer locationLayer;
|
||||||
|
private PointNavigationLayer navigationLayer;
|
||||||
|
private MapInfoLayer mapInfoLayer;
|
||||||
|
private ContextMenuLayer contextMenuLayer;
|
||||||
|
private RouteInfoLayer routeInfoLayer;
|
||||||
|
|
||||||
|
|
||||||
|
public MapActivityLayers(MapActivity activity) {
|
||||||
|
this.activity = activity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OsmandApplication getApplication(){
|
||||||
|
return (OsmandApplication) activity.getApplication();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void createLayers(OsmandMapTileView mapView){
|
||||||
|
|
||||||
|
RoutingHelper routingHelper = ((OsmandApplication) getApplication()).getRoutingHelper();
|
||||||
|
|
||||||
|
mapTileLayer = new MapTileLayer();
|
||||||
|
mapView.addLayer(mapTileLayer, 0.0f);
|
||||||
|
mapView.setMainLayer(mapTileLayer);
|
||||||
|
|
||||||
|
// 0.5 layer
|
||||||
|
mapVectorLayer = new MapVectorLayer(mapTileLayer);
|
||||||
|
mapView.addLayer(mapVectorLayer, 0.5f);
|
||||||
|
|
||||||
|
// 0.6 gpx layer
|
||||||
|
gpxLayer = new GPXLayer();
|
||||||
|
mapView.addLayer(gpxLayer, 0.6f);
|
||||||
|
|
||||||
|
// 1. route layer
|
||||||
|
routeLayer = new RouteLayer(routingHelper);
|
||||||
|
mapView.addLayer(routeLayer, 1);
|
||||||
|
|
||||||
|
// 1.5. traffic layer
|
||||||
|
trafficLayer = new YandexTrafficLayer();
|
||||||
|
mapView.addLayer(trafficLayer, 1.5f);
|
||||||
|
|
||||||
|
|
||||||
|
// 2. osm bugs layer
|
||||||
|
osmBugsLayer = new OsmBugsLayer(activity);
|
||||||
|
// 3. poi layer
|
||||||
|
poiMapLayer = new POIMapLayer();
|
||||||
|
// 4. favorites layer
|
||||||
|
favoritesLayer = new FavoritesLayer();
|
||||||
|
// 5. transport layer
|
||||||
|
transportStopsLayer = new TransportStopsLayer();
|
||||||
|
// 5.5 transport info layer
|
||||||
|
transportInfoLayer = new TransportInfoLayer(TransportRouteHelper.getInstance());
|
||||||
|
mapView.addLayer(transportInfoLayer, 5.5f);
|
||||||
|
// 6. point navigation layer
|
||||||
|
navigationLayer = new PointNavigationLayer();
|
||||||
|
mapView.addLayer(navigationLayer, 6);
|
||||||
|
// 7. point location layer
|
||||||
|
locationLayer = new PointLocationLayer();
|
||||||
|
mapView.addLayer(locationLayer, 7);
|
||||||
|
// 8. map info layer
|
||||||
|
mapInfoLayer = new MapInfoLayer(activity, routeLayer);
|
||||||
|
mapView.addLayer(mapInfoLayer, 8);
|
||||||
|
// 9. context menu layer
|
||||||
|
contextMenuLayer = new ContextMenuLayer(activity);
|
||||||
|
mapView.addLayer(contextMenuLayer, 9);
|
||||||
|
// 10. route info layer
|
||||||
|
routeInfoLayer = new RouteInfoLayer(routingHelper, (LinearLayout) activity.findViewById(R.id.RouteLayout));
|
||||||
|
mapView.addLayer(routeInfoLayer, 10);
|
||||||
|
|
||||||
|
// 11. route info layer
|
||||||
|
MapControlsLayer mapControlsLayer = new MapControlsLayer(activity);
|
||||||
|
mapView.addLayer(mapControlsLayer, 11);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void updateLayers(OsmandMapTileView mapView){
|
||||||
|
OsmandSettings settings = getApplication().getSettings();
|
||||||
|
if(mapView.getLayers().contains(transportStopsLayer) != settings.SHOW_TRANSPORT_OVER_MAP.get()){
|
||||||
|
if(settings.SHOW_TRANSPORT_OVER_MAP.get()){
|
||||||
|
mapView.addLayer(transportStopsLayer, 5);
|
||||||
|
} else {
|
||||||
|
mapView.removeLayer(transportStopsLayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(mapView.getLayers().contains(osmBugsLayer) != settings.SHOW_OSM_BUGS.get()){
|
||||||
|
if(settings.SHOW_OSM_BUGS.get()){
|
||||||
|
mapView.addLayer(osmBugsLayer, 2);
|
||||||
|
} else {
|
||||||
|
mapView.removeLayer(osmBugsLayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mapView.getLayers().contains(poiMapLayer) != settings.SHOW_POI_OVER_MAP.get()){
|
||||||
|
if(settings.SHOW_POI_OVER_MAP.get()){
|
||||||
|
mapView.addLayer(poiMapLayer, 3);
|
||||||
|
} else {
|
||||||
|
mapView.removeLayer(poiMapLayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mapView.getLayers().contains(favoritesLayer) != settings.SHOW_FAVORITES.get()){
|
||||||
|
if(settings.SHOW_FAVORITES.get()){
|
||||||
|
mapView.addLayer(favoritesLayer, 4);
|
||||||
|
} else {
|
||||||
|
mapView.removeLayer(favoritesLayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trafficLayer.setVisible(settings.SHOW_YANDEX_TRAFFIC.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateMapSource(OsmandMapTileView mapView){
|
||||||
|
OsmandSettings settings = getApplication().getSettings();
|
||||||
|
boolean showTiles = !settings.isUsingMapVectorData();
|
||||||
|
ITileSource source = showTiles ? settings.getMapTileSource() : null;
|
||||||
|
if (showTiles == mapTileLayer.isVisible() && Algoritms.objectEquals(mapTileLayer.getMap(), source)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean vectorData = settings.isUsingMapVectorData();
|
||||||
|
OsmandApplication app = ((OsmandApplication)getApplication());
|
||||||
|
ResourceManager rm = app.getResourceManager();
|
||||||
|
if(vectorData && !app.isApplicationInitializing()){
|
||||||
|
if(rm.getRenderer().isEmpty()){
|
||||||
|
Toast.makeText(activity, activity.getString(R.string.no_vector_map_loaded), Toast.LENGTH_LONG).show();
|
||||||
|
vectorData = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ITileSource newSource = settings.getMapTileSource();
|
||||||
|
ITileSource oldMap = mapTileLayer.getMap();
|
||||||
|
if(oldMap instanceof SQLiteTileSource){
|
||||||
|
((SQLiteTileSource)oldMap).closeDB();
|
||||||
|
}
|
||||||
|
mapTileLayer.setMap(newSource);
|
||||||
|
mapTileLayer.setVisible(!vectorData);
|
||||||
|
mapVectorLayer.setVisible(vectorData);
|
||||||
|
if(vectorData){
|
||||||
|
mapView.setMainLayer(mapVectorLayer);
|
||||||
|
} else {
|
||||||
|
mapView.setMainLayer(mapTileLayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void openLayerSelectionDialog(final OsmandMapTileView mapView){
|
||||||
|
List<String> layersList = new ArrayList<String>();
|
||||||
|
final OsmandSettings settings = getApplication().getSettings();
|
||||||
|
layersList.add(getString(R.string.layer_map));
|
||||||
|
layersList.add(getString(R.string.layer_poi));
|
||||||
|
layersList.add(getString(R.string.layer_transport));
|
||||||
|
layersList.add(getString(R.string.layer_osm_bugs));
|
||||||
|
layersList.add(getString(R.string.layer_favorites));
|
||||||
|
layersList.add(getString(R.string.layer_gpx_layer));
|
||||||
|
final int routeInfoInd = routeInfoLayer.couldBeVisible() ? layersList.size() : -1;
|
||||||
|
if(routeInfoLayer.couldBeVisible()){
|
||||||
|
layersList.add(getString(R.string.layer_route));
|
||||||
|
}
|
||||||
|
final int transportRouteInfoInd = !TransportRouteHelper.getInstance().routeIsCalculated() ? - 1 : layersList.size();
|
||||||
|
if(transportRouteInfoInd > -1){
|
||||||
|
layersList.add(getString(R.string.layer_transport_route));
|
||||||
|
}
|
||||||
|
final int trafficInd = layersList.size();
|
||||||
|
layersList.add(getString(R.string.layer_yandex_traffic));
|
||||||
|
|
||||||
|
final boolean[] selected = new boolean[layersList.size()];
|
||||||
|
Arrays.fill(selected, true);
|
||||||
|
selected[1] = settings.SHOW_POI_OVER_MAP.get();
|
||||||
|
selected[2] = settings.SHOW_TRANSPORT_OVER_MAP.get();
|
||||||
|
selected[3] = settings.SHOW_OSM_BUGS.get();
|
||||||
|
selected[4] = settings.SHOW_FAVORITES.get();
|
||||||
|
selected[5] = gpxLayer.isVisible();
|
||||||
|
selected[trafficInd] = trafficLayer.isVisible();
|
||||||
|
if(routeInfoInd != -1){
|
||||||
|
selected[routeInfoInd] = routeInfoLayer.isUserDefinedVisible();
|
||||||
|
}
|
||||||
|
if(transportRouteInfoInd != -1){
|
||||||
|
selected[transportRouteInfoInd] = transportInfoLayer.isVisible();
|
||||||
|
}
|
||||||
|
|
||||||
|
Builder builder = new AlertDialog.Builder(activity);
|
||||||
|
builder.setMultiChoiceItems(layersList.toArray(new String[layersList.size()]), selected, new DialogInterface.OnMultiChoiceClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int item, boolean isChecked) {
|
||||||
|
if (item == 0) {
|
||||||
|
dialog.dismiss();
|
||||||
|
selectMapLayer(mapView);
|
||||||
|
} else if(item == 1){
|
||||||
|
if(isChecked){
|
||||||
|
selectPOIFilterLayer(mapView);
|
||||||
|
}
|
||||||
|
settings.SHOW_POI_OVER_MAP.set(isChecked);
|
||||||
|
} else if(item == 2){
|
||||||
|
settings.SHOW_TRANSPORT_OVER_MAP.set(isChecked);
|
||||||
|
} else if(item == 3){
|
||||||
|
settings.SHOW_OSM_BUGS.set(isChecked);
|
||||||
|
} else if(item == 4){
|
||||||
|
settings.SHOW_FAVORITES.set(isChecked);
|
||||||
|
} else if(item == 5){
|
||||||
|
if(gpxLayer.isVisible()){
|
||||||
|
gpxLayer.clearCurrentGPX();
|
||||||
|
getApplication().getFavorites().setFavoritePointsFromGPXFile(null);
|
||||||
|
} else {
|
||||||
|
dialog.dismiss();
|
||||||
|
useGPXFileLayer(false, null, mapView);
|
||||||
|
}
|
||||||
|
} else if(item == routeInfoInd){
|
||||||
|
routeInfoLayer.setVisible(isChecked);
|
||||||
|
} else if(item == transportRouteInfoInd){
|
||||||
|
transportInfoLayer.setVisible(isChecked);
|
||||||
|
} else if(item == trafficInd){
|
||||||
|
settings.SHOW_YANDEX_TRAFFIC.set(isChecked);
|
||||||
|
}
|
||||||
|
updateLayers(mapView);
|
||||||
|
mapView.refreshMap();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
builder.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void useGPXFileLayer(final boolean useRouting, final LatLon endForRouting, final OsmandMapTileView mapView) {
|
||||||
|
final List<String> list = new ArrayList<String>();
|
||||||
|
final OsmandSettings settings = getApplication().getSettings();
|
||||||
|
final File dir = settings.extendOsmandPath(ResourceManager.APP_DIR + SavingTrackHelper.TRACKS_PATH);
|
||||||
|
if (dir != null && dir.canRead()) {
|
||||||
|
File[] files = dir.listFiles();
|
||||||
|
if (files != null) {
|
||||||
|
Arrays.sort(files, new Comparator<File>() {
|
||||||
|
@Override
|
||||||
|
public int compare(File object1, File object2) {
|
||||||
|
if (object1.lastModified() > object2.lastModified()) {
|
||||||
|
return -1;
|
||||||
|
} else if (object1.lastModified() == object2.lastModified()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
for (File f : files) {
|
||||||
|
if (f.getName().endsWith(".gpx")) { //$NON-NLS-1$
|
||||||
|
list.add(f.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(list.isEmpty()){
|
||||||
|
Toast.makeText(activity, R.string.gpx_files_not_found, Toast.LENGTH_LONG).show();
|
||||||
|
} else {
|
||||||
|
Builder builder = new AlertDialog.Builder(activity);
|
||||||
|
builder.setItems(list.toArray(new String[list.size()]), new DialogInterface.OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
dialog.dismiss();
|
||||||
|
final ProgressDialog dlg = ProgressDialog.show(activity, getString(R.string.loading),
|
||||||
|
getString(R.string.loading_data));
|
||||||
|
final File f = new File(dir, list.get(which));
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Looper.prepare();
|
||||||
|
final GPXFileResult res = GPXUtilities.loadGPXFile(activity, f);
|
||||||
|
if (res.error != null) {
|
||||||
|
activity.runOnUiThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Toast.makeText(activity, res.error, Toast.LENGTH_LONG).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
dlg.dismiss();
|
||||||
|
if(useRouting){
|
||||||
|
activity.runOnUiThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
activity.useGPXRouting(endForRouting, res);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
settings.SHOW_FAVORITES.set(true);
|
||||||
|
List<FavouritePoint> pts = new ArrayList<FavouritePoint>();
|
||||||
|
for(WptPt p : res.wayPoints){
|
||||||
|
FavouritePoint pt = new FavouritePoint();
|
||||||
|
pt.setLatitude(p.lat);
|
||||||
|
pt.setLongitude(p.lon);
|
||||||
|
pt.setName(p.name);
|
||||||
|
pts.add(pt);
|
||||||
|
}
|
||||||
|
getApplication().getFavorites().setFavoritePointsFromGPXFile(pts);
|
||||||
|
gpxLayer.setTracks(res.locations);
|
||||||
|
}
|
||||||
|
mapView.refreshMap();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}, "Loading gpx").start(); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
builder.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void selectPOIFilterLayer(final OsmandMapTileView mapView){
|
||||||
|
final List<PoiFilter> userDefined = new ArrayList<PoiFilter>();
|
||||||
|
List<String> list = new ArrayList<String>();
|
||||||
|
list.add(getString(R.string.any_poi));
|
||||||
|
|
||||||
|
final PoiFiltersHelper poiFilters = ((OsmandApplication)getApplication()).getPoiFilters();
|
||||||
|
for (PoiFilter f : poiFilters.getUserDefinedPoiFilters()) {
|
||||||
|
userDefined.add(f);
|
||||||
|
list.add(f.getName());
|
||||||
|
}
|
||||||
|
for(AmenityType t : AmenityType.values()){
|
||||||
|
list.add(OsmAndFormatter.toPublicString(t, activity));
|
||||||
|
}
|
||||||
|
Builder builder = new AlertDialog.Builder(activity);
|
||||||
|
builder.setItems(list.toArray(new String[list.size()]), new DialogInterface.OnClickListener(){
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
String filterId;
|
||||||
|
if (which == 0) {
|
||||||
|
filterId = PoiFiltersHelper.getOsmDefinedFilterId(null);
|
||||||
|
} else if (which <= userDefined.size()) {
|
||||||
|
filterId = userDefined.get(which - 1).getFilterId();
|
||||||
|
} else {
|
||||||
|
filterId = PoiFiltersHelper.getOsmDefinedFilterId(AmenityType.values()[which - userDefined.size() - 1]);
|
||||||
|
}
|
||||||
|
if(filterId.equals(PoiFilter.CUSTOM_FILTER_ID)){
|
||||||
|
Intent newIntent = new Intent(activity, EditPOIFilterActivity.class);
|
||||||
|
newIntent.putExtra(EditPOIFilterActivity.AMENITY_FILTER, filterId);
|
||||||
|
newIntent.putExtra(EditPOIFilterActivity.SEARCH_LAT, mapView.getLatitude());
|
||||||
|
newIntent.putExtra(EditPOIFilterActivity.SEARCH_LON, mapView.getLongitude());
|
||||||
|
activity.startActivity(newIntent);
|
||||||
|
} else {
|
||||||
|
getApplication().getSettings().setPoiFilterForMap(filterId);
|
||||||
|
poiMapLayer.setFilter(poiFilters.getFilterById(filterId));
|
||||||
|
mapView.refreshMap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
builder.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void selectMapLayer(final OsmandMapTileView mapView){
|
||||||
|
final OsmandSettings settings = getApplication().getSettings();
|
||||||
|
Map<String, String> entriesMap = settings.getTileSourceEntries();
|
||||||
|
Builder builder = new AlertDialog.Builder(activity);
|
||||||
|
final ArrayList<String> keys = new ArrayList<String>(entriesMap.keySet());
|
||||||
|
String[] items = new String[entriesMap.size() + 1];
|
||||||
|
items[0] = getString(R.string.vector_data);
|
||||||
|
int i = 1;
|
||||||
|
for(String it : entriesMap.values()){
|
||||||
|
items[i++] = it;
|
||||||
|
}
|
||||||
|
builder.setItems(items, new DialogInterface.OnClickListener(){
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
if(which == 0){
|
||||||
|
MapRenderRepositories r = ((OsmandApplication)getApplication()).getResourceManager().getRenderer();
|
||||||
|
if(r.isEmpty()){
|
||||||
|
Toast.makeText(activity, getString(R.string.no_vector_map_loaded), Toast.LENGTH_LONG).show();
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
settings.setUsingMapVectorData(true);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
settings.setMapTileSource(keys.get(which - 1));
|
||||||
|
settings.setUsingMapVectorData(false);
|
||||||
|
}
|
||||||
|
updateMapSource(mapView);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
builder.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getString(int resId) {
|
||||||
|
return activity.getString(resId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PointNavigationLayer getNavigationLayer() {
|
||||||
|
return navigationLayer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ContextMenuLayer getContextMenuLayer() {
|
||||||
|
return contextMenuLayer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FavoritesLayer getFavoritesLayer() {
|
||||||
|
return favoritesLayer;
|
||||||
|
}
|
||||||
|
public PointLocationLayer getLocationLayer() {
|
||||||
|
return locationLayer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MapInfoLayer getMapInfoLayer() {
|
||||||
|
return mapInfoLayer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public POIMapLayer getPoiMapLayer() {
|
||||||
|
return poiMapLayer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OsmBugsLayer getOsmBugsLayer() {
|
||||||
|
return osmBugsLayer;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue