diff options
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java')
-rw-r--r-- | platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java | 89 |
1 files changed, 66 insertions, 23 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java index 6652142be3..5129db08e8 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java @@ -4,16 +4,17 @@ import android.content.Context; import android.location.Location; import android.support.annotation.Nullable; -import com.mapbox.services.android.telemetry.location.LocationEngine; -import com.mapbox.services.android.telemetry.location.LocationEngineListener; -import com.mapbox.services.android.telemetry.location.LocationEnginePriority; -import com.mapbox.services.android.telemetry.permissions.PermissionsManager; +import com.mapbox.mapboxsdk.Mapbox; +import com.mapbox.services.android.core.location.LocationEngine; +import com.mapbox.services.android.core.location.LocationEngineListener; +import com.mapbox.services.android.core.location.LocationEnginePriority; import com.mapzen.android.lost.api.LocationListener; import com.mapzen.android.lost.api.LocationRequest; import com.mapzen.android.lost.api.LocationServices; import com.mapzen.android.lost.api.LostApiClient; /** + * LocationEngine using the Open Source Lost library * Manages locational updates. Contains methods to register and unregister location listeners. * <ul> * <li>You can register a LocationEngineListener with LocationSource#addLocationEngineListener(LocationEngineListener) @@ -27,8 +28,11 @@ import com.mapzen.android.lost.api.LostApiClient; * overhead). Do not unregister in Activity.onSaveInstanceState(), because this won't be called if the user moves back * in the history stack. * </p> + * + * @deprecated Use a {@link Mapbox#getLocationEngine()} instead. */ -public class LocationSource extends LocationEngine implements LocationListener { +@Deprecated +public class LocationSource extends LocationEngine implements LostApiClient.ConnectionCallbacks, LocationListener { private Context context; private LostApiClient lostApiClient; @@ -41,7 +45,16 @@ public class LocationSource extends LocationEngine implements LocationListener { public LocationSource(Context context) { super(); this.context = context.getApplicationContext(); - lostApiClient = new LostApiClient.Builder(this.context).build(); + lostApiClient = new LostApiClient.Builder(this.context) + .addConnectionCallbacks(this) + .build(); + } + + /** + * Constructs a location source instance. + * Needed to create empty location source implementations. + */ + public LocationSource() { } /** @@ -50,12 +63,9 @@ public class LocationSource extends LocationEngine implements LocationListener { */ @Override public void activate() { - if (!lostApiClient.isConnected()) { + if (lostApiClient != null && !lostApiClient.isConnected()) { lostApiClient.connect(); } - for (LocationEngineListener listener : locationListeners) { - listener.onConnected(); - } } /** @@ -65,7 +75,7 @@ public class LocationSource extends LocationEngine implements LocationListener { */ @Override public void deactivate() { - if (lostApiClient.isConnected()) { + if (lostApiClient != null && lostApiClient.isConnected()) { lostApiClient.disconnect(); } } @@ -82,6 +92,24 @@ public class LocationSource extends LocationEngine implements LocationListener { } /** + * Invoked when the location provider has connected. + */ + @Override + public void onConnected() { + for (LocationEngineListener listener : locationListeners) { + listener.onConnected(); + } + } + + /** + * Invoked when the location provider connection has been suspended. + */ + @Override + public void onConnectionSuspended() { + // Intentionally left empty + } + + /** * Returns the Last known location is the location provider is connected and location permissions are granted. * * @return the last known location @@ -89,9 +117,9 @@ public class LocationSource extends LocationEngine implements LocationListener { @Override @Nullable public Location getLastLocation() { - if (lostApiClient.isConnected() && PermissionsManager.areLocationPermissionsGranted(context)) { + if (lostApiClient.isConnected()) { //noinspection MissingPermission - return LocationServices.FusedLocationApi.getLastLocation(); + return LocationServices.FusedLocationApi.getLastLocation(lostApiClient); } return null; } @@ -101,13 +129,18 @@ public class LocationSource extends LocationEngine implements LocationListener { */ @Override public void requestLocationUpdates() { - // Common params - LocationRequest request = LocationRequest.create() - .setInterval(1000) - .setFastestInterval(1000) - .setSmallestDisplacement(3.0f); + LocationRequest request = LocationRequest.create(); + + if (interval != null) { + request.setInterval(interval); + } + if (fastestInterval != null) { + request.setFastestInterval(fastestInterval); + } + if (smallestDisplacement != null) { + request.setSmallestDisplacement(smallestDisplacement); + } - // Priority matching is straightforward if (priority == LocationEnginePriority.NO_POWER) { request.setPriority(LocationRequest.PRIORITY_NO_POWER); } else if (priority == LocationEnginePriority.LOW_POWER) { @@ -118,9 +151,9 @@ public class LocationSource extends LocationEngine implements LocationListener { request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); } - if (lostApiClient.isConnected() && PermissionsManager.areLocationPermissionsGranted(context)) { + if (lostApiClient.isConnected()) { //noinspection MissingPermission - LocationServices.FusedLocationApi.requestLocationUpdates(request, this); + LocationServices.FusedLocationApi.requestLocationUpdates(lostApiClient, request, this); } } @@ -130,11 +163,21 @@ public class LocationSource extends LocationEngine implements LocationListener { @Override public void removeLocationUpdates() { if (lostApiClient.isConnected()) { - LocationServices.FusedLocationApi.removeLocationUpdates(this); + LocationServices.FusedLocationApi.removeLocationUpdates(lostApiClient, this); } } /** + * Returns the location engine type. + * + * @return Lost type + */ + @Override + public Type obtainType() { + return Type.LOST; + } + + /** * Invoked when the Location has changed. * * @param location the new location @@ -145,4 +188,4 @@ public class LocationSource extends LocationEngine implements LocationListener { listener.onLocationChanged(location); } } -} +}
\ No newline at end of file |