summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2015-12-11 12:39:43 -0800
committerJohn Firebaugh <john.firebaugh@gmail.com>2015-12-16 14:52:29 -0800
commit13d5b18ebaeb330f05c4abfc04e0247222e038ba (patch)
tree90e24f1fb745581767b6979d1c562e60859cbcf6 /platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location
parent0db9f229f2bb14e2c6ccd3a8c0d0a30eb25ea5c5 (diff)
downloadqtlocation-mapboxgl-13d5b18ebaeb330f05c4abfc04e0247222e038ba.tar.gz
[android] Move into platform subdirectory
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.java13
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationServices.java131
2 files changed, 144 insertions, 0 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
new file mode 100644
index 0000000000..c385820423
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationListener.java
@@ -0,0 +1,13 @@
+package com.mapbox.mapboxsdk.location;
+
+import android.location.Location;
+
+public interface LocationListener {
+
+ /**
+ * Callback method for receiving location updates from LocationServices.
+ * @param location The new Location data
+ */
+ public 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
new file mode 100644
index 0000000000..74a68c3722
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationServices.java
@@ -0,0 +1,131 @@
+package com.mapbox.mapboxsdk.location;
+
+import android.content.Context;
+import android.location.Location;
+import android.support.annotation.NonNull;
+import com.mapzen.android.lost.api.LocationRequest;
+import com.mapzen.android.lost.api.LostApiClient;
+import java.util.ArrayList;
+import java.util.List;
+
+public class LocationServices implements com.mapzen.android.lost.api.LocationListener {
+
+ private static LocationServices instance = null;
+
+ private LostApiClient mLocationClient;
+ private LocationRequest mLocationRequest;
+
+ private Location lastLocation = null;
+
+ private List<LocationListener> locationListeners = null;
+
+ private boolean isGPSEnabled = false;
+
+ /**
+ * Private constructor for singleton LocationServices
+ */
+ private LocationServices(Context context) {
+ super();
+ // Setup location services
+ mLocationClient = new LostApiClient.Builder(context).build();
+ locationListeners = new ArrayList<>();
+ }
+
+ /**
+ * Primary (singleton) access method for LocationServices
+ * @param context Context
+ * @return LocationServices
+ */
+ public static LocationServices getLocationServices(@NonNull final Context context) {
+ if (instance == null) {
+ if (context == null) {
+ throw new NullPointerException("Context required for accessing LocationServices");
+ }
+ 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 (enableGPS) {
+
+ if (mLocationClient.isConnected()) {
+ // Disconnect first to ensure that the new requests are GPS
+ com.mapzen.android.lost.api.LocationServices.FusedLocationApi.removeLocationUpdates(this);
+ mLocationClient.disconnect();
+ }
+
+ // Setup Fresh
+ mLocationClient.connect();
+ Location lastLocation = com.mapzen.android.lost.api.LocationServices.FusedLocationApi.getLastLocation();
+ if (lastLocation != null) {
+ this.lastLocation = lastLocation;
+ }
+
+ // LocationRequest Tuned for GPS
+ mLocationRequest = LocationRequest.create()
+ .setFastestInterval(1000)
+ .setSmallestDisplacement(3.0f)
+ .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
+
+ com.mapzen.android.lost.api.LocationServices.FusedLocationApi.requestLocationUpdates(mLocationRequest, this);
+
+ } else {
+
+ // Disconnect
+ if (mLocationClient.isConnected()) {
+ // Disconnect first to ensure that the new requests are GPS
+ com.mapzen.android.lost.api.LocationServices.FusedLocationApi.removeLocationUpdates(this);
+ mLocationClient.disconnect();
+ }
+
+ }
+
+ isGPSEnabled = enableGPS;
+ }
+
+ public boolean isGPSEnabled() {
+ return isGPSEnabled;
+ }
+
+ @Override
+ public void onLocationChanged(Location location) {
+ this.lastLocation = location;
+
+ // Update Listeners
+ for (LocationListener listener : this.locationListeners) {
+ listener.onLocationChanged(location);
+ }
+ }
+
+ /**
+ * 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) {
+ 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);
+ }
+}