diff --git a/mapbox/app/src/main/java/com/mapbox/services/android/testapp/location/GoogleLocationEngine.java b/mapbox/app/src/main/java/com/mapbox/services/android/testapp/location/GoogleLocationEngine.java index 4a6e235ed..2e9c876f3 100644 --- a/mapbox/app/src/main/java/com/mapbox/services/android/testapp/location/GoogleLocationEngine.java +++ b/mapbox/app/src/main/java/com/mapbox/services/android/testapp/location/GoogleLocationEngine.java @@ -15,7 +15,6 @@ 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 java.lang.ref.WeakReference; @@ -88,7 +87,7 @@ public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { @Override public Location getLastLocation() { - if (googleApiClient.isConnected() && PermissionsManager.areLocationPermissionsGranted(context.get())) { + if (googleApiClient.isConnected()) { //noinspection MissingPermission return LocationServices.FusedLocationApi.getLastLocation(googleApiClient); } @@ -114,7 +113,7 @@ public void requestLocationUpdates() { request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); } - if (googleApiClient.isConnected() && PermissionsManager.areLocationPermissionsGranted(context.get())) { + if (googleApiClient.isConnected()) { //noinspection MissingPermission LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, request, this); } diff --git a/mapbox/app/src/main/java/com/mapbox/services/android/testapp/location/LocationEngineActivity.java b/mapbox/app/src/main/java/com/mapbox/services/android/testapp/location/LocationEngineActivity.java index 0c3f4c716..e0caad226 100644 --- a/mapbox/app/src/main/java/com/mapbox/services/android/testapp/location/LocationEngineActivity.java +++ b/mapbox/app/src/main/java/com/mapbox/services/android/testapp/location/LocationEngineActivity.java @@ -15,9 +15,12 @@ import com.mapbox.services.android.telemetry.location.AndroidLocationEngine; 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.testapp.R; import com.mapbox.services.commons.models.Position; +import timber.log.Timber; + public class LocationEngineActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener, LocationEngineListener { @@ -88,6 +91,8 @@ public void onItemSelected(AdapterView parent, View view, int pos, long id) { if (!engineName.equals(locationEngines[0]) && locationEngine != null) { // Not None + Timber.e("Last known location: %s", locationEngine.getLastLocation()); + locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY); locationEngine.addLocationEngineListener(this); locationEngine.activate(); } diff --git a/mapbox/dependencies.gradle b/mapbox/dependencies.gradle index 24f398e86..a28570af1 100644 --- a/mapbox/dependencies.gradle +++ b/mapbox/dependencies.gradle @@ -17,7 +17,7 @@ ext { supportCardView : 'com.android.support:cardview-v7:25.1.0', // mapbox - mapbox : 'com.mapbox.mapboxsdk:mapbox-android-sdk:5.0.2@aar', + mapbox : 'com.mapbox.mapboxsdk:mapbox-android-sdk:5.1.0-SNAPSHOT@aar', // gson gson : 'com.google.code.gson:gson:2.8.0', @@ -36,7 +36,7 @@ ext { okhttp3Mockwebserver : 'com.squareup.okhttp3:mockwebserver:3.6.0', // lost - lost : 'com.mapzen.android:lost:3.0.1', + lost : 'com.mapzen.android:lost:1.1.1', // play services gmsLocation : 'com.google.android.gms:play-services-location:10.2.0', diff --git a/mapbox/libandroid-services/build.gradle b/mapbox/libandroid-services/build.gradle index 7e99678c2..2ff4b30e8 100644 --- a/mapbox/libandroid-services/build.gradle +++ b/mapbox/libandroid-services/build.gradle @@ -43,7 +43,9 @@ dependencies { compile rootProject.ext.dep.timber // LOST - compile rootProject.ext.dep.lost + compile(rootProject.ext.dep.lost) { + exclude group: 'com.google.guava' + } // Testing testCompile rootProject.ext.dep.mockito diff --git a/mapbox/libandroid-services/src/main/java/com/mapbox/services/android/location/LostLocationEngine.java b/mapbox/libandroid-services/src/main/java/com/mapbox/services/android/location/LostLocationEngine.java index 396e551a7..753cd835a 100644 --- a/mapbox/libandroid-services/src/main/java/com/mapbox/services/android/location/LostLocationEngine.java +++ b/mapbox/libandroid-services/src/main/java/com/mapbox/services/android/location/LostLocationEngine.java @@ -2,12 +2,11 @@ import android.content.Context; import android.location.Location; -import android.util.Log; +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.mapzen.android.lost.api.LocationListener; import com.mapzen.android.lost.api.LocationRequest; import com.mapzen.android.lost.api.LocationServices; @@ -18,10 +17,7 @@ /** * Sample LocationEngine using the Open Source Lost library */ -public class LostLocationEngine extends LocationEngine implements - LostApiClient.ConnectionCallbacks, LocationListener { - - private static final String LOG_TAG = LostLocationEngine.class.getSimpleName(); +public class LostLocationEngine extends LocationEngine implements LocationListener { private static LocationEngine instance; @@ -31,9 +27,7 @@ public class LostLocationEngine extends LocationEngine implements public LostLocationEngine(Context context) { super(); this.context = new WeakReference<>(context); - lostApiClient = new LostApiClient.Builder(this.context.get()) - .addConnectionCallbacks(this) - .build(); + lostApiClient = new LostApiClient.Builder(this.context.get()).build(); } public static synchronized LocationEngine getLocationEngine(Context context) { @@ -44,50 +38,63 @@ public static synchronized LocationEngine getLocationEngine(Context context) { return instance; } + /** + * Activate the location engine which will connect whichever location provider you are using. You'll need to call + * this before requesting user location updates using {@link LocationEngine#requestLocationUpdates()}. + */ @Override public void activate() { - if (lostApiClient != null && !lostApiClient.isConnected()) { + if (!lostApiClient.isConnected()) { lostApiClient.connect(); } + for (LocationEngineListener listener : locationListeners) { + listener.onConnected(); + } } + /** + * Disconnect the location engine which is useful when you no longer need location updates or requesting the users + * {@link LocationEngine#getLastLocation()}. Before deactivating, you'll need to stop request user location updates + * using {@link LocationEngine#removeLocationUpdates()}. + */ @Override public void deactivate() { - if (lostApiClient != null && lostApiClient.isConnected()) { + if (lostApiClient.isConnected()) { lostApiClient.disconnect(); } } + /** + * Check if your location provider has been activated/connected. This is mainly used internally but is also useful in + * the rare case when you'd like to know if your location engine is connected or not. + * + * @return boolean true if the location engine has been activated/connected, else false. + */ @Override public boolean isConnected() { return lostApiClient.isConnected(); } + /** + * Returns the Last known location if the location provider is connected and location permissions are granted. + * + * @return the last known location + */ @Override - public void onConnected() { - for (LocationEngineListener listener : locationListeners) { - listener.onConnected(); - } - } - - @Override - public void onConnectionSuspended() { - Log.d(LOG_TAG, "Connection suspended."); - } - - @Override + @Nullable public Location getLastLocation() { - if (lostApiClient.isConnected() && PermissionsManager.areLocationPermissionsGranted(context.get())) { + if (lostApiClient.isConnected()) { //noinspection MissingPermission - return LocationServices.FusedLocationApi.getLastLocation(lostApiClient); + return LocationServices.FusedLocationApi.getLastLocation(); } - return null; } + /** + * Request location updates to the location provider. + */ @Override public void requestLocationUpdates() { - // Common params LocationRequest request = LocationRequest.create(); if (interval != null) { @@ -111,19 +118,27 @@ public void requestLocationUpdates() { request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); } - if (lostApiClient.isConnected() && PermissionsManager.areLocationPermissionsGranted(context.get())) { + if (lostApiClient.isConnected()) { //noinspection MissingPermission - LocationServices.FusedLocationApi.requestLocationUpdates(lostApiClient, request, this); + LocationServices.FusedLocationApi.requestLocationUpdates(request, this); } } + /** + * Dismiss ongoing location update to the location provider. + */ @Override public void removeLocationUpdates() { if (lostApiClient.isConnected()) { - LocationServices.FusedLocationApi.removeLocationUpdates(lostApiClient, this); + LocationServices.FusedLocationApi.removeLocationUpdates(this); } } + /** + * Invoked when the Location has changed. + * + * @param location the new location + */ @Override public void onLocationChanged(Location location) { for (LocationEngineListener listener : locationListeners) { @@ -131,3 +146,4 @@ public void onLocationChanged(Location location) { } } } + diff --git a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/location/AndroidLocationEngine.java b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/location/AndroidLocationEngine.java index a97408f36..84d21e4b9 100644 --- a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/location/AndroidLocationEngine.java +++ b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/location/AndroidLocationEngine.java @@ -70,8 +70,7 @@ public boolean isConnected() { @Override public Location getLastLocation() { - if (!TextUtils.isEmpty(currentProvider) - && PermissionsManager.areLocationPermissionsGranted(context.get())) { + if (!TextUtils.isEmpty(currentProvider)) { //noinspection MissingPermission return locationManager.getLastKnownLocation(currentProvider); } @@ -81,8 +80,7 @@ public Location getLastLocation() { @Override public void requestLocationUpdates() { - if (!TextUtils.isEmpty(currentProvider) - && PermissionsManager.areLocationPermissionsGranted(context.get())) { + if (!TextUtils.isEmpty(currentProvider)) { //noinspection MissingPermission locationManager.requestLocationUpdates(currentProvider, DEFAULT_MIN_TIME, DEFAULT_MIN_DISTANCE, this); } diff --git a/scripts/bitrise.yml b/scripts/bitrise.yml index 37bab447f..c6b7b62a8 100644 --- a/scripts/bitrise.yml +++ b/scripts/bitrise.yml @@ -115,8 +115,8 @@ workflows: #!/bin/bash echo "Run Robo tests on firebase:" gcloud auth activate-service-account --key-file secret.json --project mapbox-java - gcloud beta test android devices list - gcloud beta test android run --type robo --app mapbox/app/build/outputs/apk/app-debug.apk --device-ids shamu --os-version-ids 22 --locales en --orientations portrait --timeout 10m + gcloud firebase test android devices list + gcloud firebase test android run --type robo --app mapbox/app/build/outputs/apk/app-debug.apk --device-ids shamu --os-version-ids 22 --locales en --orientations portrait --timeout 10m - slack: inputs: - webhook_url: "$SLACK_HOOK_URL"