Skip to content

Commit 109c148

Browse files
Seth BourgetSeth Bourget
andauthored
Updated extension functions to be cancellable and to call cancel on the MapboxRouteLineApi when invokeOnCancellation is called. (#6094)
Co-authored-by: Seth Bourget <seth@cafesilencio.net>
1 parent 7dc5511 commit 109c148

File tree

2 files changed

+37
-8
lines changed

2 files changed

+37
-8
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Mapbox welcomes participation and contributions from everyone.
55
## Unreleased
66
#### Features
77
#### Bug fixes and improvements
8+
- Updated `MapboxRouteLineApiExtensions` so that when coroutine scope calling the suspend functions is canceled, `MapboxRouteLineApi::cancel` is called. [#6094](https://github.com/mapbox/mapbox-navigation-android/pull/6094)
89

910
## Mapbox Navigation SDK 2.7.0-beta.2 - 22 July, 2022
1011
### Changelog

libnavui-maps/src/main/java/com/mapbox/navigation/ui/maps/route/line/MapboxRouteLineApiExtensions.kt

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ import com.mapbox.navigation.ui.maps.route.line.model.RouteLineUpdateValue
2424
import com.mapbox.navigation.ui.maps.route.line.model.RouteNotFound
2525
import com.mapbox.navigation.ui.maps.route.line.model.RouteSetValue
2626
import com.mapbox.navigation.ui.maps.route.line.model.toNavigationRouteLines
27+
import kotlinx.coroutines.suspendCancellableCoroutine
2728
import kotlin.coroutines.resume
28-
import kotlin.coroutines.suspendCoroutine
2929

3030
/**
3131
* Extension functions for [MapboxRouteLineApi] calls that are implemented as callbacks. This offers
@@ -50,10 +50,14 @@ object MapboxRouteLineApiExtensions {
5050
)
5151
suspend fun MapboxRouteLineApi.setRoutes(newRoutes: List<RouteLine>):
5252
Expected<RouteLineError, RouteSetValue> {
53-
return suspendCoroutine { continuation ->
53+
return suspendCancellableCoroutine { continuation ->
5454
this.setNavigationRouteLines(
5555
newRoutes.toNavigationRouteLines()
5656
) { value -> continuation.resume(value) }
57+
58+
continuation.invokeOnCancellation {
59+
this.cancel()
60+
}
5761
}
5862
}
5963

@@ -88,11 +92,15 @@ object MapboxRouteLineApiExtensions {
8892
newRoutes: List<NavigationRouteLine>,
8993
alternativeRoutesMetadata: List<AlternativeRouteMetadata>
9094
): Expected<RouteLineError, RouteSetValue> {
91-
return suspendCoroutine { continuation ->
95+
return suspendCancellableCoroutine { continuation ->
9296
this.setNavigationRouteLines(
9397
newRoutes,
9498
alternativeRoutesMetadata
9599
) { value -> continuation.resume(value) }
100+
101+
continuation.invokeOnCancellation {
102+
this.cancel()
103+
}
96104
}
97105
}
98106

@@ -124,11 +132,15 @@ object MapboxRouteLineApiExtensions {
124132
newRoutes: List<NavigationRoute>,
125133
alternativeRoutesMetadata: List<AlternativeRouteMetadata>
126134
): Expected<RouteLineError, RouteSetValue> {
127-
return suspendCoroutine { continuation ->
135+
return suspendCancellableCoroutine { continuation ->
128136
this.setNavigationRoutes(
129137
newRoutes,
130138
alternativeRoutesMetadata
131139
) { value -> continuation.resume(value) }
140+
141+
continuation.invokeOnCancellation {
142+
this.cancel()
143+
}
132144
}
133145
}
134146

@@ -137,8 +149,12 @@ object MapboxRouteLineApiExtensions {
137149
* can be used to draw the current route line(s) on the map.
138150
*/
139151
suspend fun MapboxRouteLineApi.getRouteDrawData(): Expected<RouteLineError, RouteSetValue> {
140-
return suspendCoroutine { continuation ->
152+
return suspendCancellableCoroutine { continuation ->
141153
this.getRouteDrawData { value -> continuation.resume(value) }
154+
155+
continuation.invokeOnCancellation {
156+
this.cancel()
157+
}
142158
}
143159
}
144160

@@ -161,12 +177,16 @@ object MapboxRouteLineApiExtensions {
161177
mapboxMap: MapboxMap,
162178
padding: Float,
163179
): Expected<RouteNotFound, ClosestRouteValue> {
164-
return suspendCoroutine { continuation ->
180+
return suspendCancellableCoroutine { continuation ->
165181
this.findClosestRoute(
166182
target,
167183
mapboxMap,
168184
padding
169185
) { value -> continuation.resume(value) }
186+
187+
continuation.invokeOnCancellation {
188+
this.cancel()
189+
}
170190
}
171191
}
172192

@@ -177,8 +197,12 @@ object MapboxRouteLineApiExtensions {
177197
* the map should appear without any route lines.
178198
*/
179199
suspend fun MapboxRouteLineApi.clearRouteLine(): Expected<RouteLineError, RouteLineClearValue> {
180-
return suspendCoroutine { continuation ->
200+
return suspendCancellableCoroutine { continuation ->
181201
this.clearRouteLine { value -> continuation.resume(value) }
202+
203+
continuation.invokeOnCancellation {
204+
this.cancel()
205+
}
182206
}
183207
}
184208

@@ -198,10 +222,14 @@ object MapboxRouteLineApiExtensions {
198222
*/
199223
suspend fun MapboxRouteLineApi.showRouteWithLegIndexHighlighted(legIndex: Int):
200224
Expected<RouteLineError, RouteLineUpdateValue> {
201-
return suspendCoroutine { continuation ->
225+
return suspendCancellableCoroutine { continuation ->
202226
this.showRouteWithLegIndexHighlighted(legIndex) { value ->
203227
continuation.resume(value)
204228
}
229+
230+
continuation.invokeOnCancellation {
231+
this.cancel()
232+
}
205233
}
206234
}
207235

0 commit comments

Comments
 (0)