summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java14
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java12
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java46
3 files changed, 51 insertions, 21 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java
index be301839eb..79d36667ff 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java
@@ -37,10 +37,12 @@ import com.mapbox.mapboxsdk.constants.MyLocationTracking;
import com.mapbox.mapboxsdk.constants.Style;
import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.geometry.LatLngBounds;
+import com.mapbox.mapboxsdk.location.LocationSource;
import com.mapbox.mapboxsdk.maps.widgets.MyLocationViewSettings;
import com.mapbox.mapboxsdk.style.layers.Filter;
import com.mapbox.mapboxsdk.style.layers.Layer;
import com.mapbox.mapboxsdk.style.sources.Source;
+import com.mapbox.services.android.telemetry.location.LocationEngine;
import com.mapbox.services.commons.geojson.Feature;
import java.lang.reflect.ParameterizedType;
@@ -1773,6 +1775,18 @@ public final class MapboxMap {
}
/**
+ * Replaces the location source of the my-location layer.
+ *
+ * @param locationSource A {@link LocationEngine} location source to use in the my-location layer.
+ * Set to null to use the default {@link LocationSource}
+ * location source.
+ */
+ @UiThread
+ public void setLocationSource(@Nullable LocationEngine locationSource) {
+ trackingSettings.setLocationSource(locationSource);
+ }
+
+ /**
* Sets a callback that's invoked when the location tracking mode changes.
*
* @param listener The callback that's invoked when the location tracking mode changes.
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java
index 476f4554c1..25b60aa72d 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java
@@ -12,6 +12,7 @@ import com.mapbox.mapboxsdk.constants.MyBearingTracking;
import com.mapbox.mapboxsdk.constants.MyLocationTracking;
import com.mapbox.mapboxsdk.location.LocationSource;
import com.mapbox.mapboxsdk.maps.widgets.MyLocationView;
+import com.mapbox.services.android.telemetry.location.LocationEngine;
import com.mapbox.services.android.telemetry.location.LocationEngineListener;
import com.mapbox.services.android.telemetry.permissions.PermissionsManager;
@@ -26,6 +27,7 @@ public final class TrackingSettings {
private final UiSettings uiSettings;
private final FocalPointChangeListener focalPointChangedListener;
private final CameraZoomInvalidator zoomInvalidator;
+ private LocationEngine locationSource;
private LocationEngineListener myLocationListener;
private boolean myLocationEnabled;
@@ -45,6 +47,7 @@ public final class TrackingSettings {
}
void initialise(MapboxMapOptions options) {
+ locationSource = LocationSource.getLocationEngine(myLocationView.getContext());
setMyLocationEnabled(options.getLocationEnabled());
}
@@ -328,9 +331,9 @@ public final class TrackingSettings {
}
}
};
- LocationSource.getLocationEngine(myLocationView.getContext()).addLocationEngineListener(myLocationListener);
+ locationSource.addLocationEngineListener(myLocationListener);
} else {
- LocationSource.getLocationEngine(myLocationView.getContext()).removeLocationEngineListener(myLocationListener);
+ locationSource.removeLocationEngineListener(myLocationListener);
myLocationListener = null;
}
}
@@ -362,6 +365,11 @@ public final class TrackingSettings {
myLocationView.setEnabled(locationEnabled);
}
+ void setLocationSource(LocationEngine locationSource) {
+ this.locationSource = locationSource;
+ myLocationView.setLocationSource(locationSource);
+ }
+
void update() {
if (!myLocationView.isEnabled()) {
return;
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java
index d7f31b3faf..aecf3cc655 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java
@@ -58,6 +58,7 @@ public class MyLocationView extends View {
private LatLng latLng;
private Location location;
+ private LocationEngine locationSource;
private long locationUpdateTimestamp;
private float previousDirection;
@@ -320,8 +321,7 @@ public class MyLocationView extends View {
if (location != null) {
setCompass(location.getBearing() - bearing);
}
- } else if (myBearingTrackingMode == MyBearingTracking.COMPASS
- && compassListener.isSensorAvailable()) {
+ } else if (myBearingTrackingMode == MyBearingTracking.COMPASS && compassListener.isSensorAvailable()) {
setCompass(magneticHeading - bearing);
}
}
@@ -335,8 +335,7 @@ public class MyLocationView extends View {
}
public void onStart() {
- if (myBearingTrackingMode == MyBearingTracking.COMPASS
- && compassListener.isSensorAvailable()) {
+ if (myBearingTrackingMode == MyBearingTracking.COMPASS && compassListener.isSensorAvailable()) {
compassListener.onResume();
}
if (isEnabled()) {
@@ -369,7 +368,8 @@ public class MyLocationView extends View {
}
if (userLocationListener != null) {
- LocationSource.getLocationEngine(getContext()).removeLocationEngineListener(userLocationListener);
+ locationSource.removeLocationEngineListener(userLocationListener);
+ locationSource = null;
userLocationListener = null;
}
}
@@ -419,29 +419,32 @@ public class MyLocationView extends View {
* @param enableGps true if GPS is to be enabled, false if GPS is to be disabled
*/
private void toggleGps(boolean enableGps) {
- LocationEngine locationEngine = LocationSource.getLocationEngine(getContext());
+ if (locationSource == null) {
+ locationSource = LocationSource.getLocationEngine(this.getContext());
+ }
+
if (enableGps) {
// Set an initial location if one available
- Location lastLocation = locationEngine.getLastLocation();
+ Location lastLocation = locationSource.getLastLocation();
if (lastLocation != null) {
setLocation(lastLocation);
}
if (userLocationListener == null) {
- userLocationListener = new GpsLocationListener(this);
+ userLocationListener = new GpsLocationListener(this, locationSource);
}
- locationEngine.addLocationEngineListener(userLocationListener);
- locationEngine.activate();
+ locationSource.addLocationEngineListener(userLocationListener);
+ locationSource.activate();
} else {
// Disable location and user dot
location = null;
- locationEngine.removeLocationEngineListener(userLocationListener);
- locationEngine.deactivate();
+ locationSource.removeLocationEngineListener(userLocationListener);
+ locationSource.deactivate();
}
- locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY);
+ locationSource.setPriority(LocationEnginePriority.HIGH_ACCURACY);
}
public Location getLocation() {
@@ -460,8 +463,7 @@ public class MyLocationView extends View {
public void setMyBearingTrackingMode(@MyBearingTracking.Mode int myBearingTrackingMode) {
this.myBearingTrackingMode = myBearingTrackingMode;
- if (myBearingTrackingMode == MyBearingTracking.COMPASS
- && compassListener.isSensorAvailable()) {
+ if (myBearingTrackingMode == MyBearingTracking.COMPASS && compassListener.isSensorAvailable()) {
compassListener.onResume();
} else {
compassListener.onPause();
@@ -561,22 +563,28 @@ public class MyLocationView extends View {
contentPaddingY = (padding[1] - padding[3]) / 2;
}
+ public void setLocationSource(LocationEngine locationSource) {
+ this.locationSource = locationSource;
+ }
+
private static class GpsLocationListener implements LocationEngineListener {
private WeakReference<MyLocationView> userLocationView;
+ private WeakReference<LocationEngine> locationSource;
- GpsLocationListener(MyLocationView myLocationView) {
+ GpsLocationListener(MyLocationView myLocationView, LocationEngine locationEngine) {
userLocationView = new WeakReference<>(myLocationView);
+ locationSource = new WeakReference<>(locationEngine);
}
@Override
public void onConnected() {
MyLocationView locationView = userLocationView.get();
if (locationView != null) {
- LocationEngine locationSource = LocationSource.getLocationEngine(locationView.getContext());
- Location location = locationSource.getLastLocation();
+ LocationEngine locationEngine = locationSource.get();
+ Location location = locationEngine.getLastLocation();
locationView.setLocation(location);
- locationSource.requestLocationUpdates();
+ locationEngine.requestLocationUpdates();
}
}