Skip to content

Commit 1308d51

Browse files
DzmitryFomchyngithub-actions[bot]
authored andcommitted
[cherry-pick] Offline tiles managment (#10315)
* Offline tiles managment (#10285) * Provide NavigationOfflineTilesetVersionManager functionality * Add changelog * Remove changelog which is already added to 3.12 GA notes * Update public API GitOrigin-RevId: 4a4e3d1541a407decde84f6a2532b171e203e036
1 parent 9bbdd13 commit 1308d51

File tree

18 files changed

+2439
-8
lines changed

18 files changed

+2439
-8
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.mapbox.navigation.testing
2+
3+
import java.util.concurrent.CountDownLatch
4+
5+
class BlockingSAMCallback<T : Any> : (T) -> Unit {
6+
7+
private var countDownLatch = CountDownLatch(1)
8+
private lateinit var result: T
9+
10+
override fun invoke(result: T) {
11+
this.result = result
12+
countDownLatch.countDown()
13+
}
14+
15+
fun getResultBlocking(): T {
16+
countDownLatch.await()
17+
return result
18+
}
19+
}

navigation/api/current.txt

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ package com.mapbox.navigation.core {
4646
method public com.mapbox.navigation.core.routerefresh.RouteRefreshController getRouteRefreshController();
4747
method @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public com.mapbox.navigation.core.preview.RoutesPreview? getRoutesPreview();
4848
method public com.mapbox.navigation.core.navigator.TilesetDescriptorFactory getTilesetDescriptorFactory();
49+
method public com.mapbox.navigation.core.navigator.offline.TilesetVersionManager getTilesetVersionManager();
4950
method public com.mapbox.navigation.core.trip.session.TripSessionState getTripSessionState();
5051
method public Integer? getZLevel();
5152
method public boolean isDestroyed();
@@ -126,6 +127,7 @@ package com.mapbox.navigation.core {
126127
property public final com.mapbox.navigation.core.trip.session.eh.RoadObjectsStore roadObjectsStore;
127128
property public final com.mapbox.navigation.core.routerefresh.RouteRefreshController routeRefreshController;
128129
property public final com.mapbox.navigation.core.navigator.TilesetDescriptorFactory tilesetDescriptorFactory;
130+
property public final com.mapbox.navigation.core.navigator.offline.TilesetVersionManager tilesetVersionManager;
129131
}
130132

131133
public final class MapboxNavigationKt {
@@ -208,12 +210,14 @@ package com.mapbox.navigation.core.adas {
208210

209211
@com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public final class AdasEdgeAttributes {
210212
method public java.util.List<com.mapbox.navigation.core.adas.AdasValueOnEdge> getCurvatures();
213+
method public java.util.List<com.mapbox.navigation.core.adas.AdasValueOnEdge> getElevations();
211214
method public int getEtc2();
212215
method public Integer? getFormOfWay();
213216
method public java.util.List<com.mapbox.navigation.core.adas.AdasValueOnEdge> getSlopes();
214217
method public java.util.List<com.mapbox.navigation.core.adas.AdasSpeedLimitInfo> getSpeedLimit();
215218
method public Boolean? isDividedRoad();
216219
property public final java.util.List<com.mapbox.navigation.core.adas.AdasValueOnEdge> curvatures;
220+
property public final java.util.List<com.mapbox.navigation.core.adas.AdasValueOnEdge> elevations;
217221
property public final int etc2;
218222
property public final Integer? formOfWay;
219223
property public final Boolean? isDividedRoad;
@@ -697,6 +701,69 @@ package com.mapbox.navigation.core.navigator {
697701

698702
}
699703

704+
package com.mapbox.navigation.core.navigator.offline {
705+
706+
public final class DownloadedTilesetsFetcherKt {
707+
}
708+
709+
@com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public abstract class TilesetUpdateAvailabilityResult {
710+
}
711+
712+
public static final class TilesetUpdateAvailabilityResult.Available extends com.mapbox.navigation.core.navigator.offline.TilesetUpdateAvailabilityResult {
713+
ctor public TilesetUpdateAvailabilityResult.Available(String regionId, boolean isAsap, String currentVersion, String latestVersion);
714+
method public String getCurrentVersion();
715+
method public String getLatestVersion();
716+
method public String getRegionId();
717+
method public boolean isAsap();
718+
property public final String currentVersion;
719+
property public final boolean isAsap;
720+
property public final String latestVersion;
721+
property public final String regionId;
722+
}
723+
724+
public static final class TilesetUpdateAvailabilityResult.NoUpdates extends com.mapbox.navigation.core.navigator.offline.TilesetUpdateAvailabilityResult {
725+
field public static final com.mapbox.navigation.core.navigator.offline.TilesetUpdateAvailabilityResult.NoUpdates INSTANCE;
726+
}
727+
728+
@com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public final class TilesetVersion {
729+
method public java.util.Date? getReleaseDate();
730+
method public String getVersionName();
731+
method public boolean isBlocked();
732+
method public boolean isLatest();
733+
property public final boolean isBlocked;
734+
property public final boolean isLatest;
735+
property public final java.util.Date? releaseDate;
736+
property public final String versionName;
737+
}
738+
739+
@com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public interface TilesetVersionManager {
740+
method public default com.mapbox.common.Cancelable getAvailableUpdate(String regionId, com.mapbox.navigation.core.navigator.offline.TilesetVersionManager.TilesetUpdatesCallback callback);
741+
method public com.mapbox.common.Cancelable getAvailableUpdate(String regionId, long maxAllowedAgeDifferenceMinutes, com.mapbox.navigation.core.navigator.offline.TilesetVersionManager.TilesetUpdatesCallback callback);
742+
method public suspend Object? getAvailableUpdate(String regionId, long maxAllowedAgeDifferenceMinutes = 0, kotlin.coroutines.Continuation<? super com.mapbox.bindgen.Expected<java.lang.Throwable,com.mapbox.navigation.core.navigator.offline.TilesetUpdateAvailabilityResult>> = 0);
743+
method public default com.mapbox.common.Cancelable getAvailableUpdates(com.mapbox.navigation.core.navigator.offline.TilesetVersionManager.AllTilesetsUpdatesCallback callback);
744+
method public com.mapbox.common.Cancelable getAvailableUpdates(long maxAllowedAgeDifferenceMinutes, com.mapbox.navigation.core.navigator.offline.TilesetVersionManager.AllTilesetsUpdatesCallback callback);
745+
method public suspend Object? getAvailableUpdates(long maxAllowedAgeDifferenceMinutes = 0, kotlin.coroutines.Continuation<? super com.mapbox.bindgen.Expected<java.lang.Throwable,java.util.List<? extends com.mapbox.navigation.core.navigator.offline.TilesetUpdateAvailabilityResult.Available>>> = 0);
746+
method public com.mapbox.common.Cancelable getAvailableVersions(com.mapbox.navigation.core.navigator.offline.TilesetVersionManager.TilesetVersionsCallback callback);
747+
method public suspend Object? getAvailableVersions(kotlin.coroutines.Continuation<? super com.mapbox.bindgen.Expected<java.lang.Throwable,java.util.List<? extends com.mapbox.navigation.core.navigator.offline.TilesetVersion>>>);
748+
}
749+
750+
public static fun interface TilesetVersionManager.AllTilesetsUpdatesCallback {
751+
method public void onUpdatesResult(com.mapbox.bindgen.Expected<java.lang.Throwable,java.util.List<com.mapbox.navigation.core.navigator.offline.TilesetUpdateAvailabilityResult.Available>> result);
752+
}
753+
754+
public static fun interface TilesetVersionManager.TilesetUpdatesCallback {
755+
method public void onUpdatesResult(com.mapbox.bindgen.Expected<java.lang.Throwable,com.mapbox.navigation.core.navigator.offline.TilesetUpdateAvailabilityResult> result);
756+
}
757+
758+
public static fun interface TilesetVersionManager.TilesetVersionsCallback {
759+
method public void onVersionsResult(com.mapbox.bindgen.Expected<java.lang.Throwable,java.util.List<com.mapbox.navigation.core.navigator.offline.TilesetVersion>> versions);
760+
}
761+
762+
public final class TilesetVersionsApiKt {
763+
}
764+
765+
}
766+
700767
package com.mapbox.navigation.core.preview {
701768

702769
@com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public final class RoutesPreview {
@@ -1346,6 +1413,9 @@ package com.mapbox.navigation.core.trip.session {
13461413
method public void onNewRawLocation(com.mapbox.common.location.Location rawLocation);
13471414
}
13481415

1416+
public final class MapboxTripSessionKt {
1417+
}
1418+
13491419
public abstract sealed class NavigationSessionState {
13501420
method public abstract String getSessionId();
13511421
property public abstract String sessionId;

navigation/build.gradle

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1-
apply plugin: 'com.android.library'
2-
apply plugin: 'kotlin-android'
3-
apply plugin: 'kotlin-kapt'
4-
apply plugin: 'org.jetbrains.dokka'
5-
apply plugin: 'com.jaredsburrows.license'
6-
apply plugin: 'com.mapbox.android.sdk.versions'
1+
plugins {
2+
id 'com.android.library'
3+
id 'kotlin-android'
4+
id 'kotlin-kapt'
5+
id 'org.jetbrains.kotlin.plugin.serialization' version '1.7.20'
6+
id 'org.jetbrains.dokka'
7+
id 'com.jaredsburrows.license'
8+
id 'com.mapbox.android.sdk.versions'
9+
}
10+
711
apply from: "../gradle/ktlint.gradle"
812
apply from: file("../gradle/artifact-settings.gradle")
913
apply from: "../gradle/kdoc-settings.gradle"
@@ -55,6 +59,7 @@ dependencies {
5559
implementation dependenciesList.mapboxSdkRefreshModels
5660

5761
implementation dependenciesList.kotlinStdLib
62+
implementation dependenciesList.kotlinSerialization
5863
implementation dependenciesList.coroutinesAndroid
5964
implementation dependenciesList.androidStartup
6065

navigation/src/main/java/com/mapbox/navigation/core/MapboxNavigation.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ import com.mapbox.navigation.core.mapmatching.MapMatchingOptions
8383
import com.mapbox.navigation.core.mapmatching.MapMatchingSuccessfulResult
8484
import com.mapbox.navigation.core.navigator.CacheHandleWrapper
8585
import com.mapbox.navigation.core.navigator.TilesetDescriptorFactory
86+
import com.mapbox.navigation.core.navigator.offline.TilesetVersionManager
8687
import com.mapbox.navigation.core.preview.RoutesPreview
8788
import com.mapbox.navigation.core.preview.RoutesPreviewObserver
8889
import com.mapbox.navigation.core.replay.MapboxReplayer
@@ -434,6 +435,17 @@ class MapboxNavigation @VisibleForTesting internal constructor(
434435
@Deprecated("EtcGateApi is deprecated")
435436
val etcGateAPI: EtcGateApi
436437

438+
/**
439+
* Manager for checking tileset version availability and update requirements.
440+
* This manager provides functionality to:
441+
* - Check available tileset versions from the server
442+
* - Determine if downloaded tilesets need updates based on age or version
443+
* - Identify blocked versions that should not be used
444+
* @see TilesetVersionManager for detailed API documentation
445+
*/
446+
@ExperimentalPreviewMapboxNavigationAPI
447+
val tilesetVersionManager: TilesetVersionManager
448+
437449
private var reachabilityObserverId: Long? = null
438450

439451
private var latestLegIndex: Int? = null
@@ -714,6 +726,11 @@ class MapboxNavigation @VisibleForTesting internal constructor(
714726
navigator,
715727
)
716728

729+
tilesetVersionManager = NavigationComponentProvider.createTilesetVersionManager(
730+
routingTilesOptions = navigationOptions.routingTilesOptions,
731+
tileStore = NavigationTileStoreOwner.invoke(),
732+
)
733+
717734
registerRouteProgressObserver(
718735
NavigationComponentProvider.createForkPointPassedObserver(
719736
directionsSession,

navigation/src/main/java/com/mapbox/navigation/core/NavigationComponentProvider.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@ package com.mapbox.navigation.core
22

33
import android.content.Context
44
import com.mapbox.common.SdkInformation
5+
import com.mapbox.common.TileStore
6+
import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI
57
import com.mapbox.navigation.base.internal.accounts.SkuIdProvider
68
import com.mapbox.navigation.base.internal.performance.PerformanceTracker
79
import com.mapbox.navigation.base.options.EventsAppMetadata
810
import com.mapbox.navigation.base.options.LocationOptions
911
import com.mapbox.navigation.base.options.RerouteOptions
12+
import com.mapbox.navigation.base.options.RoutingTilesOptions
1013
import com.mapbox.navigation.base.trip.notification.TripNotification
1114
import com.mapbox.navigation.core.accounts.BillingController
1215
import com.mapbox.navigation.core.arrival.ArrivalProgressObserver
@@ -15,6 +18,9 @@ import com.mapbox.navigation.core.directions.session.DirectionsSession
1518
import com.mapbox.navigation.core.directions.session.MapboxDirectionsSession
1619
import com.mapbox.navigation.core.ev.EVDynamicDataHolder
1720
import com.mapbox.navigation.core.internal.router.Router
21+
import com.mapbox.navigation.core.navigator.offline.DownloadedTilesetsFetcher
22+
import com.mapbox.navigation.core.navigator.offline.TilesetVersionManager
23+
import com.mapbox.navigation.core.navigator.offline.TilesetVersionManagerImpl
1824
import com.mapbox.navigation.core.preview.NativeRoutesDataParser
1925
import com.mapbox.navigation.core.preview.RoutesPreviewController
2026
import com.mapbox.navigation.core.reroute.InternalRerouteController
@@ -183,4 +189,15 @@ internal object NavigationComponentProvider {
183189
directionsSession,
184190
currentLegIndex,
185191
)
192+
193+
@OptIn(ExperimentalPreviewMapboxNavigationAPI::class)
194+
fun createTilesetVersionManager(
195+
routingTilesOptions: RoutingTilesOptions,
196+
tileStore: TileStore,
197+
): TilesetVersionManager = TilesetVersionManagerImpl(
198+
tilesBaseUri = routingTilesOptions.tilesBaseUri.toString(),
199+
tilesDataset = routingTilesOptions.tilesDataset,
200+
tilesProfile = routingTilesOptions.tilesProfile,
201+
downloadedTilesetsFetcher = DownloadedTilesetsFetcher(tileStore),
202+
)
186203
}

0 commit comments

Comments
 (0)