diff options
author | Guardiola31337 <pablo.guardiola@mapbox.com> | 2017-07-12 19:22:24 +0200 |
---|---|---|
committer | Guardiola31337 <pablo.guardiola@mapbox.com> | 2017-10-31 17:09:58 -0700 |
commit | ec82bc1c5af9a767a5585b87a2633b25e58d2d98 (patch) | |
tree | 29a47042ca57a7c664285446d716a2ea8f0032f2 | |
parent | 56c2af5670852312f788f83ff86d80447c30b0fd (diff) | |
download | qtlocation-mapboxgl-ec82bc1c5af9a767a5585b87a2633b25e58d2d98.tar.gz |
[android] [WIP] make location provider optional
10 files changed, 84 insertions, 59 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/build.gradle b/platform/android/MapboxGLAndroidSDK/build.gradle index c96587fce6..524c63cfba 100644 --- a/platform/android/MapboxGLAndroidSDK/build.gradle +++ b/platform/android/MapboxGLAndroidSDK/build.gradle @@ -6,7 +6,7 @@ dependencies { compile rootProject.ext.dep.supportDesign compile rootProject.ext.dep.timber compile rootProject.ext.dep.okhttp3 - compile(rootProject.ext.dep.lost) { + provided(rootProject.ext.dep.lost) { exclude group: 'com.google.guava' } testCompile rootProject.ext.dep.junit diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java index 7fd9d6172d..e3790b7972 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java @@ -10,11 +10,19 @@ import android.text.TextUtils; import com.mapbox.mapboxsdk.constants.MapboxConstants; import com.mapbox.mapboxsdk.exceptions.MapboxConfigurationException; -import com.mapbox.mapboxsdk.location.LocationSource; import com.mapbox.mapboxsdk.net.ConnectivityReceiver; import com.mapbox.services.android.telemetry.MapboxTelemetry; +import com.mapbox.services.android.telemetry.location.AndroidLocationSourceProvider; +import com.mapbox.services.android.telemetry.location.ClasspathChecker; +import com.mapbox.services.android.telemetry.location.GoogleLocationSourceProvider; import com.mapbox.services.android.telemetry.location.LocationEngine; import com.mapbox.services.android.telemetry.location.LocationEnginePriority; +import com.mapbox.services.android.telemetry.location.LocationSourceChain; +import com.mapbox.services.android.telemetry.location.LocationSourceProvider; +import com.mapbox.services.android.telemetry.location.LostLocationSourceProvider; + +import java.util.ArrayList; +import java.util.List; import timber.log.Timber; @@ -34,7 +42,7 @@ public final class Mapbox { private Context context; private String accessToken; private Boolean connected; - private LocationSource locationSource; + private LocationEngine locationSource; /** * Get an instance of Mapbox. @@ -50,9 +58,11 @@ public final class Mapbox { public static synchronized Mapbox getInstance(@NonNull Context context, @NonNull String accessToken) { if (INSTANCE == null) { Context appContext = context.getApplicationContext(); - INSTANCE = new Mapbox(appContext, accessToken, new LocationSource(appContext)); - LocationEngine locationEngine = new LocationSource(appContext); - locationEngine.setPriority(LocationEnginePriority.NO_POWER); + List<LocationSourceChain> locationSources = initLocationSources(); + LocationSourceProvider locationSourceProvider = new LocationSourceProvider(locationSources); + LocationEngine locationSource = locationSourceProvider.supply(context); + INSTANCE = new Mapbox(appContext, accessToken, locationSource); + locationSource.setPriority(LocationEnginePriority.NO_POWER); try { MapboxTelemetry.getInstance().initialize( @@ -66,7 +76,7 @@ public final class Mapbox { return INSTANCE; } - Mapbox(@NonNull Context context, @NonNull String accessToken, LocationSource locationSource) { + Mapbox(@NonNull Context context, @NonNull String accessToken, LocationEngine locationSource) { this.context = context; this.accessToken = accessToken; this.locationSource = locationSource; @@ -83,6 +93,16 @@ public final class Mapbox { return INSTANCE.accessToken; } + private static List<LocationSourceChain> initLocationSources() { + ClasspathChecker classpathChecker = new ClasspathChecker(); + List<LocationSourceChain> locationSources = new ArrayList<>(); + locationSources.add(new GoogleLocationSourceProvider(classpathChecker)); + locationSources.add(new LostLocationSourceProvider(classpathChecker)); + locationSources.add(new AndroidLocationSourceProvider()); + + return locationSources; + } + /** * Runtime validation of Mapbox creation. */ @@ -143,7 +163,7 @@ public final class Mapbox { return (activeNetwork != null && activeNetwork.isConnected()); } - public static LocationSource getLocationSource() { + public static LocationEngine getLocationSource() { return INSTANCE.locationSource; } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/package-info.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/package-info.java deleted file mode 100644 index 6b0c9a76c0..0000000000 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Contains the Mapbox Maps Android Location API classes. - */ -package com.mapbox.mapboxsdk.location; diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java index ac91746a2a..8b0fc62339 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java @@ -33,7 +33,6 @@ import com.mapbox.mapboxsdk.camera.CameraUpdateFactory; import com.mapbox.mapboxsdk.constants.MyBearingTracking; import com.mapbox.mapboxsdk.constants.MyLocationTracking; import com.mapbox.mapboxsdk.geometry.LatLng; -import com.mapbox.mapboxsdk.location.LocationSource; import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.Projection; import com.mapbox.services.android.telemetry.location.LocationEngine; @@ -161,7 +160,7 @@ public class MyLocationView extends View { compassListener = new CompassListener(context); } - public void init(LocationSource locationSource) { + public void init(LocationEngine locationSource) { this.locationSource = locationSource; } diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/MapboxTest.java b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/MapboxTest.java index e05190cd57..7a28d846ea 100644 --- a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/MapboxTest.java +++ b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/MapboxTest.java @@ -5,7 +5,7 @@ import android.net.ConnectivityManager; import android.net.NetworkInfo; import com.mapbox.mapboxsdk.exceptions.MapboxConfigurationException; -import com.mapbox.mapboxsdk.location.LocationSource; +import com.mapbox.services.android.telemetry.location.LocationEngine; import org.junit.Before; import org.junit.Test; @@ -25,13 +25,13 @@ public class MapboxTest { private Context context; private Context appContext; - private LocationSource locationSource; + private LocationEngine locationSource; @Before public void before() { context = mock(Context.class); appContext = mock(Context.class); - locationSource = mock(LocationSource.class); + locationSource = mock(LocationEngine.class); when(context.getApplicationContext()).thenReturn(appContext); } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/build.gradle b/platform/android/MapboxGLAndroidSDKTestApp/build.gradle index 67939b5144..81ee635cf1 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/build.gradle +++ b/platform/android/MapboxGLAndroidSDKTestApp/build.gradle @@ -68,6 +68,7 @@ dependencies { compile(rootProject.ext.dep.mapboxJavaServices) { transitive = true } + compile rootProject.ext.dep.lost // Testing dependencies androidTestCompile rootProject.ext.dep.testSpoonRunner diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationDrawableActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationDrawableActivity.java index 9f6f2b2fcd..54808d2bd9 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationDrawableActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationDrawableActivity.java @@ -16,19 +16,16 @@ import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.MapboxMapOptions; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.testapp.R; -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; +import com.mapbox.services.android.telemetry.location.LocationEngineListener; /** * Test activity showcasing how to change the MyLocationView drawable. */ -public class MyLocationDrawableActivity extends BaseLocationActivity implements LocationListener { +public class MyLocationDrawableActivity extends BaseLocationActivity implements LocationEngineListener { private MapView mapView; private MapboxMap mapboxMap; - private LostApiClient lostApiClient; +// private LostApiClient lostApiClient; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -66,15 +63,20 @@ public class MyLocationDrawableActivity extends BaseLocationActivity implements @Override protected void enableLocation(boolean enabled) { mapboxMap.setMyLocationEnabled(enabled); - if (lostApiClient == null) { - lostApiClient = new LostApiClient.Builder(this).build(); - lostApiClient.connect(); - LocationRequest request = LocationRequest.create() - .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) - .setInterval(5000) - .setSmallestDisplacement(10); - LocationServices.FusedLocationApi.requestLocationUpdates(request, this); - } +// if (lostApiClient == null) { +// lostApiClient = new LostApiClient.Builder(this).build(); +// lostApiClient.connect(); +// LocationRequest request = LocationRequest.create() +// .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) +// .setInterval(5000) +// .setSmallestDisplacement(10); +// LocationServices.FusedLocationApi.requestLocationUpdates(request, this); +// } + } + + @Override + public void onConnected() { + // Nothing } @Override @@ -104,10 +106,10 @@ public class MyLocationDrawableActivity extends BaseLocationActivity implements protected void onStop() { super.onStop(); mapView.onStop(); - if (lostApiClient.isConnected()) { - LocationServices.FusedLocationApi.removeLocationUpdates(this); - lostApiClient.disconnect(); - } +// if (lostApiClient.isConnected()) { +// LocationServices.FusedLocationApi.removeLocationUpdates(this); +// lostApiClient.disconnect(); +// } } @Override diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationTrackingModeActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationTrackingModeActivity.java index 786aeb8733..8d91add35f 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationTrackingModeActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationTrackingModeActivity.java @@ -14,6 +14,7 @@ import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.Toast; +import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.camera.CameraUpdateFactory; import com.mapbox.mapboxsdk.constants.MyBearingTracking; import com.mapbox.mapboxsdk.constants.MyLocationTracking; @@ -24,10 +25,7 @@ import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.maps.TrackingSettings; import com.mapbox.mapboxsdk.maps.UiSettings; import com.mapbox.mapboxsdk.testapp.R; -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; +import com.mapbox.services.android.telemetry.location.LocationEngineListener; import timber.log.Timber; @@ -39,10 +37,10 @@ import timber.log.Timber; * </p> */ public class MyLocationTrackingModeActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener, - OnMapReadyCallback, LocationListener { + OnMapReadyCallback, LocationEngineListener { // Testing for user defined LostApiClient - private LostApiClient lostApiClient; + //private LostApiClient lostApiClient; public static final int TRACKING_NONE_INDEX = 0; public static final int TRACKING_FOLLOW_INDEX = 1; @@ -75,18 +73,22 @@ public class MyLocationTrackingModeActivity extends AppCompatActivity implements @Override public void onMapReady(MapboxMap mapboxMap) { MyLocationTrackingModeActivity.this.mapboxMap = mapboxMap; - lostApiClient = new LostApiClient.Builder(this).build(); - lostApiClient.connect(); - LocationRequest request = LocationRequest.create() - .setPriority(LocationRequest.PRIORITY_LOW_POWER) - .setInterval(5000) - .setSmallestDisplacement(10); - - Location location = LocationServices.FusedLocationApi.getLastLocation(); - if (location != null) { - setInitialLocation(location, 15); - } - LocationServices.FusedLocationApi.requestLocationUpdates(request, this); + +// lostApiClient = new LostApiClient.Builder(this).build(); +// lostApiClient.connect(); +// LocationRequest request = LocationRequest.create() +// .setPriority(LocationRequest.PRIORITY_LOW_POWER) +// .setInterval(5000) +// .setSmallestDisplacement(10); + + mapboxMap.setMyLocationEnabled(true); + Mapbox.getLocationSource().addLocationEngineListener(this); + Mapbox.getLocationSource().requestLocationUpdates(); + } + + @Override + public void onConnected() { + // Nothing } @Override @@ -227,10 +229,12 @@ public class MyLocationTrackingModeActivity extends AppCompatActivity implements @Override protected void onStop() { super.onStop(); - if (lostApiClient.isConnected()) { - LocationServices.FusedLocationApi.removeLocationUpdates(this); - lostApiClient.disconnect(); - } + Mapbox.getLocationSource().removeLocationEngineListener(this); + Mapbox.getLocationSource().removeLocationUpdates(); +// if (lostApiClient.isConnected()) { +// LocationServices.FusedLocationApi.removeLocationUpdates(this); +// lostApiClient.disconnect(); +// } mapView.onStop(); } diff --git a/platform/android/build.gradle b/platform/android/build.gradle index e298b84da8..95d29cadf5 100644 --- a/platform/android/build.gradle +++ b/platform/android/build.gradle @@ -11,6 +11,8 @@ buildscript { allprojects { repositories { + // TODO This has to be updated when https://github.com/mapbox/mapbox-java/pull/502 lands + mavenLocal() jcenter() maven { url 'https://maven.google.com' } maven { url "http://oss.sonatype.org/content/repositories/snapshots/" } diff --git a/platform/android/dependencies.gradle b/platform/android/dependencies.gradle index 521084559f..3aac3cdd18 100644 --- a/platform/android/dependencies.gradle +++ b/platform/android/dependencies.gradle @@ -7,7 +7,8 @@ ext { versionCode = 11 versionName = "5.0.0" - mapboxServicesVersion = "2.2.3" + // TODO This has to be updated when https://github.com/mapbox/mapbox-java/pull/502 lands + mapboxServicesVersion = "2.3.0-SNAPSHOT" supportLibVersion = "25.4.0" espressoVersion = '3.0.1' testRunnerVersion = '1.0.1' |