summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location
diff options
context:
space:
mode:
authorAntonio Zugaldia <antonio@mapbox.com>2017-02-03 15:12:13 -0500
committerGitHub <noreply@github.com>2017-02-03 15:12:13 -0500
commitc97ec3be0397290e172299c49361f5033270f150 (patch)
treec66ceec30a95c484e5df9fabe1a22d8381bd8b19 /platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location
parente5c9db47931174911f0403a1f640a5ae33814b60 (diff)
downloadqtlocation-mapboxgl-c97ec3be0397290e172299c49361f5033270f150.tar.gz
[android] Extract telemetry into MAS
* [android] add the mapbox-android-telemetry module dependency. * update javadoc
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationListener.java17
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationServices.java213
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java144
3 files changed, 144 insertions, 230 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationListener.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationListener.java
deleted file mode 100644
index 7d86d8b096..0000000000
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationListener.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.mapbox.mapboxsdk.location;
-
-import android.location.Location;
-
-/**
- * Callback interface for when a location change occurs.
- */
-public interface LocationListener {
-
- /**
- * Callback method for receiving location updates from LocationServices.
- *
- * @param location The new Location data
- */
- void onLocationChanged(Location location);
-
-}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationServices.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationServices.java
deleted file mode 100644
index 364d925d37..0000000000
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationServices.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package com.mapbox.mapboxsdk.location;
-
-import android.Manifest;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.location.Location;
-import android.location.LocationManager;
-import android.support.annotation.NonNull;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.content.LocalBroadcastManager;
-
-import timber.log.Timber;
-
-import com.mapbox.mapboxsdk.telemetry.TelemetryLocationReceiver;
-import com.mapzen.android.lost.api.LocationRequest;
-import com.mapzen.android.lost.api.LostApiClient;
-
-import java.util.concurrent.CopyOnWriteArrayList;
-
-import static com.mapzen.android.lost.api.LocationServices.FusedLocationApi;
-
-/**
- * Manages locational updates. Contains methods to register and unregister location listeners.
- * <ul>
- * <li>You can register a {@link LocationListener} with {@link #addLocationListener(LocationListener)} to receive
- * location updates.</li>
- * <li> You can unregister a {@link LocationListener} with {@link #removeLocationListener(LocationListener)}.</li>
- * </ul>
- * <p>
- * Note: If registering a listener in your Activity.onStart() implementation, you should unregister it in
- * Activity.onStop(). (You won't receive location updates when paused, and this will cut down on unnecessary system
- * overhead). Do not unregister in Activity.onSaveInstanceState(), because this won't be called if the user moves back
- * in the history stack.
- * </p>
- */
-public class LocationServices implements LostApiClient.ConnectionCallbacks,
- com.mapzen.android.lost.api.LocationListener {
-
- private static LocationServices instance;
-
- private Context context;
- private LostApiClient locationClient;
- private Location lastLocation;
-
- private CopyOnWriteArrayList<LocationListener> locationListeners;
-
- private boolean isGpsEnabled;
-
- /**
- * Private constructor for singleton LocationServices
- */
- private LocationServices(Context context) {
- super();
- this.context = context;
- // Setup location services
- locationClient = new LostApiClient.Builder(context).addConnectionCallbacks(this).build();
- locationListeners = new CopyOnWriteArrayList<>();
- }
-
- /**
- * Primary (singleton) access method for LocationServices
- *
- * @param context Context
- * @return LocationServices
- */
- public static LocationServices getLocationServices(@NonNull final Context context) {
- if (instance == null) {
- instance = new LocationServices(context.getApplicationContext());
- }
- return instance;
- }
-
- /**
- * Enabled / Disable GPS focused location tracking
- *
- * @param enableGPS true if GPS is to be enabled, false if GPS is to be disabled
- */
- public void toggleGPS(boolean enableGPS) {
- if (!areLocationPermissionsGranted()) {
- Timber.w("Location Permissions Not Granted Yet. Try again after requesting.");
- return;
- }
-
- // Disconnect
- if (locationClient.isConnected()) {
- // Disconnect first to ensure that the new requests are GPS
- FusedLocationApi.removeLocationUpdates(locationClient, this);
- locationClient.disconnect();
- }
- isGpsEnabled = enableGPS;
-
- // Setup Fresh
- locationClient.connect();
- }
-
- @Override
- public void onConnected() {
- // noinspection MissingPermission
- Location lastLocation = FusedLocationApi.getLastLocation(locationClient);
- if (lastLocation != null) {
- this.lastLocation = lastLocation;
- }
-
- LocationRequest locationRequest;
-
- if (isGpsEnabled) {
- // LocationRequest Tuned for GPS
- locationRequest = LocationRequest.create()
- .setFastestInterval(1000)
- .setSmallestDisplacement(3.0f)
- .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
- // noinspection MissingPermission
- FusedLocationApi.requestLocationUpdates(locationClient, locationRequest, this);
- } else {
- // LocationRequest Tuned for PASSIVE
- locationRequest = LocationRequest.create()
- .setFastestInterval(1000)
- .setSmallestDisplacement(3.0f)
- .setPriority(LocationRequest.PRIORITY_NO_POWER);
- // noinspection MissingPermission
- FusedLocationApi.requestLocationUpdates(locationClient, locationRequest, this);
- }
- }
-
- @Override
- public void onConnectionSuspended() {
- }
-
- /**
- * Returns if the GPS sensor is currently enabled
- *
- * @return active state of the GPS
- */
- public boolean isGpsEnabled() {
- return isGpsEnabled;
- }
-
- /**
- * Called when the location has changed.
- *
- * @param location The updated location
- */
- @Override
- public void onLocationChanged(Location location) {
- // Timber.d("onLocationChanged()..." + location);
- this.lastLocation = location;
-
- // Update Listeners
- for (LocationListener listener : this.locationListeners) {
- listener.onLocationChanged(location);
- }
-
- // Update the Telemetry Receiver
- Intent locIntent = new Intent(TelemetryLocationReceiver.INTENT_STRING);
- locIntent.putExtra(LocationManager.KEY_LOCATION_CHANGED, location);
- LocalBroadcastManager.getInstance(context.getApplicationContext()).sendBroadcast(locIntent);
- }
-
- /**
- * Last known location
- *
- * @return Last known location data
- */
- public Location getLastLocation() {
- return lastLocation;
- }
-
- /**
- * Registers a LocationListener to receive location updates
- *
- * @param locationListener LocationListener
- */
- public void addLocationListener(@NonNull LocationListener locationListener) {
- if (!this.locationListeners.contains(locationListener)) {
- this.locationListeners.add(locationListener);
- }
- }
-
- /**
- * Unregister a LocationListener to stop receiving location updates
- *
- * @param locationListener LocationListener to remove
- * @return True if LocationListener was found and removed, False if it was not
- */
- public boolean removeLocationListener(@NonNull LocationListener locationListener) {
- return this.locationListeners.remove(locationListener);
- }
-
- /**
- * Check status of Location Permissions
- *
- * @return True if granted to the app, False if not
- */
- public boolean areLocationPermissionsGranted() {
- if ((ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION)
- != PackageManager.PERMISSION_GRANTED)
- && (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION)
- != PackageManager.PERMISSION_GRANTED)) {
- Timber.w("Location Permissions Not Granted Yet. Try again after requesting.");
- return false;
- }
- return true;
- }
-
- @Override
- public void onProviderDisabled(String provider) {
- }
-
- @Override
- public void onProviderEnabled(String provider) {
- }
-}
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
new file mode 100644
index 0000000000..ff367abe1f
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java
@@ -0,0 +1,144 @@
+package com.mapbox.mapboxsdk.location;
+
+import android.content.Context;
+import android.location.Location;
+import android.util.Log;
+
+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.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;
+
+/**
+ * Manages locational updates. Contains methods to register and unregister location listeners.
+ * <ul>
+ * <li>You can register a {@link LocationEngineListener} with
+ * {@link #addLocationEngineListener(LocationEngineListener)} to receive
+ * location updates.</li>
+ * <li> You can unregister a {@link LocationEngineListener} with
+ * {@link #removeLocationEngineListener(LocationEngineListener)} to stop receiving location updates.</li>
+ * </ul>
+ * <p>
+ * Note: If registering a listener in your Activity.onStart() implementation, you should unregister it in
+ * Activity.onStop(). (You won't receive location updates when paused, and this will cut down on unnecessary system
+ * overhead). Do not unregister in Activity.onSaveInstanceState(), because this won't be called if the user moves back
+ * in the history stack.
+ * </p>
+ */
+public class LocationSource extends LocationEngine implements
+ LostApiClient.ConnectionCallbacks, LocationListener {
+
+ private static final String LOG_TAG = LocationSource.class.getSimpleName();
+
+ private static LocationEngine instance;
+
+ private Context context;
+ private LostApiClient lostApiClient;
+
+ public LocationSource(Context context) {
+ super();
+ this.context = context;
+ lostApiClient = new LostApiClient.Builder(context)
+ .addConnectionCallbacks(this)
+ .build();
+ }
+
+ public static synchronized LocationEngine getLocationEngine(Context context) {
+ if (instance == null) {
+ instance = new LocationSource(context.getApplicationContext());
+ }
+
+ return instance;
+ }
+
+ @Override
+ public void activate() {
+ if (lostApiClient != null && !lostApiClient.isConnected()) {
+ lostApiClient.connect();
+ }
+ }
+
+ @Override
+ public void deactivate() {
+ if (lostApiClient != null && lostApiClient.isConnected()) {
+ lostApiClient.disconnect();
+ }
+ }
+
+ @Override
+ public boolean isConnected() {
+ return lostApiClient.isConnected();
+ }
+
+ @Override
+ public void onConnected() {
+ for (LocationEngineListener listener : locationListeners) {
+ listener.onConnected();
+ }
+ }
+
+ @Override
+ public void onConnectionSuspended() {
+ Log.d(LOG_TAG, "Connection suspended.");
+ }
+
+ @Override
+ public Location getLastLocation() {
+ if (lostApiClient.isConnected() && PermissionsManager.areLocationPermissionsGranted(context)) {
+ //noinspection MissingPermission
+ return LocationServices.FusedLocationApi.getLastLocation(lostApiClient);
+ }
+
+ return null;
+ }
+
+ @Override
+ public void requestLocationUpdates() {
+ // Common params
+ LocationRequest request = LocationRequest.create()
+ .setFastestInterval(1000)
+ .setSmallestDisplacement(3.0f);
+
+ // Priority matching is straightforward
+ if (priority == LocationEnginePriority.NO_POWER) {
+ request.setPriority(LocationRequest.PRIORITY_NO_POWER);
+ } else if (priority == LocationEnginePriority.LOW_POWER) {
+ request.setPriority(LocationRequest.PRIORITY_LOW_POWER);
+ } else if (priority == LocationEnginePriority.BALANCED_POWER_ACCURACY) {
+ request.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
+ } else if (priority == LocationEnginePriority.HIGH_ACCURACY) {
+ request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
+ }
+
+ if (lostApiClient.isConnected() && PermissionsManager.areLocationPermissionsGranted(context)) {
+ //noinspection MissingPermission
+ LocationServices.FusedLocationApi.requestLocationUpdates(lostApiClient, request, this);
+ }
+ }
+
+ @Override
+ public void removeLocationUpdates() {
+ LocationServices.FusedLocationApi.removeLocationUpdates(lostApiClient, this);
+ }
+
+ @Override
+ public void onLocationChanged(Location location) {
+ for (LocationEngineListener listener : locationListeners) {
+ listener.onLocationChanged(location);
+ }
+ }
+
+ @Override
+ public void onProviderDisabled(String provider) {
+ Log.d(LOG_TAG, "Provider disabled: " + provider);
+ }
+
+ @Override
+ public void onProviderEnabled(String provider) {
+ Log.d(LOG_TAG, "Provider enabled: " + provider);
+ }
+}