Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Commit

Permalink
add a way to use a custom location source
Browse files Browse the repository at this point in the history
  • Loading branch information
Guardiola31337 committed Apr 11, 2017
1 parent 6a0c4e0 commit d3faa66
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,12 @@
import com.mapbox.mapboxsdk.constants.MyLocationTracking;
import com.mapbox.mapboxsdk.constants.Style;
import com.mapbox.mapboxsdk.geometry.LatLng;
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;
Expand Down Expand Up @@ -1730,6 +1732,18 @@ public void setOnMyLocationChangeListener(@Nullable MapboxMap.OnMyLocationChange
trackingSettings.setOnMyLocationChangeListener(listener);
}

/**
* 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.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
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;

Expand All @@ -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;
Expand All @@ -45,6 +47,7 @@ public final class TrackingSettings {
}

void initialise(MapboxMapOptions options) {
locationSource = LocationSource.getLocationEngine(myLocationView.getContext());
setMyLocationEnabled(options.getLocationEnabled());
}

Expand Down Expand Up @@ -328,9 +331,9 @@ public void onLocationChanged(Location location) {
}
}
};
LocationSource.getLocationEngine(myLocationView.getContext()).addLocationEngineListener(myLocationListener);
locationSource.addLocationEngineListener(myLocationListener);
} else {
LocationSource.getLocationEngine(myLocationView.getContext()).removeLocationEngineListener(myLocationListener);
locationSource.removeLocationEngineListener(myLocationListener);
myLocationListener = null;
}
}
Expand Down Expand Up @@ -362,6 +365,11 @@ void setMyLocationEnabled(boolean locationEnabled) {
myLocationView.setEnabled(locationEnabled);
}

void setLocationSource(LocationEngine locationSource) {
this.locationSource = locationSource;
myLocationView.setLocationSource(locationSource);
}

void update() {
if (!myLocationView.isEnabled()) {
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ public class MyLocationView extends View {

private LatLng latLng;
private Location location;
private LocationEngine locationSource;
private long locationUpdateTimestamp;
private float previousDirection;

Expand Down Expand Up @@ -320,8 +321,7 @@ public void setBearing(double bearing) {
if (location != null) {
setCompass(location.getBearing() - bearing);
}
} else if (myBearingTrackingMode == MyBearingTracking.COMPASS
&& compassListener.isSensorAvailable()) {
} else if (myBearingTrackingMode == MyBearingTracking.COMPASS && compassListener.isSensorAvailable()) {
setCompass(magneticHeading - bearing);
}
}
Expand All @@ -335,8 +335,7 @@ public void setCameraPosition(CameraPosition position) {
}

public void onStart() {
if (myBearingTrackingMode == MyBearingTracking.COMPASS
&& compassListener.isSensorAvailable()) {
if (myBearingTrackingMode == MyBearingTracking.COMPASS && compassListener.isSensorAvailable()) {
compassListener.onResume();
}
if (isEnabled()) {
Expand Down Expand Up @@ -369,7 +368,8 @@ protected void onDetachedFromWindow() {
}

if (userLocationListener != null) {
LocationSource.getLocationEngine(getContext()).removeLocationEngineListener(userLocationListener);
locationSource.removeLocationEngineListener(userLocationListener);
locationSource = null;
userLocationListener = null;
}
}
Expand Down Expand Up @@ -419,29 +419,32 @@ public void onRestoreInstanceState(Parcelable state) {
* @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() {
Expand All @@ -460,8 +463,7 @@ public void setLocation(Location location) {

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();
Expand Down Expand Up @@ -561,22 +563,29 @@ public void setContentPadding(int[] padding) {
contentPaddingY = (padding[1] - padding[3]) / 2;
}

public void setLocationSource(LocationEngine locationSource) {
this.locationSource = locationSource;
toggleGps(isEnabled());
}

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();
}
}

Expand Down

0 comments on commit d3faa66

Please sign in to comment.