Skip to content

Commit 6c65596

Browse files
DzmitryFomchyngithub-actions[bot]
authored andcommitted
Allow to download ADAS tiles via predictive cache (#9882)
GitOrigin-RevId: 1c51aa4146234c98e24c68c922c70e1c43ffa8ec
1 parent 9c73811 commit 6c65596

File tree

10 files changed

+276
-120
lines changed

10 files changed

+276
-120
lines changed

base/api/current.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -790,15 +790,22 @@ package com.mapbox.navigation.base.options {
790790
}
791791

792792
public final class PredictiveCacheNavigationOptions {
793+
method public boolean getIncludeAdas();
793794
method public com.mapbox.navigation.base.options.PredictiveCacheLocationOptions getPredictiveCacheLocationOptions();
795+
method public String? getTilesDataset();
796+
method public String? getTilesVersion();
794797
method public com.mapbox.navigation.base.options.PredictiveCacheNavigationOptions.Builder toBuilder();
798+
property public final boolean includeAdas;
795799
property public final com.mapbox.navigation.base.options.PredictiveCacheLocationOptions predictiveCacheLocationOptions;
800+
property public final String? tilesDataset;
801+
property public final String? tilesVersion;
796802
}
797803

798804
public static final class PredictiveCacheNavigationOptions.Builder {
799805
ctor public PredictiveCacheNavigationOptions.Builder();
800806
method public com.mapbox.navigation.base.options.PredictiveCacheNavigationOptions build();
801807
method public com.mapbox.navigation.base.options.PredictiveCacheNavigationOptions.Builder predictiveCacheLocationOptions(com.mapbox.navigation.base.options.PredictiveCacheLocationOptions predictiveCacheLocationOptions);
808+
method @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public com.mapbox.navigation.base.options.PredictiveCacheNavigationOptions.Builder tilesConfiguration(String tilesDataset, String tilesVersion, boolean includeAdas);
802809
}
803810

804811
public final class PredictiveCacheOptions {

base/src/main/java/com/mapbox/navigation/base/options/PredictiveCacheNavigationOptions.kt

Lines changed: 93 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,66 @@
11
package com.mapbox.navigation.base.options
22

3+
import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI
4+
35
/**
46
* Predictive cache Navigation related options.
57
*
8+
* @param tilesDataset String built out of `<account>[.<graph>]` variables. Account can be
9+
* `mapbox` for default datasets or your username for other.
10+
* @param tilesVersion Tiles version.
11+
* @param includeAdas Whether to include ADAS tiles.
612
* @param predictiveCacheLocationOptions [PredictiveCacheLocationOptions] location configuration for guidance predictive caching
13+
*
14+
* Note: With the current implementation, if [includeAdas] is true,
15+
* [tilesDataset] and [tilesVersion] must not be null. Additionally, if either
16+
* [tilesDataset] or [tilesVersion] is specified, both must be provided; neither can be null.
717
*/
18+
@OptIn(ExperimentalPreviewMapboxNavigationAPI::class)
819
class PredictiveCacheNavigationOptions private constructor(
20+
@ExperimentalPreviewMapboxNavigationAPI
21+
val tilesDataset: String?,
22+
@ExperimentalPreviewMapboxNavigationAPI
23+
val tilesVersion: String?,
24+
@ExperimentalPreviewMapboxNavigationAPI
25+
val includeAdas: Boolean,
926
val predictiveCacheLocationOptions: PredictiveCacheLocationOptions,
1027
) {
1128

29+
init {
30+
if (includeAdas) {
31+
checkNotNull(tilesDataset) {
32+
"tilesDataset can't be null if ADAS tiles included"
33+
}
34+
35+
checkNotNull(tilesVersion) {
36+
"tilesVersion can't be null if ADAS tiles included"
37+
}
38+
}
39+
40+
if (tilesDataset != null) {
41+
checkNotNull(tilesVersion) {
42+
"tilesVersion must be specified explicitly if tilesDataset specified"
43+
}
44+
}
45+
46+
if (tilesVersion != null) {
47+
checkNotNull(tilesDataset) {
48+
"tilesDataset must be specified explicitly if tilesVersion specified"
49+
}
50+
}
51+
}
52+
1253
/**
1354
* Get a builder to customize a subset of current options.
1455
*/
1556
fun toBuilder(): Builder = Builder().apply {
57+
if (tilesDataset != null && tilesVersion != null) {
58+
tilesConfiguration(
59+
tilesDataset = tilesDataset,
60+
tilesVersion = tilesVersion,
61+
includeAdas = includeAdas,
62+
)
63+
}
1664
predictiveCacheLocationOptions(predictiveCacheLocationOptions)
1765
}
1866

@@ -25,6 +73,9 @@ class PredictiveCacheNavigationOptions private constructor(
2573

2674
other as PredictiveCacheNavigationOptions
2775

76+
if (includeAdas != other.includeAdas) return false
77+
if (tilesDataset != other.tilesDataset) return false
78+
if (tilesVersion != other.tilesVersion) return false
2879
if (predictiveCacheLocationOptions != other.predictiveCacheLocationOptions) return false
2980

3081
return true
@@ -34,22 +85,33 @@ class PredictiveCacheNavigationOptions private constructor(
3485
* Regenerate whenever a change is made
3586
*/
3687
override fun hashCode(): Int {
37-
return predictiveCacheLocationOptions.hashCode()
88+
var result = includeAdas.hashCode()
89+
result = 31 * result + (tilesDataset?.hashCode() ?: 0)
90+
result = 31 * result + (tilesVersion?.hashCode() ?: 0)
91+
result = 31 * result + predictiveCacheLocationOptions.hashCode()
92+
return result
3893
}
3994

4095
/**
4196
* Returns a string representation of the object.
4297
*/
4398
override fun toString(): String {
4499
return "PredictiveCacheNavigationOptions(" +
45-
"predictiveCacheLocationOptions=$predictiveCacheLocationOptions" +
100+
"tilesDataset=$tilesDataset, " +
101+
"tilesVersion=$tilesVersion, " +
102+
"includeAdas=$includeAdas, " +
103+
"predictiveCacheLocationOptions=$predictiveCacheLocationOptions," +
46104
")"
47105
}
48106

49107
/**
50-
* Build a new [PredictiveCacheZoomLevelOptions].
108+
* Build a new [PredictiveCacheNavigationOptions].
51109
*/
52110
class Builder {
111+
112+
private var tilesDataset: String? = null
113+
private var tilesVersion: String? = null
114+
private var includeAdas: Boolean = false
53115
private var predictiveCacheLocationOptions: PredictiveCacheLocationOptions? = null
54116

55117
/**
@@ -59,11 +121,38 @@ class PredictiveCacheNavigationOptions private constructor(
59121
predictiveCacheLocationOptions: PredictiveCacheLocationOptions,
60122
): Builder = apply { this.predictiveCacheLocationOptions = predictiveCacheLocationOptions }
61123

124+
/**
125+
* Tileset configuration.
126+
*
127+
* @param tilesDataset String built out of `<account>[.<graph>]` variables. Account can be
128+
* `mapbox` for default datasets or your username for other.
129+
* @param tilesVersion Tiles version.
130+
* @param includeAdas Whether to include ADAS tiles.
131+
*
132+
* Note: With the current implementation, if [includeAdas] is true,
133+
* [tilesDataset] and [tilesVersion] must not be null. Additionally, if either
134+
* [tilesDataset] or [tilesVersion] is specified, both must be provided; neither can be null.
135+
*/
136+
@ExperimentalPreviewMapboxNavigationAPI
137+
fun tilesConfiguration(
138+
tilesDataset: String,
139+
tilesVersion: String,
140+
includeAdas: Boolean,
141+
): Builder = apply {
142+
this.tilesDataset = tilesDataset
143+
this.tilesVersion = tilesVersion
144+
this.includeAdas = includeAdas
145+
}
146+
62147
/**
63148
* Build [PredictiveCacheNavigationOptions].
64149
*/
65150
fun build(): PredictiveCacheNavigationOptions = PredictiveCacheNavigationOptions(
66-
predictiveCacheLocationOptions ?: PredictiveCacheLocationOptions.Builder().build(),
151+
tilesDataset = tilesDataset,
152+
tilesVersion = tilesVersion,
153+
includeAdas = includeAdas,
154+
predictiveCacheLocationOptions = predictiveCacheLocationOptions
155+
?: PredictiveCacheLocationOptions.Builder().build(),
67156
)
68157
}
69158
}
Lines changed: 51 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,58 @@
11
package com.mapbox.navigation.base.options
22

3-
import com.mapbox.navigation.testing.BuilderTest
3+
import com.jparams.verifier.tostring.ToStringVerifier
4+
import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI
5+
import nl.jqno.equalsverifier.EqualsVerifier
6+
import org.junit.Assert.assertEquals
47
import org.junit.Test
5-
import kotlin.reflect.KClass
6-
7-
class PredictiveCacheNavigationOptionsTest :
8-
BuilderTest<PredictiveCacheNavigationOptions, PredictiveCacheNavigationOptions.Builder>() {
9-
override fun getImplementationClass(): KClass<PredictiveCacheNavigationOptions> =
10-
PredictiveCacheNavigationOptions::class
11-
12-
override fun getFilledUpBuilder(): PredictiveCacheNavigationOptions.Builder =
13-
PredictiveCacheNavigationOptions.Builder().apply {
14-
predictiveCacheLocationOptions(
15-
PredictiveCacheLocationOptions.Builder().apply {
16-
currentLocationRadiusInMeters(200)
17-
routeBufferRadiusInMeters(10)
18-
destinationLocationRadiusInMeters(1000)
19-
}.build(),
20-
)
21-
}
8+
9+
@OptIn(ExperimentalPreviewMapboxNavigationAPI::class)
10+
class PredictiveCacheNavigationOptionsTest {
11+
12+
@Test
13+
fun testGeneratedEqualsHashcodeToStringFunctions() {
14+
EqualsVerifier.forClass(PredictiveCacheNavigationOptions::class.java)
15+
.verify()
16+
17+
ToStringVerifier.forClass(PredictiveCacheNavigationOptions::class.java)
18+
.verify()
19+
}
2220

2321
@Test
24-
override fun trigger() {
25-
// trigger, see KDoc
22+
fun testDefaultBuilderParameters() {
23+
val options = PredictiveCacheNavigationOptions.Builder().build()
24+
assertEquals(null, options.tilesDataset)
25+
assertEquals(null, options.tilesVersion)
26+
assertEquals(false, options.includeAdas)
27+
assertEquals(
28+
PredictiveCacheLocationOptions.Builder().build(),
29+
options.predictiveCacheLocationOptions,
30+
)
31+
}
32+
33+
@Test
34+
fun testBuilderParameters() {
35+
val locationOptions = PredictiveCacheLocationOptions.Builder()
36+
.routeBufferRadiusInMeters(100)
37+
.currentLocationRadiusInMeters(500)
38+
.destinationLocationRadiusInMeters(1000)
39+
.build()
40+
41+
val options = PredictiveCacheNavigationOptions.Builder()
42+
.tilesConfiguration(
43+
tilesDataset = "test-dataset",
44+
tilesVersion = "test-version",
45+
includeAdas = true,
46+
)
47+
.predictiveCacheLocationOptions(locationOptions)
48+
.build()
49+
50+
assertEquals("test-dataset", options.tilesDataset)
51+
assertEquals("test-version", options.tilesVersion)
52+
assertEquals(true, options.includeAdas)
53+
assertEquals(
54+
locationOptions,
55+
options.predictiveCacheLocationOptions,
56+
)
2657
}
2758
}

changelog/unreleased/features/9882.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Added experimental support for ADAS tiles in the predictive cache. See `PredictiveCacheNavigationOptions` for more information.

navigation/src/main/java/com/mapbox/navigation/core/internal/PredictiveCache.kt

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.mapbox.navigation.core.internal
33
import com.mapbox.common.TileStore
44
import com.mapbox.common.TilesetDescriptor
55
import com.mapbox.navigation.base.options.PredictiveCacheLocationOptions
6+
import com.mapbox.navigation.base.options.PredictiveCacheNavigationOptions
67
import com.mapbox.navigation.core.MapboxNavigation
78
import com.mapbox.navigator.PredictiveCacheController
89

@@ -15,15 +16,14 @@ class PredictiveCache(private val mapboxNavigation: MapboxNavigation) {
1516
internal val cachedSearchPredictiveCacheControllers =
1617
mutableSetOf<Pair<TilesetDescriptor, PredictiveCacheController>>()
1718

18-
internal val navPredictiveCacheLocationOptions =
19-
mutableSetOf<PredictiveCacheLocationOptions>()
19+
internal val navPredictiveCacheOptions = mutableSetOf<PredictiveCacheNavigationOptions>()
2020
internal val searchPredictiveCacheLocationOptions = mutableSetOf<
2121
Pair<TileStore, List<Pair<TilesetDescriptor, PredictiveCacheLocationOptions>>>,>()
2222

2323
init {
2424
// recreate controllers with the same options but with a new navigator instance
2525
mapboxNavigation.navigator.setNativeNavigatorRecreationObserver {
26-
val navOptions = navPredictiveCacheLocationOptions.toSet()
26+
val navOptions = navPredictiveCacheOptions.toSet()
2727
val mapControllersData = cachedMapsPredictiveCacheControllers
2828
.map { (mapboxMap, predictiveCacheControllersMap) ->
2929
mapboxMap to predictiveCacheControllersMap.keys.toList()
@@ -56,15 +56,12 @@ class PredictiveCache(private val mapboxNavigation: MapboxNavigation) {
5656
}
5757
}
5858

59-
fun createNavigationController(
60-
predictiveCacheLocationOptions: PredictiveCacheLocationOptions,
61-
) {
62-
navPredictiveCacheLocationOptions.add(predictiveCacheLocationOptions)
63-
val predictiveCacheController =
64-
mapboxNavigation.navigator.createNavigationPredictiveCacheController(
65-
predictiveCacheLocationOptions,
66-
)
67-
cachedNavigationPredictiveCacheControllers.add(predictiveCacheController)
59+
fun createNavigationController(navOptions: PredictiveCacheNavigationOptions) {
60+
navPredictiveCacheOptions.add(navOptions)
61+
val controllers = mapboxNavigation.navigator.createNavigationPredictiveCacheController(
62+
navOptions,
63+
)
64+
cachedNavigationPredictiveCacheControllers.addAll(controllers)
6865
}
6966

7067
fun createMapsControllers(
@@ -117,7 +114,7 @@ class PredictiveCache(private val mapboxNavigation: MapboxNavigation) {
117114
cachedNavigationPredictiveCacheControllers.clear()
118115
cachedMapsPredictiveCacheControllers.clear()
119116
cachedSearchPredictiveCacheControllers.clear()
120-
navPredictiveCacheLocationOptions.clear()
117+
navPredictiveCacheOptions.clear()
121118
searchPredictiveCacheLocationOptions.clear()
122119
}
123120

0 commit comments

Comments
 (0)