-
Notifications
You must be signed in to change notification settings - Fork 318
/
FasterRouteDetector.kt
29 lines (25 loc) · 1.15 KB
/
FasterRouteDetector.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.mapbox.navigation.core.fasterroute
import com.mapbox.api.directions.v5.models.DirectionsRoute
import com.mapbox.navigation.base.trip.model.RouteProgress
import com.mapbox.navigation.utils.internal.ThreadController
import kotlinx.coroutines.withContext
internal class FasterRouteDetector(
private val routeComparator: RouteComparator
) {
suspend fun isRouteFaster(
alternativeRoute: DirectionsRoute,
routeProgress: RouteProgress
): Boolean = withContext(ThreadController.IODispatcher) {
val alternativeDuration = alternativeRoute.duration() ?: return@withContext false
val weightedDuration = routeProgress.durationRemaining * PERCENTAGE_THRESHOLD
val isRouteFaster = alternativeDuration < weightedDuration
return@withContext isRouteFaster && routeComparator.isNewRoute(routeProgress, alternativeRoute)
}
companion object {
/**
* This threshold optimizes for the current route. For example, if you're 40 minutes
* away and there is an alternative that is 1 minute faster, it will be ignored.
*/
private const val PERCENTAGE_THRESHOLD = 0.90
}
}