@@ -24,8 +24,8 @@ import com.mapbox.navigation.ui.maps.route.line.model.RouteLineUpdateValue
2424import com.mapbox.navigation.ui.maps.route.line.model.RouteNotFound
2525import com.mapbox.navigation.ui.maps.route.line.model.RouteSetValue
2626import com.mapbox.navigation.ui.maps.route.line.model.toNavigationRouteLines
27+ import kotlinx.coroutines.suspendCancellableCoroutine
2728import 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