Skip to content

Commit

Permalink
catch exceptions when parsing DirectionsRefreshResponse
Browse files Browse the repository at this point in the history
  • Loading branch information
Zayankovsky committed Mar 29, 2022
1 parent daf53f7 commit a1ac57f
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 11 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ Mapbox welcomes participation and contributions from everyone.

#### Bug fixes and improvements
- Fixed `HistoryEventMapper#mapNavigationRoute` for when `SetRouteHistoryRecord` has empty `routeRequest`. [#5614](https://github.com/mapbox/mapbox-navigation-android/pull/5614)
- Fixed an issue where route refresh failure led to a parsing error and runtime crash instead of failure callback. [#5617](https://github.com/mapbox/mapbox-navigation-android/pull/5617)

## Mapbox Navigation SDK 2.4.0-beta.3 - March 25, 2022
### Changelog
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import com.mapbox.annotation.module.MapboxModule
import com.mapbox.annotation.module.MapboxModuleType
import com.mapbox.api.directions.v5.models.DirectionsRoute
import com.mapbox.api.directions.v5.models.RouteOptions
import com.mapbox.api.directionsrefresh.v1.models.DirectionsRefreshResponse
import com.mapbox.navigation.base.ExperimentalMapboxNavigationAPI
import com.mapbox.navigation.base.internal.route.InternalRouter
import com.mapbox.navigation.base.internal.route.updateLegAnnotations
Expand All @@ -29,6 +28,7 @@ import com.mapbox.navigation.base.route.toNavigationRoute
import com.mapbox.navigation.navigator.internal.mapToRoutingMode
import com.mapbox.navigation.navigator.internal.mapToSdkRouteOrigin
import com.mapbox.navigation.route.internal.util.ACCESS_TOKEN_QUERY_PARAM
import com.mapbox.navigation.route.internal.util.parseDirectionsRouteRefresh
import com.mapbox.navigation.route.internal.util.redactQueryParam
import com.mapbox.navigation.utils.internal.ThreadController
import com.mapbox.navigation.utils.internal.logI
Expand Down Expand Up @@ -215,16 +215,25 @@ class RouterWrapper(
},
{
mainJobControl.scope.launch {
val refreshedNavigationRoute = withContext(ThreadController.IODispatcher) {
val refreshResponse = DirectionsRefreshResponse.fromJson(it)
route.updateLegAnnotations(
initialLegIndex = refreshOptions.legIndex,
legAnnotations = refreshResponse.route()?.legs()?.map {
it.annotation()
}
)
}
callback.onRefreshReady(refreshedNavigationRoute)
withContext(ThreadController.IODispatcher) {
parseDirectionsRouteRefresh(it).mapValue { routeRefresh ->
route.updateLegAnnotations(
initialLegIndex = refreshOptions.legIndex,
legAnnotations = routeRefresh.legs()?.map {
it.annotation()
},
)
}
}.fold(
{ throwable ->
callback.onFailure(
RouterFactory.buildNavigationRouterRefreshError(
"failed for response: $it", throwable,
)
)
},
{ callback.onRefreshReady(it) },
)
}
}
)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.mapbox.navigation.route.internal.util

import com.mapbox.api.directionsrefresh.v1.models.DirectionsRefreshResponse
import com.mapbox.api.directionsrefresh.v1.models.DirectionsRouteRefresh
import com.mapbox.bindgen.Expected
import com.mapbox.bindgen.ExpectedFactory

internal fun parseDirectionsRouteRefresh(
json: String,
): Expected<Throwable, DirectionsRouteRefresh> {
return try {
val route = DirectionsRefreshResponse.fromJson(json).route()
if (route != null) {
ExpectedFactory.createValue(route)
} else {
ExpectedFactory.createError(IllegalStateException("no route refresh returned"))
}
} catch (ex: Exception) {
ExpectedFactory.createError(ex)
}
}

0 comments on commit a1ac57f

Please sign in to comment.