From 509e90c352b51bd147af814ff656c24576d4d2b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Thu, 6 Feb 2020 17:11:35 +0100 Subject: [PATCH 01/11] expose list of key points leading up to the enhanced location update --- build.gradle | 9 ++++ .../activity/SimpleMapboxNavigationKt.kt | 33 ++++++++++++- .../activity/TripSessionActivityKt.kt | 6 ++- gradle/dependencies.gradle | 4 +- .../v5/internal/navigation/HttpClient.kt | 48 +++++++++++-------- .../route/onboard/network/HttpClient.kt | 40 ++++++++++------ .../core/trip/session/LocationObserver.kt | 10 +++- .../core/trip/session/MapboxTripSession.kt | 8 ++-- .../trip/session/MapboxTripSessionTest.kt | 8 ++-- libnavigator/local.properties | 8 ---- .../navigator/MapboxNativeNavigatorImpl.kt | 1 + .../mapbox/navigation/navigator/TripStatus.kt | 1 + 12 files changed, 120 insertions(+), 56 deletions(-) delete mode 100644 libnavigator/local.properties diff --git a/build.gradle b/build.gradle index 7e3aaeb187e..8082c527f80 100644 --- a/build.gradle +++ b/build.gradle @@ -41,6 +41,15 @@ allprojects { mavenCentral() jcenter() maven { url 'https://plugins.gradle.org/m2' } + maven { + Properties localProperties = new Properties() + localProperties.load(project.rootProject.file("local.properties").newDataInputStream()) + url 'https://mapbox.bintray.com/mapbox_private' + credentials { + username = localProperties.getProperty("BINTRAY_USER", "") + password = localProperties.getProperty("BINTRAY_API_KEY", "") + } + } maven { url 'https://mapbox.bintray.com/mapbox' } maven { url 'https://oss.jfrog.org/artifactory/oss-snapshot-local/' } } diff --git a/examples/src/main/java/com/mapbox/navigation/examples/activity/SimpleMapboxNavigationKt.kt b/examples/src/main/java/com/mapbox/navigation/examples/activity/SimpleMapboxNavigationKt.kt index 1027e76c708..532296b92ab 100644 --- a/examples/src/main/java/com/mapbox/navigation/examples/activity/SimpleMapboxNavigationKt.kt +++ b/examples/src/main/java/com/mapbox/navigation/examples/activity/SimpleMapboxNavigationKt.kt @@ -1,6 +1,7 @@ package com.mapbox.navigation.examples.activity import android.annotation.SuppressLint +import android.location.Location import android.os.Bundle import android.os.Looper import android.view.View.GONE @@ -31,13 +32,13 @@ import com.mapbox.navigation.base.trip.model.RouteProgress import com.mapbox.navigation.core.MapboxNavigation import com.mapbox.navigation.core.directions.session.RoutesObserver import com.mapbox.navigation.core.directions.session.RoutesRequestCallback +import com.mapbox.navigation.core.trip.session.LocationObserver import com.mapbox.navigation.core.trip.session.RouteProgressObserver import com.mapbox.navigation.examples.R import com.mapbox.navigation.examples.utils.Utils import com.mapbox.navigation.examples.utils.extensions.toPoint import com.mapbox.services.android.navigation.ui.v5.route.NavigationMapRoute -import kotlinx.android.synthetic.main.activity_simple_mapbox_navigation.* -import kotlinx.android.synthetic.main.activity_trip_service.mapView +import kotlinx.android.synthetic.main.activity_trip_service.* import timber.log.Timber class SimpleMapboxNavigationKt : AppCompatActivity(), OnMapReadyCallback { @@ -116,6 +117,32 @@ class SimpleMapboxNavigationKt : AppCompatActivity(), OnMapReadyCallback { } } + private val locationObserver = object : LocationObserver { + override fun onRawLocationChanged(rawLocation: Location) { + Timber.e("raw location %s", rawLocation.toString()) + } + + override fun onEnhancedLocationChanged( + enhancedLocation: Location, + keyPoints: List + ) { + if (keyPoints.isNotEmpty()) { + locationComponent?.forceLocationUpdate(keyPoints.map { + // workaround for https://github.com/mapbox/mapbox-location-native/pull/65#discussion_r375777857 + val lat = it.latitude + val lon = it.longitude + it.latitude = lon + it.longitude = lat + it + }, true) + } else { + locationComponent?.forceLocationUpdate(enhancedLocation) + } + Timber.e("enhanced location %s", enhancedLocation) + Timber.e("enhanced keyPoints %s", keyPoints) + } + } + private fun startLocationUpdates() { val request = LocationEngineRequest.Builder(1000L) .setFastestInterval(500L) @@ -198,6 +225,7 @@ class SimpleMapboxNavigationKt : AppCompatActivity(), OnMapReadyCallback { override fun onStart() { super.onStart() mapView.onStart() + mapboxNavigation.registerLocationObserver(locationObserver) mapboxNavigation.registerRouteProgressObserver(routeProgressObserver) mapboxNavigation.registerRoutesObserver(routesObserver) } @@ -205,6 +233,7 @@ class SimpleMapboxNavigationKt : AppCompatActivity(), OnMapReadyCallback { override fun onStop() { super.onStop() mapView.onStop() + mapboxNavigation.unregisterLocationObserver(locationObserver) mapboxNavigation.unregisterRouteProgressObserver(routeProgressObserver) mapboxNavigation.unregisterRoutesObserver(routesObserver) } diff --git a/examples/src/main/java/com/mapbox/navigation/examples/activity/TripSessionActivityKt.kt b/examples/src/main/java/com/mapbox/navigation/examples/activity/TripSessionActivityKt.kt index e5f1db4d7b6..ec5b12125d4 100644 --- a/examples/src/main/java/com/mapbox/navigation/examples/activity/TripSessionActivityKt.kt +++ b/examples/src/main/java/com/mapbox/navigation/examples/activity/TripSessionActivityKt.kt @@ -40,8 +40,12 @@ class TripSessionActivityKt : AppCompatActivity(), OnMapReadyCallback { mapboxMap?.locationComponent?.forceLocationUpdate(rawLocation) } - override fun onEnhancedLocationChanged(enhancedLocation: Location) { + override fun onEnhancedLocationChanged( + enhancedLocation: Location, + keyPoints: List + ) { Timber.d("DEBUG enhanced location: $enhancedLocation") + Timber.d("DEBUG enhanced keyPoints: $keyPoints") } } diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index f993e531223..2111ccf49d8 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -8,12 +8,12 @@ ext { ] version = [ - mapboxMapSdk : '8.6.2', + mapboxMapSdk : '9.0.0-20200206.150107-26', mapboxSdkServices : '5.1.0-beta.1', mapboxSdkDirectionsModels : '5.1.0-beta.1', mapboxEvents : '4.5.1', mapboxCore : '1.3.0', - mapboxNavigator : '9.0.4', + mapboxNavigator : 'sf-keypoints-SNAPSHOT-8', mapboxCrashMonitor : '2.0.0', mapboxAnnotationPlugin : '0.7.0', mapboxAccounts : '0.3.1', diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/HttpClient.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/HttpClient.kt index b11849f64c9..6902c858608 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/HttpClient.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/HttpClient.kt @@ -6,9 +6,12 @@ import com.mapbox.navigator.HttpInterface import com.mapbox.navigator.HttpResponse import com.mapbox.services.android.navigation.BuildConfig import java.io.ByteArrayOutputStream -import java.lang.IllegalArgumentException +import java.io.IOException +import okhttp3.Call +import okhttp3.Callback import okhttp3.OkHttpClient import okhttp3.Request +import okhttp3.Response import okhttp3.logging.HttpLoggingInterceptor import okio.Okio import timber.log.Timber @@ -29,11 +32,9 @@ internal class HttpClient( private val client: OkHttpClient by lazy { if (BuildConfig.DEBUG) { - val interceptor = HttpLoggingInterceptor(object : HttpLoggingInterceptor.Logger { - override fun log(message: String) { - Timber.d(message) - } - }).setLevel(HttpLoggingInterceptor.Level.BASIC) + val interceptor = HttpLoggingInterceptor( + HttpLoggingInterceptor.Logger { message -> Timber.d(message) } + ).setLevel(HttpLoggingInterceptor.Level.BASIC) clientBuilder.addInterceptor(interceptor) } @@ -51,33 +52,40 @@ internal class HttpClient( return acceptGzipEncoding } - override fun get(url: String): HttpResponse { + override fun get(url: String, nativeResponse: HttpResponse) { val requestBuilder = try { Request.Builder() .addHeader(HEADER_USER_AGENT, userAgent) .url(url) } catch (e: IllegalArgumentException) { - return HttpResponse(ByteArray(0), HttpCode.FAILURE) + nativeResponse.run(ByteArray(0), HttpCode.FAILURE) + return } if (acceptGzipEncoding) { requestBuilder.addHeader(HEADER_ENCODING, GZIP) } - client.newCall(requestBuilder.build()).execute().use { response -> - val outputStream = ByteArrayOutputStream() - val result = if (response.isSuccessful) HttpCode.SUCCESS else HttpCode.FAILURE - - response.body()?.let { body -> - val sink = Okio.buffer(Okio.sink(outputStream)) - sink.writeAll(body.source()) - sink.close() + client.newCall(requestBuilder.build()).enqueue(object : Callback { + override fun onFailure(call: Call, e: IOException) { + nativeResponse.run(ByteArray(0), HttpCode.FAILURE) } - val bytes = outputStream.toByteArray() - outputStream.close() + override fun onResponse(call: Call, response: Response) { + val outputStream = ByteArrayOutputStream() + val result = if (response.isSuccessful) HttpCode.SUCCESS else HttpCode.FAILURE - return HttpResponse(bytes, result) - } + response.body()?.let { body -> + val sink = Okio.buffer(Okio.sink(outputStream)) + sink.writeAll(body.source()) + sink.close() + } + + val bytes = outputStream.toByteArray() + outputStream.close() + + nativeResponse.run(bytes, result) + } + }) } } diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/network/HttpClient.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/network/HttpClient.kt index f17853e1e1c..c3eb9dd05c5 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/network/HttpClient.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/network/HttpClient.kt @@ -8,9 +8,12 @@ import com.mapbox.navigator.HttpCode import com.mapbox.navigator.HttpInterface import com.mapbox.navigator.HttpResponse import java.io.ByteArrayOutputStream -import java.lang.IllegalArgumentException +import java.io.IOException +import okhttp3.Call +import okhttp3.Callback import okhttp3.OkHttpClient import okhttp3.Request +import okhttp3.Response import okhttp3.logging.HttpLoggingInterceptor import okio.buffer import okio.sink @@ -56,33 +59,40 @@ internal class HttpClient( return acceptGzipEncoding } - override fun get(url: String): HttpResponse { + override fun get(url: String, nativeResponse: HttpResponse) { val requestBuilder = try { Request.Builder() .addHeader(HEADER_USER_AGENT, userAgent) .url(url) } catch (e: IllegalArgumentException) { - return HttpResponse(ByteArray(0), HttpCode.FAILURE) + nativeResponse.run(ByteArray(0), HttpCode.FAILURE) + return } if (acceptGzipEncoding) { requestBuilder.addHeader(HEADER_ENCODING, GZIP) } - client.newCall(requestBuilder.build()).execute().use { response -> - val outputStream = ByteArrayOutputStream() - val result = if (response.isSuccessful) HttpCode.SUCCESS else HttpCode.FAILURE - - response.body()?.let { body -> - val sink = outputStream.sink().buffer() - sink.writeAll(body.source()) - sink.close() + client.newCall(requestBuilder.build()).enqueue(object : Callback { + override fun onFailure(call: Call, e: IOException) { + nativeResponse.run(ByteArray(0), HttpCode.FAILURE) } - val bytes = outputStream.toByteArray() - outputStream.close() + override fun onResponse(call: Call, response: Response) { + val outputStream = ByteArrayOutputStream() + val result = if (response.isSuccessful) HttpCode.SUCCESS else HttpCode.FAILURE - return HttpResponse(bytes, result) - } + response.body()?.let { body -> + val sink = outputStream.sink().buffer() + sink.writeAll(body.source()) + sink.close() + } + + val bytes = outputStream.toByteArray() + outputStream.close() + + nativeResponse.run(bytes, result) + } + }) } } diff --git a/libnavigation-core/src/main/java/com/mapbox/navigation/core/trip/session/LocationObserver.kt b/libnavigation-core/src/main/java/com/mapbox/navigation/core/trip/session/LocationObserver.kt index b9a95f290a4..7a80d921f57 100644 --- a/libnavigation-core/src/main/java/com/mapbox/navigation/core/trip/session/LocationObserver.kt +++ b/libnavigation-core/src/main/java/com/mapbox/navigation/core/trip/session/LocationObserver.kt @@ -4,5 +4,13 @@ import android.location.Location interface LocationObserver { fun onRawLocationChanged(rawLocation: Location) - fun onEnhancedLocationChanged(enhancedLocation: Location) + + /** + * Provides the best possible location update, snapped to the route or map-matched to the road if possible. + * + * @param enhancedLocation the best possible location update + * @param keyPoints a list (can be empty) of predicted location points leading up to the target update. + * The last point on the list (if not empty) is always equal to [enhancedLocation]. + */ + fun onEnhancedLocationChanged(enhancedLocation: Location, keyPoints: List) } diff --git a/libnavigation-core/src/main/java/com/mapbox/navigation/core/trip/session/MapboxTripSession.kt b/libnavigation-core/src/main/java/com/mapbox/navigation/core/trip/session/MapboxTripSession.kt index 1829a490de0..5e1f44a4775 100644 --- a/libnavigation-core/src/main/java/com/mapbox/navigation/core/trip/session/MapboxTripSession.kt +++ b/libnavigation-core/src/main/java/com/mapbox/navigation/core/trip/session/MapboxTripSession.kt @@ -135,7 +135,7 @@ class MapboxTripSession( override fun registerLocationObserver(locationObserver: LocationObserver) { locationObservers.add(locationObserver) rawLocation?.let { locationObserver.onRawLocationChanged(it) } - enhancedLocation?.let { locationObserver.onEnhancedLocationChanged(it) } + enhancedLocation?.let { locationObserver.onEnhancedLocationChanged(it, emptyList()) } } override fun unregisterLocationObserver(locationObserver: LocationObserver) { @@ -253,7 +253,7 @@ class MapboxTripSession( mainJobController.scope.launch { while (isActive) { val status = navigatorPolling() - updateEnhancedLocation(status.enhancedLocation) + updateEnhancedLocation(status.enhancedLocation, status.keyPoints) updateRouteProgress(status.routeProgress) isOffRoute = status.offRoute delay(STATUS_POLLING_INTERVAL) @@ -268,9 +268,9 @@ class MapboxTripSession( navigator.getStatus(date) } - private fun updateEnhancedLocation(location: Location) { + private fun updateEnhancedLocation(location: Location, keyPoints: List) { enhancedLocation = location - locationObservers.forEach { it.onEnhancedLocationChanged(location) } + locationObservers.forEach { it.onEnhancedLocationChanged(location, keyPoints) } } private fun updateRouteProgress(progress: RouteProgress) { diff --git a/libnavigation-core/src/test/java/com/mapbox/navigation/core/trip/session/MapboxTripSessionTest.kt b/libnavigation-core/src/test/java/com/mapbox/navigation/core/trip/session/MapboxTripSessionTest.kt index 75e288b86ca..0629aecd2aa 100644 --- a/libnavigation-core/src/test/java/com/mapbox/navigation/core/trip/session/MapboxTripSessionTest.kt +++ b/libnavigation-core/src/test/java/com/mapbox/navigation/core/trip/session/MapboxTripSessionTest.kt @@ -53,6 +53,7 @@ class MapboxTripSessionTest { private val locationEngineResult: LocationEngineResult = mockk(relaxUnitFun = true) private val location: Location = mockk(relaxUnitFun = true) private val enhancedLocation: Location = mockk(relaxUnitFun = true) + private val keyPoints: List = mockk(relaxUnitFun = true) private val navigator: MapboxNativeNavigator = mockk(relaxUnitFun = true) private val navigationStatus: NavigationStatus = mockk(relaxUnitFun = true) @@ -75,6 +76,7 @@ class MapboxTripSessionTest { every { navigator.updateLocation(any()) } returns false every { navigator.setRoute(any()) } returns navigationStatus every { tripStatus.enhancedLocation } returns enhancedLocation + every { tripStatus.keyPoints } returns keyPoints every { tripStatus.offRoute } returns false every { @@ -278,7 +280,7 @@ class MapboxTripSessionTest { tripSession.registerLocationObserver(observer) - verify { observer.onEnhancedLocationChanged(enhancedLocation) } + verify { observer.onEnhancedLocationChanged(enhancedLocation, keyPoints) } assertEquals(enhancedLocation, tripSession.getEnhancedLocation()) tripSession.stop() unmockkObject(ThreadController) @@ -309,7 +311,7 @@ class MapboxTripSessionTest { tripSession.registerLocationObserver(observer) - verify(exactly = 2) { observer.onEnhancedLocationChanged(enhancedLocation) } + verify(exactly = 2) { observer.onEnhancedLocationChanged(enhancedLocation, keyPoints) } assertEquals(enhancedLocation, tripSession.getEnhancedLocation()) tripSession.stop() unmockkObject(ThreadController) @@ -340,7 +342,7 @@ class MapboxTripSessionTest { tripSession.unregisterLocationObserver(observer) tripSession.stop() - verify(exactly = 1) { observer.onEnhancedLocationChanged(enhancedLocation) } + verify(exactly = 1) { observer.onEnhancedLocationChanged(enhancedLocation, keyPoints) } unmockkObject(ThreadController) } diff --git a/libnavigator/local.properties b/libnavigator/local.properties deleted file mode 100644 index 69342095a46..00000000000 --- a/libnavigator/local.properties +++ /dev/null @@ -1,8 +0,0 @@ -## This file must *NOT* be checked into Version Control Systems, -# as it contains information specific to your local configuration. -# -# Location of the SDK. This is only used by Gradle. -# For customization when using a Version Control System, please read the -# header note. -#Wed Dec 18 10:55:26 PST 2019 -sdk.dir=/Users/abhishekkejriwal/Library/Android/sdk diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt index 13533f5ef1e..2cc0c611c62 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt @@ -58,6 +58,7 @@ object MapboxNativeNavigatorImpl : MapboxNativeNavigator { val status = navigator.getStatus(date) return TripStatus( status.location.toLocation(), + status.key_points.map { it.toLocation() }, status.getRouteProgress(), status.routeState == RouteState.OFFROUTE ) diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/TripStatus.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/TripStatus.kt index 758872dc42f..ba0b72eb235 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/TripStatus.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/TripStatus.kt @@ -5,6 +5,7 @@ import com.mapbox.navigation.base.trip.model.RouteProgress data class TripStatus( val enhancedLocation: Location, + val keyPoints: List, val routeProgress: RouteProgress, val offRoute: Boolean ) From 2652397d708cabf49bf3e83e92763e9993f57da0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Thu, 6 Feb 2020 19:15:04 +0100 Subject: [PATCH 02/11] fix SimpleMapboxNavigation example --- .../activity/SimpleMapboxNavigationKt.kt | 22 ++++++++++++++----- .../activity_simple_mapbox_navigation.xml | 3 +-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/examples/src/main/java/com/mapbox/navigation/examples/activity/SimpleMapboxNavigationKt.kt b/examples/src/main/java/com/mapbox/navigation/examples/activity/SimpleMapboxNavigationKt.kt index 532296b92ab..6d9af59243b 100644 --- a/examples/src/main/java/com/mapbox/navigation/examples/activity/SimpleMapboxNavigationKt.kt +++ b/examples/src/main/java/com/mapbox/navigation/examples/activity/SimpleMapboxNavigationKt.kt @@ -34,11 +34,13 @@ import com.mapbox.navigation.core.directions.session.RoutesObserver import com.mapbox.navigation.core.directions.session.RoutesRequestCallback import com.mapbox.navigation.core.trip.session.LocationObserver import com.mapbox.navigation.core.trip.session.RouteProgressObserver +import com.mapbox.navigation.core.trip.session.TripSessionStateObserver import com.mapbox.navigation.examples.R import com.mapbox.navigation.examples.utils.Utils import com.mapbox.navigation.examples.utils.extensions.toPoint import com.mapbox.services.android.navigation.ui.v5.route.NavigationMapRoute -import kotlinx.android.synthetic.main.activity_trip_service.* +import kotlinx.android.synthetic.main.activity_simple_mapbox_navigation.* +import kotlinx.android.synthetic.main.activity_trip_service.mapView import timber.log.Timber class SimpleMapboxNavigationKt : AppCompatActivity(), OnMapReadyCallback { @@ -60,9 +62,7 @@ class SimpleMapboxNavigationKt : AppCompatActivity(), OnMapReadyCallback { mapView.getMapAsync(this) localLocationEngine = LocationEngineProvider.getBestLocationEngine(applicationContext) mapboxNavigation = MapboxNavigation(applicationContext, Utils.getMapboxAccessToken(this)) - startLocationUpdates() startNavigation.setOnClickListener { - stopLocationUpdates() mapboxNavigation.startTripSession() } } @@ -195,21 +195,30 @@ class SimpleMapboxNavigationKt : AppCompatActivity(), OnMapReadyCallback { private val routesReqCallback = object : RoutesRequestCallback { override fun onRoutesReady(routes: List): List { Timber.e("route request success %s", routes.toString()) - startNavigation.visibility = VISIBLE return routes } override fun onRoutesRequestFailure(throwable: Throwable, routeOptions: RouteOptions) { symbolManager?.deleteAll() Timber.e("route request failure %s", throwable.toString()) - startNavigation.visibility = GONE } override fun onRoutesRequestCanceled(routeOptions: RouteOptions) { symbolManager?.deleteAll() Timber.e("route request canceled") + } + } + + private val tripSessionStateObserver = object : TripSessionStateObserver { + override fun onSessionStarted() { + stopLocationUpdates() startNavigation.visibility = GONE } + + override fun onSessionStopped() { + startLocationUpdates() + startNavigation.visibility = VISIBLE + } } public override fun onResume() { @@ -228,6 +237,7 @@ class SimpleMapboxNavigationKt : AppCompatActivity(), OnMapReadyCallback { mapboxNavigation.registerLocationObserver(locationObserver) mapboxNavigation.registerRouteProgressObserver(routeProgressObserver) mapboxNavigation.registerRoutesObserver(routesObserver) + mapboxNavigation.registerTripSessionStateObserver(tripSessionStateObserver) } override fun onStop() { @@ -236,6 +246,8 @@ class SimpleMapboxNavigationKt : AppCompatActivity(), OnMapReadyCallback { mapboxNavigation.unregisterLocationObserver(locationObserver) mapboxNavigation.unregisterRouteProgressObserver(routeProgressObserver) mapboxNavigation.unregisterRoutesObserver(routesObserver) + mapboxNavigation.unregisterTripSessionStateObserver(tripSessionStateObserver) + stopLocationUpdates() } override fun onLowMemory() { diff --git a/examples/src/main/res/layout/activity_simple_mapbox_navigation.xml b/examples/src/main/res/layout/activity_simple_mapbox_navigation.xml index 9cfc3fbb216..a637a8a32fd 100644 --- a/examples/src/main/res/layout/activity_simple_mapbox_navigation.xml +++ b/examples/src/main/res/layout/activity_simple_mapbox_navigation.xml @@ -22,6 +22,5 @@ app:layout_constraintBottom_toBottomOf="parent" android:background="@color/colorPrimary" android:text="@string/start_navigation" - android:textColor="@android:color/white" - android:visibility="gone" /> + android:textColor="@android:color/white" /> \ No newline at end of file From 595b62c0901dfb92bef4daffdc293abdaca88bbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Thu, 6 Feb 2020 19:44:48 +0100 Subject: [PATCH 03/11] use env or project variables for bintray credentials --- build.gradle | 6 ++---- circle.yml | 56 ++++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 50 insertions(+), 12 deletions(-) diff --git a/build.gradle b/build.gradle index 8082c527f80..67380c04c50 100644 --- a/build.gradle +++ b/build.gradle @@ -42,12 +42,10 @@ allprojects { jcenter() maven { url 'https://plugins.gradle.org/m2' } maven { - Properties localProperties = new Properties() - localProperties.load(project.rootProject.file("local.properties").newDataInputStream()) url 'https://mapbox.bintray.com/mapbox_private' credentials { - username = localProperties.getProperty("BINTRAY_USER", "") - password = localProperties.getProperty("BINTRAY_API_KEY", "") + username = project.hasProperty('BINTRAY_USER') ? project.property('BINTRAY_USER') : System.getenv('BINTRAY_USER') + password = project.hasProperty('BINTRAY_API_KEY') ? project.property('BINTRAY_API_KEY') : System.getenv('BINTRAY_API_KEY') } } maven { url 'https://mapbox.bintray.com/mapbox' } diff --git a/circle.yml b/circle.yml index d52b76bb19c..0b3f368e498 100644 --- a/circle.yml +++ b/circle.yml @@ -31,6 +31,14 @@ jobs: keys: - jars-{{ checksum "build.gradle" }}-{{ checksum "app/build.gradle" }} - jars- + - run: + name: Generate Bintray credentials + command: | + if [ -n "${BINTRAY_USER}" ]; then + echo "BINTRAY_USER=$BINTRAY_USER + BINTRAY_API_KEY=$BINTRAY_API_KEY + GPG_PASSPHRASE=$GPG_PASSPHRASE" + fi - run: name: Download Dependencies command: ./gradlew androidDependencies @@ -123,6 +131,14 @@ jobs: keys: - deps-{{ checksum "build.gradle" }}-{{ checksum "gradle/dependencies.gradle" }}-{{ checksum "libdirections-hybrid/build.gradle" }}-{{ checksum "libdirections-offboard/build.gradle" }}-{{ checksum "libdirections-onboard/build.gradle" }}-{{ checksum "liblogger/build.gradle" }}-{{ checksum "libnavigation-base/build.gradle" }}-{{ checksum "libnavigation-metrics/build.gradle" }}-{{ checksum "libnavigation-util/build.gradle" }}-{{ checksum "libnavigator/build.gradle" }}-{{ checksum "libtrip-notification/build.gradle" }}-{{ checksum "libnavigation-core/build.gradle" }} - deps- + - run: + name: Generate Bintray credentials + command: | + if [ -n "${BINTRAY_USER}" ]; then + echo "BINTRAY_USER=$BINTRAY_USER + BINTRAY_API_KEY=$BINTRAY_API_KEY + GPG_PASSPHRASE=$GPG_PASSPHRASE" + fi - run: name: Download Dependencies command: ./gradlew androidDependencies @@ -153,6 +169,14 @@ jobs: keys: - deps-{{ checksum "build.gradle" }}-{{ checksum "gradle/dependencies.gradle" }}-{{ checksum "examples/build.gradle" }}-{{ checksum "libdirections-hybrid/build.gradle" }}-{{ checksum "libdirections-offboard/build.gradle" }}-{{ checksum "libdirections-onboard/build.gradle" }}-{{ checksum "liblogger/build.gradle" }}-{{ checksum "libnavigation-base/build.gradle" }}-{{ checksum "libnavigation-metrics/build.gradle" }}-{{ checksum "libnavigation-util/build.gradle" }}-{{ checksum "libnavigator/build.gradle" }}-{{ checksum "libtrip-notification/build.gradle" }}-{{ checksum "libnavigation-core/build.gradle" }} - deps- + - run: + name: Generate Bintray credentials + command: | + if [ -n "${BINTRAY_USER}" ]; then + echo "BINTRAY_USER=$BINTRAY_USER + BINTRAY_API_KEY=$BINTRAY_API_KEY + GPG_PASSPHRASE=$GPG_PASSPHRASE" + fi - run: name: Download Dependencies command: ./gradlew androidDependencies @@ -206,6 +230,14 @@ jobs: IS_LOCAL_DEVELOPMENT: false steps: - checkout + - run: + name: Generate Bintray credentials + command: | + if [ -n "${BINTRAY_USER}" ]; then + echo "BINTRAY_USER=$BINTRAY_USER + BINTRAY_API_KEY=$BINTRAY_API_KEY + GPG_PASSPHRASE=$GPG_PASSPHRASE" + fi - run: name: Generate and Validate License command: | @@ -254,6 +286,14 @@ jobs: - image: mbgl/61abee1674:android-ndk-r18 steps: - checkout + - run: + name: Generate Bintray credentials + command: | + if [ -n "${BINTRAY_USER}" ]; then + echo "BINTRAY_USER=$BINTRAY_USER + BINTRAY_API_KEY=$BINTRAY_API_KEY + GPG_PASSPHRASE=$GPG_PASSPHRASE" + fi - run: name: Build Navigation SDK 1.0 (release) command: make 1.0-build-release @@ -264,14 +304,6 @@ jobs: # - run: # name: Check public documentation # command: sh scripts/dokka-validate.sh - - run: - name: Generate Bintray credentials - command: | - if [ -n "${BINTRAY_USER}" ]; then - echo "BINTRAY_USER=$BINTRAY_USER - BINTRAY_API_KEY=$BINTRAY_API_KEY - GPG_PASSPHRASE=$GPG_PASSPHRASE" - fi - deploy: name: Publish Navigation SDK 1.0 to Bintray command: | @@ -299,6 +331,14 @@ jobs: keys: - jars-{{ checksum "build.gradle" }}-{{ checksum "app/build.gradle" }} - jars- + - run: + name: Generate Bintray credentials + command: | + if [ -n "${BINTRAY_USER}" ]; then + echo "BINTRAY_USER=$BINTRAY_USER + BINTRAY_API_KEY=$BINTRAY_API_KEY + GPG_PASSPHRASE=$GPG_PASSPHRASE" + fi - run: name: Download Dependencies command: ./gradlew androidDependencies From 3857551c58d327944001f2ebd80edeaa95044e60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Thu, 6 Feb 2020 20:17:21 +0100 Subject: [PATCH 04/11] updated licenses --- LICENSE.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/LICENSE.md b/LICENSE.md index eae67b3e4c0..8b4d04dec71 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -558,7 +558,7 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens Mapbox Navigation uses portions of the Mapbox Android Core Library. URL: [https://github.com/mapbox/mapbox-events-android](https://github.com/mapbox/mapbox-events-android) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +License: [The MIT License](https://opensource.org/licenses/MIT) =========================================================================== @@ -570,7 +570,7 @@ License: [BSD](https://opensource.org/licenses/BSD-2-Clause) Mapbox Navigation uses portions of the Mapbox Android Telemetry Library. URL: [https://github.com/mapbox/mapbox-events-android](https://github.com/mapbox/mapbox-events-android) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +License: [The MIT License](https://opensource.org/licenses/MIT) =========================================================================== From c9a7164e956f916d8685eadf7ca5de86d7e0f4b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Thu, 6 Feb 2020 20:56:58 +0100 Subject: [PATCH 05/11] fix http client tests --- .../v5/internal/navigation/HttpClientTest.kt | 42 ++++++++++++++----- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/internal/navigation/HttpClientTest.kt b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/internal/navigation/HttpClientTest.kt index 98eb6493482..5cf4a3f3054 100644 --- a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/internal/navigation/HttpClientTest.kt +++ b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/internal/navigation/HttpClientTest.kt @@ -1,12 +1,18 @@ package com.mapbox.services.android.navigation.v5.internal.navigation import com.mapbox.navigator.HttpCode +import com.mapbox.navigator.HttpResponse +import io.mockk.every +import io.mockk.mockk +import io.mockk.verify +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit import okhttp3.Interceptor import okhttp3.OkHttpClient import okhttp3.mockwebserver.MockResponse import okhttp3.mockwebserver.MockWebServer import org.junit.After -import org.junit.Assert.assertArrayEquals +import org.junit.Assert import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test @@ -27,6 +33,7 @@ class HttpClientTest { private val httpClient = HttpClient(USER_AGENT) private val mockServer = MockWebServer() + private val httpResponseCallback: HttpResponse = mockk(relaxUnitFun = true) @Before fun setUp() { @@ -41,22 +48,36 @@ class HttpClientTest { @Test fun `check success network response`() { + val latch = CountDownLatch(1) + every { httpResponseCallback.run(any(), any()) } answers { + latch.countDown() + } val mockResponse = buildResponse(SUCCESS_CODE, SUCCESS_BODY) mockServer.enqueue(mockResponse) - val response = httpClient.executeMockRequest() + httpClient.executeMockRequest(httpResponseCallback) + + if (!latch.await(5, TimeUnit.SECONDS)) { + Assert.fail() + } - assertEquals(HttpCode.SUCCESS.name, response.code.name) - assertArrayEquals(SUCCESS_BODY.toByteArray(), response.bytes) + verify { httpResponseCallback.run(SUCCESS_BODY.toByteArray(), HttpCode.SUCCESS) } } @Test fun `check failure network response`() { + val latch = CountDownLatch(1) + every { httpResponseCallback.run(any(), any()) } answers { + latch.countDown() + } val mockResponse = buildResponse(FAILURE_CODE, FAILURE_BODY) mockServer.enqueue(mockResponse) - val response = httpClient.executeMockRequest() + httpClient.executeMockRequest(httpResponseCallback) + + if (!latch.await(5, TimeUnit.SECONDS)) { + Assert.fail() + } - assertEquals(HttpCode.FAILURE.name, response.code.name) - assertArrayEquals(FAILURE_BODY.toByteArray(), response.bytes) + verify { httpResponseCallback.run(FAILURE_BODY.toByteArray(), HttpCode.FAILURE) } } @Test @@ -76,7 +97,7 @@ class HttpClientTest { userAgent = USER_AGENT, clientBuilder = OkHttpClient.Builder().apply { networkInterceptors().add(interceptor) }) - httpClient.executeMockRequest() + httpClient.executeMockRequest(httpResponseCallback) } @Test @@ -97,7 +118,7 @@ class HttpClientTest { acceptGzipEncoding = true, clientBuilder = OkHttpClient.Builder().apply { networkInterceptors().add(interceptor) }) - httpClientWithGzip.executeMockRequest() + httpClientWithGzip.executeMockRequest(httpResponseCallback) } private fun buildResponse(code: Int, body: String) = @@ -106,5 +127,6 @@ class HttpClientTest { setBody(body) } - private fun HttpClient.executeMockRequest() = this.get(mockServer.url("/").toString()) + private fun HttpClient.executeMockRequest(httpResponse: HttpResponse) = + this.get(mockServer.url("/").toString(), httpResponse) } From 164bdefd1ea5928ee61e5f5b9bee7ecdd920b9e8 Mon Sep 17 00:00:00 2001 From: Pablo Guardiola Date: Fri, 7 Feb 2020 17:59:49 -0500 Subject: [PATCH 06/11] bump mapboxMapSdk version to 9.0.0-20200207.215725-27 (https://github.com/mapbox/mapbox-gl-native-android/pull/166) which includes fix for mapbox-gl-native https://github.com/mapbox/mapbox-gl-native/issues/16180 crash --- gradle/dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index 2111ccf49d8..fff0af343dc 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -8,7 +8,7 @@ ext { ] version = [ - mapboxMapSdk : '9.0.0-20200206.150107-26', + mapboxMapSdk : '9.0.0-20200207.215725-27', mapboxSdkServices : '5.1.0-beta.1', mapboxSdkDirectionsModels : '5.1.0-beta.1', mapboxEvents : '4.5.1', From e104892bce9d50afa5194e99f5e30f1cc5fe3133 Mon Sep 17 00:00:00 2001 From: Pablo Guardiola Date: Tue, 11 Feb 2020 08:51:35 -0500 Subject: [PATCH 07/11] Follow up from #2452 (#2458) * make configure router http interface parameter nullable * add nn uncertain route state * expose nn cache last route api in mapbox navigator * remove lat long workaround not needed anymore as nn master-SNAPSHOT-0 includes the fix * bump mapbox-navigation-native version to ms-bearing-from-shape-on-interpolation-SNAPSHOT-2 --- .../examples/activity/SimpleMapboxNavigationKt.kt | 9 +-------- gradle/dependencies.gradle | 2 +- .../navigation/v5/routeprogress/RouteProgressState.kt | 4 +++- .../navigation/v5/routeprogress/RouteProgressStateMap.kt | 1 + .../navigation/base/trip/model/RouteProgressState.kt | 3 ++- .../mapbox/navigation/navigator/MapboxNativeNavigator.kt | 4 +++- .../navigation/navigator/MapboxNativeNavigatorImpl.kt | 7 ++++++- 7 files changed, 17 insertions(+), 13 deletions(-) diff --git a/examples/src/main/java/com/mapbox/navigation/examples/activity/SimpleMapboxNavigationKt.kt b/examples/src/main/java/com/mapbox/navigation/examples/activity/SimpleMapboxNavigationKt.kt index 6d9af59243b..1971edbc1cd 100644 --- a/examples/src/main/java/com/mapbox/navigation/examples/activity/SimpleMapboxNavigationKt.kt +++ b/examples/src/main/java/com/mapbox/navigation/examples/activity/SimpleMapboxNavigationKt.kt @@ -127,14 +127,7 @@ class SimpleMapboxNavigationKt : AppCompatActivity(), OnMapReadyCallback { keyPoints: List ) { if (keyPoints.isNotEmpty()) { - locationComponent?.forceLocationUpdate(keyPoints.map { - // workaround for https://github.com/mapbox/mapbox-location-native/pull/65#discussion_r375777857 - val lat = it.latitude - val lon = it.longitude - it.latitude = lon - it.longitude = lat - it - }, true) + locationComponent?.forceLocationUpdate(keyPoints, true) } else { locationComponent?.forceLocationUpdate(enhancedLocation) } diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index fff0af343dc..bb7268d5eea 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -13,7 +13,7 @@ ext { mapboxSdkDirectionsModels : '5.1.0-beta.1', mapboxEvents : '4.5.1', mapboxCore : '1.3.0', - mapboxNavigator : 'sf-keypoints-SNAPSHOT-8', + mapboxNavigator : 'ms-bearing-from-shape-on-interpolation-SNAPSHOT-2', mapboxCrashMonitor : '2.0.0', mapboxAnnotationPlugin : '0.7.0', mapboxAccounts : '0.3.1', diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteProgressState.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteProgressState.kt index 88f5c3b285f..4a4bfd6343e 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteProgressState.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteProgressState.kt @@ -37,5 +37,7 @@ enum class RouteProgressState { * A lack of [android.location.Location] updates from the phone has caused lack of confidence in the * progress updates being sent. */ - LOCATION_STALE + LOCATION_STALE, + + ROUTE_UNCERTAIN } diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteProgressStateMap.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteProgressStateMap.kt index a6e90b18006..cebf060dc9a 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteProgressStateMap.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteProgressStateMap.kt @@ -10,6 +10,7 @@ class RouteProgressStateMap : HashMap() { put(RouteState.COMPLETE, RouteProgressState.ROUTE_ARRIVED) put(RouteState.TRACKING, RouteProgressState.LOCATION_TRACKING) put(RouteState.STALE, RouteProgressState.LOCATION_STALE) + put(RouteState.UNCERTAIN, RouteProgressState.ROUTE_UNCERTAIN) put(RouteState.OFFROUTE, null) // Ignore off-route (info already provided via listener) } } diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/trip/model/RouteProgressState.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/trip/model/RouteProgressState.kt index e74a9475000..85821cc7e0a 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/trip/model/RouteProgressState.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/trip/model/RouteProgressState.kt @@ -5,5 +5,6 @@ enum class RouteProgressState { ROUTE_INITIALIZED, ROUTE_ARRIVED, LOCATION_TRACKING, - LOCATION_STALE + LOCATION_STALE, + ROUTE_UNCERTAIN } diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt index 58a8ab42d95..263047d4afd 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt @@ -49,7 +49,9 @@ interface MapboxNativeNavigator { // Offline - fun configureRouter(routerParams: RouterParams, httpClient: HttpInterface): Long + fun cacheLastRoute() + + fun configureRouter(routerParams: RouterParams, httpClient: HttpInterface?): Long fun getRoute(url: String): RouterResult fun unpackTiles(tarPath: String, destinationPath: String): Long fun removeTiles(tilePath: String, southwest: Point, northeast: Point): Long diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt index 2cc0c611c62..2b357fbc2f3 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt @@ -101,7 +101,11 @@ object MapboxNativeNavigatorImpl : MapboxNativeNavigator { // Offline - override fun configureRouter(routerParams: RouterParams, httpClient: HttpInterface): Long = + override fun cacheLastRoute() { + navigator.cacheLastRoute() + } + + override fun configureRouter(routerParams: RouterParams, httpClient: HttpInterface?): Long = navigator.configureRouter(routerParams, httpClient) override fun getRoute(url: String): RouterResult = navigator.getRoute(url) @@ -312,5 +316,6 @@ private fun RouteState.convertState(): RouteProgressState? { RouteState.COMPLETE -> RouteProgressState.ROUTE_ARRIVED RouteState.OFFROUTE -> null // send in a callback instead RouteState.STALE -> RouteProgressState.LOCATION_STALE + RouteState.UNCERTAIN -> RouteProgressState.ROUTE_UNCERTAIN } } From d93839ce97acb78692a7b7b67f43acb42d1b18da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Tue, 11 Feb 2020 18:14:20 +0100 Subject: [PATCH 08/11] bumped maps sdk to the latest 9.1.0-SNAPSHOT --- gradle/dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index bb7268d5eea..2a38e846b72 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -8,7 +8,7 @@ ext { ] version = [ - mapboxMapSdk : '9.0.0-20200207.215725-27', + mapboxMapSdk : '9.1.0-SNAPSHOT', mapboxSdkServices : '5.1.0-beta.1', mapboxSdkDirectionsModels : '5.1.0-beta.1', mapboxEvents : '4.5.1', From 69b34f09780a6aa09070614f237dd3a7bfebe6c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Wed, 12 Feb 2020 15:20:45 +0100 Subject: [PATCH 09/11] update MapboxTripSession tests --- .../trip/session/MapboxTripSessionTest.kt | 264 +++++++----------- .../utils/thread/ThreadController.kt | 2 +- 2 files changed, 104 insertions(+), 162 deletions(-) diff --git a/libnavigation-core/src/test/java/com/mapbox/navigation/core/trip/session/MapboxTripSessionTest.kt b/libnavigation-core/src/test/java/com/mapbox/navigation/core/trip/session/MapboxTripSessionTest.kt index 0629aecd2aa..d442973c2b2 100644 --- a/libnavigation-core/src/test/java/com/mapbox/navigation/core/trip/session/MapboxTripSessionTest.kt +++ b/libnavigation-core/src/test/java/com/mapbox/navigation/core/trip/session/MapboxTripSessionTest.kt @@ -27,16 +27,20 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.InternalCoroutinesApi import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.cancelAndJoin +import org.junit.After import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config @InternalCoroutinesApi @ExperimentalCoroutinesApi @RunWith(RobolectricTestRunner::class) +@Config(manifest = Config.NONE) class MapboxTripSessionTest { @get:Rule @@ -53,7 +57,7 @@ class MapboxTripSessionTest { private val locationEngineResult: LocationEngineResult = mockk(relaxUnitFun = true) private val location: Location = mockk(relaxUnitFun = true) private val enhancedLocation: Location = mockk(relaxUnitFun = true) - private val keyPoints: List = mockk(relaxUnitFun = true) + private val keyPoints: List = listOf(mockk(relaxUnitFun = true)) private val navigator: MapboxNativeNavigator = mockk(relaxUnitFun = true) private val navigationStatus: NavigationStatus = mockk(relaxUnitFun = true) @@ -62,8 +66,16 @@ class MapboxTripSessionTest { private val routeProgress: RouteProgress = mockk() private val navigatorPollingDelay = 1500L + private val parentJob = SupervisorJob() + private val testScope = CoroutineScope(parentJob + coroutineRule.testDispatcher) + @Before fun setUp() { + mockkObject(ThreadController) + every { ThreadController.IODispatcher } returns coroutineRule.testDispatcher + every { ThreadController.getIOScopeAndRootJob() } returns JobControl(parentJob, testScope) + every { ThreadController.getMainScopeAndRootJob() } returns JobControl(parentJob, testScope) + tripSession = MapboxTripSession( tripService, locationEngine, @@ -78,6 +90,8 @@ class MapboxTripSessionTest { every { tripStatus.enhancedLocation } returns enhancedLocation every { tripStatus.keyPoints } returns keyPoints every { tripStatus.offRoute } returns false + every { routeProgress.bannerInstructions() } returns null + every { routeProgress.voiceInstructions() } returns null every { locationEngine.requestLocationUpdates( @@ -119,12 +133,12 @@ class MapboxTripSessionTest { } @Test - fun locationObserverSuccess() { + fun locationObserverSuccess() = coroutineRule.runBlockingTest { tripSession.start() val observer: LocationObserver = mockk(relaxUnitFun = true) tripSession.registerLocationObserver(observer) - locationCallbackSlot.captured.onSuccess(locationEngineResult) + updateLocationAndJoin() verify { observer.onRawLocationChanged(location) } assertEquals(location, tripSession.getRawLocation()) @@ -133,10 +147,10 @@ class MapboxTripSessionTest { } @Test - fun locationObserverImmediate() { + fun locationObserverImmediate() = coroutineRule.runBlockingTest { tripSession.start() val observer: LocationObserver = mockk(relaxUnitFun = true) - locationCallbackSlot.captured.onSuccess(locationEngineResult) + updateLocationAndJoin() tripSession.registerLocationObserver(observer) @@ -146,39 +160,27 @@ class MapboxTripSessionTest { } @Test - fun unregisterLocationObserver() { + fun unregisterLocationObserver() = coroutineRule.runBlockingTest { tripSession.start() val observer: LocationObserver = mockk(relaxUnitFun = true) tripSession.registerLocationObserver(observer) - tripSession.unregisterLocationObserver(observer) - - locationCallbackSlot.captured.onSuccess(locationEngineResult) + updateLocationAndJoin() verify(exactly = 0) { observer.onRawLocationChanged(any()) } tripSession.stop() } @Test - fun locationPush() { + fun locationPush() = coroutineRule.runBlockingTest { tripSession.start() - - locationCallbackSlot.captured.onSuccess(locationEngineResult) - + updateLocationAndJoin() verify { navigator.updateLocation(location) } - tripSession.stop() } @Test fun routeProgressObserverSuccess() = coroutineRule.runBlockingTest { - val parentJob = SupervisorJob() - val testScope = CoroutineScope(parentJob + coroutineRule.testDispatcher) - mockkObject(ThreadController) - every { ThreadController.getIOScopeAndRootJob() } returns JobControl(parentJob, testScope) - every { ThreadController.getMainScopeAndRootJob() } returns JobControl(parentJob, testScope) - every { routeProgress.bannerInstructions() } returns null - every { routeProgress.voiceInstructions() } returns null tripSession = MapboxTripSession( tripService, locationEngine, @@ -188,24 +190,17 @@ class MapboxTripSessionTest { ThreadController ) tripSession.start() - locationCallbackSlot.captured.onSuccess(locationEngineResult) val observer: RouteProgressObserver = mockk(relaxUnitFun = true) - tripSession.registerRouteProgressObserver(observer) + updateLocationAndJoin() verify { observer.onRouteProgressChanged(routeProgress) } assertEquals(routeProgress, tripSession.getRouteProgress()) tripSession.stop() - unmockkObject(ThreadController) } @Test fun routeProgressObserverImmediate() = coroutineRule.runBlockingTest { - val parentJob = SupervisorJob() - val testScope = CoroutineScope(parentJob + coroutineRule.testDispatcher) - mockkObject(ThreadController) - every { ThreadController.getIOScopeAndRootJob() } returns JobControl(parentJob, testScope) - every { ThreadController.getMainScopeAndRootJob() } returns JobControl(parentJob, testScope) tripSession = MapboxTripSession( tripService, locationEngine, @@ -214,29 +209,18 @@ class MapboxTripSessionTest { navigator, ThreadController ) - val observer: RouteProgressObserver = mockk(relaxUnitFun = true) - tripSession.registerRouteProgressObserver(observer) tripSession.start() - locationCallbackSlot.captured.onSuccess(locationEngineResult) - tripSession.unregisterRouteProgressObserver(observer) - + updateLocationAndJoin() + val observer: RouteProgressObserver = mockk(relaxUnitFun = true) tripSession.registerRouteProgressObserver(observer) - verify(exactly = 2) { observer.onRouteProgressChanged(routeProgress) } + verify(exactly = 1) { observer.onRouteProgressChanged(routeProgress) } assertEquals(routeProgress, tripSession.getRouteProgress()) tripSession.stop() - unmockkObject(ThreadController) } @Test fun routeProgressObserverUnregister() = coroutineRule.runBlockingTest { - val parentJob = SupervisorJob() - val testScope = CoroutineScope(parentJob + coroutineRule.testDispatcher) - mockkObject(ThreadController) - every { ThreadController.getIOScopeAndRootJob() } returns JobControl(parentJob, testScope) - every { ThreadController.getMainScopeAndRootJob() } returns JobControl(parentJob, testScope) - every { routeProgress.bannerInstructions() } returns null - every { routeProgress.voiceInstructions() } returns null tripSession = MapboxTripSession( tripService, locationEngine, @@ -246,26 +230,38 @@ class MapboxTripSessionTest { ThreadController ) tripSession.start() - locationCallbackSlot.captured.onSuccess(locationEngineResult) val observer: RouteProgressObserver = mockk(relaxUnitFun = true) tripSession.registerRouteProgressObserver(observer) + tripSession.unregisterRouteProgressObserver(observer) + updateLocationAndJoin() + + verify(exactly = 0) { observer.onRouteProgressChanged(routeProgress) } + tripSession.stop() + } + @Test + fun routeProgressObserverDoubleRegister() = coroutineRule.runBlockingTest { + tripSession = MapboxTripSession( + tripService, + locationEngine, + locationEngineRequest, + navigatorPollingDelay, + navigator, + ThreadController + ) + tripSession.start() + val observer: RouteProgressObserver = mockk(relaxUnitFun = true) + tripSession.registerRouteProgressObserver(observer) + updateLocationAndJoin() tripSession.unregisterRouteProgressObserver(observer) + tripSession.registerRouteProgressObserver(observer) + verify(exactly = 2) { observer.onRouteProgressChanged(routeProgress) } tripSession.stop() - verify(exactly = 1) { observer.onRouteProgressChanged(routeProgress) } - unmockkObject(ThreadController) } @Test fun enhancedLocationObserverSuccess() = coroutineRule.runBlockingTest { - val parentJob = SupervisorJob() - val testScope = CoroutineScope(parentJob + coroutineRule.testDispatcher) - mockkObject(ThreadController) - every { ThreadController.getIOScopeAndRootJob() } returns JobControl(parentJob, testScope) - every { ThreadController.getMainScopeAndRootJob() } returns JobControl(parentJob, testScope) - every { routeProgress.bannerInstructions() } returns null - every { routeProgress.voiceInstructions() } returns null tripSession = MapboxTripSession( tripService, locationEngine, @@ -275,26 +271,17 @@ class MapboxTripSessionTest { ThreadController ) tripSession.start() - locationCallbackSlot.captured.onSuccess(locationEngineResult) val observer: LocationObserver = mockk(relaxUnitFun = true) - tripSession.registerLocationObserver(observer) + updateLocationAndJoin() verify { observer.onEnhancedLocationChanged(enhancedLocation, keyPoints) } assertEquals(enhancedLocation, tripSession.getEnhancedLocation()) tripSession.stop() - unmockkObject(ThreadController) } @Test fun enhancedLocationObserverImmediate() = coroutineRule.runBlockingTest { - val parentJob = SupervisorJob() - val testScope = CoroutineScope(parentJob + coroutineRule.testDispatcher) - mockkObject(ThreadController) - every { ThreadController.getIOScopeAndRootJob() } returns JobControl(parentJob, testScope) - every { ThreadController.getMainScopeAndRootJob() } returns JobControl(parentJob, testScope) - every { routeProgress.bannerInstructions() } returns null - every { routeProgress.voiceInstructions() } returns null tripSession = MapboxTripSession( tripService, locationEngine, @@ -303,29 +290,18 @@ class MapboxTripSessionTest { navigator, ThreadController ) - val observer: LocationObserver = mockk(relaxUnitFun = true) - tripSession.registerLocationObserver(observer) tripSession.start() - locationCallbackSlot.captured.onSuccess(locationEngineResult) - tripSession.unregisterLocationObserver(observer) - + updateLocationAndJoin() + val observer: LocationObserver = mockk(relaxUnitFun = true) tripSession.registerLocationObserver(observer) - verify(exactly = 2) { observer.onEnhancedLocationChanged(enhancedLocation, keyPoints) } + verify(exactly = 1) { observer.onEnhancedLocationChanged(enhancedLocation, emptyList()) } assertEquals(enhancedLocation, tripSession.getEnhancedLocation()) tripSession.stop() - unmockkObject(ThreadController) } @Test fun enhancedLocationObserverUnregister() = coroutineRule.runBlockingTest { - val parentJob = SupervisorJob() - val testScope = CoroutineScope(parentJob + coroutineRule.testDispatcher) - mockkObject(ThreadController) - every { ThreadController.getIOScopeAndRootJob() } returns JobControl(parentJob, testScope) - every { ThreadController.getMainScopeAndRootJob() } returns JobControl(parentJob, testScope) - every { routeProgress.bannerInstructions() } returns null - every { routeProgress.voiceInstructions() } returns null tripSession = MapboxTripSession( tripService, locationEngine, @@ -335,15 +311,13 @@ class MapboxTripSessionTest { ThreadController ) tripSession.start() - locationCallbackSlot.captured.onSuccess(locationEngineResult) val observer: LocationObserver = mockk(relaxUnitFun = true) tripSession.registerLocationObserver(observer) - tripSession.unregisterLocationObserver(observer) + updateLocationAndJoin() + verify(exactly = 0) { observer.onEnhancedLocationChanged(enhancedLocation, keyPoints) } tripSession.stop() - verify(exactly = 1) { observer.onEnhancedLocationChanged(enhancedLocation, keyPoints) } - unmockkObject(ThreadController) } @Test @@ -370,7 +344,7 @@ class MapboxTripSessionTest { } @Test - fun unregisterAllLocationObservers() { + fun unregisterAllLocationObservers() = coroutineRule.runBlockingTest { every { routeProgress.bannerInstructions() } returns null every { routeProgress.voiceInstructions() } returns null @@ -379,7 +353,7 @@ class MapboxTripSessionTest { tripSession.registerLocationObserver(observer) tripSession.unregisterAllLocationObservers() - locationCallbackSlot.captured.onSuccess(locationEngineResult) + updateLocationAndJoin() verify(exactly = 0) { observer.onRawLocationChanged(location) } assertEquals(location, tripSession.getRawLocation()) @@ -388,85 +362,56 @@ class MapboxTripSessionTest { } @Test - fun unregisterAllRouteProgressObservers() { - val parentJob = SupervisorJob() - val testScope = CoroutineScope(parentJob + coroutineRule.testDispatcher) - mockkObject(ThreadController) - - every { ThreadController.getIOScopeAndRootJob() } returns JobControl(parentJob, testScope) - every { ThreadController.getMainScopeAndRootJob() } returns JobControl(parentJob, testScope) - every { routeProgress.bannerInstructions() } returns null - every { routeProgress.voiceInstructions() } returns null - + fun unregisterAllRouteProgressObservers() = coroutineRule.runBlockingTest { tripSession = MapboxTripSession( - tripService, - locationEngine, - locationEngineRequest, - navigatorPollingDelay, - navigator, - ThreadController + tripService, + locationEngine, + locationEngineRequest, + navigatorPollingDelay, + navigator, + ThreadController ) tripSession.start() val routeProgressObserver: RouteProgressObserver = mockk(relaxUnitFun = true) - val locationObserver: LocationObserver = mockk(relaxUnitFun = true) - - tripSession.registerLocationObserver(locationObserver) tripSession.registerRouteProgressObserver(routeProgressObserver) - tripSession.unregisterAllRouteProgressObservers() - - locationCallbackSlot.captured.onSuccess(locationEngineResult) + updateLocationAndJoin() verify(exactly = 0) { routeProgressObserver.onRouteProgressChanged(any()) } tripSession.stop() - unmockkObject(ThreadController) } @Test - fun unregisterAllOffRouteObservers() { - val parentJob = SupervisorJob() - val testScope = CoroutineScope(parentJob + coroutineRule.testDispatcher) - mockkObject(ThreadController) - - every { ThreadController.getIOScopeAndRootJob() } returns JobControl(parentJob, testScope) - every { ThreadController.getMainScopeAndRootJob() } returns JobControl(parentJob, testScope) - every { routeProgress.bannerInstructions() } returns null - every { routeProgress.voiceInstructions() } returns null - every { tripStatus.offRoute } returns true - + fun unregisterAllOffRouteObservers() = coroutineRule.runBlockingTest { tripSession = MapboxTripSession( - tripService, - locationEngine, - locationEngineRequest, - navigatorPollingDelay, - navigator, - ThreadController + tripService, + locationEngine, + locationEngineRequest, + navigatorPollingDelay, + navigator, + ThreadController ) tripSession.start() val offRouteObserver: OffRouteObserver = mockk(relaxUnitFun = true) - val locationObserver: LocationObserver = mockk(relaxUnitFun = true) - - tripSession.registerLocationObserver(locationObserver) tripSession.registerOffRouteObserver(offRouteObserver) - tripSession.unregisterAllOffRouteObservers() - locationCallbackSlot.captured.onSuccess(locationEngineResult) + every { tripStatus.offRoute } returns true + updateLocationAndJoin() // registerOffRouteObserver will call onOffRouteStateChanged() on // the offRouteObserver so that accounts for the verify 1 time // below. However there shouldn't be any additional calls when // the locationCallback.onSuccess() is called because the collection // of offRouteObservers should be empty. - verify(exactly = 1) { offRouteObserver.onOffRouteStateChanged(any()) } + verify(exactly = 1) { offRouteObserver.onOffRouteStateChanged(false) } tripSession.stop() - unmockkObject(ThreadController) } @Test - fun unregisterAllStateObservers() { + fun unregisterAllStateObservers() = coroutineRule.runBlockingTest { val stateObserver: TripSessionStateObserver = mockk(relaxUnitFun = true) tripSession.registerStateObserver(stateObserver) @@ -483,82 +428,79 @@ class MapboxTripSessionTest { } @Test - fun unregisterAllBannerInstructionsObservers() { - val parentJob = SupervisorJob() - val testScope = CoroutineScope(parentJob + coroutineRule.testDispatcher) + fun unregisterAllBannerInstructionsObservers() = coroutineRule.runBlockingTest { val bannerInstructionsObserver: BannerInstructionsObserver = mockk(relaxUnitFun = true) val bannerInstructions: BannerInstructions = mockk() - mockkObject(ThreadController) - every { ThreadController.getIOScopeAndRootJob() } returns JobControl(parentJob, testScope) - every { ThreadController.getMainScopeAndRootJob() } returns JobControl(parentJob, testScope) every { routeProgress.bannerInstructions() } returns bannerInstructions every { routeProgress.voiceInstructions() } returns null every { tripStatus.offRoute } returns true tripSession = MapboxTripSession( - tripService, - locationEngine, - locationEngineRequest, - navigatorPollingDelay, - navigator, - ThreadController + tripService, + locationEngine, + locationEngineRequest, + navigatorPollingDelay, + navigator, + ThreadController ) tripSession.start() tripSession.registerBannerInstructionsObserver(bannerInstructionsObserver) - locationCallbackSlot.captured.onSuccess(locationEngineResult) + updateLocationAndJoin() tripSession.stop() tripSession.start() tripSession.unregisterAllBannerInstructionsObservers() - locationCallbackSlot.captured.onSuccess(locationEngineResult) + updateLocationAndJoin() verify(exactly = 1) { bannerInstructionsObserver.onNewBannerInstructions(any()) } tripSession.stop() - unmockkObject(ThreadController) } @Test - fun unregisterAllVoiceInstructionsObservers() { - val parentJob = SupervisorJob() - val testScope = CoroutineScope(parentJob + coroutineRule.testDispatcher) + fun unregisterAllVoiceInstructionsObservers() = coroutineRule.runBlockingTest { val voiceInstructionsObserver: VoiceInstructionsObserver = mockk(relaxUnitFun = true) val voiceInstructions: VoiceInstructions = mockk() - mockkObject(ThreadController) - - every { ThreadController.getIOScopeAndRootJob() } returns JobControl(parentJob, testScope) - every { ThreadController.getMainScopeAndRootJob() } returns JobControl(parentJob, testScope) every { routeProgress.bannerInstructions() } returns null every { routeProgress.voiceInstructions() } returns voiceInstructions every { tripStatus.offRoute } returns true tripSession = MapboxTripSession( - tripService, - locationEngine, - locationEngineRequest, - navigatorPollingDelay, - navigator, - ThreadController + tripService, + locationEngine, + locationEngineRequest, + navigatorPollingDelay, + navigator, + ThreadController ) tripSession.start() tripSession.registerVoiceInstructionsObserver(voiceInstructionsObserver) - locationCallbackSlot.captured.onSuccess(locationEngineResult) + updateLocationAndJoin() tripSession.stop() tripSession.start() tripSession.unregisterAllVoiceInstructionsObservers() - locationCallbackSlot.captured.onSuccess(locationEngineResult) + updateLocationAndJoin() verify(exactly = 1) { voiceInstructionsObserver.onNewVoiceInstructions(any()) } tripSession.stop() + } + + @After + fun cleanUp() { unmockkObject(ThreadController) } + + private suspend fun updateLocationAndJoin() { + locationCallbackSlot.captured.onSuccess(locationEngineResult) + parentJob.cancelAndJoin() + } } diff --git a/libnavigation-util/src/main/java/com/mapbox/navigation/utils/thread/ThreadController.kt b/libnavigation-util/src/main/java/com/mapbox/navigation/utils/thread/ThreadController.kt index c0b24f7c233..ae849c35c7c 100644 --- a/libnavigation-util/src/main/java/com/mapbox/navigation/utils/thread/ThreadController.kt +++ b/libnavigation-util/src/main/java/com/mapbox/navigation/utils/thread/ThreadController.kt @@ -109,7 +109,7 @@ object ThreadController { } /** - * Same as [cancelAllNonUICoroutines], but using the MainThread dispatcher. + * Same as [getIOScopeAndRootJob], but using the MainThread dispatcher. */ fun getMainScopeAndRootJob(): JobControl { val parentJob = SupervisorJob(mainRootJob) From 06d6662c7d0ba30d94d81caf4b1826cfc5a71447 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Wed, 12 Feb 2020 15:36:55 +0100 Subject: [PATCH 10/11] update SimpleMapboxNavigation example log level --- .../examples/activity/SimpleMapboxNavigationKt.kt | 14 +++++++------- .../v5/routeprogress/RouteProgressState.kt | 6 ++++++ .../v5/internal/navigation/HttpClientTest.kt | 6 +++--- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/examples/src/main/java/com/mapbox/navigation/examples/activity/SimpleMapboxNavigationKt.kt b/examples/src/main/java/com/mapbox/navigation/examples/activity/SimpleMapboxNavigationKt.kt index 1971edbc1cd..116558d3c82 100644 --- a/examples/src/main/java/com/mapbox/navigation/examples/activity/SimpleMapboxNavigationKt.kt +++ b/examples/src/main/java/com/mapbox/navigation/examples/activity/SimpleMapboxNavigationKt.kt @@ -119,7 +119,7 @@ class SimpleMapboxNavigationKt : AppCompatActivity(), OnMapReadyCallback { private val locationObserver = object : LocationObserver { override fun onRawLocationChanged(rawLocation: Location) { - Timber.e("raw location %s", rawLocation.toString()) + Timber.d("raw location %s", rawLocation.toString()) } override fun onEnhancedLocationChanged( @@ -131,8 +131,8 @@ class SimpleMapboxNavigationKt : AppCompatActivity(), OnMapReadyCallback { } else { locationComponent?.forceLocationUpdate(enhancedLocation) } - Timber.e("enhanced location %s", enhancedLocation) - Timber.e("enhanced keyPoints %s", keyPoints) + Timber.d("enhanced location %s", enhancedLocation) + Timber.d("enhanced keyPoints %s", keyPoints) } } @@ -170,7 +170,7 @@ class SimpleMapboxNavigationKt : AppCompatActivity(), OnMapReadyCallback { private val routeProgressObserver = object : RouteProgressObserver { override fun onRouteProgressChanged(routeProgress: RouteProgress) { - Timber.e("route progress %s", routeProgress.toString()) + Timber.d("route progress %s", routeProgress.toString()) } } @@ -181,13 +181,13 @@ class SimpleMapboxNavigationKt : AppCompatActivity(), OnMapReadyCallback { Toast.makeText(this@SimpleMapboxNavigationKt, "Empty routes", Toast.LENGTH_SHORT) .show() } - Timber.e("route changed %s", routes.toString()) + Timber.d("route changed %s", routes.toString()) } } private val routesReqCallback = object : RoutesRequestCallback { override fun onRoutesReady(routes: List): List { - Timber.e("route request success %s", routes.toString()) + Timber.d("route request success %s", routes.toString()) return routes } @@ -198,7 +198,7 @@ class SimpleMapboxNavigationKt : AppCompatActivity(), OnMapReadyCallback { override fun onRoutesRequestCanceled(routeOptions: RouteOptions) { symbolManager?.deleteAll() - Timber.e("route request canceled") + Timber.d("route request canceled") } } diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteProgressState.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteProgressState.kt index 4a4bfd6343e..0bd08595432 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteProgressState.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteProgressState.kt @@ -39,5 +39,11 @@ enum class RouteProgressState { */ LOCATION_STALE, + /** + * State when we start following a route. + * + * After a certain number of tracking points we gain confidence and switch to tracking state. + * We do map-matching rather than route line snapping during this state. + */ ROUTE_UNCERTAIN } diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/internal/navigation/HttpClientTest.kt b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/internal/navigation/HttpClientTest.kt index 5cf4a3f3054..d3306c02e8b 100644 --- a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/internal/navigation/HttpClientTest.kt +++ b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/internal/navigation/HttpClientTest.kt @@ -12,8 +12,8 @@ import okhttp3.OkHttpClient import okhttp3.mockwebserver.MockResponse import okhttp3.mockwebserver.MockWebServer import org.junit.After -import org.junit.Assert import org.junit.Assert.assertEquals +import org.junit.Assert.fail import org.junit.Before import org.junit.Test @@ -57,7 +57,7 @@ class HttpClientTest { httpClient.executeMockRequest(httpResponseCallback) if (!latch.await(5, TimeUnit.SECONDS)) { - Assert.fail() + fail() } verify { httpResponseCallback.run(SUCCESS_BODY.toByteArray(), HttpCode.SUCCESS) } @@ -74,7 +74,7 @@ class HttpClientTest { httpClient.executeMockRequest(httpResponseCallback) if (!latch.await(5, TimeUnit.SECONDS)) { - Assert.fail() + fail() } verify { httpResponseCallback.run(FAILURE_BODY.toByteArray(), HttpCode.FAILURE) } From 7cf24f98ab210d67534f03812d38a9e82d4caac8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Wed, 12 Feb 2020 17:40:03 +0100 Subject: [PATCH 11/11] remove explicit Bintray env variables declaration on CI --- circle.yml | 48 ------------------------------------------------ 1 file changed, 48 deletions(-) diff --git a/circle.yml b/circle.yml index 0b3f368e498..6253da9b787 100644 --- a/circle.yml +++ b/circle.yml @@ -31,14 +31,6 @@ jobs: keys: - jars-{{ checksum "build.gradle" }}-{{ checksum "app/build.gradle" }} - jars- - - run: - name: Generate Bintray credentials - command: | - if [ -n "${BINTRAY_USER}" ]; then - echo "BINTRAY_USER=$BINTRAY_USER - BINTRAY_API_KEY=$BINTRAY_API_KEY - GPG_PASSPHRASE=$GPG_PASSPHRASE" - fi - run: name: Download Dependencies command: ./gradlew androidDependencies @@ -131,14 +123,6 @@ jobs: keys: - deps-{{ checksum "build.gradle" }}-{{ checksum "gradle/dependencies.gradle" }}-{{ checksum "libdirections-hybrid/build.gradle" }}-{{ checksum "libdirections-offboard/build.gradle" }}-{{ checksum "libdirections-onboard/build.gradle" }}-{{ checksum "liblogger/build.gradle" }}-{{ checksum "libnavigation-base/build.gradle" }}-{{ checksum "libnavigation-metrics/build.gradle" }}-{{ checksum "libnavigation-util/build.gradle" }}-{{ checksum "libnavigator/build.gradle" }}-{{ checksum "libtrip-notification/build.gradle" }}-{{ checksum "libnavigation-core/build.gradle" }} - deps- - - run: - name: Generate Bintray credentials - command: | - if [ -n "${BINTRAY_USER}" ]; then - echo "BINTRAY_USER=$BINTRAY_USER - BINTRAY_API_KEY=$BINTRAY_API_KEY - GPG_PASSPHRASE=$GPG_PASSPHRASE" - fi - run: name: Download Dependencies command: ./gradlew androidDependencies @@ -169,14 +153,6 @@ jobs: keys: - deps-{{ checksum "build.gradle" }}-{{ checksum "gradle/dependencies.gradle" }}-{{ checksum "examples/build.gradle" }}-{{ checksum "libdirections-hybrid/build.gradle" }}-{{ checksum "libdirections-offboard/build.gradle" }}-{{ checksum "libdirections-onboard/build.gradle" }}-{{ checksum "liblogger/build.gradle" }}-{{ checksum "libnavigation-base/build.gradle" }}-{{ checksum "libnavigation-metrics/build.gradle" }}-{{ checksum "libnavigation-util/build.gradle" }}-{{ checksum "libnavigator/build.gradle" }}-{{ checksum "libtrip-notification/build.gradle" }}-{{ checksum "libnavigation-core/build.gradle" }} - deps- - - run: - name: Generate Bintray credentials - command: | - if [ -n "${BINTRAY_USER}" ]; then - echo "BINTRAY_USER=$BINTRAY_USER - BINTRAY_API_KEY=$BINTRAY_API_KEY - GPG_PASSPHRASE=$GPG_PASSPHRASE" - fi - run: name: Download Dependencies command: ./gradlew androidDependencies @@ -230,14 +206,6 @@ jobs: IS_LOCAL_DEVELOPMENT: false steps: - checkout - - run: - name: Generate Bintray credentials - command: | - if [ -n "${BINTRAY_USER}" ]; then - echo "BINTRAY_USER=$BINTRAY_USER - BINTRAY_API_KEY=$BINTRAY_API_KEY - GPG_PASSPHRASE=$GPG_PASSPHRASE" - fi - run: name: Generate and Validate License command: | @@ -286,14 +254,6 @@ jobs: - image: mbgl/61abee1674:android-ndk-r18 steps: - checkout - - run: - name: Generate Bintray credentials - command: | - if [ -n "${BINTRAY_USER}" ]; then - echo "BINTRAY_USER=$BINTRAY_USER - BINTRAY_API_KEY=$BINTRAY_API_KEY - GPG_PASSPHRASE=$GPG_PASSPHRASE" - fi - run: name: Build Navigation SDK 1.0 (release) command: make 1.0-build-release @@ -331,14 +291,6 @@ jobs: keys: - jars-{{ checksum "build.gradle" }}-{{ checksum "app/build.gradle" }} - jars- - - run: - name: Generate Bintray credentials - command: | - if [ -n "${BINTRAY_USER}" ]; then - echo "BINTRAY_USER=$BINTRAY_USER - BINTRAY_API_KEY=$BINTRAY_API_KEY - GPG_PASSPHRASE=$GPG_PASSPHRASE" - fi - run: name: Download Dependencies command: ./gradlew androidDependencies