Skip to content

Commit 4974fcd

Browse files
jushgithub-actions[bot]
authored andcommitted
Pass coroutine context when generating line commands
GitOrigin-RevId: 8d687e8b6aa71f080c63f2624aafcdef034fb0ea
1 parent 5eb3eb7 commit 4974fcd

18 files changed

Lines changed: 614 additions & 577 deletions

ui-maps/src/main/java/com/mapbox/navigation/ui/maps/internal/route/line/MapboxRouteLineUtils.kt

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ import com.mapbox.navigation.base.utils.DecodeUtils.completeGeometryToLineString
4040
import com.mapbox.navigation.base.utils.DecodeUtils.stepsGeometryToPoints
4141
import com.mapbox.navigation.core.routealternatives.AlternativeRouteMetadata
4242
import com.mapbox.navigation.ui.maps.route.RouteLayerConstants
43-
import com.mapbox.navigation.ui.maps.route.line.api.HeavyRouteLineValueProvider
44-
import com.mapbox.navigation.ui.maps.route.line.api.LightRouteLineValueProvider
43+
import com.mapbox.navigation.ui.maps.route.line.api.HeavyRouteLineExpressionValueProvider
44+
import com.mapbox.navigation.ui.maps.route.line.api.LightRouteLineExpressionValueProvider
4545
import com.mapbox.navigation.ui.maps.route.line.api.LineGradientCommandApplier
4646
import com.mapbox.navigation.ui.maps.route.line.api.RouteLineValueCommandHolder
4747
import com.mapbox.navigation.ui.maps.route.line.model.ExpressionOffsetData
@@ -2794,15 +2794,15 @@ internal object MapboxRouteLineUtils {
27942794
}
27952795
val primaryRouteTrafficLineExpressionCommandHolder =
27962796
RouteLineValueCommandHolder(
2797-
HeavyRouteLineValueProvider(calculationsScope) {
2797+
HeavyRouteLineExpressionValueProvider {
27982798
trafficExpressionProvider(it)
27992799
},
28002800
LineGradientCommandApplier(),
28012801
)
28022802

28032803
val primaryRouteBaseExpressionCommandHolder =
28042804
RouteLineValueCommandHolder(
2805-
LightRouteLineValueProvider {
2805+
LightRouteLineExpressionValueProvider {
28062806
// TODO why are we changing traveled portion to traveled color instead of
28072807
// making it transparent to show trail layers?
28082808
if (routeLineOptions.styleInactiveRouteLegsIndependently) {
@@ -2828,7 +2828,7 @@ internal object MapboxRouteLineUtils {
28282828
val primaryRouteCasingExpressionCommandHolder = RouteLineValueCommandHolder(
28292829
// TODO why are we changing traveled portion to traveled color instead of
28302830
// making it transparent to show trail layers?
2831-
LightRouteLineValueProvider {
2831+
LightRouteLineExpressionValueProvider {
28322832
if (routeLineOptions.styleInactiveRouteLegsIndependently) {
28332833
getExpressionSubstitutingColorForInactiveLegs(
28342834
vanishingPointOffset,
@@ -2854,7 +2854,7 @@ internal object MapboxRouteLineUtils {
28542854
// However, all layers are initialized to grey right now,
28552855
// and they should be initialized as transparent instead.
28562856
val primaryRouteTrailExpressionCommandHolder = RouteLineValueCommandHolder(
2857-
LightRouteLineValueProvider {
2857+
LightRouteLineExpressionValueProvider {
28582858
if (routeLineOptions.styleInactiveRouteLegsIndependently &&
28592859
routeLineOptions.vanishingRouteLineEnabled
28602860
) {
@@ -2896,7 +2896,7 @@ internal object MapboxRouteLineUtils {
28962896
)
28972897
// the same conditions apply for the trail casing as do for the trail layers
28982898
val primaryRouteTrailCasingExpressionCommandHolder = RouteLineValueCommandHolder(
2899-
LightRouteLineValueProvider {
2899+
LightRouteLineExpressionValueProvider {
29002900
if (routeLineOptions.styleInactiveRouteLegsIndependently &&
29012901
routeLineOptions.vanishingRouteLineEnabled
29022902
) {
@@ -2931,8 +2931,7 @@ internal object MapboxRouteLineUtils {
29312931
// If false produce a gradient for the restricted line layer that is completely transparent.
29322932
val primaryRouteRestrictedSectionsExpressionProducer =
29332933
RouteLineValueCommandHolder(
2934-
HeavyRouteLineValueProvider(
2935-
calculationsScope,
2934+
HeavyRouteLineExpressionValueProvider(
29362935
getNonMaskingRestrictedLineExpressionProducer(
29372936
restrictedExpressionData,
29382937
0.0,
@@ -2944,7 +2943,7 @@ internal object MapboxRouteLineUtils {
29442943
)
29452944

29462945
val blurLineHolder = RouteLineValueCommandHolder(
2947-
HeavyRouteLineValueProvider(calculationsScope) { options ->
2946+
HeavyRouteLineExpressionValueProvider { options ->
29482947
if (options.routeLineBlurEnabled) {
29492948
if (options.applyTrafficColorsToRouteLineBlur) {
29502949
trafficExpressionProvider(options)

ui-maps/src/main/java/com/mapbox/navigation/ui/maps/internal/route/line/RouteLineDataConverter.kt

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import com.mapbox.maps.Style
55
import com.mapbox.maps.StylePropertyValue
66
import com.mapbox.maps.StylePropertyValueKind
77
import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI
8-
import com.mapbox.navigation.ui.maps.route.line.api.LightRouteLineValueProvider
8+
import com.mapbox.navigation.ui.maps.route.line.api.LightRouteLineExpressionValueProvider
99
import com.mapbox.navigation.ui.maps.route.line.api.LineGradientCommandApplier
1010
import com.mapbox.navigation.ui.maps.route.line.api.LineTrimCommandApplier
1111
import com.mapbox.navigation.ui.maps.route.line.api.RouteLineCommandApplier
@@ -18,6 +18,7 @@ import com.mapbox.navigation.ui.maps.route.line.model.RouteLineDynamicData
1818
import com.mapbox.navigation.ui.maps.route.line.model.RouteLineError
1919
import com.mapbox.navigation.ui.maps.route.line.model.RouteLineUpdateValue
2020
import com.mapbox.navigation.ui.maps.route.line.model.RouteSetValue
21+
import kotlin.coroutines.CoroutineContext
2122

2223
internal fun RouteLineEventData.toRouteLineData(): RouteLineData {
2324
return RouteLineData(
@@ -86,23 +87,25 @@ internal fun RouteLineClearValue.toEventValue(): RouteLineViewRenderRouteLineCle
8687
}
8788

8889
internal suspend fun RouteSetValue.toEventValue(
90+
workerCoroutineContext: CoroutineContext,
8991
data: RouteLineViewOptionsData,
9092
): RouteLineViewRenderRouteDrawDataInputValue {
9193
return RouteLineViewRenderRouteDrawDataInputValue(
92-
primaryRouteLineData.toData(data),
93-
alternativeRouteLinesData.map { it.toData(data) },
94+
primaryRouteLineData.toData(workerCoroutineContext, data),
95+
alternativeRouteLinesData.map { it.toData(workerCoroutineContext, data) },
9496
waypointsSource,
95-
routeLineMaskingLayerDynamicData?.toData(data),
97+
routeLineMaskingLayerDynamicData?.toData(workerCoroutineContext, data),
9698
)
9799
}
98100

99101
internal suspend fun RouteLineUpdateValue.toEventValue(
102+
workerCoroutineContext: CoroutineContext,
100103
data: RouteLineViewOptionsData,
101104
): RouteLineViewRenderRouteLineUpdateDataValue {
102105
return RouteLineViewRenderRouteLineUpdateDataValue(
103-
primaryRouteLineDynamicData?.toData(data),
104-
alternativeRouteLinesDynamicData.map { it.toData(data) },
105-
routeLineMaskingLayerDynamicData?.toData(data),
106+
primaryRouteLineDynamicData?.toData(workerCoroutineContext, data),
107+
alternativeRouteLinesDynamicData.map { it.toData(workerCoroutineContext, data) },
108+
routeLineMaskingLayerDynamicData?.toData(workerCoroutineContext, data),
106109
)
107110
}
108111

@@ -111,26 +114,28 @@ private fun RouteLineError.toEventError(): RouteLineViewDataError {
111114
}
112115

113116
private suspend fun RouteLineData.toData(
117+
workerCoroutineContext: CoroutineContext,
114118
data: RouteLineViewOptionsData,
115119
): RouteLineEventData {
116120
return RouteLineEventData(
117121
featureCollection,
118-
dynamicData?.toData(data),
122+
dynamicData?.toData(workerCoroutineContext, data),
119123
)
120124
}
121125

122126
private suspend fun RouteLineDynamicData.toData(
127+
workerCoroutineContext: CoroutineContext,
123128
data: RouteLineViewOptionsData,
124129
): RouteLineDynamicEventData {
125130
return RouteLineDynamicEventData(
126-
baseExpressionCommandHolder.toRouteLineExpressionEventData(data),
127-
casingExpressionCommandHolder.toRouteLineExpressionEventData(data),
128-
trafficExpressionCommandHolder?.toRouteLineExpressionEventData(data),
129-
restrictedSectionExpressionCommandHolder?.toRouteLineExpressionEventData(data),
131+
baseExpressionCommandHolder.toRouteLineExpressionEventData(workerCoroutineContext, data),
132+
casingExpressionCommandHolder.toRouteLineExpressionEventData(workerCoroutineContext, data),
133+
trafficExpressionCommandHolder?.toRouteLineExpressionEventData(workerCoroutineContext, data),
134+
restrictedSectionExpressionCommandHolder?.toRouteLineExpressionEventData(workerCoroutineContext, data),
130135
trimOffset,
131-
trailExpressionCommandHolder?.toRouteLineExpressionEventData(data),
132-
trailCasingExpressionCommandHolder?.toRouteLineExpressionEventData(data),
133-
blurExpressionCommandHolder?.toRouteLineExpressionEventData(data),
136+
trailExpressionCommandHolder?.toRouteLineExpressionEventData(workerCoroutineContext, data),
137+
trailCasingExpressionCommandHolder?.toRouteLineExpressionEventData(workerCoroutineContext, data),
138+
blurExpressionCommandHolder?.toRouteLineExpressionEventData(workerCoroutineContext, data),
134139
)
135140
}
136141

@@ -142,7 +147,7 @@ private fun RouteLineExpressionEventData.toHolder(): RouteLineValueCommandHolder
142147
// deprecated
143148
"line-trim-offset" -> {
144149
RouteLineValueCommandHolder(
145-
LightRouteLineValueProvider {
150+
LightRouteLineExpressionValueProvider {
146151
StylePropertyValue(expression!!, StylePropertyValueKind.EXPRESSION)
147152
},
148153
object : RouteLineCommandApplier<StylePropertyValue>() {
@@ -163,17 +168,17 @@ private fun RouteLineExpressionEventData.toHolder(): RouteLineValueCommandHolder
163168

164169
"line-trim-end" -> {
165170
RouteLineValueCommandHolder(
166-
LightRouteLineValueProvider { value!! },
171+
LightRouteLineExpressionValueProvider { value!! },
167172
LineTrimCommandApplier(),
168173
)
169174
}
170175

171176
"line-gradient" -> {
172177
RouteLineValueCommandHolder(
173178
if (value != null) {
174-
LightRouteLineValueProvider { value!! }
179+
LightRouteLineExpressionValueProvider { value!! }
175180
} else {
176-
LightRouteLineValueProvider {
181+
LightRouteLineExpressionValueProvider {
177182
StylePropertyValue(expression!!, StylePropertyValueKind.EXPRESSION)
178183
}
179184
},

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import com.mapbox.navigation.utils.internal.InternalJobControlFactory
1616
import kotlinx.coroutines.CoroutineDispatcher
1717
import kotlinx.coroutines.Dispatchers
1818
import kotlinx.coroutines.withContext
19+
import kotlin.coroutines.CoroutineContext
1920

2021
private const val HISTORY_RECORDING_QUEUE_SIZE = 8
2122

@@ -43,7 +44,7 @@ internal class RouteLineHistoryRecordingPusher(
4344
}
4445

4546
private val eventsQueue =
46-
LimitedQueue<suspend () -> RouteLineEvent>(HISTORY_RECORDING_QUEUE_SIZE)
47+
LimitedQueue<suspend (CoroutineContext) -> RouteLineEvent>(HISTORY_RECORDING_QUEUE_SIZE)
4748
private var historyRecordingEnabledObserver: RouteLineHistoryRecordingEnabledObserver? = null
4849

4950
init {
@@ -68,7 +69,7 @@ internal class RouteLineHistoryRecordingPusher(
6869
recorder = null
6970
}
7071

71-
fun pushEventOrAddToQueue(@WorkerThread eventFormer: suspend () -> RouteLineEvent) {
72+
fun pushEventOrAddToQueue(@WorkerThread eventFormer: suspend (CoroutineContext) -> RouteLineEvent) {
7273
val recorderCopy = recorder
7374
if (recorderCopy == null) {
7475
eventsQueue.add(eventFormer)
@@ -79,12 +80,12 @@ internal class RouteLineHistoryRecordingPusher(
7980

8081
private fun pushEvent(
8182
recorder: MapboxHistoryRecorder,
82-
@WorkerThread eventFormer: suspend () -> RouteLineEvent,
83+
@WorkerThread eventFormer: suspend (CoroutineContext) -> RouteLineEvent,
8384
) {
8485
mutexBasedMainScope.launchWithMutex {
8586
val eventJson = withContext(serialisationDispatcher) {
8687
try {
87-
eventFormer().toJson()
88+
eventFormer(serialisationDispatcher).toJson()
8889
} catch (ex: Throwable) {
8990
null
9091
}
@@ -95,7 +96,7 @@ internal class RouteLineHistoryRecordingPusher(
9596
}
9697
}
9798

98-
fun pushEventIfEnabled(@WorkerThread eventFormer: suspend () -> RouteLineEvent) {
99+
fun pushEventIfEnabled(@WorkerThread eventFormer: suspend (CoroutineContext) -> RouteLineEvent) {
99100
recorder?.let { pushEvent(it, eventFormer) }
100101
}
101102
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ internal class RouteLineHistoryRecordingViewSender : RouteLineHistoryRecordingIn
7575
if (data == null) {
7676
RouteLineViewDataError("NoOptions")
7777
} else {
78-
toEventValue(data)
78+
toEventValue(it, data)
7979
}
8080
},
8181
),
@@ -99,7 +99,7 @@ internal class RouteLineHistoryRecordingViewSender : RouteLineHistoryRecordingIn
9999
if (data == null) {
100100
RouteLineViewDataError("NoOptions")
101101
} else {
102-
toEventValue(data)
102+
toEventValue(it, data)
103103
}
104104
},
105105
),

0 commit comments

Comments
 (0)