From 2eda9bc93985398da1c09d0d83a21923533da4ca Mon Sep 17 00:00:00 2001 From: DIVESH PATIL Date: Tue, 6 Oct 2026 15:23:49 +0530 Subject: [PATCH 01/11] fix(android): stop the vehicle jumping to mid-map when it leaves the route --- .../org/onebusaway/vehicletracker/ui/map/RouteMap.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/map/RouteMap.kt b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/map/RouteMap.kt index 973d752..3bd7f8d 100644 --- a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/map/RouteMap.kt +++ b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/map/RouteMap.kt @@ -283,10 +283,10 @@ private class RouteMapController( following = true } - private fun applyFollowPadding() { + private fun applyFollowPadding(animationMs: Long = FOLLOW_ANIMATION_MS) { val map = map ?: return if (destroyed) return - map.locationComponent.paddingWhileTracking(doubleArrayOf(0.0, mapView.height / 3.0, 0.0, 0.0), FOLLOW_ANIMATION_MS) + map.locationComponent.paddingWhileTracking(doubleArrayOf(0.0, mapView.height / 3.0, 0.0, 0.0), animationMs) } fun onLifecycleEvent(event: Lifecycle.Event) { @@ -470,6 +470,9 @@ private class RouteMapController( style.getLayer(CASING_LAYER)?.setProperties(lineOpacity(opacity)) style.getLayer(ROUTE_LAYER)?.setProperties(lineOpacity(opacity)) component.applyStyle(vehicleOptions(next.isOnRoute)) + // applyStyle also sets the map's padding to the options' own, none, which would drop the + // vehicle to the middle. Put the follow padding straight back, in the same frame. + if (following && state != null) applyFollowPadding(animationMs = 0) setSnappedVisible(style, visible = !next.isOnRoute) } next.snapped?.let { snapped -> From 78d564e2d78b10b1aa944ea7e9e93f9d3525e281 Mon Sep 17 00:00:00 2001 From: DIVESH PATIL Date: Tue, 6 Oct 2026 15:24:01 +0530 Subject: [PATCH 02/11] feat(android): ask the server where the map file is --- .../vehicletracker/data/api/ApiModels.kt | 3 + .../vehicletracker/data/api/TrackerApi.kt | 2 + .../vehicletracker/data/map/MapServer.kt | 43 ++++++++++ .../data/map/TrackerMapServerTest.kt | 84 +++++++++++++++++++ 4 files changed, 132 insertions(+) create mode 100644 android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapServer.kt create mode 100644 android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/TrackerMapServerTest.kt diff --git a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/api/ApiModels.kt b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/api/ApiModels.kt index 165af1a..014d8bd 100644 --- a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/api/ApiModels.kt +++ b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/api/ApiModels.kt @@ -24,6 +24,9 @@ import kotlinx.serialization.Serializable @Serializable data class EndTripRequest(@SerialName("trip_id") val tripId: Long) +/** Where the agency's offline street map is; [pmtilesUrl] is null when the agency has none. */ +@Serializable data class MapConfigDto(@SerialName("pmtiles_url") val pmtilesUrl: String? = null) + @Serializable data class LocationReportDto( @SerialName("vehicle_id") val vehicleId: String, /** GTFS trip_id; null (omitted on the wire) when the driver only knows the route. */ diff --git a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/api/TrackerApi.kt b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/api/TrackerApi.kt index c711d21..41547cc 100644 --- a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/api/TrackerApi.kt +++ b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/api/TrackerApi.kt @@ -21,6 +21,8 @@ interface TrackerApi { // A GTFS trip_id is arbitrary text too, so it is Retrofit's to percent-encode as well. @GET("api/v1/gtfs/trips/{trip_id}") suspend fun trip(@Path("trip_id") tripId: String): TripGeometryDto + + @GET("api/v1/map") suspend fun mapConfig(): MapConfigDto } /** diff --git a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapServer.kt b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapServer.kt new file mode 100644 index 0000000..de5f528 --- /dev/null +++ b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapServer.kt @@ -0,0 +1,43 @@ +package org.onebusaway.vehicletracker.data.map + +import kotlinx.coroutines.CancellationException +import org.onebusaway.vehicletracker.data.api.TrackerApiProvider +import retrofit2.HttpException +import javax.inject.Inject + +/** What the server says about the agency's map file. */ +sealed interface MapServerAnswer { + data class File(val url: String) : MapServerAnswer + + /** The agency has no map file, or the server is older than `GET /api/v1/map` and answers 404. */ + data object NoMap : MapServerAnswer + + /** The server turned the driver's token down; asking again before they sign in is pointless. */ + data object SignedOut : MapServerAnswer + + /** No answer: no network, a server error, or a reply that is not one. */ + data object Unreachable : MapServerAnswer +} + +/** Asks the server where the agency's map file is. An interface so [MapRepository] can be tested without one. */ +fun interface MapServer { + suspend fun ask(): MapServerAnswer +} + +class TrackerMapServer @Inject constructor(private val apiProvider: TrackerApiProvider) : MapServer { + override suspend fun ask(): MapServerAnswer = try { + apiProvider.get().mapConfig().pmtilesUrl?.takeIf { it.isNotBlank() } + ?.let { MapServerAnswer.File(it) } + ?: MapServerAnswer.NoMap + } catch (e: CancellationException) { + throw e + } catch (e: HttpException) { + when (e.code()) { + 404 -> MapServerAnswer.NoMap + 401 -> MapServerAnswer.SignedOut + else -> MapServerAnswer.Unreachable + } + } catch (e: Exception) { + MapServerAnswer.Unreachable + } +} diff --git a/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/TrackerMapServerTest.kt b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/TrackerMapServerTest.kt new file mode 100644 index 0000000..89e4b68 --- /dev/null +++ b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/TrackerMapServerTest.kt @@ -0,0 +1,84 @@ +package org.onebusaway.vehicletracker.data.map + +import kotlinx.coroutines.test.runTest +import okhttp3.mockwebserver.MockResponse +import okhttp3.mockwebserver.MockWebServer +import org.junit.After +import org.junit.Assert.assertEquals +import org.junit.Before +import org.junit.Test +import org.onebusaway.vehicletracker.data.api.ApiFactory +import org.onebusaway.vehicletracker.data.api.TrackerApiProvider + +/** [TrackerMapServer] reading `GET /api/v1/map` through the app's real API client. */ +class TrackerMapServerTest { + private lateinit var server: MockWebServer + private lateinit var mapServer: TrackerMapServer + + @Before fun setUp() { + server = MockWebServer().apply { start() } + mapServer = TrackerMapServer(TrackerApiProvider { ApiFactory { "jwt" }.create(server.url("/").toString()) }) + } + + @After fun tearDown() = server.shutdown() + + @Test fun `a URL is the agency's map file`() = runTest { + server.enqueue(MockResponse().setBody("""{"pmtiles_url":"https://maps.example.org/agency.pmtiles"}""")) + + assertEquals(MapServerAnswer.File("https://maps.example.org/agency.pmtiles"), mapServer.ask()) + + val request = server.takeRequest() + assertEquals("GET", request.method) + assertEquals("/api/v1/map", request.path) + assertEquals("Bearer jwt", request.getHeader("Authorization")) + } + + @Test fun `null means the agency has no map`() = runTest { + server.enqueue(MockResponse().setBody("""{"pmtiles_url":null}""")) + + assertEquals(MapServerAnswer.NoMap, mapServer.ask()) + } + + @Test fun `a blank URL means no map too`() = runTest { + server.enqueue(MockResponse().setBody("""{"pmtiles_url":" "}""")) + + assertEquals(MapServerAnswer.NoMap, mapServer.ask()) + } + + // A server from before GET /api/v1/map existed. + @Test fun `404 means no map`() = runTest { + server.enqueue(MockResponse().setResponseCode(404).setBody("404 page not found")) + + assertEquals(MapServerAnswer.NoMap, mapServer.ask()) + } + + @Test fun `401 means the driver must sign in again`() = runTest { + server.enqueue(MockResponse().setResponseCode(401).setBody("""{"error":"invalid token"}""")) + + assertEquals(MapServerAnswer.SignedOut, mapServer.ask()) + } + + @Test fun `a server error is no answer`() = runTest { + server.enqueue(MockResponse().setResponseCode(500).setBody("""{"error":"internal server error"}""")) + + assertEquals(MapServerAnswer.Unreachable, mapServer.ask()) + } + + @Test fun `a reply that is not the expected JSON is no answer`() = runTest { + server.enqueue(MockResponse().setBody("captive portal")) + + assertEquals(MapServerAnswer.Unreachable, mapServer.ask()) + } + + @Test fun `no network is no answer`() = runTest { + server.shutdown() + + assertEquals(MapServerAnswer.Unreachable, mapServer.ask()) + } + + @Test fun `no server URL yet is no answer, not a crash`() = runTest { + val unconfigured = TrackerMapServer { error("not signed in") } + + assertEquals(MapServerAnswer.Unreachable, unconfigured.ask()) + } +} From 421040d9737ce09435e9883d52acf41dcefe020a Mon Sep 17 00:00:00 2001 From: DIVESH PATIL Date: Tue, 6 Oct 2026 15:24:10 +0530 Subject: [PATCH 03/11] feat(android): download the agency's map file and keep it current --- .../onebusaway/vehicletracker/MainActivity.kt | 10 +- .../data/map/MapFileDownloader.kt | 271 +++++++++++ .../vehicletracker/data/map/MapFileState.kt | 38 ++ .../vehicletracker/data/map/MapFileStore.kt | 104 +++++ .../vehicletracker/data/map/MapRepository.kt | 169 +++++++ .../data/map/RefreshWhenSignedIn.kt | 16 + .../onebusaway/vehicletracker/di/AppModule.kt | 23 + .../data/map/MapFileDownloaderTest.kt | 354 ++++++++++++++ .../data/map/MapFileStateTest.kt | 16 + .../data/map/MapFileStoreTest.kt | 106 +++++ .../data/map/MapRepositoryTest.kt | 437 ++++++++++++++++++ .../data/map/PmtilesFixtures.kt | 25 + .../data/map/RefreshWhenSignedInTest.kt | 70 +++ 13 files changed, 1638 insertions(+), 1 deletion(-) create mode 100644 android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapFileDownloader.kt create mode 100644 android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapFileState.kt create mode 100644 android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapFileStore.kt create mode 100644 android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapRepository.kt create mode 100644 android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/RefreshWhenSignedIn.kt create mode 100644 android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/MapFileDownloaderTest.kt create mode 100644 android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/MapFileStateTest.kt create mode 100644 android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/MapFileStoreTest.kt create mode 100644 android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/MapRepositoryTest.kt create mode 100644 android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/PmtilesFixtures.kt create mode 100644 android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/RefreshWhenSignedInTest.kt diff --git a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/MainActivity.kt b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/MainActivity.kt index 6ef3c26..e0db308 100644 --- a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/MainActivity.kt +++ b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/MainActivity.kt @@ -13,7 +13,10 @@ import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch +import org.onebusaway.vehicletracker.data.SessionStore import org.onebusaway.vehicletracker.data.TrackingRepository +import org.onebusaway.vehicletracker.data.map.MapRepository +import org.onebusaway.vehicletracker.data.map.refreshWhenSignedIn import org.onebusaway.vehicletracker.service.ServiceController import org.onebusaway.vehicletracker.service.rearmWhenActive import org.onebusaway.vehicletracker.ui.AppNav @@ -25,6 +28,8 @@ class MainActivity : ComponentActivity() { @Inject lateinit var serviceController: ServiceController @Inject lateinit var trackingRepository: TrackingRepository + @Inject lateinit var sessionStore: SessionStore + @Inject lateinit var mapRepository: MapRepository override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -46,7 +51,10 @@ class MainActivity : ComponentActivity() { // resume prompt asks the driver. lifecycleScope.launch { repeatOnLifecycle(Lifecycle.State.RESUMED) { - rearmWhenActive(trackingRepository.state, serviceController::startTracking) + launch { rearmWhenActive(trackingRepository.state, serviceController::startTracking) } + // Fetches the agency's street map, or checks it is current, whenever the app comes + // to the front signed in, and when the driver signs in. + refreshWhenSignedIn(sessionStore.session, mapRepository::refresh) } } } diff --git a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapFileDownloader.kt b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapFileDownloader.kt new file mode 100644 index 0000000..b39975a --- /dev/null +++ b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapFileDownloader.kt @@ -0,0 +1,271 @@ +package org.onebusaway.vehicletracker.data.map + +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.currentCoroutineContext +import kotlinx.coroutines.ensureActive +import kotlinx.coroutines.suspendCancellableCoroutine +import kotlinx.coroutines.withContext +import kotlinx.serialization.Serializable +import okhttp3.Call +import okhttp3.Callback +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.Response +import okio.BufferedSource +import java.io.File +import java.io.FileOutputStream +import java.io.IOException +import java.io.RandomAccessFile +import java.nio.ByteBuffer +import java.nio.ByteOrder +import java.nio.file.Files +import java.nio.file.StandardCopyOption +import java.util.concurrent.TimeUnit +import kotlin.coroutines.resume +import kotlin.coroutines.resumeWithException + +/** The headers that tell one version of the file on its host from another. */ +@Serializable +data class FileVersion(val etag: String? = null, val lastModified: String? = null) { + val isKnown: Boolean get() = etag != null || lastModified != null + + /** True only when both name the same version. Two versions with nothing to compare are not the same. */ + fun sameAs(other: FileVersion?): Boolean = when { + other == null -> false + etag != null && other.etag != null -> etag == other.etag + lastModified != null && other.lastModified != null -> lastModified == other.lastModified + else -> false + } +} + +data class FetchRequest( + val url: String, + /** Where the bytes go while they arrive. It may hold the start of the file from an earlier try. */ + val part: File, + /** Where the finished file is moved to. */ + val target: File, + /** The version the bytes already in [part] belong to, to carry on from; null starts over. */ + val partVersion: FileVersion?, + /** A version the phone already has, or turned down. The fetch ends [FetchResult.Unchanged] if the host still serves it. */ + val knownVersion: FileVersion?, +) + +sealed interface FetchResult { + /** The host still serves [FetchRequest.knownVersion]. Nothing was written. */ + data object Unchanged : FetchResult + + /** The whole file is at [FetchRequest.target], checked. */ + data class Complete(val version: FileVersion, val length: Long) : FetchResult + + /** [version] is what the host sent, when it sent anything. */ + data class Failed(val reason: MapFailure, val version: FileVersion? = null) : FetchResult +} + +/** Fetches the agency's map file. An interface so [MapRepository] can be tested without a network. */ +fun interface MapFileFetcher { + /** + * Downloads [request]'s file. [onVersion] runs once the host has said which version it is + * sending and before any of it is written, so the caller can record what the part file holds; + * [onProgress] runs as the bytes arrive, with a total of -1 when the host gives none. + */ + suspend fun fetch( + request: FetchRequest, + onVersion: suspend (FileVersion) -> Unit, + onProgress: (bytes: Long, total: Long) -> Unit, + ): FetchResult +} + +/** + * Downloads a PMTiles file over plain HTTP from wherever the agency hosts it. + * + * A broken download carries on from where it stopped: the bytes collect in a part file, and the + * next try asks for the rest with `Range`, guarded by `If-Range` so that a file replaced in + * between is fetched afresh rather than spliced onto the old one. Only a file that is complete + * and whose own header agrees with its length is moved into place, so a map never opens a + * truncated file. + */ +class MapFileDownloader( + private val client: OkHttpClient, + private val freeSpace: (File) -> Long = File::getUsableSpace, + private val io: CoroutineDispatcher = Dispatchers.IO, +) : MapFileFetcher { + + override suspend fun fetch( + request: FetchRequest, + onVersion: suspend (FileVersion) -> Unit, + onProgress: (bytes: Long, total: Long) -> Unit, + ): FetchResult = withContext(io) { + try { + val resume = request.partVersion?.takeIf { it.isKnown && request.part.length() >= HEADER_BYTES } + if (resume == null) request.part.delete() + when (val first = attempt(request, resume, onVersion, onProgress)) { + // The host would not serve the rest of the part: start over, once. + Attempt.RangeRefused -> { + request.part.delete() + (attempt(request, null, onVersion, onProgress) as? Attempt.Done)?.result + ?: FetchResult.Failed(MapFailure.NETWORK) + } + is Attempt.Done -> first.result + } + } catch (e: IOException) { + // The part keeps what arrived, for the next try to carry on from. + FetchResult.Failed(MapFailure.NETWORK) + } + } + + private sealed interface Attempt { + data object RangeRefused : Attempt + data class Done(val result: FetchResult) : Attempt + } + + private suspend fun attempt( + request: FetchRequest, + resume: FileVersion?, + onVersion: suspend (FileVersion) -> Unit, + onProgress: (Long, Long) -> Unit, + ): Attempt { + val offset = if (resume != null) request.part.length() else 0L + val http = Request.Builder() + .url(request.url) + // OkHttp otherwise asks for gzip and unzips it quietly, which hides the file's length + // and makes byte ranges meaningless. + .header("Accept-Encoding", "identity") + if (resume != null) { + http.header("Range", "bytes=$offset-") + http.header("If-Range", resume.etag ?: resume.lastModified!!) + } else { + request.knownVersion?.etag?.let { http.header("If-None-Match", it) } + ?: request.knownVersion?.lastModified?.let { http.header("If-Modified-Since", it) } + } + + client.newCall(http.build()).await().use { response -> + val version = FileVersion(response.header("ETag"), response.header("Last-Modified")) + val start: Long + val total: Long + when (response.code) { + HTTP_NOT_MODIFIED -> return Attempt.Done(FetchResult.Unchanged) + HTTP_RANGE_NOT_SATISFIABLE -> + return if (resume != null) Attempt.RangeRefused else Attempt.Done(FetchResult.Failed(MapFailure.NETWORK, version)) + HTTP_OK -> { + // A host that ignores If-None-Match still names the version it sends. + if (resume == null && version.sameAs(request.knownVersion)) return Attempt.Done(FetchResult.Unchanged) + start = 0 + total = response.body?.contentLength() ?: -1 + } + HTTP_PARTIAL_CONTENT -> { + val range = contentRange(response.header("Content-Range")) + if (resume == null || range == null || range.first != offset) { + request.part.delete() + return Attempt.Done(FetchResult.Failed(MapFailure.NETWORK, version)) + } + start = offset + total = range.second + } + else -> return Attempt.Done(FetchResult.Failed(MapFailure.NETWORK, version)) + } + val source = response.body?.source() ?: return Attempt.Done(FetchResult.Failed(MapFailure.NETWORK, version)) + + val directory = requireNotNull(request.part.absoluteFile.parentFile) + directory.mkdirs() + val needed = (if (total > 0) total - start else 0L) + SPACE_TO_SPARE + if (freeSpace(directory) < needed) return Attempt.Done(FetchResult.Failed(MapFailure.NO_SPACE, version)) + + // The first bytes say whether this is a map file at all, so a wrong URL costs a few + // bytes rather than the whole download. + if (start == 0L && !source.startsWith(MAGIC)) return Attempt.Done(FetchResult.Failed(MapFailure.INVALID_FILE, version)) + + onVersion(version) + var written = start + FileOutputStream(request.part, start > 0).use { out -> + val buffer = ByteArray(BUFFER_BYTES) + while (true) { + currentCoroutineContext().ensureActive() + val read = source.read(buffer) + if (read == -1) break + out.write(buffer, 0, read) + written += read + onProgress(written, total) + } + out.fd.sync() + } + + if (total > 0 && written != total) return Attempt.Done(FetchResult.Failed(MapFailure.NETWORK, version)) + if (!headerMatchesLength(request.part)) { + request.part.delete() + return Attempt.Done(FetchResult.Failed(MapFailure.INVALID_FILE, version)) + } + Files.move(request.part.toPath(), request.target.toPath(), StandardCopyOption.ATOMIC_MOVE) + return Attempt.Done(FetchResult.Complete(version, written)) + } + } + + companion object { + /** The client map files are fetched with. Not the API's: the driver's token must never reach the file's host. */ + fun client(): OkHttpClient = OkHttpClient.Builder() + .connectTimeout(15, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .build() + } +} + +/** Room left free on top of the file, so the download never fills the phone. */ +internal const val SPACE_TO_SPARE = 50L * 1024 * 1024 + +private const val BUFFER_BYTES = 64 * 1024 +private const val HTTP_OK = 200 +private const val HTTP_PARTIAL_CONTENT = 206 +private const val HTTP_NOT_MODIFIED = 304 +private const val HTTP_RANGE_NOT_SATISFIABLE = 416 + +/** A PMTiles version 3 file starts with these 8 bytes. */ +private val MAGIC = "PMTiles".toByteArray(Charsets.US_ASCII) + 3.toByte() + +/** The PMTiles version 3 header's length. */ +internal const val HEADER_BYTES = 127 + +private const val TILE_TYPE_VECTOR = 1 + +/** `bytes first-last/total` as (first, total); null for anything else, including an unknown total. */ +private fun contentRange(header: String?): Pair? { + val match = header?.let { Regex("""bytes (\d+)-(\d+)/(\d+)""").matchEntire(it.trim()) } ?: return null + return match.groupValues[1].toLong() to match.groupValues[3].toLong() +} + +/** + * True when [file] is a PMTiles version 3 vector map whose header accounts for exactly its + * length: the root directory, metadata, leaf directories and tile data all lie inside it, and the + * last of them ends where the file does. A file cut short anywhere fails this. + */ +internal fun headerMatchesLength(file: File): Boolean { + val length = file.length() + if (length < HEADER_BYTES) return false + val header = ByteArray(HEADER_BYTES) + RandomAccessFile(file, "r").use { it.readFully(header) } + if (!header.copyOfRange(0, MAGIC.size).contentEquals(MAGIC)) return false + val bytes = ByteBuffer.wrap(header).order(ByteOrder.LITTLE_ENDIAN) + if (bytes.get(99).toInt() != TILE_TYPE_VECTOR) return false + // Root directory, metadata, leaf directories, tile data: each an offset and a length. + val sections = listOf(8, 24, 40, 56).map { at -> bytes.getLong(at) to bytes.getLong(at + 8) } + if (sections.any { (offset, size) -> offset < 0 || size < 0 }) return false + if (sections.first().first < HEADER_BYTES) return false + return sections.maxOf { (offset, size) -> offset + size } == length +} + +/** True when the next bytes are [prefix]. Reads ahead without consuming them. */ +private fun BufferedSource.startsWith(prefix: ByteArray): Boolean = + request(prefix.size.toLong()) && peek().readByteArray(prefix.size.toLong()).contentEquals(prefix) + +/** Runs the call without holding a thread, and cancels it if the coroutine is cancelled. */ +private suspend fun Call.await(): Response = suspendCancellableCoroutine { continuation -> + continuation.invokeOnCancellation { cancel() } + enqueue(object : Callback { + override fun onResponse(call: Call, response: Response) { + continuation.resume(response) { _, value, _ -> value.close() } + } + + override fun onFailure(call: Call, e: IOException) { + continuation.resumeWithException(e) + } + }) +} diff --git a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapFileState.kt b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapFileState.kt new file mode 100644 index 0000000..87c1497 --- /dev/null +++ b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapFileState.kt @@ -0,0 +1,38 @@ +package org.onebusaway.vehicletracker.data.map + +import kotlinx.coroutines.flow.StateFlow +import java.io.File + +/** Where the agency's offline street map stands on this phone. */ +sealed interface MapFileState { + /** No street map: the agency has none, or the server has not been asked yet. */ + data object None : MapFileState + + /** The first copy is on its way. An update to a map already here downloads without showing this. */ + data class Downloading(val bytes: Long, val total: Long) : MapFileState + + data class Ready(val file: File) : MapFileState + + /** The first copy could not be fetched. The app tries again by itself. */ + data class Failed(val reason: MapFailure) : MapFileState +} + +enum class MapFailure { + /** The phone has too little free space for the file. */ + NO_SPACE, + + /** The server or the file's host could not be reached, or answered with an error. */ + NETWORK, + + /** What the host sent is not a complete vector map file. */ + INVALID_FILE, +} + +/** The street map's state, as the tracking screen reads it. */ +interface MapFileSource { + val state: StateFlow +} + +/** How far a download has got, in whole percent. It shows 100 only once the file is done. */ +fun downloadPercent(bytes: Long, total: Long): Int = + if (total <= 0) 0 else (bytes * 100 / total).toInt().coerceIn(0, 99) diff --git a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapFileStore.kt b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapFileStore.kt new file mode 100644 index 0000000..e540e9b --- /dev/null +++ b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapFileStore.kt @@ -0,0 +1,104 @@ +package org.onebusaway.vehicletracker.data.map + +import android.util.Log +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json +import java.io.File +import java.io.FileOutputStream +import java.nio.file.Files +import java.nio.file.StandardCopyOption +import java.util.UUID + +private const val TAG = "MapFileStore" +private const val METADATA = "map.json" +private const val PART_SUFFIX = ".part" + +/** What the phone holds of the agency's map, as recorded in `map.json`. */ +@Serializable +data class MapRecord( + /** The file maps open, and where it came from. */ + val current: StoredMap? = null, + /** A download under way, kept so it carries on after the app restarts. */ + val pending: PendingDownload? = null, + /** A version the host served that was not a usable map, so it is not fetched again. */ + val rejected: RejectedMap? = null, +) + +@Serializable +data class StoredMap(val url: String, val fileName: String, val version: FileVersion, val checkedAtEpochSec: Long) + +@Serializable +data class PendingDownload(val url: String, val fileName: String, val version: FileVersion? = null) + +@Serializable +data class RejectedMap(val url: String, val version: FileVersion, val atEpochSec: Long) + +/** + * The agency's map files and `map.json`, the record of which one is current and what is being + * downloaded, in one directory. The app puts that directory in `noBackupFilesDir`: the app is + * backed up to the cloud, and a map tens of megabytes long would push it past Android's 25 MB + * backup limit, so that nothing would be backed up at all. + * + * Takes a [File] rather than a `Context` so it can be tested on the JVM, as + * [org.onebusaway.vehicletracker.data.FileTripGeometryStore] does. + */ +class MapFileStore( + private val directory: File, + private val io: CoroutineDispatcher = Dispatchers.IO, +) { + private val json = Json { ignoreUnknownKeys = true } + private val metadata = File(directory, METADATA) + private val temp = File(directory, "$METADATA.tmp") + + /** What `map.json` says, or an empty record when there is none or it cannot be read. */ + suspend fun load(): MapRecord = withContext(io) { + if (!metadata.exists()) return@withContext MapRecord() + try { + json.decodeFromString(MapRecord.serializer(), metadata.readText()) + } catch (e: Exception) { + // Unreadable is as good as empty: the map is downloaded again, and the files the + // record named go at the next start. + Log.w(TAG, "Could not read the map record", e) + MapRecord() + } + } + + suspend fun save(record: MapRecord) = withContext(io) { + directory.mkdirs() + // Written in full beside the real file and then renamed over it, so a crash mid-write + // leaves the old record or the new one, never half of one. + FileOutputStream(temp).use { out -> + out.write(json.encodeToString(MapRecord.serializer(), record).toByteArray()) + out.fd.sync() + } + Files.move(temp.toPath(), metadata.toPath(), StandardCopyOption.ATOMIC_MOVE, StandardCopyOption.REPLACE_EXISTING) + Unit + } + + fun file(name: String): File = File(directory, name) + + fun partFile(name: String): File = File(directory, name + PART_SUFFIX) + + /** A name no file in the directory has had. */ + fun newFileName(): String = "map-${UUID.randomUUID()}.pmtiles" + + /** + * Deletes every file [record] does not name: maps replaced by a newer one or dropped by the + * agency, and downloads given up on. Only safe while no map has a file open, which is why the + * app does it at start, before any map opens, and never later. + */ + suspend fun deleteUnlisted(record: MapRecord) = withContext(io) { + val keep = setOfNotNull( + METADATA, + record.current?.fileName, + record.pending?.fileName?.let { it + PART_SUFFIX }, + ) + directory.listFiles()?.filter { it.name !in keep }?.forEach { stray -> + if (!stray.deleteRecursively()) Log.w(TAG, "Could not delete ${stray.name}") + } + Unit + } +} diff --git a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapRepository.kt b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapRepository.kt new file mode 100644 index 0000000..d682ca1 --- /dev/null +++ b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapRepository.kt @@ -0,0 +1,169 @@ +package org.onebusaway.vehicletracker.data.map + +import android.util.Log +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch +import org.onebusaway.vehicletracker.di.EpochSecondsClock +import javax.inject.Inject +import javax.inject.Singleton + +private const val TAG = "MapRepository" + +/** How long a map stays current before its host is asked whether there is a newer one. */ +internal const val CHECK_EVERY_S = 24L * 60 * 60 + +internal const val FIRST_RETRY_MS = 5_000L +internal const val LAST_RETRY_MS = 5 * 60_000L + +/** + * Keeps the agency's offline street map on the phone: asks the server where the file is, + * downloads it, and once it is here asks the file's host once a day whether it has changed. + * + * [refresh] starts that and returns at once. The work runs in the app's scope, so it carries on + * across screens, and for a whole shift while the tracking service keeps the app alive. Until the + * first copy is here, a network failure is tried again after 5 s, then twice as long each time up + * to every 5 min. Anything else waits for the next [refresh]: a phone too full for the file rarely + * empties itself, and each try would cost the driver data. So does a failed check once there is a + * map. + * + * A file a map may have open is never changed or deleted (maplibre-native #3658: MapLibre crashes + * if it is). A newer version downloads under a new name and the state moves to it, so the next + * map to open reads it while an open one keeps the old. Files nothing points to any more are + * deleted when the app next starts, before any map opens. + */ +@Singleton +class MapRepository @Inject constructor( + private val server: MapServer, + private val store: MapFileStore, + private val fetcher: MapFileFetcher, + private val scope: CoroutineScope, + @param:EpochSecondsClock private val now: () -> Long, +) : MapFileSource { + private val _state = MutableStateFlow(MapFileState.None) + override val state: StateFlow = _state.asStateFlow() + + private val started: Job = scope.launch { start() } + private val lock = Any() + private var running: Job? = null + + /** Asks for the map, or checks the one here is current, unless a refresh is already under way. */ + fun refresh() { + synchronized(lock) { + if (running?.isActive == true) return + running = scope.launch { + started.join() + keepTrying() + } + } + } + + private suspend fun start() { + val record = store.load() + store.deleteUnlisted(record) + val current = record.current ?: return + val file = store.file(current.fileName) + if (file.exists()) { + _state.value = MapFileState.Ready(file) + } else { + store.save(record.copy(current = null)) + } + } + + private enum class Outcome { DONE, RETRY } + + private suspend fun keepTrying() { + var wait = FIRST_RETRY_MS + while (check() == Outcome.RETRY) { + delay(wait) + wait = (wait * 2).coerceAtMost(LAST_RETRY_MS) + } + } + + private suspend fun check(): Outcome { + val record = store.load() + val current = record.current + if (current != null && record.pending == null && isRecent(current.checkedAtEpochSec)) return Outcome.DONE + + val url = when (val answer = server.ask()) { + is MapServerAnswer.File -> answer.url + MapServerAnswer.NoMap -> { + // The files stay until the next start: a map on screen may be reading one. + if (record != MapRecord()) store.save(MapRecord()) + _state.value = MapFileState.None + return Outcome.DONE + } + MapServerAnswer.SignedOut -> return Outcome.DONE + MapServerAnswer.Unreachable -> return failed(MapFailure.NETWORK) + } + + val rejected = record.rejected?.takeIf { it.url == url } + if (rejected != null && isRecent(rejected.atEpochSec)) return failed(MapFailure.INVALID_FILE, retry = false) + + val pending = record.pending?.takeIf { it.url == url } ?: PendingDownload(url, store.newFileName()) + // A download from a URL the server no longer gives is not coming back. + record.pending?.takeIf { it.url != url }?.let { store.partFile(it.fileName).delete() } + val known = if (current?.url == url) current.version else rejected?.version + val firstCopy = current == null + var shownPercent = -1 + + val result = fetcher.fetch( + FetchRequest(url, store.partFile(pending.fileName), store.file(pending.fileName), pending.version, known), + onVersion = { version -> store.save(store.load().copy(pending = pending.copy(version = version))) }, + onProgress = { bytes, total -> + // An update downloads quietly: the map already here is still good. + val percent = downloadPercent(bytes, total) + if (firstCopy && percent != shownPercent) { + shownPercent = percent + _state.value = MapFileState.Downloading(bytes, total) + } + }, + ) + return when (result) { + FetchResult.Unchanged -> { + val latest = store.load().copy(pending = null) + if (current?.url == url) { + store.save(latest.copy(current = current.copy(checkedAtEpochSec = now()))) + Outcome.DONE + } else { + // The host still serves the file that was turned down. + store.save(latest.copy(rejected = rejected?.copy(atEpochSec = now()))) + failed(MapFailure.INVALID_FILE, retry = false) + } + } + is FetchResult.Complete -> { + store.save(MapRecord(current = StoredMap(url, pending.fileName, result.version, now()))) + _state.value = MapFileState.Ready(store.file(pending.fileName)) + Log.i(TAG, "Map file ready, ${result.length} bytes") + Outcome.DONE + } + is FetchResult.Failed -> { + Log.w(TAG, "Map file not downloaded: ${result.reason}") + when (result.reason) { + MapFailure.INVALID_FILE -> { + store.save(store.load().copy(pending = null, rejected = RejectedMap(url, result.version ?: FileVersion(), now()))) + failed(MapFailure.INVALID_FILE, retry = false) + } + MapFailure.NO_SPACE -> failed(MapFailure.NO_SPACE, retry = false) + MapFailure.NETWORK -> failed(MapFailure.NETWORK) + } + } + } + } + + /** + * Shows [reason] while the phone has no map. A phone that has one keeps showing it, and does + * not retry: the check is still due, so the next [refresh] tries again. + */ + private fun failed(reason: MapFailure, retry: Boolean = true): Outcome { + if (_state.value is MapFileState.Ready) return Outcome.DONE + _state.value = MapFileState.Failed(reason) + return if (retry) Outcome.RETRY else Outcome.DONE + } + + private fun isRecent(epochSec: Long): Boolean = now() - epochSec in 0 until CHECK_EVERY_S +} diff --git a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/RefreshWhenSignedIn.kt b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/RefreshWhenSignedIn.kt new file mode 100644 index 0000000..73f4847 --- /dev/null +++ b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/RefreshWhenSignedIn.kt @@ -0,0 +1,16 @@ +package org.onebusaway.vehicletracker.data.map + +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.map +import org.onebusaway.vehicletracker.data.Session + +/** + * Calls [refresh] when collection starts with the driver signed in, and again each time they sign + * in. Calling it on every resume costs nothing once the map is current: [MapRepository.refresh] + * asks the network only when a check is due. + */ +internal suspend fun refreshWhenSignedIn(session: Flow, refresh: () -> Unit) { + session.map { it.token != null }.distinctUntilChanged().filter { it }.collect { refresh() } +} diff --git a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/di/AppModule.kt b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/di/AppModule.kt index 31a1e74..654c79d 100644 --- a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/di/AppModule.kt +++ b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/di/AppModule.kt @@ -29,6 +29,13 @@ import org.onebusaway.vehicletracker.data.vehiclePrefsDataStore import org.onebusaway.vehicletracker.data.api.ApiFactory import org.onebusaway.vehicletracker.data.api.TrackerApi import org.onebusaway.vehicletracker.data.api.TrackerApiProvider +import org.onebusaway.vehicletracker.data.map.MapFileDownloader +import org.onebusaway.vehicletracker.data.map.MapFileFetcher +import org.onebusaway.vehicletracker.data.map.MapFileSource +import org.onebusaway.vehicletracker.data.map.MapFileStore +import org.onebusaway.vehicletracker.data.map.MapRepository +import org.onebusaway.vehicletracker.data.map.MapServer +import org.onebusaway.vehicletracker.data.map.TrackerMapServer import org.onebusaway.vehicletracker.service.ServiceController import org.onebusaway.vehicletracker.service.ServiceControllerImpl import java.io.File @@ -171,6 +178,22 @@ object AppModule { @Provides fun provideTrackerApiProvider(holder: ApiHolder): TrackerApiProvider = TrackerApiProvider(holder::api) + /** The agency's map files: in `noBackupFilesDir`, because tens of megabytes would push the app past its backup limit. */ + @Provides + @Singleton + fun provideMapFileStore(@ApplicationContext context: Context): MapFileStore = + MapFileStore(File(context.noBackupFilesDir, "map")) + + @Provides + @Singleton + fun provideMapFileFetcher(): MapFileFetcher = MapFileDownloader(MapFileDownloader.client()) + + @Provides + fun provideMapServer(apiProvider: TrackerApiProvider): MapServer = TrackerMapServer(apiProvider) + + @Provides + fun provideMapFileSource(repository: MapRepository): MapFileSource = repository + @Provides @EpochSecondsClock fun provideClock(): () -> Long = { System.currentTimeMillis() / 1000 } diff --git a/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/MapFileDownloaderTest.kt b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/MapFileDownloaderTest.kt new file mode 100644 index 0000000..8ec8532 --- /dev/null +++ b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/MapFileDownloaderTest.kt @@ -0,0 +1,354 @@ +package org.onebusaway.vehicletracker.data.map + +import kotlinx.coroutines.CompletableDeferred +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.test.runTest +import kotlinx.coroutines.withContext +import kotlinx.coroutines.withTimeout +import okhttp3.mockwebserver.MockResponse +import okhttp3.mockwebserver.MockWebServer +import okhttp3.mockwebserver.SocketPolicy +import okio.Buffer +import org.junit.After +import org.junit.Assert.assertArrayEquals +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertNull +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.rules.TemporaryFolder +import java.io.File +import java.util.concurrent.TimeUnit + +/** [MapFileDownloader] against a local HTTP server, writing to a real directory. */ +class MapFileDownloaderTest { + @get:Rule val tempFolder = TemporaryFolder() + + private lateinit var server: MockWebServer + private lateinit var dir: File + private val file = pmtiles(size = 200_000) + private val versions = mutableListOf() + private val progress = mutableListOf>() + + @Before fun setUp() { + server = MockWebServer().apply { start() } + dir = tempFolder.newFolder("map") + } + + @After fun tearDown() = server.shutdown() + + private val part get() = File(dir, "map-1.pmtiles.part") + private val target get() = File(dir, "map-1.pmtiles") + private val url get() = server.url("/maps/agency.pmtiles").toString() + + private fun downloader(freeSpace: Long = Long.MAX_VALUE) = MapFileDownloader(MapFileDownloader.client(), freeSpace = { freeSpace }) + + private suspend fun fetch( + partVersion: FileVersion? = null, + knownVersion: FileVersion? = null, + downloader: MapFileDownloader = downloader(), + ): FetchResult = downloader.fetch( + FetchRequest(url, part, target, partVersion, knownVersion), + onVersion = { versions += it }, + onProgress = { bytes, total -> progress += bytes to total }, + ) + + private fun body(bytes: ByteArray) = Buffer().write(bytes) + + private fun whole(etag: String = "\"v1\"") = MockResponse().setHeader("ETag", etag).setBody(body(file)) + + @Test fun `downloads the whole file and moves it into place`() = runTest { + server.enqueue(whole()) + + val result = fetch() + + assertEquals(FetchResult.Complete(FileVersion(etag = "\"v1\""), file.size.toLong()), result) + assertArrayEquals(file, target.readBytes()) + assertFalse("the part file is renamed, not left behind", part.exists()) + assertEquals(listOf(FileVersion(etag = "\"v1\"")), versions) + assertEquals(file.size.toLong() to file.size.toLong(), progress.last()) + } + + @Test fun `asks for the bytes as stored, never gzipped`() = runTest { + server.enqueue(whole()) + + fetch() + + assertEquals("identity", server.takeRequest().getHeader("Accept-Encoding")) + } + + // The client is the production one: the driver's bearer token belongs to the agency's own + // server, and the map file is on someone else's host. + @Test fun `never sends an Authorization header, even after a redirect`() = runTest { + server.enqueue(MockResponse().setResponseCode(302).setHeader("Location", server.url("/cdn/agency.pmtiles"))) + server.enqueue(whole()) + + val result = fetch() + + assertTrue("expected Complete, was $result", result is FetchResult.Complete) + val first = server.takeRequest() + val second = server.takeRequest() + assertEquals("/cdn/agency.pmtiles", second.path) + assertNull(first.getHeader("Authorization")) + assertNull(second.getHeader("Authorization")) + } + + @Test fun `carries on from a part file with Range and If-Range`() = runTest { + part.writeBytes(file.copyOfRange(0, 50_000)) + server.enqueue( + MockResponse().setResponseCode(206) + .setHeader("ETag", "\"v1\"") + .setHeader("Content-Range", "bytes 50000-${file.size - 1}/${file.size}") + .setBody(body(file.copyOfRange(50_000, file.size))), + ) + + val result = fetch(partVersion = FileVersion(etag = "\"v1\"")) + + assertEquals(FetchResult.Complete(FileVersion(etag = "\"v1\""), file.size.toLong()), result) + assertArrayEquals(file, target.readBytes()) + val request = server.takeRequest() + assertEquals("bytes=50000-", request.getHeader("Range")) + assertEquals("\"v1\"", request.getHeader("If-Range")) + val (firstBytes, total) = progress.first() + assertTrue("progress counts the bytes already there, began at $firstBytes", firstBytes > 50_000) + assertEquals(file.size.toLong(), total) + } + + @Test fun `resumes on Last-Modified when the host sends no ETag`() = runTest { + part.writeBytes(file.copyOfRange(0, 50_000)) + val stamp = "Mon, 05 Oct 2026 10:00:00 GMT" + server.enqueue( + MockResponse().setResponseCode(206) + .setHeader("Last-Modified", stamp) + .setHeader("Content-Range", "bytes 50000-${file.size - 1}/${file.size}") + .setBody(body(file.copyOfRange(50_000, file.size))), + ) + + fetch(partVersion = FileVersion(lastModified = stamp)) + + assertEquals(stamp, server.takeRequest().getHeader("If-Range")) + assertArrayEquals(file, target.readBytes()) + } + + // What a host does when the file changed since the part began (If-Range no longer matches), + // or when it does not do ranges at all: it sends the whole file. Splicing that onto the old + // part would make a corrupt map. + @Test fun `starts over when the host sends the whole file instead of the rest`() = runTest { + part.writeBytes(ByteArray(50_000) { 7 }) + server.enqueue(whole(etag = "\"v2\"")) + + val result = fetch(partVersion = FileVersion(etag = "\"v1\"")) + + assertEquals(FetchResult.Complete(FileVersion(etag = "\"v2\""), file.size.toLong()), result) + assertArrayEquals(file, target.readBytes()) + } + + @Test fun `starts over once when the host refuses the range`() = runTest { + part.writeBytes(file.copyOfRange(0, 50_000)) + server.enqueue(MockResponse().setResponseCode(416)) + server.enqueue(whole()) + + val result = fetch(partVersion = FileVersion(etag = "\"v1\"")) + + assertTrue("expected Complete, was $result", result is FetchResult.Complete) + assertArrayEquals(file, target.readBytes()) + assertEquals("bytes=50000-", server.takeRequest().getHeader("Range")) + assertNull("the second request asks for the whole file", server.takeRequest().getHeader("Range")) + } + + @Test fun `a part from an unknown version is not resumed`() = runTest { + part.writeBytes(ByteArray(50_000) { 7 }) + server.enqueue(whole()) + + fetch(partVersion = FileVersion()) + + assertNull(server.takeRequest().getHeader("Range")) + assertArrayEquals(file, target.readBytes()) + } + + @Test fun `a cut connection keeps the part, and the next try carries on from it`() = runTest { + server.enqueue(whole().setSocketPolicy(SocketPolicy.DISCONNECT_DURING_RESPONSE_BODY)) + + val cut = fetch() + + assertEquals(FetchResult.Failed(MapFailure.NETWORK), cut) + assertFalse(target.exists()) + val kept = part.length() + assertTrue("expected part of the file, had $kept bytes", kept in (HEADER_BYTES.toLong() + 1) until file.size.toLong()) + + server.enqueue( + MockResponse().setResponseCode(206) + .setHeader("ETag", "\"v1\"") + .setHeader("Content-Range", "bytes $kept-${file.size - 1}/${file.size}") + .setBody(body(file.copyOfRange(kept.toInt(), file.size))), + ) + val resumed = fetch(partVersion = versions.single()) + + assertTrue("expected Complete, was $resumed", resumed is FetchResult.Complete) + assertArrayEquals(file, target.readBytes()) + } + + @Test fun `cancelling leaves a part to carry on from`() = runTest { + server.enqueue(whole().throttleBody(16_384, 50, TimeUnit.MILLISECONDS)) + val someArrived = CompletableDeferred() + val downloader = downloader() + + withContext(Dispatchers.Default) { + val job = launch { + downloader.fetch( + FetchRequest(url, part, target, null, null), + onVersion = {}, + onProgress = { bytes, _ -> if (bytes >= 32_768) someArrived.complete(Unit) }, + ) + } + withTimeout(10_000) { someArrived.await() } + job.cancel() + job.join() + } + + assertFalse(target.exists()) + assertTrue("expected the bytes so far, had ${part.length()}", part.length() >= 32_768) + } + + @Test fun `stops before writing anything when the phone has too little space`() = runTest { + server.enqueue(whole()) + + val result = fetch(downloader = downloader(freeSpace = file.size + SPACE_TO_SPARE - 1)) + + assertEquals(FetchResult.Failed(MapFailure.NO_SPACE, FileVersion(etag = "\"v1\"")), result) + assertFalse(part.exists()) + assertTrue(versions.isEmpty()) + } + + @Test fun `room for the rest of a resumed file is enough`() = runTest { + part.writeBytes(file.copyOfRange(0, 150_000)) + server.enqueue( + MockResponse().setResponseCode(206) + .setHeader("ETag", "\"v1\"") + .setHeader("Content-Range", "bytes 150000-${file.size - 1}/${file.size}") + .setBody(body(file.copyOfRange(150_000, file.size))), + ) + + val result = fetch(partVersion = FileVersion(etag = "\"v1\""), downloader = downloader(freeSpace = 50_000 + SPACE_TO_SPARE)) + + assertTrue("expected Complete, was $result", result is FetchResult.Complete) + } + + @Test fun `a response that is not a map file is refused after its first bytes`() = runTest { + server.enqueue(MockResponse().setHeader("ETag", "\"page\"").setBody("Not found")) + + val result = fetch() + + assertEquals(FetchResult.Failed(MapFailure.INVALID_FILE, FileVersion(etag = "\"page\"")), result) + assertFalse(part.exists()) + assertFalse(target.exists()) + assertTrue("nothing recorded for a file never written", versions.isEmpty()) + } + + @Test fun `a raster map file is refused`() = runTest { + server.enqueue(MockResponse().setBody(body(pmtiles(size = 4096, tileType = 2)))) + + val result = fetch() + + assertTrue("expected INVALID_FILE, was $result", result is FetchResult.Failed && result.reason == MapFailure.INVALID_FILE) + assertFalse(part.exists()) + assertFalse(target.exists()) + } + + // The host's length and the bytes agree, so only the file's own header can tell it was cut + // short when it was uploaded. + @Test fun `a file shorter than its own header says is refused`() = runTest { + server.enqueue(MockResponse().setBody(body(file.copyOfRange(0, 150_000)))) + + val result = fetch() + + assertTrue("expected INVALID_FILE, was $result", result is FetchResult.Failed && result.reason == MapFailure.INVALID_FILE) + assertFalse(part.exists()) + assertFalse(target.exists()) + } + + @Test fun `the host still has the version here, so nothing is downloaded`() = runTest { + server.enqueue(MockResponse().setResponseCode(304)) + + val result = fetch(knownVersion = FileVersion(etag = "\"v1\"")) + + assertEquals(FetchResult.Unchanged, result) + assertEquals("\"v1\"", server.takeRequest().getHeader("If-None-Match")) + assertFalse(target.exists()) + } + + @Test fun `asks If-Modified-Since when all it has is a date`() = runTest { + server.enqueue(MockResponse().setResponseCode(304)) + val stamp = "Mon, 05 Oct 2026 10:00:00 GMT" + + fetch(knownVersion = FileVersion(lastModified = stamp)) + + val request = server.takeRequest() + assertEquals(stamp, request.getHeader("If-Modified-Since")) + assertNull(request.getHeader("If-None-Match")) + } + + // Some hosts send 200 whatever the request says. Without this, every phone would download the + // whole map again at every daily check. + @Test fun `a host that ignores the condition is caught by its ETag`() = runTest { + server.enqueue(whole(etag = "\"v1\"")) + + val result = fetch(knownVersion = FileVersion(etag = "\"v1\"")) + + assertEquals(FetchResult.Unchanged, result) + assertFalse(part.exists()) + assertFalse(target.exists()) + } + + @Test fun `a newer version is downloaded`() = runTest { + server.enqueue(whole(etag = "\"v2\"")) + + val result = fetch(knownVersion = FileVersion(etag = "\"v1\"")) + + assertEquals(FetchResult.Complete(FileVersion(etag = "\"v2\""), file.size.toLong()), result) + } + + @Test fun `a server error is a network failure`() = runTest { + server.enqueue(MockResponse().setResponseCode(503)) + + assertEquals(FetchResult.Failed(MapFailure.NETWORK, FileVersion()), fetch()) + } + + @Test fun `no server is a network failure`() = runTest { + server.shutdown() + + assertEquals(FetchResult.Failed(MapFailure.NETWORK), fetch()) + } +} + +/** [headerMatchesLength], the check that keeps a truncated file from ever being opened. */ +class PmtilesHeaderTest { + @get:Rule val tempFolder = TemporaryFolder() + + private fun check(bytes: ByteArray) = headerMatchesLength(tempFolder.newFile().apply { writeBytes(bytes) }) + + @Test fun `a whole file passes`() = assertTrue(check(pmtiles())) + + @Test fun `a file cut short fails`() = assertFalse(check(pmtiles().copyOfRange(0, 4000))) + + @Test fun `bytes past the last section fail`() = assertFalse(check(pmtiles() + ByteArray(10))) + + @Test fun `a file shorter than the header fails`() = assertFalse(check(pmtiles().copyOfRange(0, HEADER_BYTES - 1))) + + @Test fun `another version fails`() = assertFalse(check(pmtiles().also { it[7] = 2 })) + + @Test fun `another format fails`() = assertFalse(check(pmtiles().also { it[0] = 'X'.code.toByte() })) + + @Test fun `raster tiles fail`() = assertFalse(check(pmtiles(tileType = 2))) + + @Test fun `a root directory inside the header fails`() = assertFalse( + check(pmtiles().also { java.nio.ByteBuffer.wrap(it).order(java.nio.ByteOrder.LITTLE_ENDIAN).putLong(8, 100) }), + ) + + @Test fun `a negative length fails`() = assertFalse( + check(pmtiles().also { java.nio.ByteBuffer.wrap(it).order(java.nio.ByteOrder.LITTLE_ENDIAN).putLong(48, -1) }), + ) +} diff --git a/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/MapFileStateTest.kt b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/MapFileStateTest.kt new file mode 100644 index 0000000..5e11bb6 --- /dev/null +++ b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/MapFileStateTest.kt @@ -0,0 +1,16 @@ +package org.onebusaway.vehicletracker.data.map + +import org.junit.Assert.assertEquals +import org.junit.Test + +class MapFileStateTest { + @Test fun `a download's percent`() = assertEquals(40, downloadPercent(40, 100)) + + @Test fun `rounds down`() = assertEquals(33, downloadPercent(1, 3)) + + @Test fun `never says 100 before the file is in place`() = assertEquals(99, downloadPercent(100, 100)) + + @Test fun `an unknown total shows nothing done`() = assertEquals(0, downloadPercent(5_000, -1)) + + @Test fun `a metro-sized file`() = assertEquals(50, downloadPercent(46_500_000, 93_000_000)) +} diff --git a/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/MapFileStoreTest.kt b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/MapFileStoreTest.kt new file mode 100644 index 0000000..7da0962 --- /dev/null +++ b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/MapFileStoreTest.kt @@ -0,0 +1,106 @@ +package org.onebusaway.vehicletracker.data.map + +import kotlinx.coroutines.test.runTest +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertNotEquals +import org.junit.Assert.assertTrue +import org.junit.Rule +import org.junit.Test +import org.junit.rules.TemporaryFolder +import java.io.File +import java.io.IOException + +/** [MapFileStore] against a real directory. */ +class MapFileStoreTest { + @get:Rule val tempFolder = TemporaryFolder() + + private val record = MapRecord( + current = StoredMap("https://maps.example.org/a.pmtiles", "map-a.pmtiles", FileVersion(etag = "\"v1\""), 1_000), + pending = PendingDownload("https://maps.example.org/a.pmtiles", "map-b.pmtiles", FileVersion(etag = "\"v2\"")), + rejected = RejectedMap("https://maps.example.org/old.pmtiles", FileVersion(lastModified = "Mon, 05 Oct 2026 10:00:00 GMT"), 900), + ) + + @Test fun `a saved record reads back unchanged`() = runTest { + val store = MapFileStore(tempFolder.newFolder()) + + store.save(record) + + assertEquals(record, store.load()) + } + + @Test fun `saving creates the directory`() = runTest { + val store = MapFileStore(File(tempFolder.root, "not-yet/map")) + + store.save(record) + + assertEquals(record, store.load()) + } + + @Test fun `nothing saved reads back as an empty record`() = runTest { + assertEquals(MapRecord(), MapFileStore(tempFolder.newFolder()).load()) + } + + @Test fun `a record this build cannot read loads as empty, not a crash`() = runTest { + val dir = tempFolder.newFolder() + File(dir, "map.json").writeText("""{"current":{"url":""") + + assertEquals(MapRecord(), MapFileStore(dir).load()) + } + + @Test fun `a save that fails leaves the record before it intact`() = runTest { + val dir = tempFolder.newFolder() + val store = MapFileStore(dir) + store.save(record) + // A directory where the temporary file goes makes the write fail before the rename. + File(dir, "map.json.tmp").mkdir() + + val failure = runCatching { store.save(MapRecord()) }.exceptionOrNull() + + assertTrue("expected an IOException, was $failure", failure is IOException) + assertEquals(record, store.load()) + } + + @Test fun `start-up cleaning keeps the record, the current map and the download under way`() = runTest { + val dir = tempFolder.newFolder() + val store = MapFileStore(dir) + store.save(record) + listOf("map-a.pmtiles", "map-b.pmtiles.part", "map-old.pmtiles", "map-c.pmtiles.part", "map.json.tmp") + .forEach { File(dir, it).writeText("x") } + + store.deleteUnlisted(record) + + assertEquals(setOf("map.json", "map-a.pmtiles", "map-b.pmtiles.part"), dir.list()!!.toSet()) + } + + @Test fun `start-up cleaning with nothing recorded empties the directory but for the record`() = runTest { + val dir = tempFolder.newFolder() + val store = MapFileStore(dir) + store.save(MapRecord()) + File(dir, "map-a.pmtiles").writeText("x") + + store.deleteUnlisted(MapRecord()) + + assertEquals(setOf("map.json"), dir.list()!!.toSet()) + } + + @Test fun `cleaning a directory that does not exist yet does nothing`() = runTest { + MapFileStore(File(tempFolder.root, "missing")).deleteUnlisted(record) + } + + @Test fun `new file names never repeat`() { + val store = MapFileStore(tempFolder.newFolder()) + + assertNotEquals(store.newFileName(), store.newFileName()) + assertTrue(store.newFileName().endsWith(".pmtiles")) + } + + @Test fun `a part file sits beside the file it becomes`() { + val dir = tempFolder.newFolder() + val store = MapFileStore(dir) + + assertEquals(File(dir, "map-a.pmtiles.part"), store.partFile("map-a.pmtiles")) + assertEquals(File(dir, "map-a.pmtiles"), store.file("map-a.pmtiles")) + assertFalse(store.file("map-a.pmtiles").exists()) + } +} diff --git a/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/MapRepositoryTest.kt b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/MapRepositoryTest.kt new file mode 100644 index 0000000..fbb0cdb --- /dev/null +++ b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/MapRepositoryTest.kt @@ -0,0 +1,437 @@ +package org.onebusaway.vehicletracker.data.map + +import kotlinx.coroutines.CompletableDeferred +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.coroutines.test.StandardTestDispatcher +import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.UnconfinedTestDispatcher +import kotlinx.coroutines.test.advanceTimeBy +import kotlinx.coroutines.test.runCurrent +import kotlinx.coroutines.test.runTest +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertNotEquals +import org.junit.Assert.assertNull +import org.junit.Assert.assertTrue +import org.junit.Rule +import org.junit.Test +import org.junit.rules.TemporaryFolder +import java.io.File + +/** + * [MapRepository]'s decisions, on virtual time, with the server and the file's host faked and the + * store writing to a real directory. + */ +class MapRepositoryTest { + @get:Rule val tempFolder = TemporaryFolder() + + private val url = "https://maps.example.org/agency.pmtiles" + private val v1 = FileVersion(etag = "\"v1\"") + private val v2 = FileVersion(etag = "\"v2\"") + private var clock = 1_790_000_000L + private val day = CHECK_EVERY_S + + private lateinit var dir: File + private lateinit var store: MapFileStore + private val server = FakeMapServer() + private val fetcher = FakeFetcher() + + private fun TestScope.setUp() { + dir = tempFolder.newFolder("map") + store = MapFileStore(dir, io = StandardTestDispatcher(testScheduler)) + server.now = { testScheduler.currentTime } + } + + /** + * Runs everything due in the next second. The repository works in [TestScope.backgroundScope], + * which advanceUntilIdle does not wait for; retries come later than this, so a test that + * wants one advances the clock itself. + */ + private fun TestScope.settle() { + advanceTimeBy(1_000) + runCurrent() + } + + /** A repository starting up, as at app start, with its first look at the directory done. */ + private fun TestScope.started(): MapRepository = + MapRepository(server, store, fetcher, backgroundScope, now = { clock }).also { settle() } + + private fun TestScope.statesOf(repository: MapRepository): List { + val states = mutableListOf() + backgroundScope.launch(UnconfinedTestDispatcher(testScheduler)) { repository.state.collect { states += it } } + return states + } + + /** A map that has been here since [checkedAt], its file on disk. */ + private suspend fun mapHere(name: String = "map-a.pmtiles", checkedAt: Long = clock, from: String = url): File { + store.save(MapRecord(current = StoredMap(from, name, v1, checkedAt))) + return File(dir, name).apply { writeText("map") } + } + + @Test fun `a map from before is shown at start, and files nothing names are deleted`() = runTest { + setUp() + val map = mapHere() + File(dir, "map-old.pmtiles").writeText("old") + File(dir, "map-x.pmtiles.part").writeText("abandoned") + + val repository = started() + + assertEquals(MapFileState.Ready(map), repository.state.value) + assertEquals(setOf("map.json", "map-a.pmtiles"), dir.list()!!.toSet()) + } + + @Test fun `a recorded map whose file is gone is forgotten`() = runTest { + setUp() + store.save(MapRecord(current = StoredMap(url, "map-a.pmtiles", v1, clock))) + + val repository = started() + + assertEquals(MapFileState.None, repository.state.value) + assertNull(store.load().current) + } + + @Test fun `the first download shows its progress, then the map`() = runTest { + setUp() + val repository = started() + val states = statesOf(repository) + fetcher.steps += fetcher.complete(v1, progress = listOf(25L to 100L, 26L to 100L, 60L to 100L)) + + repository.refresh() + settle() + + val target = fetcher.requests.single().target + assertEquals( + listOf( + MapFileState.None, + MapFileState.Downloading(25, 100), + MapFileState.Downloading(26, 100), + MapFileState.Downloading(60, 100), + MapFileState.Ready(target), + ), + states, + ) + assertEquals(MapRecord(current = StoredMap(url, target.name, v1, clock)), store.load()) + } + + @Test fun `progress is shown once per percent, not once per read`() = runTest { + setUp() + val repository = started() + val states = statesOf(repository) + fetcher.steps += fetcher.complete(v1, progress = listOf(1_000L to 1_000_000L, 2_000L to 1_000_000L, 10_000L to 1_000_000L)) + + repository.refresh() + settle() + + assertEquals(listOf(MapFileState.Downloading(1_000, 1_000_000), MapFileState.Downloading(10_000, 1_000_000)), states.filterIsInstance()) + } + + @Test fun `no map from the server shows the plain map and keeps the file until the next start`() = runTest { + setUp() + val map = mapHere(checkedAt = clock - day) + server.answers += MapServerAnswer.NoMap + val repository = started() + + repository.refresh() + settle() + + assertEquals(MapFileState.None, repository.state.value) + assertEquals(MapRecord(), store.load()) + assertTrue("a map on screen may still be reading it", map.exists()) + + started() + + assertFalse("gone at the next start", map.exists()) + } + + @Test fun `a check within a day asks nobody`() = runTest { + setUp() + mapHere(checkedAt = clock - day + 60) + val repository = started() + + repository.refresh() + settle() + + assertTrue(server.askedAt.isEmpty()) + assertTrue(fetcher.requests.isEmpty()) + } + + @Test fun `after a day the host is asked whether the map changed`() = runTest { + setUp() + val map = mapHere(checkedAt = clock - day) + fetcher.steps += fetcher.unchanged() + val repository = started() + + repository.refresh() + settle() + + val request = fetcher.requests.single() + assertEquals(v1, request.knownVersion) + assertNull(request.partVersion) + assertEquals(clock, store.load().current!!.checkedAtEpochSec) + assertEquals(MapFileState.Ready(map), repository.state.value) + } + + @Test fun `a clock set back makes the check due`() = runTest { + setUp() + mapHere(checkedAt = clock + 3_600) + fetcher.steps += fetcher.unchanged() + val repository = started() + + repository.refresh() + settle() + + assertEquals(1, fetcher.requests.size) + } + + @Test fun `a newer version downloads under a new name, and the old file waits for the next start`() = runTest { + setUp() + val old = mapHere(checkedAt = clock - day) + fetcher.steps += fetcher.complete(v2) + val repository = started() + + repository.refresh() + settle() + + val new = fetcher.requests.single().target + assertNotEquals(old, new) + assertEquals(MapFileState.Ready(new), repository.state.value) + assertEquals(StoredMap(url, new.name, v2, clock), store.load().current) + assertTrue("an open map may be reading it", old.exists()) + + started() + + assertFalse(old.exists()) + assertTrue(new.exists()) + } + + @Test fun `an update downloads without the progress note`() = runTest { + setUp() + mapHere(checkedAt = clock - day) + fetcher.steps += fetcher.complete(v2, progress = listOf(10L to 100L, 90L to 100L)) + val repository = started() + val states = statesOf(repository) + + repository.refresh() + settle() + + assertTrue("states were $states", states.all { it is MapFileState.Ready }) + } + + @Test fun `a new URL from the server downloads a new map`() = runTest { + setUp() + mapHere(checkedAt = clock - day, from = "https://old.example.org/a.pmtiles") + fetcher.steps += fetcher.complete(v2) + val repository = started() + + repository.refresh() + settle() + + val request = fetcher.requests.single() + assertEquals(url, request.url) + assertNull("the old URL's version says nothing about the new one", request.knownVersion) + assertEquals(url, store.load().current!!.url) + } + + @Test fun `one refresh at a time`() = runTest { + setUp() + val repository = started() + val gate = CompletableDeferred() + server.gate = gate + server.answers += MapServerAnswer.NoMap + + repository.refresh() + runCurrent() + repository.refresh() + repository.refresh() + gate.complete(Unit) + settle() + + assertEquals(1, server.askedAt.size) + } + + @Test fun `a refresh after the last one finished runs again`() = runTest { + setUp() + val repository = started() + server.answers += MapServerAnswer.NoMap + server.answers += MapServerAnswer.NoMap + + repository.refresh() + settle() + repository.refresh() + settle() + + assertEquals(2, server.askedAt.size) + } + + @Test fun `failures before the first copy are retried after 5 s, doubling up to 5 min`() = runTest { + setUp() + server.default = MapServerAnswer.Unreachable + val repository = started() + val start = testScheduler.currentTime + + repository.refresh() + advanceTimeBy(25 * 60_000L) + + val gaps = server.askedAt.map { it - start }.zipWithNext { a, b -> b - a }.take(8) + assertEquals(listOf(5_000L, 10_000L, 20_000L, 40_000L, 80_000L, 160_000L, 300_000L, 300_000L), gaps) + assertEquals(MapFileState.Failed(MapFailure.NETWORK), repository.state.value) + } + + @Test fun `with a map here, a failed check waits for the next refresh`() = runTest { + setUp() + val map = mapHere(checkedAt = clock - day) + server.default = MapServerAnswer.Unreachable + val repository = started() + + repository.refresh() + advanceTimeBy(60 * 60_000L) + + assertEquals(1, server.askedAt.size) + assertEquals(MapFileState.Ready(map), repository.state.value) + assertEquals("a network failure never forgets the map", map.name, store.load().current?.fileName) + } + + @Test fun `a refused token stops until the next refresh`() = runTest { + setUp() + server.default = MapServerAnswer.SignedOut + val repository = started() + + repository.refresh() + advanceTimeBy(60 * 60_000L) + + assertEquals(1, server.askedAt.size) + assertEquals(MapFileState.None, repository.state.value) + } + + @Test fun `a broken file is not fetched again within a day, then only if it changed`() = runTest { + setUp() + fetcher.steps += fetcher.fail(MapFailure.INVALID_FILE, version = v1) + val repository = started() + + repository.refresh() + settle() + + assertEquals(MapFileState.Failed(MapFailure.INVALID_FILE), repository.state.value) + assertEquals(RejectedMap(url, v1, clock), store.load().rejected) + + repository.refresh() + settle() + + assertEquals("the same day, the host is not asked again", 1, fetcher.requests.size) + + clock += day + fetcher.steps += fetcher.unchanged() + repository.refresh() + settle() + + assertEquals(2, fetcher.requests.size) + assertEquals(v1, fetcher.requests.last().knownVersion) + assertEquals(clock, store.load().rejected!!.atEpochSec) + assertEquals(MapFileState.Failed(MapFailure.INVALID_FILE), repository.state.value) + } + + @Test fun `a cut-off download carries on from its part file`() = runTest { + setUp() + fetcher.steps += fetcher.fail(MapFailure.NETWORK, afterStarting = v1) + fetcher.steps += fetcher.complete(v1) + val repository = started() + + repository.refresh() + advanceTimeBy(FIRST_RETRY_MS + 1) + + val (first, second) = fetcher.requests + assertNull(first.partVersion) + assertEquals(v1, second.partVersion) + assertEquals(first.part, second.part) + assertEquals(MapFileState.Ready(second.target), repository.state.value) + } + + @Test fun `a download from a URL the server no longer gives is dropped`() = runTest { + setUp() + val oldPart = File(dir, "map-p.pmtiles.part").apply { writeText("partial") } + store.save(MapRecord(pending = PendingDownload("https://old.example.org/a.pmtiles", "map-p.pmtiles", v1))) + fetcher.steps += fetcher.complete(v2) + val repository = started() + + repository.refresh() + settle() + + val request = fetcher.requests.single() + assertNull(request.partVersion) + assertNotEquals(oldPart, request.part) + assertFalse(oldPart.exists()) + } + + // Each try costs the driver whatever the host sends before the app hangs up, and a full phone + // rarely empties itself, so it waits for the driver to come back to the app. + @Test fun `too little space is said so, and tried at the next refresh, not on a timer`() = runTest { + setUp() + fetcher.steps += fetcher.fail(MapFailure.NO_SPACE) + fetcher.steps += fetcher.complete(v1) + val repository = started() + + repository.refresh() + advanceTimeBy(60 * 60_000L) + + assertEquals(MapFileState.Failed(MapFailure.NO_SPACE), repository.state.value) + assertEquals(1, fetcher.requests.size) + + repository.refresh() + settle() + + assertTrue(repository.state.value is MapFileState.Ready) + } + + private inner class FakeMapServer : MapServer { + val answers = ArrayDeque() + var default: MapServerAnswer = MapServerAnswer.File(url) + val askedAt = mutableListOf() + var now: () -> Long = { 0 } + var gate: CompletableDeferred? = null + + override suspend fun ask(): MapServerAnswer { + askedAt += now() + gate?.await() + return answers.removeFirstOrNull() ?: default + } + } + + private class FakeFetcher : MapFileFetcher { + fun interface Step { + suspend fun run(request: FetchRequest, onVersion: suspend (FileVersion) -> Unit, onProgress: (Long, Long) -> Unit): FetchResult + } + + val steps = ArrayDeque() + val requests = mutableListOf() + + override suspend fun fetch( + request: FetchRequest, + onVersion: suspend (FileVersion) -> Unit, + onProgress: (bytes: Long, total: Long) -> Unit, + ): FetchResult { + requests += request + return checkNotNull(steps.removeFirstOrNull()) { "no fetch expected: $request" }.run(request, onVersion, onProgress) + } + + fun complete(version: FileVersion, progress: List> = emptyList()) = Step { request, onVersion, onProgress -> + onVersion(version) + for ((bytes, total) in progress) { + onProgress(bytes, total) + delay(1) + } + request.target.writeText("map") + FetchResult.Complete(version, 3) + } + + fun unchanged() = Step { _, _, _ -> FetchResult.Unchanged } + + fun fail(reason: MapFailure, version: FileVersion? = null, afterStarting: FileVersion? = null) = Step { request, onVersion, _ -> + if (afterStarting != null) { + onVersion(afterStarting) + request.part.writeText("partial") + } + FetchResult.Failed(reason, version ?: afterStarting) + } + } +} diff --git a/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/PmtilesFixtures.kt b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/PmtilesFixtures.kt new file mode 100644 index 0000000..89f6911 --- /dev/null +++ b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/PmtilesFixtures.kt @@ -0,0 +1,25 @@ +package org.onebusaway.vehicletracker.data.map + +import java.nio.ByteBuffer +import java.nio.ByteOrder + +/** + * A PMTiles version 3 file [size] bytes long whose header accounts for every byte: a 10-byte root + * directory, 10 bytes of metadata, no leaf directories and tile data to the end. The tile bytes + * are a counting pattern, so a test can tell a spliced file from a whole one. Not a map MapLibre + * could draw, but everything [headerMatchesLength] checks. + */ +fun pmtiles(size: Int = 4096, tileType: Int = 1): ByteArray { + require(size > HEADER_BYTES + 20) + val bytes = ByteArray(size) { (it % 251).toByte() } + val header = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN) + "PMTiles".toByteArray(Charsets.US_ASCII).forEachIndexed { i, b -> header.put(i, b) } + header.put(7, 3) + val root = HEADER_BYTES.toLong() + header.putLong(8, root).putLong(16, 10) + header.putLong(24, root + 10).putLong(32, 10) + header.putLong(40, root + 20).putLong(48, 0) + header.putLong(56, root + 20).putLong(64, size - root - 20) + header.put(99, tileType.toByte()) + return bytes +} diff --git a/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/RefreshWhenSignedInTest.kt b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/RefreshWhenSignedInTest.kt new file mode 100644 index 0000000..8f435c4 --- /dev/null +++ b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/RefreshWhenSignedInTest.kt @@ -0,0 +1,70 @@ +package org.onebusaway.vehicletracker.data.map + +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.launch +import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.runCurrent +import kotlinx.coroutines.test.runTest +import org.junit.Assert.assertEquals +import org.junit.Test +import org.onebusaway.vehicletracker.data.Session + +class RefreshWhenSignedInTest { + private val signedOut = Session(serverUrl = "https://tracker.example.org", token = null, issuedAtEpochSec = null) + private val signedIn = Session(serverUrl = "https://tracker.example.org", token = "jwt", issuedAtEpochSec = 100L) + private val session = MutableStateFlow(signedOut) + private var refreshes = 0 + + private fun TestScope.startCollecting() { + backgroundScope.launch { refreshWhenSignedIn(session) { refreshes++ } } + runCurrent() + } + + private fun TestScope.emit(next: Session) { + session.value = next + runCurrent() + } + + // How each return to the app refreshes: MainActivity collects anew every time it resumes. + @Test fun `signed in when collection starts refreshes once`() = runTest { + session.value = signedIn + + startCollecting() + + assertEquals(1, refreshes) + } + + @Test fun `signing in refreshes`() = runTest { + startCollecting() + assertEquals(0, refreshes) + + emit(signedIn) + + assertEquals(1, refreshes) + } + + @Test fun `signed out throughout never refreshes`() = runTest { + startCollecting() + + assertEquals(0, refreshes) + } + + @Test fun `a new token while signed in does not refresh again`() = runTest { + session.value = signedIn + startCollecting() + + emit(signedIn.copy(token = "jwt-2", issuedAtEpochSec = 200L)) + + assertEquals(1, refreshes) + } + + @Test fun `signing out and in again refreshes again`() = runTest { + session.value = signedIn + startCollecting() + + emit(signedOut) + emit(signedIn) + + assertEquals(2, refreshes) + } +} From 730e93a51bcd8b7bee1c0bdc972a9a8e75239b6d Mon Sep 17 00:00:00 2001 From: DIVESH PATIL Date: Tue, 6 Oct 2026 15:24:41 +0530 Subject: [PATCH 04/11] feat(android): bundle the street style, icons and Latin label fonts --- .gitignore | 1 + android/app/build.gradle.kts | 2 + android/app/src/main/assets/map/LICENSE.md | 54 +++++++++ .../map/fonts/Noto Sans Regular/0-255.pbf | Bin 0 -> 76044 bytes .../map/fonts/Noto Sans Regular/256-511.pbf | Bin 0 -> 127726 bytes .../map/fonts/Noto Sans Regular/512-767.pbf | Bin 0 -> 94728 bytes .../map/fonts/Noto Sans Regular/768-1023.pbf | Bin 0 -> 77034 bytes .../map/fonts/Noto Sans Regular/7680-7935.pbf | Bin 0 -> 135449 bytes .../map/fonts/Noto Sans Regular/8192-8447.pbf | Bin 0 -> 64220 bytes .../map/fonts/Noto Sans Regular/8448-8703.pbf | Bin 0 -> 82014 bytes android/app/src/main/assets/map/fonts/OFL.txt | 93 ++++++++++++++++ .../app/src/main/assets/map/sprites/dark.json | 1 + .../app/src/main/assets/map/sprites/dark.png | Bin 0 -> 16054 bytes .../src/main/assets/map/sprites/dark@2x.json | 1 + .../src/main/assets/map/sprites/dark@2x.png | Bin 0 -> 28407 bytes .../src/main/assets/map/sprites/light.json | 1 + .../app/src/main/assets/map/sprites/light.png | Bin 0 -> 16174 bytes .../src/main/assets/map/sprites/light@2x.json | 1 + .../src/main/assets/map/sprites/light@2x.png | Bin 0 -> 28852 bytes .../app/src/main/assets/map/style-dark.json | 1 + .../app/src/main/assets/map/style-light.json | 1 + .../vehicletracker/ui/map/MapStyle.kt | 29 +++++ .../vehicletracker/ui/MapAssetsTest.kt | 103 ++++++++++++++++++ .../vehicletracker/ui/MapStyleTest.kt | 34 ++++++ android/map-style/README.md | 39 +++++++ android/map-style/generate.mjs | 99 +++++++++++++++++ android/map-style/package-lock.json | 22 ++++ android/map-style/package.json | 11 ++ 28 files changed, 493 insertions(+) create mode 100644 android/app/src/main/assets/map/LICENSE.md create mode 100644 android/app/src/main/assets/map/fonts/Noto Sans Regular/0-255.pbf create mode 100644 android/app/src/main/assets/map/fonts/Noto Sans Regular/256-511.pbf create mode 100644 android/app/src/main/assets/map/fonts/Noto Sans Regular/512-767.pbf create mode 100644 android/app/src/main/assets/map/fonts/Noto Sans Regular/768-1023.pbf create mode 100644 android/app/src/main/assets/map/fonts/Noto Sans Regular/7680-7935.pbf create mode 100644 android/app/src/main/assets/map/fonts/Noto Sans Regular/8192-8447.pbf create mode 100644 android/app/src/main/assets/map/fonts/Noto Sans Regular/8448-8703.pbf create mode 100644 android/app/src/main/assets/map/fonts/OFL.txt create mode 100644 android/app/src/main/assets/map/sprites/dark.json create mode 100644 android/app/src/main/assets/map/sprites/dark.png create mode 100644 android/app/src/main/assets/map/sprites/dark@2x.json create mode 100644 android/app/src/main/assets/map/sprites/dark@2x.png create mode 100644 android/app/src/main/assets/map/sprites/light.json create mode 100644 android/app/src/main/assets/map/sprites/light.png create mode 100644 android/app/src/main/assets/map/sprites/light@2x.json create mode 100644 android/app/src/main/assets/map/sprites/light@2x.png create mode 100644 android/app/src/main/assets/map/style-dark.json create mode 100644 android/app/src/main/assets/map/style-light.json create mode 100644 android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/map/MapStyle.kt create mode 100644 android/app/src/test/kotlin/org/onebusaway/vehicletracker/ui/MapAssetsTest.kt create mode 100644 android/app/src/test/kotlin/org/onebusaway/vehicletracker/ui/MapStyleTest.kt create mode 100644 android/map-style/README.md create mode 100644 android/map-style/generate.mjs create mode 100644 android/map-style/package-lock.json create mode 100644 android/map-style/package.json diff --git a/.gitignore b/.gitignore index c780cce..017cce4 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,7 @@ android/.gradle/ android/build/ android/app/build/ android/local.properties +android/map-style/node_modules/ # Pinned tool binaries (downloaded by `make css`; see Makefile) .tools/ diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 1c2edc5..a5407c5 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -39,6 +39,8 @@ android { sourceSets["test"].kotlin.srcDir("src/test/kotlin") sourceSets["androidTest"].kotlin.srcDir("src/androidTest/kotlin") testOptions.unitTests.isReturnDefaultValues = true + // MapAssetsTest reads the committed map assets from disk, so a change to them has to rerun it. + testOptions.unitTests.all { it.inputs.dir("src/main/assets/map") } } dependencies { diff --git a/android/app/src/main/assets/map/LICENSE.md b/android/app/src/main/assets/map/LICENSE.md new file mode 100644 index 0000000..8441b08 --- /dev/null +++ b/android/app/src/main/assets/map/LICENSE.md @@ -0,0 +1,54 @@ +# Code Licenses and Attribution + +# The BSD 3-Clause License (BSD-3-Clause) + +Copyright 2019-2023 Protomaps LLC, Kelso Cartography + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# Visual Design + +The visual design of the Protomaps basemap styles was created by Geraldine Sarmiento for Protomaps LLC and released under a Creative Commons 0 (CC0) license. + +https://creativecommons.org/publicdomain/zero/1.0/ + +Certain map styles may also include derivatives of icons designed for Mapzen and released under an MIT license. + +https://github.com/tangrams/icons/blob/master/LICENSE.md + +# Tile Schema + +The organization of layers and tags is adapted from the Tilezen project. + +https://github.com/tilezen/vector-datasource +https://github.com/tilezen/vector-datasource/blob/master/docs/LICENSE-SCHEMA.md + +# The MIT License (MIT) + +Copyright (c) 2015-2018 Mapzen +Copyright (c) 2019 Linux Foundation + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/android/app/src/main/assets/map/fonts/Noto Sans Regular/0-255.pbf b/android/app/src/main/assets/map/fonts/Noto Sans Regular/0-255.pbf new file mode 100644 index 0000000000000000000000000000000000000000..7f65901599b368dc8c1d70d5fed9642148db9836 GIT binary patch literal 76044 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 P{lmlg{r>S&?;rmSJi_4a literal 0 HcmV?d00001 diff --git a/android/app/src/main/assets/map/fonts/Noto Sans Regular/256-511.pbf b/android/app/src/main/assets/map/fonts/Noto Sans Regular/256-511.pbf new file mode 100644 index 0000000000000000000000000000000000000000..f0302889321b2fb9f83e13b5df1a9a6b0b10e6f3 GIT binary patch literal 127726 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 M_tLR%-<9}(0lXC0BLDyZ literal 0 HcmV?d00001 diff --git a/android/app/src/main/assets/map/fonts/Noto Sans Regular/512-767.pbf b/android/app/src/main/assets/map/fonts/Noto Sans Regular/512-767.pbf new file mode 100644 index 0000000000000000000000000000000000000000..5cde89d339b3cf0be2039f376fe20cadc75e533e GIT binary patch literal 94728 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 BY}Eh& literal 0 HcmV?d00001 diff --git a/android/app/src/main/assets/map/fonts/Noto Sans Regular/768-1023.pbf b/android/app/src/main/assets/map/fonts/Noto Sans Regular/768-1023.pbf new file mode 100644 index 0000000000000000000000000000000000000000..a1d0bd9140db88a231ba88991e3d3e2191387448 GIT binary patch literal 77034 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�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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/assets/map/fonts/Noto Sans Regular/8448-8703.pbf b/android/app/src/main/assets/map/fonts/Noto Sans Regular/8448-8703.pbf new file mode 100644 index 0000000000000000000000000000000000000000..c5f0c53a51da8a2c85c71f62cb8dc61ac429ee8b GIT binary patch literal 82014 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/assets/map/sprites/dark@2x.json b/android/app/src/main/assets/map/sprites/dark@2x.json new file mode 100644 index 0000000..01ad28a --- /dev/null +++ b/android/app/src/main/assets/map/sprites/dark@2x.json @@ -0,0 +1 @@ +{"NL:S-road-1char":{"height":42,"pixelRatio":2,"width":42,"x":0,"y":72},"NL:S-road-2char":{"height":42,"pixelRatio":2,"width":44,"x":76,"y":42},"NL:S-road-3char":{"height":42,"pixelRatio":2,"width":50,"x":404,"y":36},"NL:S-road-4char":{"height":42,"pixelRatio":2,"width":58,"x":346,"y":0},"NL:S-road-5char":{"height":42,"pixelRatio":2,"width":64,"x":158,"y":0},"US:I-1char":{"height":42,"pixelRatio":2,"width":40,"x":168,"y":42},"US:I-2char":{"height":42,"pixelRatio":2,"width":46,"x":454,"y":36},"US:I-3char":{"height":42,"pixelRatio":2,"width":60,"x":286,"y":0},"US:I-4char":{"height":42,"pixelRatio":2,"width":64,"x":222,"y":0},"US:I-5char":{"height":42,"pixelRatio":2,"width":68,"x":90,"y":0},"aerodrome":{"height":38,"pixelRatio":2,"width":38,"x":120,"y":78},"animal":{"height":38,"pixelRatio":2,"width":38,"x":42,"y":84},"arrow":{"height":38,"pixelRatio":2,"width":38,"x":0,"y":114},"artwork":{"height":38,"pixelRatio":2,"width":38,"x":80,"y":84},"attraction":{"height":38,"pixelRatio":2,"width":38,"x":208,"y":42},"bar":{"height":38,"pixelRatio":2,"width":38,"x":246,"y":42},"beach":{"height":38,"pixelRatio":2,"width":38,"x":284,"y":42},"beauty":{"height":38,"pixelRatio":2,"width":38,"x":322,"y":42},"bench":{"height":38,"pixelRatio":2,"width":38,"x":360,"y":42},"books":{"height":38,"pixelRatio":2,"width":38,"x":398,"y":78},"building":{"height":34,"pixelRatio":2,"width":34,"x":386,"y":154},"bus_stop":{"height":38,"pixelRatio":2,"width":38,"x":436,"y":78},"cafe":{"height":38,"pixelRatio":2,"width":38,"x":474,"y":78},"capital":{"height":20,"pixelRatio":2,"width":20,"x":420,"y":154},"clothes":{"height":38,"pixelRatio":2,"width":38,"x":208,"y":80},"convenience":{"height":38,"pixelRatio":2,"width":38,"x":158,"y":84},"drinking_water":{"height":38,"pixelRatio":2,"width":38,"x":118,"y":116},"electronics":{"height":38,"pixelRatio":2,"width":38,"x":38,"y":122},"fast_food":{"height":38,"pixelRatio":2,"width":38,"x":0,"y":152},"ferry_terminal":{"height":38,"pixelRatio":2,"width":38,"x":76,"y":122},"forest":{"height":38,"pixelRatio":2,"width":38,"x":246,"y":80},"garden":{"height":38,"pixelRatio":2,"width":38,"x":284,"y":80},"generic_shield-1char":{"height":36,"pixelRatio":2,"width":38,"x":470,"y":0},"generic_shield-2char":{"height":36,"pixelRatio":2,"width":48,"x":120,"y":42},"generic_shield-3char":{"height":36,"pixelRatio":2,"width":66,"x":404,"y":0},"generic_shield-4char":{"height":36,"pixelRatio":2,"width":76,"x":0,"y":36},"generic_shield-5char":{"height":36,"pixelRatio":2,"width":90,"x":0,"y":0},"library":{"height":38,"pixelRatio":2,"width":38,"x":322,"y":80},"marina":{"height":38,"pixelRatio":2,"width":38,"x":360,"y":80},"museum":{"height":38,"pixelRatio":2,"width":38,"x":398,"y":116},"park":{"height":38,"pixelRatio":2,"width":38,"x":436,"y":116},"peak":{"height":38,"pixelRatio":2,"width":38,"x":474,"y":116},"post_office":{"height":38,"pixelRatio":2,"width":38,"x":196,"y":118},"restaurant":{"height":38,"pixelRatio":2,"width":38,"x":156,"y":122},"school":{"height":38,"pixelRatio":2,"width":38,"x":114,"y":154},"stadium":{"height":38,"pixelRatio":2,"width":38,"x":38,"y":160},"supermarket":{"height":38,"pixelRatio":2,"width":38,"x":0,"y":190},"theatre":{"height":38,"pixelRatio":2,"width":38,"x":76,"y":160},"toilets":{"height":38,"pixelRatio":2,"width":38,"x":234,"y":118},"townspot":{"height":20,"pixelRatio":2,"width":20,"x":440,"y":154},"train_station":{"height":38,"pixelRatio":2,"width":38,"x":272,"y":118},"university":{"height":38,"pixelRatio":2,"width":38,"x":310,"y":118},"zoo":{"height":38,"pixelRatio":2,"width":38,"x":348,"y":118}} diff --git a/android/app/src/main/assets/map/sprites/dark@2x.png b/android/app/src/main/assets/map/sprites/dark@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e5212edb9944e7f4474432e078101b91301c5612 GIT binary patch literal 28407 zcmYhhWmuHY`#wCo)Y4s23kcFFT}w)bbR!_BbT=#^phzeJB8?&;-5m;&(%ndxlyvOF z=llD=cwX!tGuO;<+~-_9=Y7A?)_j7G^8g0`fUlyg@Du>({Sd6dFz^5W3Zy>)z`0dL zK~~RqcFpMb+gWY0L0lMykMqu}_Sf0b7iGrLOm7VoVtA@??)LscaH@7Ev0gB`Xs4K8 zVV*)76Pz2jjF5ERI_-x*vW8ctcZ$3l2q3{q_aW-ur-C#f|g!94$h|7Ilc11j++x#M%paT z=6N9{6RRW+vu;|vLM!s9OwpLLaa%DnmZBMsRc<8F^;T2qL=Q5(8KVZsWGJ!QCCHv3 zNZ0b|hS0l$j*4<~kkgiM@0W_#RZ?F{kvG^bQ~5Yb+69;nT`ve6Am$Bqq3vT9IowmUEgp zN_H1ti9i)l6Q5_mIQh_Leg1hIDlUv(yg1Y<8VZb$^vG;&@9|QQCx8}hN51iWL{~Jw zJE>V&hq%Rc zZirywoz=7xL%XDhBo$%cE+uH7i8+DY)u9e8ERlKa8Lh^Ci%#!3 zjAl0>(5t(W^Uyd^c_S~3)O-J3~gPmLm$Y1-U~HFJ!{-yxv-VSg5J z(7e55;y36UYUkzQF|#zTI);cBN8B!Z`Bi@FV`49Ft* zy!c#I4fuqpmzU#D-x>St5ud4YNH+Uapk?K>k?yNq1TjH+I~b&?uPg?%2Ej&b*0zU^ zLw5-C2T4KMR*vlZD?Ro-+-xDv?NFWI$p8qIC( zg{j-etP`W1XfZ$EHHkBcKt&WsZ=b_

Zo04+C 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 KUZ83f{Qm&0f1!{7 literal 0 HcmV?d00001 diff --git a/android/app/src/main/assets/map/sprites/light.json b/android/app/src/main/assets/map/sprites/light.json new file mode 100644 index 0000000..7b4cdee --- /dev/null +++ b/android/app/src/main/assets/map/sprites/light.json @@ -0,0 +1 @@ +{"NL:S-road-1char":{"height":21,"pixelRatio":1,"width":21,"x":0,"y":36},"NL:S-road-2char":{"height":21,"pixelRatio":1,"width":22,"x":38,"y":21},"NL:S-road-3char":{"height":21,"pixelRatio":1,"width":25,"x":202,"y":18},"NL:S-road-4char":{"height":21,"pixelRatio":1,"width":29,"x":173,"y":0},"NL:S-road-5char":{"height":21,"pixelRatio":1,"width":32,"x":79,"y":0},"US:I-1char":{"height":21,"pixelRatio":1,"width":20,"x":84,"y":21},"US:I-2char":{"height":21,"pixelRatio":1,"width":23,"x":227,"y":18},"US:I-3char":{"height":21,"pixelRatio":1,"width":30,"x":143,"y":0},"US:I-4char":{"height":21,"pixelRatio":1,"width":32,"x":111,"y":0},"US:I-5char":{"height":21,"pixelRatio":1,"width":34,"x":45,"y":0},"aerodrome":{"height":19,"pixelRatio":1,"width":19,"x":60,"y":39},"animal":{"height":19,"pixelRatio":1,"width":19,"x":21,"y":42},"arrow":{"height":19,"pixelRatio":1,"width":19,"x":0,"y":57},"artwork":{"height":19,"pixelRatio":1,"width":19,"x":40,"y":42},"attraction":{"height":19,"pixelRatio":1,"width":19,"x":104,"y":21},"bar":{"height":19,"pixelRatio":1,"width":19,"x":123,"y":21},"beach":{"height":19,"pixelRatio":1,"width":19,"x":142,"y":21},"beauty":{"height":19,"pixelRatio":1,"width":19,"x":161,"y":21},"bench":{"height":19,"pixelRatio":1,"width":19,"x":180,"y":21},"books":{"height":19,"pixelRatio":1,"width":19,"x":199,"y":39},"building":{"height":17,"pixelRatio":1,"width":17,"x":193,"y":77},"bus_stop":{"height":19,"pixelRatio":1,"width":19,"x":218,"y":39},"cafe":{"height":19,"pixelRatio":1,"width":19,"x":237,"y":39},"capital":{"height":10,"pixelRatio":1,"width":10,"x":210,"y":77},"clothes":{"height":19,"pixelRatio":1,"width":19,"x":104,"y":40},"convenience":{"height":19,"pixelRatio":1,"width":19,"x":79,"y":42},"drinking_water":{"height":19,"pixelRatio":1,"width":19,"x":59,"y":58},"electronics":{"height":19,"pixelRatio":1,"width":19,"x":19,"y":61},"fast_food":{"height":19,"pixelRatio":1,"width":19,"x":0,"y":76},"ferry_terminal":{"height":19,"pixelRatio":1,"width":19,"x":38,"y":61},"forest":{"height":19,"pixelRatio":1,"width":19,"x":123,"y":40},"garden":{"height":19,"pixelRatio":1,"width":19,"x":142,"y":40},"generic_shield-1char":{"height":18,"pixelRatio":1,"width":19,"x":235,"y":0},"generic_shield-2char":{"height":18,"pixelRatio":1,"width":24,"x":60,"y":21},"generic_shield-3char":{"height":18,"pixelRatio":1,"width":33,"x":202,"y":0},"generic_shield-4char":{"height":18,"pixelRatio":1,"width":38,"x":0,"y":18},"generic_shield-5char":{"height":18,"pixelRatio":1,"width":45,"x":0,"y":0},"library":{"height":19,"pixelRatio":1,"width":19,"x":161,"y":40},"marina":{"height":19,"pixelRatio":1,"width":19,"x":180,"y":40},"museum":{"height":19,"pixelRatio":1,"width":19,"x":199,"y":58},"park":{"height":19,"pixelRatio":1,"width":19,"x":218,"y":58},"peak":{"height":19,"pixelRatio":1,"width":19,"x":237,"y":58},"post_office":{"height":19,"pixelRatio":1,"width":19,"x":98,"y":59},"restaurant":{"height":19,"pixelRatio":1,"width":19,"x":78,"y":61},"school":{"height":19,"pixelRatio":1,"width":19,"x":57,"y":77},"stadium":{"height":19,"pixelRatio":1,"width":19,"x":19,"y":80},"supermarket":{"height":19,"pixelRatio":1,"width":19,"x":0,"y":95},"theatre":{"height":19,"pixelRatio":1,"width":19,"x":38,"y":80},"toilets":{"height":19,"pixelRatio":1,"width":19,"x":117,"y":59},"townspot":{"height":10,"pixelRatio":1,"width":10,"x":220,"y":77},"train_station":{"height":19,"pixelRatio":1,"width":19,"x":136,"y":59},"university":{"height":19,"pixelRatio":1,"width":19,"x":155,"y":59},"zoo":{"height":19,"pixelRatio":1,"width":19,"x":174,"y":59}} diff --git a/android/app/src/main/assets/map/sprites/light.png b/android/app/src/main/assets/map/sprites/light.png new file mode 100644 index 0000000000000000000000000000000000000000..b2b90d9c21bd312e037bf0e74fb43ae6f622d1b3 GIT binary patch literal 16174 zcmXxLbyQW)+de$!(A}LP9fDHQpdbHsEWs83Z0`!-sJek>DuXDctpopRt-ls=HrPx zI#qv?Z`~DzfBgJ22Q`_)Ab( zL&H6%xY+WW#zT~IAclzku#$;;cxY%Sk*9};c3D}O?U47v%*=Ii%C}~Q;*t`Pz+on3 zC8aZ48=HfdrowLN;)`24Iy#is`vCy~ScwFD;#jxkE7J@kpSJJN|KWR@ROIDttQcO@ zX_rI3b^H?I=Wl4Mvs`p-{AVXCE32MGQ7~?ik&?p1dp0;c-194wS$ijj-W8#$H5#?G$b0uu|11xg!f^kTo>=lee!8yh_rSJyo!C#O)Ds<*dy-`B5S z8Bto*)YPtAJw5N3oqLyVM@AIhxdqqom8r@N!RZC`tQ<+h=`jNzVeESCpaB~Yp*f|ZzUxqVP{$? zYl+i*4^Pjv<>)_0Z(Are%cdGD5#>?SP}BTX1gj``K;o@;9b|=mm`I9+fN+0c)r`m`5CC zbL%Y6C?fyN?nQK`@Lx=e$dp{Qch}kDKQZa-!nu26)m}u?26V#2If#{s49vgN`x(DI zHR5Tk@BK|z$jieMpQ5U&IDu7X5WQ; zK5u1ZwY$75x*>3Rbv3!WTO3=}TPI^!y>|Db{#@~=&r1U()5e$tJUBPn;G>P!&&pAb zv`-nSPs6i$d32*}#AcHb!f>8a3TG_~zQM4TRJgM(Z9JfkBgtKtVYtIrm|)eb(#te7jb$N1Rl2ze+ZpvpK7Y6crQu=p@UWbJ4=1c^-Gl}~ zL^Pn@+RKbg%C&oq%5sQ~tDHG}jc7iNnz`;5*^a8hLgLh*=LHQr>j5wwK(x!B$^cm-;aB=o5=^dhU7|@^9 zISr@Xuf+BYHgBbR4qZJ_Zr#Z#^>W*n>CI!Id_g+3l*;^R^SKTy9&2p4jqO*<=;+TS z_O%?n*Xiy4y?utLKzKTstJ+TX(zLf%CdM#IlBY z^{*xia9vwpSV%pAbfGHnyK-*5yf2l`xeZ)kFY_$9zJB0Mxk$TwZ`|(vV zj~I9Y3o{V+r3q2*IzO+Lt&;C3y!0n5u(P(YA*rDN)s9k{V?@|3B{DKH(}<$bkc*S3 zTRdK5%5vrwT->%U%`#Ij(Q<_Rr;@Ss(>w1DX5pJ-RSl!G^FUcvNVv>T7r1@!?x__q z+|K+Rhol)an$}^gR(9>dT)%={ET1-UdK{u42rttaCarv)&L^^Y*F3Nkb$BP4VRg}d z8Nf~4m-myfln$2aZ`}xSRALRtLQs{37AiB(*=igjL8*@~$=7vWQ;Jdl>?HhmXK;M> zqL!$65KdFx=#g3q8V%e7t!^R*Fk(pT8Uh!94E+VXz3p#x@E!e@1;dM_rA{7dUz17x z)GUS9*4f!9BmOiUA({E`6a?e~RcFLDc!;r*)6x<)J$RX*AK%D*ZM34jZ?Lb=?rbK- z6%7>{37th~Q;cC(R`^Qtd6_Q`^lwytc9aoO2m5JMqHswOlA>?v22ZBnLF+I!R)W9` zWORW_J{GL|-+ryG#qgQ;Ij2d-R^M))YT9wdzHVUtgZlD#i!&ws1cT1P3v%lR{v7=L z`z}l03u5vM1xHWsH-T2X7Cvt;dDGw@Z!R(D+n(CY6O1z6z27qSIlaub@p$m)PEUC% z1S|Vy>Q5Pa3LmxQ87(^85N%BD#SV{%p!)3hl7o)yDB9M|7WZ*t6w7~x=R&0=moAbq zME&9I3(t_foDYWUN_w~aDLmmdYKHj<>PEmF9}yUrD6Pp84OUvPua-x+22y@7|QxqrbinIz}>GSK9NkREvT^$Ya3OQnqd6}mauBy90@qNQSg ze6z#|R?n=%%5Klw&u*GNbCcPKXe<%o##4$R8@+%`b0Aep4sS%vd4`QR|M7wyZY)E%uxjYT<9nLOl2Z8;9*h1 ztU&+u9-Uj?DMLtaYGKK=&4oV_mfl4)^n(%(x8GWB(Np9{@XQR8=Ev$oXgm!Nh z*_)EcSaI~~gSQx?ZjbEJc7j%}I7@Ylv|B5h=KJqAM!}g3xPH{7Va^iApNg?E40TH1 z%UR7@Pr-B}W>tMR&7Y9Es|!LZ$(P?W$Kq{%xzjkkp<6GLzA{0Xp%GSbE`IeciLEFp z4_DZ!iGsut$?cemhvM87w)f_$ z%yOPN)HBnQyU2sk$1HJA9FL{947~{pqq3Y?Y9W!4zI6zNv2xhAw1X2nU4@D30yUp3 zSoD{1W%OZ@s!a&Fdd|0-Lp@yeNpa^NiA|N2G?gr4Pv3{|mbY|ldi&ULJ9T@d>V|zM zaPAWiWK>yk>WI7rUh%WJ~LIf&5OEB=xBBkdP*(7PUo_;Qx!QwE~@6oyVZ zp;HBF5dO>PsSliX*kWp!eq6He%W{T07p~998opVD3Zru-dN%C9(QwIbVh-9q)HqeR(_Qq@;zxDM|u}6JhstotM&MiaeO+O|@XlFn_xcSRlFAaqyr+Am+^#%&j5h$Fr8q8PkK6=_w=RPd>qOBgm~8LZyU zHK{pPh8uEK(uDVFDo}e6h1n5Ry+<~Z9jWFDzwJ2MYdCLwELf)@JWh^ubd+ixZUs)`TAv*<+Q%@K5n4v4)67{=rGa$=t5?#h?n4zV?#e?k-t$0}NE$%hP9!^SMF`I=L#xuSSmI|j9h4BTDP&*Fs;qqaQ z>2nYpV~Zo2BKoDqTwZ%&Tn3LPryr8sXG)pNO%`E}Uyrt(-#j`E`3_Al^afz^JQln< zOEOqra))41`tohtds6z7oGu+V-cdFvu{Yb-5KKej#RZQ}TMO_@y(Xe$&@1zTD9M#&x*U#y7tIPt~|V7uTyjG0T`*u+)-om;$aoBm&^uUlsi!*BCuNuIi4XH!eD`K$cezE8X* z-M7>$+m}l{`@FuXUWUt)jZ6QP(th%}&r&gJPMfQJh{#nvliWFgd%~U<*9_gWf6!w3 z(0-No%DTxw{fnVpe>d*2G-hnlF{&H%ZIK(MPkZ`I9QPZhEYpszwN`@>>|e4B{QTK>OaOiIV1~VEm2w^7zZP>*8C#=fMvr{-DLAepmjX;oex#z&p#*X5BovChW248c*Y; z&JuMnzsrhlS#gxk0 zQ$AtC&lgt?2tU4+AgV+=K$`@SIcGmfdUT@$9igYcWEkdd@A}2-^7<+iBXdva|8T^wL40uGN9iBKOnjW7?bH@(sw32Z|NchX8X-$GP#sgy^iSltXtPwFo_!8`&dH+ZObrXR) z@*PTX+fP}BkL!+$grhH_-Z-}p{skOWA5PI0tYZBTP=qoLA8gS0vhR8w{_daghX({M zT7tR{L*eYbCUSatLy_W+rZ%dN=-pzgvXgEz7zNWgmm@9rCC=HauPB(BC8+2qa*m6M zEz@?+>Im1Uvlz%uCi4yWRSoj`W8AU+=@^^plQ`+QHhzhRY-S+=ee#=@sbb9P8r`5v2vd@%UAq@AX3USQi7ip=DBn^ z5!Oq*qigL9K5(#-9~eRhMvfS2GP}kP?L6>0d~zN#yr6m*V=R9{q3=3J0Cij6f%c!} z-~8AZ)drKneEB$eQEzA)0|`aEWx6&32+4Q2WnQAyamsNQhX%ST%@>-vxOV^`A|en? zgiEXL(pmQcQI95dM;!YOr8XPEC=~N~;h`1JDD*c>?Q?7qq%%VF>pf%0T|NF;Msdkh zJvshJBX@u^Znell5KjEk*OZ9?;7rz=uCCT)-JB%imgvmRpXeBdu8d=<)-!FvOe~Jv zXPcYz%?ED|52@B6VaXLNLvy`$m7O}%g>^hoyYXHBxP+^R|5Jrvv#pFA!_dmsxd(V# zk_C$V+g5aEup~B3$$T9bW!dOK7CF7-0Dx1i3Y|z zOU%_4CHi_@jnlIBTQvCx%b$i)&(0A%5&n)hpVmM;fdHCpW!3=rne`4J!df>j*HCb2 z8H2VQmbk8QV`LdCI z>u5=mhI@#F6cp&=qe#?{!yYtw+3>^NNqu+VXW5F|7{Ck>7~0l1L_Fd&l}V50Xxmidul{-f51Z! zkng3P=)nWgSw~uWMjR z0nBjr2qS$ZYb&D&uF%^&$5;CV9Fs)W0MV%D@DAr1ZO`DdITF#&&14WZKfD$Z>8So7 z_7J8FU+@B&EZ13?QOf&YkJd*JN+pIl5H2z`9Wag_-;(=!pA#ICXz0*OEure@ zw;yH7cq%EZPpN=oD~;MecX_Z(3bq0i*uY3$;~D$s?;C!406Z|alI=RY>UbkDf7(Ec zrEg_RWO5-VM1%z!sQ>L$blKqCmn9R|NGGDgL5XnNII`K)hTzPLu1N#i5$Cw;yM==- zM{j8yZ475H!G}snERj+MODX7=K-wI~$!CXMV;|mpgZz4Uiv(bI!&|b|%0dTJAfAFw ztt&)DN>pu4^&~5i7_jFO3ren=q z`)^Bz)SWe685D>ZID^hK=?{TohS+`BpP@#Qcrn5MEt%z~T=T0gG|q150si|&#_rE0 z@Y<{y;=eP-MrL0o)6Gl0#Pw@nfn>chI`7BT-~F~exF|i;l(sJG@k3ik<62vdZrMT( zq%*db6cg>@{<||PUh`6g_TTzwk}ce;fSRbBA+UJ6; z8n&}-1df|s1p5o)xPeqLIj6+x#|jS}JIX|)Pc)W?pLy=T&A`#u6Se(7I+jo^=;7*fo(&2js6H7odMpZp20{PI{mbpTeliSPypc-ms zdXi>v?fm>m!Kq(z%54GTk2HJKLd5YGHvCZF5-EdtqG@_)CHWaLML@;r-ueFg{TY?7 z#;66YCbo=PmYoMi9}&lJriz-CuTM4$2vHQF||;c=*=zW_MXz^mqhzdkyC`#j?V;y0Gr%5G1wmL)l50n35=GP^cgl&{*|C1Qg2YDM z^YR>OQ~E+h{iTo>Uw;%GksiuWIpOxTQP0s=y%+e9Dpp6);G}xSz+A?d~I9I~eZbc)XPb9DtOS%}=0DZ_~!kh*g^-h`+94NlzFI z-h-&1uz!b+3TnIGvdaDK4z_pCD$qEhwB7Xtv@NLWdgc;IDEno6U7Uw+_&O?MbeydJ zqPj-a&`slqw)i+-+!$Ra-x%C$oi=nXs=@rfavGn;`1KI>Ac{eKKKiKUxGgY^l=|6X ztmnOBjKj7&4i^cdLlK!ZO1h@^S^jZ1_%qUlh z%7>*-D{%87e73LcL~JPBuA)<_@uydA+25DVqx&Ei-^}0vseEi%Z*r~3T10~!AJQ_o#RDe0cj;Sb5ZQjtLc`-&wQb)k-y zxVaVtw&q6;X#0ULL(cnc?+{~V-1~(PGZ*N)6WK>|bMs&*KDM?0j3Ey%uWOV+8Ui0O zqCd?C5dmDLH}&*K0<$BVv)gDS-o6`F;W|Wj9r6-bv(j1xMV=GoS`Oa5%`fiC!@Lb3 zfhslHz8u|I6S(TI7$<x}UbR^Kfr$^Yp8e^1(Hatt|@aCV_iuGYzUx!p~ULEFi zhEM|2eT(=T0u-;qPELU=3Brk48hF9eU9PEBgbEb1j@t@_eKO}>qO3%Utj_^1_eOA& zarY)(?!~?`KzA@>(ZG+PL*HZ)^^>mie~sugDq>TTshL^rf2ZAxS9&HAcUM;X(-nlM zt?V(f63`5RtU)ZO{1 z;Rxf|>NvM1)P9z^1lH8x3~mK;zX=N( z>gHu+>}M%mAvFuTItukXW7<+Q5G?K-lbei4NUJ&#-q6kUz99P>Q-NvdyF<)43vmj- z5!pLCn@Q6``6qSJqG9xntm~X4Q>96uW7)V>_CUkZ=Z_f$fg`iu-O6Z4vJiNW@6#U+ z{~F0m@C81d(L@SWyPl#9tvP9Lose{oHdGAVya?T6p8BHKkJ=Tw!so$KpU}d#x~`ob zlC4G@dM!YluuIUww7>b}L^c^dr^?O5l+jqe;(ohbn4-u`ziqi&sD(yWP?T+xc)C}R zH!Og-l`x#F^q&u zswI^QIe>JKJ@ zYx<+^O>I5I^mLY`=FF#?TH(z?woBPC&)g>qgKD8OuC%go_sZ=n z|0d#trDDVQW%QroyP~DbhY63SR3E2p}at466J%2Q~E&`$u?a@Cw-7)JS` zeM^;C7*H3u#4g79et-iCopdMso8F&>2HAU4ZXv~dzjQ_$eI9iI zUwGox{{fg$`f^q!??;pnj80v;$cw9_yF6ulISf`tznsFO_Q13A?S`oP!(ajc&ZpUH z1Jp3e?7>|r6c9T=zl~3|G(h&!=&5O%{hf`=*GHa~lm@fJ+=rnZiRz!lx?v9IP*Lrz zm$!~VxC3Q%hzPGY_On;rlw24@0;BGsFjgy!W<1y41IU7PA1X3?~hD{f3qgAY&4ply)Kjx;IqJ?*;) zgI2ISaISSKuy0g z)cNZ6pjl_;+p1R^&`;6IpI)5?!0Yfs_j^pZ?u7o~fA2liXaRcsuf(<6Ei7Qa)bN#} znA-kA@x_YSGNk(A?;Sj-d#HWMb_~rtM$SD8t2Y85gt&upE*}k)+mCG+jxlzfh};XB zJznV@6kuaQ#!_UC?s_5oj!x097({Y&$54iPSMLLvLGE`3{XoTUb4WWj!31hd3td88 zrrO`W(Ncq%9*3=nsn5=R2C}?BKWy!{Qus&dlP`q-fPDi!W))ZXWWXSv^P&gHG$=+g zsXkn*s2qM%;maSOk0PPm3M|9)rgD0{33N8(ZJ=h5}_C$7n-VS}X{1?phww_%S>- z>NXT6BlYt9--Zur6iGH0&!Op_;6d|*{7KguzK?G*DXSB{-WxfFnfEiE^--|{laNd| z{X|`P^L*q-GIk!!5~f&JK`XA$Vo$Q7;8^N|0NpX%rKWZjFK7#gmj}~3P|(>$ee5N0 zNo}HDVsNj2BK8)x!Jz|S$-Y(}>X7u?w#CqVie6~sqi=b&A!vWYZnp!-0^e~Nfg1=eTWPO`B6$LUGNSJKfpX+K*wCO{>Pd3=McqKj1hkAC?;01D52u%^9oNwoM5Hn!{Y!Qp}? zb0S<-2xM|u^3lRh;E@cH5HCuz+H;UkvT64T^N9oSZ=g^Jty;e25aso&!dYlp3Jh zsLfagpSo_gg=klC`s<#gd>jfp{roau9~4^ zD+biR|B;>~j&WmS8(#L1+2*~`uOSCRB^D-Y_M!k54er9+jW~SVkls$E!7G#A6crjs zvyyC84j5RHDbPQ8!2#1vp)MiCnBkI>za_OCiglZ>)1shIAZSi?G8n1-$3gWl=?cIo ztnXi-b4fCnp1;=n=0pl$Cj7>`2ItZUX}nF~69~2)MnYaT!+w%+hkfm%bi=tOXKlat z>_4fmo>SnlREEMnRL;`sHo;J?NI#} zy(0K^^{1=1QIjNWfRT4dKTQwnhlS}$2x)$5cGe{Vb)`YQkZmQWuWBGV1W7Kl9?@Cy zv3kJ~ZiKuJu8#6a#E={VEW5RW5aHj8^*XQ8Dqct4U;wnBsG02_bREC-xFG0W{y`Pe zZI@Z@a~-yiOfC<*M@7v^ix0H9(TJ#S$&x{=FkhjqKb1W(BtV z_nQNQtNh3MuN?%<_V0fsIHKa1oVy~ph*weKnbK6)bG094dG%~K3)G5tTWY+6!oT>ome(rV;ho-ho4z6uZ*3)|BQmc}W`yqy zct{oZ`bQnc1E@#095BC9Ap=25pLeygeuj;2}g>@2O_E{qGLQ+gZ34q|LautIT>qAshV7BN- zdAdx+@v8al+XNbqpK~(jCAi0yN~Fy=4-|=zlS>+fl)F;+38n2x?&j??r<9`Jc_%fi z?|HlBvns0*)&I6R}d+$=Bc zqn#r1nsAY+QgR{hH#+WmmMqW)#`gcCKY?!qEPnmC=S1`ufh6FtA2qkzKI*+@8>J%Q z62};g*-0AUH<4JuLT@gUufkQhQIsVXT#Pu%strgbB6cWNg}!sqBSps8n3AS07SRLc zJxOgMRI4R&R0yJl@XD4w6aGsHu>a^x#jh6j$Ur2RF;(MiQ7X~LQ@*MCk~uSx(Dem+Po#PhNS5+?C(8)XV#2S znG)9NX_5F%8@cef#So>vl37>Ro~9zjQ?ly0Iy`d1^=|FQaW7N&KiYZwAMG3?%zv2M z8NQ&w(V=C^f13_Hsj3ot!H)Jns+G|{=a0zY+d?FZ>n10@nDq8lXwtU`DHS*Oojlyfc0d#yN0^5 z#3_ETktqSz|10%J(U$~2`$my)9LlzE^m6`0Rg;xst1mz8S<1Gk?0@3p-pGv$$3Bjo3IxSLdXqa3HZHIcJHR{TL})DL)0A z%Wj%mHg_U(lFsLGd?Hy5g_^I@Jox1wCD=A>#x1p7*jX=<#3Ys_m?LH#2Htt46NdE& z=?$p9mbx6LV8O8X@WT?Gn``OBj_6}1_j(q-Ji+O5UDa00LqvyRP zN28pyT+_=c;ius2X?(Zi zxQGC2KF^ZuiHNM7^H*5OQ6tR8_9G*RqmyND4QyNcMG}zGoqLbzYOtMNHsI`JwJYfAmZFO>4O!{2chX zuoE4jA+xbp1HcPponraVm-_aMBcf`gN;hY{FbHUhq~a`5imhj*eil}rNN{1pfe=ZD z@H0dL4Ld>=Morffj)T^z3N(0*NJ5}o6F&B@F@eK}5eB$SgsDXB2216dl$JCZo7I*k z3E!7T)+LDJ8B$CJZuUV(pZiJ^fk%cHy)9?ePlr>vwxQ-3#I+J8QL=C7{4t zKlTkW{Ox_-Gw3ZCfce4!*vY`wm)dfgawLbKVff`p!MMdssliwFd%xIy%Zuvd(7@qB zQD*4Z7bGAvIYJ??5ECpWYZ&R#nGyLWo>B&g64w{Y%g}}oRY&!?-w_qFrSyBk`9e*_ zQahU6#t|d)IwJFyNp%2l6=BK?37^sk-S{PAbtl$IqKp*k;Vn z_6)jLLGJNNqd&{GZ6~o}(q{b}{1XJMVgPD>2>8ox9wqTIym-~j846-$&C{__0muE! z^(2!l~g1eHs{_)?l6l0ho7Qz!g!VZG_J;j%Fc96o#wAu@udCg>ro^hMu?ayFV z<_a=p1U_>I6)K0*Xwpwg#UOfK4=Yhm@HlnG>Vp{#sc$Zluj`@-cA9@FK3z*S%Mncj zL;?W(*CMr#05mZ0-ME3YxE3I~sRVD6LJu;#ZsXS1aN*82&pD!AFJokC>^=LD>UJZq z>Qw=(G0I2?^(#Ru0L~`%+&E+`R4pt-F=+PBo>1;@67ZaJj*AmewV6ux?CR`WHe{ha zo0`9E6Q!;cdNhs{5Fy8O%hzIOg`JT~)54KP{{S|H&L@J4_sJLT-RuaEuycWOJvPK; zdt`;9=V0?clyElpLh15QvfJKz=YBE zO%jz`HC@2XmD`ODxy;wZ1trKE+`-^%AZnWbXNnyZW^h%-r2lEQV4C~&i#ZbofY3sh z{LglO5%*$yh|Le@(tLMr;6yJ9#r1!g0$`^paW}Yo`R^-}lvSfyQ5U~_Mv(gbCBVMx zShhV5Q2)1jLTy+dvNrbW0VvcVamfO(xFj=FOUw)EEQesfKM{epx|Q2i%AY~J(D#g` z`x_dZWWNN_XYD}S5(+aLm+oY3MAm^a|ErPe~Epx79D@h6!tC6+Fi!}oD!uS;tUJoB#ZaMZF9@*tRndJ@4(%*S9ITQl z2G}~sA2szBNo}+KraJQ{wcT5!dhy}&fnm{ArLbU%{1S^C$Ogd1GEyzu3RD)8V9zrp zHP8=E@ixhtbe}!`nm7^FH|cT306yNCZ+MwyzXEMCihtyD6@4tChOgg7iA;K~A2Kww9#bIQ=)&nf94hkD$6} ziLCVn@YH!I;CBSyAuSa?r|^O|G2tonY95U-Kj%0|0|91wI+$TwU{x0*6RARK`U3okD`1M z|D2C(^PWFO5W1Z4?X@0BQ%Q898<>0z^Z$BNmw^`OQCQ=v%L{s8NX2jKG2vF)Y6c`I zpLHH6H|X7|h|_(4`FZs<|7VBkoTf`O#6Wo^xshiJz8EpD3K#opsoFyke4u|8@;wS_ zrdxReY!w2+i#QxLes88^0_au!@f^f{t_TXkDXoTIxFUUqgW)Q7-n+%nI9*~WIzPU& z+)l}vkk+LMCpEN#Ram5FN51%h1k4lWHR&mpOyHhaduAi@r9P!YW5BT>3uJ9|FIq*C zj+$|H#iOI{TouYp9DirNrBTAQ=IgX5{mqWiit}6z`km^P)RoJfDqo&S?X3=qy71gr z7^cA{GBgFGWtYtNe`4Yus!auC}u6)SEe+4|0 z_B83_AFX2VD&(&SuiOw|&4cs4OzwgGbNPIasZeZ=C=U_3q^JO;h-SafbKbwAUY&Ap z>=WR>5nZOE+`^N5wtEu`L}@`V{pZnHG+5b`x^De`v@7JAK0e$twa04WxK(XUVd9LJ z=V}l+^AXnw9$L@%OkYAwgm9_%v``AmkP*0;Azf$qh0QttG+c}~KCy1H-qif{y659V zyDU_Nh9WZf8M$v%1|X^0o=Yc(o&jXLXMD?bk)#Ok__^uWS{6E|*`;J0vWw6*SVbv_ zVA%}HnecQc*DcnCX5BbTm^n*6+T*@W{P?Od$^TY{(C-<%Bay`w)=m*6NPH1WHWz1k2eTAhJ)uw^)3Yx8tD^7zo_>2mOWw$W^OqCEgf=C|#?TeJSXKY#u_ za?#S#hJ8u@a=6|XM^Ye{c8k|>Mi^sL#{MR(_#^%IB>xm{#s=}bn~^7N?FQ!^-^vws zyMIk7kyHX7a8_0VAO1DE2=V#cUzZFMKj~GC&a3Zem|*{u6c@kGTX7Gqs8!w4r>obr zjj38;=Hn~c@R(VyD!Y&{`ApC!{xbf#ZgyDd!A*1q+TcCMV;qCrNN;a&&wSNTnvhIm z%T0HU$w1;$P)Y{IKS%)kt5@AJE}1h)er@gPZN40W44>sqvuX%x4(bJRlQ1ijM2EKZ z;z~A4E#Jrlmau(~;ci10c(cA()aGBgB7Sfa98#7gvmil&_tM6pv|qv5eyIh2@RGyF zeEnk2IUS?*uX()a@_d@W&hq2K=E%s1?CdoKW=~b9Qzb*Rt()#@O@8zJ+wjG`#_rF< zhv!fzv1EJ+TVjlgcSLiUU8LfeR{Yi|V}}qFOCh-OJ1Q$9nVfPu7O@aNy-=;?7nI-| z`Kke|_V8hS&^0I@z3qARv-O;7v!}EI9;C)W^rtfAJKW3+qvZ?Wfs^8bcHxsEjIEbCZi3Rs=1lp<)sK#fxUWC5Qm+(1fI_2KK`;_5c{*3q#cay-%cmRg_f-iHrQOL1 zW@b%^QMo|~z=vb2%^#JRXm^_50dxgCGAibiY&qtlerCYFt-%Q!@YF4P>VzS|GDO^# zMM=Ub4uuzd2Jc7a<}?lc?&R-U?`-jBeaf(59f4c{ayVFkz+l}nO5?K;S3PO@Pu;s6 z?FYK4fpt zC?xQ=mliCw>owRh%ZZCI>7dMJ$rG+zy7UQnz1^Dg<24&DBbJRoG0-3CL{J1Y~BTegz_MI4cl+a-K!C=z|_> ztekK2QQpK)eQQ0#1Fcvx-o2MqvG0g(s#-a&U#vowKeN=|4)mGyb+JCheIL8_nw9T) z`QheMW}wpC@d5r(w2&({@0_arTUvDm&Ku7mLdx zrnw-Q)eRYUbK{J!vM6bjwri5YS?O{JNPJV@(_nH|$b+9J;dZT)@8$C!`^tikYzpT4 zVmMKy>3`4JeYYqw)g%I$54^3VNUc;?n>;=oTd)@eR=qgzuna%O=WSFkxaK*(dKPh} zUD^*x=IqlTS=C~Zi*_pPX8_bOh;l;21nB7DT&{=8j@f1J=DNEl6(bzNch%k=>Dw0r zFzxFn1Pe;`;RURx&%KzJsSS4NJ5D0qGJjEYre5VIXoHUdHFpKzR-wiDy zUOP%NSo&)d-!lE>XX`g*JKGRI1qB;%>vgtMgAnTaZ__Xphj*vi;)%xhHTw~Q=HxM=#oi;4 z-g20UP;7tjvt2^BMRgO{E*_sl?OC@#{5|~FB$b6`&`$|F1bjj|p(%P%~iWq=c zpe2?fu3L|b`m+(^^zUu~*9bCN?6?*-CX8Z=0kGy`j2o`JOy4Nz^~uwczMma(iA}>; z^qGbKt*1$%&idmy<5D_Mewb%9k94^MNliEzwve$wm~sroNU^k9qxM!%4FTE2DH+Qf z2YcAFQ@baQVGR)4CqV#S^Ppqe1&HOPp@YIEmZHOPZN$LFBYkZ3?tW0h))YZrGhRKx zB^f!07-g zZKio}Y=P*H4E^^)SkHGWRqTq}tV4evEkAgEME!#XmON#>*xo#;hg~(|Vjn)P;S^N2 zT5D$J&5>jzz?hMr&fec)0-8KpHJ39JLq_yteK)?xXqiyP(r^qr7hI1eUzy1#t`)Re|gnf z;`MV-5{&>`&*utg{v>;~KOv!V;FQ;Le3)7uq>9hH?%8Oq=zRCA_KqE9Q|=~fo+k~6 z)P10g&up?j-Jka=mb6iREhs6;QtDjtWr7_nJNTW10TV`9-h z^mGyy-VtXcpbsKKs2RoFXS>J%SH%3uoNd#R-dJ?8aKjiE>jAG&<+vRQ@YqTW0NBrM z>_5v2nMe7gJ8mXaY2_5T?0oFUUwn8kPfjt{QT$(sD)?98h+}{jmcy)o!ZkaRyaRXo zxq+UUr~DDw9_BJJfGn-RaJYpDW$*Krt4(?-1Xsk#IbnV^SAAYH!GB|UW%&YBTX}?7ey}-Q+r=SEF-`OzfIa{D zfWr+qLpNRVqFkynZW{(pJ@>l~w&5 literal 0 HcmV?d00001 diff --git a/android/app/src/main/assets/map/sprites/light@2x.json b/android/app/src/main/assets/map/sprites/light@2x.json new file mode 100644 index 0000000..01ad28a --- /dev/null +++ b/android/app/src/main/assets/map/sprites/light@2x.json @@ -0,0 +1 @@ +{"NL:S-road-1char":{"height":42,"pixelRatio":2,"width":42,"x":0,"y":72},"NL:S-road-2char":{"height":42,"pixelRatio":2,"width":44,"x":76,"y":42},"NL:S-road-3char":{"height":42,"pixelRatio":2,"width":50,"x":404,"y":36},"NL:S-road-4char":{"height":42,"pixelRatio":2,"width":58,"x":346,"y":0},"NL:S-road-5char":{"height":42,"pixelRatio":2,"width":64,"x":158,"y":0},"US:I-1char":{"height":42,"pixelRatio":2,"width":40,"x":168,"y":42},"US:I-2char":{"height":42,"pixelRatio":2,"width":46,"x":454,"y":36},"US:I-3char":{"height":42,"pixelRatio":2,"width":60,"x":286,"y":0},"US:I-4char":{"height":42,"pixelRatio":2,"width":64,"x":222,"y":0},"US:I-5char":{"height":42,"pixelRatio":2,"width":68,"x":90,"y":0},"aerodrome":{"height":38,"pixelRatio":2,"width":38,"x":120,"y":78},"animal":{"height":38,"pixelRatio":2,"width":38,"x":42,"y":84},"arrow":{"height":38,"pixelRatio":2,"width":38,"x":0,"y":114},"artwork":{"height":38,"pixelRatio":2,"width":38,"x":80,"y":84},"attraction":{"height":38,"pixelRatio":2,"width":38,"x":208,"y":42},"bar":{"height":38,"pixelRatio":2,"width":38,"x":246,"y":42},"beach":{"height":38,"pixelRatio":2,"width":38,"x":284,"y":42},"beauty":{"height":38,"pixelRatio":2,"width":38,"x":322,"y":42},"bench":{"height":38,"pixelRatio":2,"width":38,"x":360,"y":42},"books":{"height":38,"pixelRatio":2,"width":38,"x":398,"y":78},"building":{"height":34,"pixelRatio":2,"width":34,"x":386,"y":154},"bus_stop":{"height":38,"pixelRatio":2,"width":38,"x":436,"y":78},"cafe":{"height":38,"pixelRatio":2,"width":38,"x":474,"y":78},"capital":{"height":20,"pixelRatio":2,"width":20,"x":420,"y":154},"clothes":{"height":38,"pixelRatio":2,"width":38,"x":208,"y":80},"convenience":{"height":38,"pixelRatio":2,"width":38,"x":158,"y":84},"drinking_water":{"height":38,"pixelRatio":2,"width":38,"x":118,"y":116},"electronics":{"height":38,"pixelRatio":2,"width":38,"x":38,"y":122},"fast_food":{"height":38,"pixelRatio":2,"width":38,"x":0,"y":152},"ferry_terminal":{"height":38,"pixelRatio":2,"width":38,"x":76,"y":122},"forest":{"height":38,"pixelRatio":2,"width":38,"x":246,"y":80},"garden":{"height":38,"pixelRatio":2,"width":38,"x":284,"y":80},"generic_shield-1char":{"height":36,"pixelRatio":2,"width":38,"x":470,"y":0},"generic_shield-2char":{"height":36,"pixelRatio":2,"width":48,"x":120,"y":42},"generic_shield-3char":{"height":36,"pixelRatio":2,"width":66,"x":404,"y":0},"generic_shield-4char":{"height":36,"pixelRatio":2,"width":76,"x":0,"y":36},"generic_shield-5char":{"height":36,"pixelRatio":2,"width":90,"x":0,"y":0},"library":{"height":38,"pixelRatio":2,"width":38,"x":322,"y":80},"marina":{"height":38,"pixelRatio":2,"width":38,"x":360,"y":80},"museum":{"height":38,"pixelRatio":2,"width":38,"x":398,"y":116},"park":{"height":38,"pixelRatio":2,"width":38,"x":436,"y":116},"peak":{"height":38,"pixelRatio":2,"width":38,"x":474,"y":116},"post_office":{"height":38,"pixelRatio":2,"width":38,"x":196,"y":118},"restaurant":{"height":38,"pixelRatio":2,"width":38,"x":156,"y":122},"school":{"height":38,"pixelRatio":2,"width":38,"x":114,"y":154},"stadium":{"height":38,"pixelRatio":2,"width":38,"x":38,"y":160},"supermarket":{"height":38,"pixelRatio":2,"width":38,"x":0,"y":190},"theatre":{"height":38,"pixelRatio":2,"width":38,"x":76,"y":160},"toilets":{"height":38,"pixelRatio":2,"width":38,"x":234,"y":118},"townspot":{"height":20,"pixelRatio":2,"width":20,"x":440,"y":154},"train_station":{"height":38,"pixelRatio":2,"width":38,"x":272,"y":118},"university":{"height":38,"pixelRatio":2,"width":38,"x":310,"y":118},"zoo":{"height":38,"pixelRatio":2,"width":38,"x":348,"y":118}} diff --git a/android/app/src/main/assets/map/sprites/light@2x.png b/android/app/src/main/assets/map/sprites/light@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6765ac7c2b832c6d5b38f47b8f6ddf72e64d573 GIT binary patch literal 28852 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/assets/map/style-dark.json b/android/app/src/main/assets/map/style-dark.json new file mode 100644 index 0000000..1ff2718 --- /dev/null +++ b/android/app/src/main/assets/map/style-dark.json @@ -0,0 +1 @@ +{"version":8,"glyphs":"asset://map/fonts/{fontstack}/{range}.pbf","sprite":"asset://map/sprites/dark","sources":{"protomaps":{"type":"vector","url":"pmtiles://file://__MAP_FILE__","attribution":"© OpenStreetMap contributors"}},"layers":[{"id":"background","type":"background","paint":{"background-color":"#34373d"}},{"id":"earth","type":"fill","filter":["==","$type","Polygon"],"source":"protomaps","source-layer":"earth","paint":{"fill-color":"#1f1f1f"}},{"id":"landcover","type":"fill","source":"protomaps","source-layer":"landcover","paint":{"fill-color":["match",["get","kind"],"grassland","rgba(30, 41, 31, 1)","barren","rgba(38, 38, 36, 1)","urban_area","rgba(28, 28, 28, 1)","farmland","rgba(31, 36, 32, 1)","glacier","rgba(43, 43, 43, 1)","scrub","rgba(34, 36, 30, 1)","rgba(28, 41, 37, 1)"],"fill-opacity":["interpolate",["linear"],["zoom"],5,1,7,0]}},{"id":"landuse_park","type":"fill","source":"protomaps","source-layer":"landuse","filter":["in","kind","national_park","park","cemetery","protected_area","nature_reserve","forest","golf_course","wood","scrub","grassland","grass","glacier","sand","military","naval_base","airfield"],"paint":{"fill-opacity":["interpolate",["linear"],["zoom"],6,0,11,1],"fill-color":["case",["in",["get","kind"],["literal",["national_park","park","cemetery","protected_area","nature_reserve","forest","golf_course"]]],"#192a24",["==",["get","kind"],"wood"],"#202121",["in",["get","kind"],["literal",["scrub","grassland","grass"]]],"#222323",["==",["get","kind"],"glacier"],"#1c1c1c",["==",["get","kind"],"sand"],"#212123",["in",["get","kind"],["literal",["military","naval_base","airfield"]]],"#222323","#1f1f1f"]}},{"id":"landuse_urban_green","type":"fill","source":"protomaps","source-layer":"landuse","filter":["in","kind","allotments","village_green","playground"],"paint":{"fill-color":"#192a24","fill-opacity":0.7}},{"id":"landuse_hospital","type":"fill","source":"protomaps","source-layer":"landuse","filter":["==","kind","hospital"],"paint":{"fill-color":"#252424"}},{"id":"landuse_industrial","type":"fill","source":"protomaps","source-layer":"landuse","filter":["==","kind","industrial"],"paint":{"fill-color":"#222222"}},{"id":"landuse_school","type":"fill","source":"protomaps","source-layer":"landuse","filter":["in","kind","school","university","college"],"paint":{"fill-color":"#262323"}},{"id":"landuse_beach","type":"fill","source":"protomaps","source-layer":"landuse","filter":["in","kind","beach"],"paint":{"fill-color":"#28282a"}},{"id":"landuse_zoo","type":"fill","source":"protomaps","source-layer":"landuse","filter":["in","kind","zoo"],"paint":{"fill-color":"#222323"}},{"id":"landuse_aerodrome","type":"fill","source":"protomaps","source-layer":"landuse","filter":["in","kind","aerodrome"],"paint":{"fill-color":"#1e1e1e"}},{"id":"roads_runway","type":"line","source":"protomaps","source-layer":"roads","filter":["==","kind_detail","runway"],"paint":{"line-color":"#333333","line-width":["interpolate",["exponential",1.6],["zoom"],10,0,12,4,18,30]}},{"id":"roads_taxiway","type":"line","source":"protomaps","source-layer":"roads","minzoom":13,"filter":["==","kind_detail","taxiway"],"paint":{"line-color":"#333333","line-width":["interpolate",["exponential",1.6],["zoom"],13,0,13.5,1,15,6]}},{"id":"landuse_runway","type":"fill","source":"protomaps","source-layer":"landuse","filter":["any",["in","kind","runway","taxiway"]],"paint":{"fill-color":"#333333"}},{"id":"water","type":"fill","filter":["==","$type","Polygon"],"source":"protomaps","source-layer":"water","paint":{"fill-color":"#31353f"}},{"id":"water_stream","type":"line","source":"protomaps","source-layer":"water","minzoom":14,"filter":["in","kind","stream"],"paint":{"line-color":"#31353f","line-width":0.5}},{"id":"water_river","type":"line","source":"protomaps","source-layer":"water","minzoom":9,"filter":["in","kind","river"],"paint":{"line-color":"#31353f","line-width":["interpolate",["exponential",1.6],["zoom"],9,0,9.5,1,18,12]}},{"id":"landuse_pedestrian","type":"fill","source":"protomaps","source-layer":"landuse","filter":["in","kind","pedestrian","dam"],"paint":{"fill-color":"#1e1e1e"}},{"id":"landuse_pier","type":"fill","source":"protomaps","source-layer":"landuse","filter":["==","kind","pier"],"paint":{"fill-color":"#333333"}},{"id":"roads_tunnels_other_casing","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_tunnel"],["in","kind","other","path"]],"paint":{"line-color":"#141414","line-gap-width":["interpolate",["exponential",1.6],["zoom"],14,0,20,7]}},{"id":"roads_tunnels_minor_casing","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_tunnel"],["==","kind","minor_road"]],"paint":{"line-color":"#141414","line-dasharray":[3,2],"line-gap-width":["interpolate",["exponential",1.6],["zoom"],11,0,12.5,0.5,15,2,18,11],"line-width":["interpolate",["exponential",1.6],["zoom"],12,0,12.5,1]}},{"id":"roads_tunnels_link_casing","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_tunnel"],["has","is_link"]],"paint":{"line-color":"#141414","line-dasharray":[3,2],"line-gap-width":["interpolate",["exponential",1.6],["zoom"],13,0,13.5,1,18,11],"line-width":["interpolate",["exponential",1.6],["zoom"],12,0,12.5,1]}},{"id":"roads_tunnels_major_casing","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_tunnel"],["!has","is_bridge"],["==","kind","major_road"]],"paint":{"line-color":"#141414","line-dasharray":[3,2],"line-gap-width":["interpolate",["exponential",1.6],["zoom"],7,0,7.5,0.5,18,13],"line-width":["interpolate",["exponential",1.6],["zoom"],9,0,9.5,1]}},{"id":"roads_tunnels_highway_casing","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_tunnel"],["!has","is_bridge"],["==","kind","highway"],["!has","is_link"]],"paint":{"line-color":"#141414","line-dasharray":[6,0.5],"line-gap-width":["interpolate",["exponential",1.6],["zoom"],3,0,3.5,0.5,18,15],"line-width":["interpolate",["exponential",1.6],["zoom"],7,0,7.5,1,20,15]}},{"id":"roads_tunnels_other","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_tunnel"],["in","kind","other","path"]],"paint":{"line-color":"#292929","line-dasharray":[4.5,0.5],"line-width":["interpolate",["exponential",1.6],["zoom"],14,0,20,7]}},{"id":"roads_tunnels_minor","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_tunnel"],["==","kind","minor_road"]],"paint":{"line-color":"#292929","line-width":["interpolate",["exponential",1.6],["zoom"],11,0,12.5,0.5,15,2,18,11]}},{"id":"roads_tunnels_link","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_tunnel"],["has","is_link"]],"paint":{"line-color":"#292929","line-width":["interpolate",["exponential",1.6],["zoom"],13,0,13.5,1,18,11]}},{"id":"roads_tunnels_major","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_tunnel"],["==","kind","major_road"]],"paint":{"line-color":"#292929","line-width":["interpolate",["exponential",1.6],["zoom"],6,0,12,1.6,15,3,18,13]}},{"id":"roads_tunnels_highway","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_tunnel"],["==",["get","kind"],"highway"],["!",["has","is_link"]]],"paint":{"line-color":"#292929","line-width":["interpolate",["exponential",1.6],["zoom"],3,0,6,1.1,12,1.6,15,5,18,15]}},{"id":"buildings","type":"fill","source":"protomaps","source-layer":"buildings","filter":["in","kind","building","building_part"],"paint":{"fill-color":"#111111","fill-opacity":0.5}},{"id":"roads_pier","type":"line","source":"protomaps","source-layer":"roads","filter":["==","kind_detail","pier"],"paint":{"line-color":"#333333","line-width":["interpolate",["exponential",1.6],["zoom"],12,0,12.5,0.5,20,16]}},{"id":"roads_minor_service_casing","type":"line","source":"protomaps","source-layer":"roads","minzoom":13,"filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["==","kind","minor_road"],["==","kind_detail","service"]],"paint":{"line-color":"#1f1f1f","line-gap-width":["interpolate",["exponential",1.6],["zoom"],13,0,18,8],"line-width":["interpolate",["exponential",1.6],["zoom"],13,0,13.5,0.8]}},{"id":"roads_minor_casing","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["==","kind","minor_road"],["!=","kind_detail","service"]],"paint":{"line-color":"#1f1f1f","line-gap-width":["interpolate",["exponential",1.6],["zoom"],11,0,12.5,0.5,15,2,18,11],"line-width":["interpolate",["exponential",1.6],["zoom"],12,0,12.5,1]}},{"id":"roads_link_casing","type":"line","source":"protomaps","source-layer":"roads","minzoom":13,"filter":["has","is_link"],"paint":{"line-color":"#1f1f1f","line-gap-width":["interpolate",["exponential",1.6],["zoom"],13,0,13.5,1,18,11],"line-width":["interpolate",["exponential",1.6],["zoom"],13,0,13.5,1.5]}},{"id":"roads_major_casing_late","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["==","kind","major_road"]],"paint":{"line-color":"#1f1f1f","line-gap-width":["interpolate",["exponential",1.6],["zoom"],6,0,12,1.6,15,3,18,13],"line-width":["interpolate",["exponential",1.6],["zoom"],9,0,9.5,1]}},{"id":"roads_highway_casing_late","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["==","kind","highway"],["!has","is_link"]],"paint":{"line-color":"#1f1f1f","line-gap-width":["interpolate",["exponential",1.6],["zoom"],3,0,3.5,0.5,18,15],"line-width":["interpolate",["exponential",1.6],["zoom"],7,0,7.5,1,20,15]}},{"id":"roads_other","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["in","kind","other","path"],["!=","kind_detail","pier"]],"paint":{"line-color":"#333333","line-width":["interpolate",["exponential",1.6],["zoom"],14,0.5,20,12]}},{"id":"roads_link","type":"line","source":"protomaps","source-layer":"roads","filter":["has","is_link"],"paint":{"line-color":"#3d3d3d","line-width":["interpolate",["exponential",1.6],["zoom"],13,0,13.5,1,18,11]}},{"id":"roads_minor_service","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["==","kind","minor_road"],["==","kind_detail","service"]],"paint":{"line-color":"#333333","line-width":["interpolate",["exponential",1.6],["zoom"],13,0,18,8]}},{"id":"roads_minor","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["==","kind","minor_road"],["!=","kind_detail","service"]],"paint":{"line-color":["interpolate",["exponential",1.6],["zoom"],11,"#3d3d3d",16,"#333333"],"line-width":["interpolate",["exponential",1.6],["zoom"],11,0,12.5,0.5,15,2,18,11]}},{"id":"roads_major_casing_early","type":"line","source":"protomaps","source-layer":"roads","maxzoom":12,"filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["==","kind","major_road"]],"paint":{"line-color":"#1f1f1f","line-gap-width":["interpolate",["exponential",1.6],["zoom"],7,0,7.5,0.5,18,13],"line-width":["interpolate",["exponential",1.6],["zoom"],9,0,9.5,1]}},{"id":"roads_major","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["==","kind","major_road"]],"paint":{"line-color":"#3d3d3d","line-width":["interpolate",["exponential",1.6],["zoom"],6,0,12,1.6,15,3,18,13]}},{"id":"roads_highway_casing_early","type":"line","source":"protomaps","source-layer":"roads","maxzoom":12,"filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["==","kind","highway"],["!has","is_link"]],"paint":{"line-color":"#1f1f1f","line-gap-width":["interpolate",["exponential",1.6],["zoom"],3,0,3.5,0.5,18,15],"line-width":["interpolate",["exponential",1.6],["zoom"],7,0,7.5,1]}},{"id":"roads_highway","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["==","kind","highway"],["!has","is_link"]],"paint":{"line-color":"#474747","line-width":["interpolate",["exponential",1.6],["zoom"],3,0,6,1.1,12,1.6,15,5,18,15]}},{"id":"roads_rail","type":"line","source":"protomaps","source-layer":"roads","filter":["==","kind","rail"],"paint":{"line-dasharray":[0.3,0.75],"line-opacity":0.5,"line-color":"#000000","line-width":["interpolate",["exponential",1.6],["zoom"],3,0,6,0.15,18,9]}},{"id":"boundaries_country","type":"line","source":"protomaps","source-layer":"boundaries","filter":["<=","kind_detail",2],"paint":{"line-color":"#5b6374","line-width":0.7,"line-dasharray":["step",["zoom"],["literal",[2,0]],4,["literal",[2,1]]]}},{"id":"boundaries","type":"line","source":"protomaps","source-layer":"boundaries","filter":[">","kind_detail",2],"paint":{"line-color":"#5b6374","line-width":0.4,"line-dasharray":["step",["zoom"],["literal",[2,0]],4,["literal",[2,1]]]}},{"id":"roads_bridges_other_casing","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["has","is_bridge"],["in","kind","other","path"]],"paint":{"line-color":"#2b2b2b","line-gap-width":["interpolate",["exponential",1.6],["zoom"],14,0,20,7]}},{"id":"roads_bridges_link_casing","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["has","is_bridge"],["has","is_link"]],"paint":{"line-color":"#1f1f1f","line-gap-width":["interpolate",["exponential",1.6],["zoom"],13,0,13.5,1,18,11],"line-width":["interpolate",["exponential",1.6],["zoom"],12,0,12.5,1.5]}},{"id":"roads_bridges_minor_casing","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["has","is_bridge"],["==","kind","minor_road"]],"paint":{"line-color":"#1f1f1f","line-gap-width":["interpolate",["exponential",1.6],["zoom"],11,0,12.5,0.5,15,2,18,11],"line-width":["interpolate",["exponential",1.6],["zoom"],13,0,13.5,0.8]}},{"id":"roads_bridges_major_casing","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["has","is_bridge"],["==","kind","major_road"]],"paint":{"line-color":"#1f1f1f","line-gap-width":["interpolate",["exponential",1.6],["zoom"],7,0,7.5,0.5,18,10],"line-width":["interpolate",["exponential",1.6],["zoom"],9,0,9.5,1.5]}},{"id":"roads_bridges_other","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["has","is_bridge"],["in","kind","other","path"]],"paint":{"line-color":"#333333","line-dasharray":[2,1],"line-width":["interpolate",["exponential",1.6],["zoom"],14,0,20,7]}},{"id":"roads_bridges_minor","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["has","is_bridge"],["==","kind","minor_road"]],"paint":{"line-color":"#333333","line-width":["interpolate",["exponential",1.6],["zoom"],11,0,12.5,0.5,15,2,18,11]}},{"id":"roads_bridges_link","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["has","is_bridge"],["has","is_link"]],"paint":{"line-color":"#333333","line-width":["interpolate",["exponential",1.6],["zoom"],13,0,13.5,1,18,11]}},{"id":"roads_bridges_major","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["has","is_bridge"],["==","kind","major_road"]],"paint":{"line-color":"#3d3d3d","line-width":["interpolate",["exponential",1.6],["zoom"],6,0,12,1.6,15,3,18,13]}},{"id":"roads_bridges_highway_casing","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["has","is_bridge"],["==","kind","highway"],["!has","is_link"]],"paint":{"line-color":"#1f1f1f","line-gap-width":["interpolate",["exponential",1.6],["zoom"],3,0,3.5,0.5,18,15],"line-width":["interpolate",["exponential",1.6],["zoom"],7,0,7.5,1,20,15]}},{"id":"roads_bridges_highway","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_bridge"],["==","kind","highway"],["!has","is_link"]],"paint":{"line-color":"#474747","line-width":["interpolate",["exponential",1.6],["zoom"],3,0,6,1.1,12,1.6,15,5,18,15]}},{"id":"address_label","type":"symbol","source":"protomaps","source-layer":"buildings","minzoom":18,"filter":["==","kind","address"],"layout":{"symbol-placement":"point","text-font":["Noto Sans Regular"],"text-field":["get","addr_housenumber"],"text-size":12},"paint":{"text-color":"#525252","text-halo-color":"#1f1f1f","text-halo-width":1}},{"id":"water_waterway_label","type":"symbol","source":"protomaps","source-layer":"water","minzoom":13,"filter":["in","kind","river","stream"],"layout":{"symbol-placement":"line","text-font":["Noto Sans Regular"],"text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-size":12,"text-letter-spacing":0.2},"paint":{"text-color":"#717784","text-halo-color":"#31353f","text-halo-width":1}},{"id":"roads_oneway","type":"symbol","source":"protomaps","source-layer":"roads","minzoom":16,"filter":["==",["get","oneway"],"yes"],"layout":{"symbol-placement":"line","icon-image":"arrow","icon-rotate":90,"symbol-spacing":100}},{"id":"roads_labels_minor","type":"symbol","source":"protomaps","source-layer":"roads","minzoom":15,"filter":["in","kind","minor_road","other","path"],"layout":{"symbol-sort-key":["get","min_zoom"],"symbol-placement":"line","text-font":["Noto Sans Regular"],"text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-size":12},"paint":{"text-color":"#525252","text-halo-color":"#1f1f1f","text-halo-width":1}},{"id":"water_label_ocean","type":"symbol","source":"protomaps","source-layer":"water","filter":["in","kind","sea","ocean","bay","strait","fjord"],"layout":{"text-font":["Noto Sans Regular"],"text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-size":["interpolate",["linear"],["zoom"],3,10,10,12],"text-letter-spacing":0.1,"text-max-width":9,"text-transform":"uppercase"},"paint":{"text-color":"#717784","text-halo-width":1,"text-halo-color":"#31353f"}},{"id":"earth_label_islands","type":"symbol","source":"protomaps","source-layer":"earth","filter":["in","kind","island"],"layout":{"text-font":["Noto Sans Regular"],"text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-size":10,"text-letter-spacing":0.1,"text-max-width":8},"paint":{"text-color":"#525252","text-halo-color":"#1f1f1f","text-halo-width":1}},{"id":"water_label_lakes","type":"symbol","source":"protomaps","source-layer":"water","filter":["in","kind","lake","water"],"layout":{"text-font":["Noto Sans Regular"],"text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-size":["interpolate",["linear"],["zoom"],3,10,6,12,10,12],"text-letter-spacing":0.1,"text-max-width":9},"paint":{"text-color":"#717784","text-halo-color":"#31353f","text-halo-width":1}},{"id":"roads_shields","type":"symbol","source":"protomaps","source-layer":"roads","filter":["all",["in",["get","kind"],["literal",["highway","major_road"]]],["has","shield_text"],["<=",["length",["get","shield_text"]],5]],"layout":{"icon-image":["match",["get","network"],"US:I",["concat","US:I-",["length",["get","shield_text"]],"char"],"NL:S-road",["concat","NL:S-road-",["length",["get","shield_text"]],"char"],["concat","generic_shield-",["length",["get","shield_text"]],"char"]],"text-field":["get","shield_text"],"text-font":["Noto Sans Regular"],"text-size":8,"icon-size":0.8,"symbol-placement":"line","icon-rotation-alignment":"viewport","text-rotation-alignment":"viewport"},"paint":{"text-color":"#666666"}},{"id":"roads_labels_major","type":"symbol","source":"protomaps","source-layer":"roads","minzoom":11,"filter":["in","kind","highway","major_road"],"layout":{"symbol-sort-key":["get","min_zoom"],"symbol-placement":"line","text-font":["Noto Sans Regular"],"text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-size":12},"paint":{"text-color":"#666666","text-halo-color":"#1f1f1f","text-halo-width":1}},{"id":"pois","type":"symbol","source":"protomaps","source-layer":"pois","filter":["all",["in",["get","kind"],["literal",["beach","forest","marina","park","peak","zoo","garden","bench","aerodrome","station","bus_stop","ferry_terminal","stadium","university","library","school","animal","toilets","drinking_water","post_office","building","townhall","restaurant","fast_food","cafe","bar","supermarket","convenience","books","beauty","electronics","clothes","attraction","museum","theatre","artwork"]]],[">=",["zoom"],["+",["get","min_zoom"],0]]],"layout":{"icon-image":["match",["get","kind"],"station","train_station",["get","kind"]],"text-font":["Noto Sans Regular"],"text-justify":"auto","text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-size":["interpolate",["linear"],["zoom"],17,10,19,16],"text-max-width":8,"text-offset":[1.1,0],"text-variable-anchor":["left","right"]},"paint":{"text-color":["case",["in",["get","kind"],["literal",["beach","forest","marina","park","peak","zoo","garden","bench"]]],"#30C573",["in",["get","kind"],["literal",["aerodrome","station","bus_stop","ferry_terminal"]]],"#2B5CEA",["in",["get","kind"],["literal",["stadium","university","library","school","animal","toilets","drinking_water","post_office","building","townhall"]]],"#93939F",["in",["get","kind"],["literal",["supermarket","convenience","books","beauty","electronics","clothes"]]],"#4299BB",["in",["get","kind"],["literal",["restaurant","fast_food","cafe","bar"]]],"#F19B6E",["in",["get","kind"],["literal",["attraction","museum","theatre","artwork"]]],"#EF56BA","#1f1f1f"],"text-halo-color":"#1f1f1f","text-halo-width":1}},{"id":"places_subplace","type":"symbol","source":"protomaps","source-layer":"places","filter":["in","kind","neighbourhood","macrohood"],"layout":{"symbol-sort-key":["case",["has","sort_key"],["get","sort_key"],["get","min_zoom"]],"text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-font":["Noto Sans Regular"],"text-max-width":7,"text-letter-spacing":0.1,"text-padding":["interpolate",["linear"],["zoom"],5,2,8,4,12,18,15,20],"text-size":["interpolate",["exponential",1.2],["zoom"],11,8,14,14,18,24],"text-transform":"uppercase"},"paint":{"text-color":"#525252","text-halo-color":"#1f1f1f","text-halo-width":1}},{"id":"places_region","type":"symbol","source":"protomaps","source-layer":"places","filter":["==","kind","region"],"layout":{"symbol-sort-key":["get","sort_key"],"text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-font":["Noto Sans Regular"],"text-size":["interpolate",["linear"],["zoom"],3,11,7,16],"text-radial-offset":0.2,"text-anchor":"center","text-transform":"uppercase"},"paint":{"text-color":"#3d3d3d","text-halo-color":"#1f1f1f","text-halo-width":1}},{"id":"places_locality","type":"symbol","source":"protomaps","source-layer":"places","filter":["==","kind","locality"],"layout":{"icon-image":["step",["zoom"],["case",["==",["get","capital"],"yes"],"capital","townspot"],8,""],"icon-size":0.7,"text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-font":["Noto Sans Regular"],"symbol-sort-key":["case",["has","sort_key"],["get","sort_key"],["get","min_zoom"]],"text-padding":["interpolate",["linear"],["zoom"],5,3,8,7,12,11],"text-size":["interpolate",["linear"],["zoom"],2,["case",["<",["get","population_rank"],13],8,[">=",["get","population_rank"],13],13,0],4,["case",["<",["get","population_rank"],13],10,[">=",["get","population_rank"],13],15,0],6,["case",["<",["get","population_rank"],12],11,[">=",["get","population_rank"],12],17,0],8,["case",["<",["get","population_rank"],11],11,[">=",["get","population_rank"],11],18,0],10,["case",["<",["get","population_rank"],9],12,[">=",["get","population_rank"],9],20,0],15,["case",["<",["get","population_rank"],8],12,[">=",["get","population_rank"],8],22,0]],"icon-padding":["interpolate",["linear"],["zoom"],0,0,8,4,10,8,12,6,22,2],"text-justify":"auto","text-variable-anchor":["step",["zoom"],["literal",["bottom","left","right","top"]],8,["literal",["center"]]],"text-radial-offset":0.3},"paint":{"text-color":"#7a7a7a","text-halo-color":"#212121","text-halo-width":1}},{"id":"places_country","type":"symbol","source":"protomaps","source-layer":"places","filter":["==","kind","country"],"layout":{"symbol-sort-key":["case",["has","sort_key"],["get","sort_key"],["get","min_zoom"]],"text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-font":["Noto Sans Regular"],"text-size":["interpolate",["linear"],["zoom"],2,["case",["<",["get","population_rank"],10],8,[">=",["get","population_rank"],10],12,0],6,["case",["<",["get","population_rank"],8],10,[">=",["get","population_rank"],8],18,0],8,["case",["<",["get","population_rank"],7],11,[">=",["get","population_rank"],7],20,0]],"icon-padding":["interpolate",["linear"],["zoom"],0,2,14,2,16,20,17,2,22,2],"text-transform":"uppercase"},"paint":{"text-color":"#5c5c5c","text-halo-color":"#1f1f1f","text-halo-width":1}}]} diff --git a/android/app/src/main/assets/map/style-light.json b/android/app/src/main/assets/map/style-light.json new file mode 100644 index 0000000..3331107 --- /dev/null +++ b/android/app/src/main/assets/map/style-light.json @@ -0,0 +1 @@ +{"version":8,"glyphs":"asset://map/fonts/{fontstack}/{range}.pbf","sprite":"asset://map/sprites/light","sources":{"protomaps":{"type":"vector","url":"pmtiles://file://__MAP_FILE__","attribution":"© OpenStreetMap contributors"}},"layers":[{"id":"background","type":"background","paint":{"background-color":"#cccccc"}},{"id":"earth","type":"fill","filter":["==","$type","Polygon"],"source":"protomaps","source-layer":"earth","paint":{"fill-color":"#e2dfda"}},{"id":"landcover","type":"fill","source":"protomaps","source-layer":"landcover","paint":{"fill-color":["match",["get","kind"],"grassland","rgba(210, 239, 207, 1)","barren","rgba(255, 243, 215, 1)","urban_area","rgba(230, 230, 230, 1)","farmland","rgba(216, 239, 210, 1)","glacier","rgba(255, 255, 255, 1)","scrub","rgba(234, 239, 210, 1)","rgba(196, 231, 210, 1)"],"fill-opacity":["interpolate",["linear"],["zoom"],5,1,7,0]}},{"id":"landuse_park","type":"fill","source":"protomaps","source-layer":"landuse","filter":["in","kind","national_park","park","cemetery","protected_area","nature_reserve","forest","golf_course","wood","scrub","grassland","grass","glacier","sand","military","naval_base","airfield"],"paint":{"fill-opacity":["interpolate",["linear"],["zoom"],6,0,11,1],"fill-color":["case",["in",["get","kind"],["literal",["national_park","park","cemetery","protected_area","nature_reserve","forest","golf_course"]]],"#9cd3b4",["==",["get","kind"],"wood"],"#a0d9a0",["in",["get","kind"],["literal",["scrub","grassland","grass"]]],"#99d2bb",["==",["get","kind"],"glacier"],"#e7e7e7",["==",["get","kind"],"sand"],"#e2e0d7",["in",["get","kind"],["literal",["military","naval_base","airfield"]]],"#c6dcdc","#e2dfda"]}},{"id":"landuse_urban_green","type":"fill","source":"protomaps","source-layer":"landuse","filter":["in","kind","allotments","village_green","playground"],"paint":{"fill-color":"#9cd3b4","fill-opacity":0.7}},{"id":"landuse_hospital","type":"fill","source":"protomaps","source-layer":"landuse","filter":["==","kind","hospital"],"paint":{"fill-color":"#e4dad9"}},{"id":"landuse_industrial","type":"fill","source":"protomaps","source-layer":"landuse","filter":["==","kind","industrial"],"paint":{"fill-color":"#d1dde1"}},{"id":"landuse_school","type":"fill","source":"protomaps","source-layer":"landuse","filter":["in","kind","school","university","college"],"paint":{"fill-color":"#e4ded7"}},{"id":"landuse_beach","type":"fill","source":"protomaps","source-layer":"landuse","filter":["in","kind","beach"],"paint":{"fill-color":"#e8e4d0"}},{"id":"landuse_zoo","type":"fill","source":"protomaps","source-layer":"landuse","filter":["in","kind","zoo"],"paint":{"fill-color":"#c6dcdc"}},{"id":"landuse_aerodrome","type":"fill","source":"protomaps","source-layer":"landuse","filter":["in","kind","aerodrome"],"paint":{"fill-color":"#dadbdf"}},{"id":"roads_runway","type":"line","source":"protomaps","source-layer":"roads","filter":["==","kind_detail","runway"],"paint":{"line-color":"#e9e9ed","line-width":["interpolate",["exponential",1.6],["zoom"],10,0,12,4,18,30]}},{"id":"roads_taxiway","type":"line","source":"protomaps","source-layer":"roads","minzoom":13,"filter":["==","kind_detail","taxiway"],"paint":{"line-color":"#e9e9ed","line-width":["interpolate",["exponential",1.6],["zoom"],13,0,13.5,1,15,6]}},{"id":"landuse_runway","type":"fill","source":"protomaps","source-layer":"landuse","filter":["any",["in","kind","runway","taxiway"]],"paint":{"fill-color":"#e9e9ed"}},{"id":"water","type":"fill","filter":["==","$type","Polygon"],"source":"protomaps","source-layer":"water","paint":{"fill-color":"#80deea"}},{"id":"water_stream","type":"line","source":"protomaps","source-layer":"water","minzoom":14,"filter":["in","kind","stream"],"paint":{"line-color":"#80deea","line-width":0.5}},{"id":"water_river","type":"line","source":"protomaps","source-layer":"water","minzoom":9,"filter":["in","kind","river"],"paint":{"line-color":"#80deea","line-width":["interpolate",["exponential",1.6],["zoom"],9,0,9.5,1,18,12]}},{"id":"landuse_pedestrian","type":"fill","source":"protomaps","source-layer":"landuse","filter":["in","kind","pedestrian","dam"],"paint":{"fill-color":"#e3e0d4"}},{"id":"landuse_pier","type":"fill","source":"protomaps","source-layer":"landuse","filter":["==","kind","pier"],"paint":{"fill-color":"#e0e0e0"}},{"id":"roads_tunnels_other_casing","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_tunnel"],["in","kind","other","path"]],"paint":{"line-color":"#e0e0e0","line-gap-width":["interpolate",["exponential",1.6],["zoom"],14,0,20,7]}},{"id":"roads_tunnels_minor_casing","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_tunnel"],["==","kind","minor_road"]],"paint":{"line-color":"#e0e0e0","line-dasharray":[3,2],"line-gap-width":["interpolate",["exponential",1.6],["zoom"],11,0,12.5,0.5,15,2,18,11],"line-width":["interpolate",["exponential",1.6],["zoom"],12,0,12.5,1]}},{"id":"roads_tunnels_link_casing","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_tunnel"],["has","is_link"]],"paint":{"line-color":"#e0e0e0","line-dasharray":[3,2],"line-gap-width":["interpolate",["exponential",1.6],["zoom"],13,0,13.5,1,18,11],"line-width":["interpolate",["exponential",1.6],["zoom"],12,0,12.5,1]}},{"id":"roads_tunnels_major_casing","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_tunnel"],["!has","is_bridge"],["==","kind","major_road"]],"paint":{"line-color":"#e0e0e0","line-dasharray":[3,2],"line-gap-width":["interpolate",["exponential",1.6],["zoom"],7,0,7.5,0.5,18,13],"line-width":["interpolate",["exponential",1.6],["zoom"],9,0,9.5,1]}},{"id":"roads_tunnels_highway_casing","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_tunnel"],["!has","is_bridge"],["==","kind","highway"],["!has","is_link"]],"paint":{"line-color":"#e0e0e0","line-dasharray":[6,0.5],"line-gap-width":["interpolate",["exponential",1.6],["zoom"],3,0,3.5,0.5,18,15],"line-width":["interpolate",["exponential",1.6],["zoom"],7,0,7.5,1,20,15]}},{"id":"roads_tunnels_other","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_tunnel"],["in","kind","other","path"]],"paint":{"line-color":"#d5d5d5","line-dasharray":[4.5,0.5],"line-width":["interpolate",["exponential",1.6],["zoom"],14,0,20,7]}},{"id":"roads_tunnels_minor","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_tunnel"],["==","kind","minor_road"]],"paint":{"line-color":"#d5d5d5","line-width":["interpolate",["exponential",1.6],["zoom"],11,0,12.5,0.5,15,2,18,11]}},{"id":"roads_tunnels_link","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_tunnel"],["has","is_link"]],"paint":{"line-color":"#d5d5d5","line-width":["interpolate",["exponential",1.6],["zoom"],13,0,13.5,1,18,11]}},{"id":"roads_tunnels_major","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_tunnel"],["==","kind","major_road"]],"paint":{"line-color":"#d5d5d5","line-width":["interpolate",["exponential",1.6],["zoom"],6,0,12,1.6,15,3,18,13]}},{"id":"roads_tunnels_highway","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_tunnel"],["==",["get","kind"],"highway"],["!",["has","is_link"]]],"paint":{"line-color":"#d5d5d5","line-width":["interpolate",["exponential",1.6],["zoom"],3,0,6,1.1,12,1.6,15,5,18,15]}},{"id":"buildings","type":"fill","source":"protomaps","source-layer":"buildings","filter":["in","kind","building","building_part"],"paint":{"fill-color":"#cccccc","fill-opacity":0.5}},{"id":"roads_pier","type":"line","source":"protomaps","source-layer":"roads","filter":["==","kind_detail","pier"],"paint":{"line-color":"#e0e0e0","line-width":["interpolate",["exponential",1.6],["zoom"],12,0,12.5,0.5,20,16]}},{"id":"roads_minor_service_casing","type":"line","source":"protomaps","source-layer":"roads","minzoom":13,"filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["==","kind","minor_road"],["==","kind_detail","service"]],"paint":{"line-color":"#e0e0e0","line-gap-width":["interpolate",["exponential",1.6],["zoom"],13,0,18,8],"line-width":["interpolate",["exponential",1.6],["zoom"],13,0,13.5,0.8]}},{"id":"roads_minor_casing","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["==","kind","minor_road"],["!=","kind_detail","service"]],"paint":{"line-color":"#e0e0e0","line-gap-width":["interpolate",["exponential",1.6],["zoom"],11,0,12.5,0.5,15,2,18,11],"line-width":["interpolate",["exponential",1.6],["zoom"],12,0,12.5,1]}},{"id":"roads_link_casing","type":"line","source":"protomaps","source-layer":"roads","minzoom":13,"filter":["has","is_link"],"paint":{"line-color":"#e0e0e0","line-gap-width":["interpolate",["exponential",1.6],["zoom"],13,0,13.5,1,18,11],"line-width":["interpolate",["exponential",1.6],["zoom"],13,0,13.5,1.5]}},{"id":"roads_major_casing_late","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["==","kind","major_road"]],"paint":{"line-color":"#e0e0e0","line-gap-width":["interpolate",["exponential",1.6],["zoom"],6,0,12,1.6,15,3,18,13],"line-width":["interpolate",["exponential",1.6],["zoom"],9,0,9.5,1]}},{"id":"roads_highway_casing_late","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["==","kind","highway"],["!has","is_link"]],"paint":{"line-color":"#e0e0e0","line-gap-width":["interpolate",["exponential",1.6],["zoom"],3,0,3.5,0.5,18,15],"line-width":["interpolate",["exponential",1.6],["zoom"],7,0,7.5,1,20,15]}},{"id":"roads_other","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["in","kind","other","path"],["!=","kind_detail","pier"]],"paint":{"line-color":"#ebebeb","line-width":["interpolate",["exponential",1.6],["zoom"],14,0.5,20,12]}},{"id":"roads_link","type":"line","source":"protomaps","source-layer":"roads","filter":["has","is_link"],"paint":{"line-color":"#ffffff","line-width":["interpolate",["exponential",1.6],["zoom"],13,0,13.5,1,18,11]}},{"id":"roads_minor_service","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["==","kind","minor_road"],["==","kind_detail","service"]],"paint":{"line-color":"#ebebeb","line-width":["interpolate",["exponential",1.6],["zoom"],13,0,18,8]}},{"id":"roads_minor","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["==","kind","minor_road"],["!=","kind_detail","service"]],"paint":{"line-color":["interpolate",["exponential",1.6],["zoom"],11,"#ebebeb",16,"#ffffff"],"line-width":["interpolate",["exponential",1.6],["zoom"],11,0,12.5,0.5,15,2,18,11]}},{"id":"roads_major_casing_early","type":"line","source":"protomaps","source-layer":"roads","maxzoom":12,"filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["==","kind","major_road"]],"paint":{"line-color":"#e0e0e0","line-gap-width":["interpolate",["exponential",1.6],["zoom"],7,0,7.5,0.5,18,13],"line-width":["interpolate",["exponential",1.6],["zoom"],9,0,9.5,1]}},{"id":"roads_major","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["==","kind","major_road"]],"paint":{"line-color":"#ffffff","line-width":["interpolate",["exponential",1.6],["zoom"],6,0,12,1.6,15,3,18,13]}},{"id":"roads_highway_casing_early","type":"line","source":"protomaps","source-layer":"roads","maxzoom":12,"filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["==","kind","highway"],["!has","is_link"]],"paint":{"line-color":"#e0e0e0","line-gap-width":["interpolate",["exponential",1.6],["zoom"],3,0,3.5,0.5,18,15],"line-width":["interpolate",["exponential",1.6],["zoom"],7,0,7.5,1]}},{"id":"roads_highway","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["!has","is_tunnel"],["!has","is_bridge"],["==","kind","highway"],["!has","is_link"]],"paint":{"line-color":"#ffffff","line-width":["interpolate",["exponential",1.6],["zoom"],3,0,6,1.1,12,1.6,15,5,18,15]}},{"id":"roads_rail","type":"line","source":"protomaps","source-layer":"roads","filter":["==","kind","rail"],"paint":{"line-dasharray":[0.3,0.75],"line-opacity":0.5,"line-color":"#a7b1b3","line-width":["interpolate",["exponential",1.6],["zoom"],3,0,6,0.15,18,9]}},{"id":"boundaries_country","type":"line","source":"protomaps","source-layer":"boundaries","filter":["<=","kind_detail",2],"paint":{"line-color":"#adadad","line-width":0.7,"line-dasharray":["step",["zoom"],["literal",[2,0]],4,["literal",[2,1]]]}},{"id":"boundaries","type":"line","source":"protomaps","source-layer":"boundaries","filter":[">","kind_detail",2],"paint":{"line-color":"#adadad","line-width":0.4,"line-dasharray":["step",["zoom"],["literal",[2,0]],4,["literal",[2,1]]]}},{"id":"roads_bridges_other_casing","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["has","is_bridge"],["in","kind","other","path"]],"paint":{"line-color":"#e0e0e0","line-gap-width":["interpolate",["exponential",1.6],["zoom"],14,0,20,7]}},{"id":"roads_bridges_link_casing","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["has","is_bridge"],["has","is_link"]],"paint":{"line-color":"#e0e0e0","line-gap-width":["interpolate",["exponential",1.6],["zoom"],13,0,13.5,1,18,11],"line-width":["interpolate",["exponential",1.6],["zoom"],12,0,12.5,1.5]}},{"id":"roads_bridges_minor_casing","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["has","is_bridge"],["==","kind","minor_road"]],"paint":{"line-color":"#e0e0e0","line-gap-width":["interpolate",["exponential",1.6],["zoom"],11,0,12.5,0.5,15,2,18,11],"line-width":["interpolate",["exponential",1.6],["zoom"],13,0,13.5,0.8]}},{"id":"roads_bridges_major_casing","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["has","is_bridge"],["==","kind","major_road"]],"paint":{"line-color":"#e0e0e0","line-gap-width":["interpolate",["exponential",1.6],["zoom"],7,0,7.5,0.5,18,10],"line-width":["interpolate",["exponential",1.6],["zoom"],9,0,9.5,1.5]}},{"id":"roads_bridges_other","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["has","is_bridge"],["in","kind","other","path"]],"paint":{"line-color":"#ebebeb","line-dasharray":[2,1],"line-width":["interpolate",["exponential",1.6],["zoom"],14,0,20,7]}},{"id":"roads_bridges_minor","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["has","is_bridge"],["==","kind","minor_road"]],"paint":{"line-color":"#ffffff","line-width":["interpolate",["exponential",1.6],["zoom"],11,0,12.5,0.5,15,2,18,11]}},{"id":"roads_bridges_link","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["has","is_bridge"],["has","is_link"]],"paint":{"line-color":"#ffffff","line-width":["interpolate",["exponential",1.6],["zoom"],13,0,13.5,1,18,11]}},{"id":"roads_bridges_major","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["has","is_bridge"],["==","kind","major_road"]],"paint":{"line-color":"#f5f5f5","line-width":["interpolate",["exponential",1.6],["zoom"],6,0,12,1.6,15,3,18,13]}},{"id":"roads_bridges_highway_casing","type":"line","source":"protomaps","source-layer":"roads","minzoom":12,"filter":["all",["has","is_bridge"],["==","kind","highway"],["!has","is_link"]],"paint":{"line-color":"#e0e0e0","line-gap-width":["interpolate",["exponential",1.6],["zoom"],3,0,3.5,0.5,18,15],"line-width":["interpolate",["exponential",1.6],["zoom"],7,0,7.5,1,20,15]}},{"id":"roads_bridges_highway","type":"line","source":"protomaps","source-layer":"roads","filter":["all",["has","is_bridge"],["==","kind","highway"],["!has","is_link"]],"paint":{"line-color":"#ffffff","line-width":["interpolate",["exponential",1.6],["zoom"],3,0,6,1.1,12,1.6,15,5,18,15]}},{"id":"address_label","type":"symbol","source":"protomaps","source-layer":"buildings","minzoom":18,"filter":["==","kind","address"],"layout":{"symbol-placement":"point","text-font":["Noto Sans Regular"],"text-field":["get","addr_housenumber"],"text-size":12},"paint":{"text-color":"#91888b","text-halo-color":"#ffffff","text-halo-width":1}},{"id":"water_waterway_label","type":"symbol","source":"protomaps","source-layer":"water","minzoom":13,"filter":["in","kind","river","stream"],"layout":{"symbol-placement":"line","text-font":["Noto Sans Regular"],"text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-size":12,"text-letter-spacing":0.2},"paint":{"text-color":"#728dd4","text-halo-color":"#80deea","text-halo-width":1}},{"id":"roads_oneway","type":"symbol","source":"protomaps","source-layer":"roads","minzoom":16,"filter":["==",["get","oneway"],"yes"],"layout":{"symbol-placement":"line","icon-image":"arrow","icon-rotate":90,"symbol-spacing":100}},{"id":"roads_labels_minor","type":"symbol","source":"protomaps","source-layer":"roads","minzoom":15,"filter":["in","kind","minor_road","other","path"],"layout":{"symbol-sort-key":["get","min_zoom"],"symbol-placement":"line","text-font":["Noto Sans Regular"],"text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-size":12},"paint":{"text-color":"#91888b","text-halo-color":"#ffffff","text-halo-width":1}},{"id":"water_label_ocean","type":"symbol","source":"protomaps","source-layer":"water","filter":["in","kind","sea","ocean","bay","strait","fjord"],"layout":{"text-font":["Noto Sans Regular"],"text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-size":["interpolate",["linear"],["zoom"],3,10,10,12],"text-letter-spacing":0.1,"text-max-width":9,"text-transform":"uppercase"},"paint":{"text-color":"#728dd4","text-halo-width":1,"text-halo-color":"#80deea"}},{"id":"earth_label_islands","type":"symbol","source":"protomaps","source-layer":"earth","filter":["in","kind","island"],"layout":{"text-font":["Noto Sans Regular"],"text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-size":10,"text-letter-spacing":0.1,"text-max-width":8},"paint":{"text-color":"#8f8f8f","text-halo-color":"#e0e0e0","text-halo-width":1}},{"id":"water_label_lakes","type":"symbol","source":"protomaps","source-layer":"water","filter":["in","kind","lake","water"],"layout":{"text-font":["Noto Sans Regular"],"text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-size":["interpolate",["linear"],["zoom"],3,10,6,12,10,12],"text-letter-spacing":0.1,"text-max-width":9},"paint":{"text-color":"#728dd4","text-halo-color":"#80deea","text-halo-width":1}},{"id":"roads_shields","type":"symbol","source":"protomaps","source-layer":"roads","filter":["all",["in",["get","kind"],["literal",["highway","major_road"]]],["has","shield_text"],["<=",["length",["get","shield_text"]],5]],"layout":{"icon-image":["match",["get","network"],"US:I",["concat","US:I-",["length",["get","shield_text"]],"char"],"NL:S-road",["concat","NL:S-road-",["length",["get","shield_text"]],"char"],["concat","generic_shield-",["length",["get","shield_text"]],"char"]],"text-field":["get","shield_text"],"text-font":["Noto Sans Regular"],"text-size":8,"icon-size":0.8,"symbol-placement":"line","icon-rotation-alignment":"viewport","text-rotation-alignment":"viewport"},"paint":{"text-color":"#938a8d"}},{"id":"roads_labels_major","type":"symbol","source":"protomaps","source-layer":"roads","minzoom":11,"filter":["in","kind","highway","major_road"],"layout":{"symbol-sort-key":["get","min_zoom"],"symbol-placement":"line","text-font":["Noto Sans Regular"],"text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-size":12},"paint":{"text-color":"#938a8d","text-halo-color":"#ffffff","text-halo-width":1}},{"id":"pois","type":"symbol","source":"protomaps","source-layer":"pois","filter":["all",["in",["get","kind"],["literal",["beach","forest","marina","park","peak","zoo","garden","bench","aerodrome","station","bus_stop","ferry_terminal","stadium","university","library","school","animal","toilets","drinking_water","post_office","building","townhall","restaurant","fast_food","cafe","bar","supermarket","convenience","books","beauty","electronics","clothes","attraction","museum","theatre","artwork"]]],[">=",["zoom"],["+",["get","min_zoom"],0]]],"layout":{"icon-image":["match",["get","kind"],"station","train_station",["get","kind"]],"text-font":["Noto Sans Regular"],"text-justify":"auto","text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-size":["interpolate",["linear"],["zoom"],17,10,19,16],"text-max-width":8,"text-offset":[1.1,0],"text-variable-anchor":["left","right"]},"paint":{"text-color":["case",["in",["get","kind"],["literal",["beach","forest","marina","park","peak","zoo","garden","bench"]]],"#20834D",["in",["get","kind"],["literal",["aerodrome","station","bus_stop","ferry_terminal"]]],"#315BCF",["in",["get","kind"],["literal",["stadium","university","library","school","animal","toilets","drinking_water","post_office","building","townhall"]]],"#6A5B8F",["in",["get","kind"],["literal",["supermarket","convenience","books","beauty","electronics","clothes"]]],"#1A8CBD",["in",["get","kind"],["literal",["restaurant","fast_food","cafe","bar"]]],"#CB6704",["in",["get","kind"],["literal",["attraction","museum","theatre","artwork"]]],"#EF56BA","#e2dfda"],"text-halo-color":"#e2dfda","text-halo-width":1}},{"id":"places_subplace","type":"symbol","source":"protomaps","source-layer":"places","filter":["in","kind","neighbourhood","macrohood"],"layout":{"symbol-sort-key":["case",["has","sort_key"],["get","sort_key"],["get","min_zoom"]],"text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-font":["Noto Sans Regular"],"text-max-width":7,"text-letter-spacing":0.1,"text-padding":["interpolate",["linear"],["zoom"],5,2,8,4,12,18,15,20],"text-size":["interpolate",["exponential",1.2],["zoom"],11,8,14,14,18,24],"text-transform":"uppercase"},"paint":{"text-color":"#8f8f8f","text-halo-color":"#e0e0e0","text-halo-width":1}},{"id":"places_region","type":"symbol","source":"protomaps","source-layer":"places","filter":["==","kind","region"],"layout":{"symbol-sort-key":["get","sort_key"],"text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-font":["Noto Sans Regular"],"text-size":["interpolate",["linear"],["zoom"],3,11,7,16],"text-radial-offset":0.2,"text-anchor":"center","text-transform":"uppercase"},"paint":{"text-color":"#b3b3b3","text-halo-color":"#e0e0e0","text-halo-width":1}},{"id":"places_locality","type":"symbol","source":"protomaps","source-layer":"places","filter":["==","kind","locality"],"layout":{"icon-image":["step",["zoom"],["case",["==",["get","capital"],"yes"],"capital","townspot"],8,""],"icon-size":0.7,"text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-font":["Noto Sans Regular"],"symbol-sort-key":["case",["has","sort_key"],["get","sort_key"],["get","min_zoom"]],"text-padding":["interpolate",["linear"],["zoom"],5,3,8,7,12,11],"text-size":["interpolate",["linear"],["zoom"],2,["case",["<",["get","population_rank"],13],8,[">=",["get","population_rank"],13],13,0],4,["case",["<",["get","population_rank"],13],10,[">=",["get","population_rank"],13],15,0],6,["case",["<",["get","population_rank"],12],11,[">=",["get","population_rank"],12],17,0],8,["case",["<",["get","population_rank"],11],11,[">=",["get","population_rank"],11],18,0],10,["case",["<",["get","population_rank"],9],12,[">=",["get","population_rank"],9],20,0],15,["case",["<",["get","population_rank"],8],12,[">=",["get","population_rank"],8],22,0]],"icon-padding":["interpolate",["linear"],["zoom"],0,0,8,4,10,8,12,6,22,2],"text-justify":"auto","text-variable-anchor":["step",["zoom"],["literal",["bottom","left","right","top"]],8,["literal",["center"]]],"text-radial-offset":0.3},"paint":{"text-color":"#5c5c5c","text-halo-color":"#e0e0e0","text-halo-width":1}},{"id":"places_country","type":"symbol","source":"protomaps","source-layer":"places","filter":["==","kind","country"],"layout":{"symbol-sort-key":["case",["has","sort_key"],["get","sort_key"],["get","min_zoom"]],"text-field":["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]],"text-font":["Noto Sans Regular"],"text-size":["interpolate",["linear"],["zoom"],2,["case",["<",["get","population_rank"],10],8,[">=",["get","population_rank"],10],12,0],6,["case",["<",["get","population_rank"],8],10,[">=",["get","population_rank"],8],18,0],8,["case",["<",["get","population_rank"],7],11,[">=",["get","population_rank"],7],20,0]],"icon-padding":["interpolate",["linear"],["zoom"],0,2,14,2,16,20,17,2,22,2],"text-transform":"uppercase"},"paint":{"text-color":"#a3a3a3","text-halo-color":"#e2dfda","text-halo-width":1}}]} diff --git a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/map/MapStyle.kt b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/map/MapStyle.kt new file mode 100644 index 0000000..32057ac --- /dev/null +++ b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/map/MapStyle.kt @@ -0,0 +1,29 @@ +package org.onebusaway.vehicletracker.ui.map + +import android.content.Context +import kotlinx.serialization.json.JsonPrimitive +import java.io.File + +/** + * Where the street style names the map file. `android/map-style/generate.mjs` writes it into the + * styles under `assets/map/`, once each. + */ +const val MAP_FILE_PLACEHOLDER = "__MAP_FILE__" + +/** The street style for [dark] or light, from the app's assets, reading [file]. */ +fun streetStyle(context: Context, dark: Boolean, file: File): String { + val template = context.assets.open(if (dark) "map/style-dark.json" else "map/style-light.json") + .bufferedReader() + .use { it.readText() } + return streetStyleJson(template, file) +} + +/** + * [template] reading its vector tiles from [file]. The path lands inside a JSON string, so it is + * escaped as one. + */ +fun streetStyleJson(template: String, file: File): String { + require(template.contains(MAP_FILE_PLACEHOLDER)) { "the street style does not name a map file" } + val escaped = JsonPrimitive(file.absolutePath).toString().removeSurrounding("\"") + return template.replace(MAP_FILE_PLACEHOLDER, escaped) +} diff --git a/android/app/src/test/kotlin/org/onebusaway/vehicletracker/ui/MapAssetsTest.kt b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/ui/MapAssetsTest.kt new file mode 100644 index 0000000..dec4cd4 --- /dev/null +++ b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/ui/MapAssetsTest.kt @@ -0,0 +1,103 @@ +package org.onebusaway.vehicletracker.ui + +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Test +import org.onebusaway.vehicletracker.ui.map.MAP_FILE_PLACEHOLDER +import java.io.File + +/** + * The street map assets as committed, read from `src/main/assets/map`: a style that names a font, + * a glyph range or a sprite the app does not ship draws a blank map or blank labels, and only the + * emulator would show it. + */ +class MapAssetsTest { + private val assets = File("src/main/assets/map") + private val font = "Noto Sans Regular" + + /** Basic Latin to letterlike symbols: every range a label in Latin letters can need. */ + private val latinRanges = listOf(0, 256, 512, 768, 7680, 8192, 8448) + + private val latinLabel = Json.parseToJsonElement( + """["case",["has","script"],["get","name:en"],["coalesce",["get","name:en"],["get","name"]]]""", + ) + + private fun style(flavor: String): Pair { + val text = File(assets, "style-$flavor.json").readText() + return text to Json.parseToJsonElement(text).jsonObject + } + + private fun JsonObject.layers() = getValue("layers").jsonArray.map { it.jsonObject } + + private fun JsonObject.labelLayers() = layers().mapNotNull { it["layout"]?.jsonObject?.takeIf { layout -> "text-field" in layout } } + + @Test fun `both styles read the map file through the placeholder, once`() { + for (flavor in listOf("light", "dark")) { + val (text, style) = style(flavor) + val source = style.getValue("sources").jsonObject.getValue("protomaps").jsonObject + assertEquals(flavor, "vector", source.getValue("type").jsonPrimitive.content) + assertEquals(flavor, "pmtiles://file://$MAP_FILE_PLACEHOLDER", source.getValue("url").jsonPrimitive.content) + assertEquals(flavor, 1, text.split(MAP_FILE_PLACEHOLDER).size - 1) + } + } + + @Test fun `both styles credit OpenStreetMap`() { + for (flavor in listOf("light", "dark")) { + val source = style(flavor).second.getValue("sources").jsonObject.getValue("protomaps").jsonObject + assertTrue(flavor, source.getValue("attribution").jsonPrimitive.content.contains("OpenStreetMap contributors")) + } + } + + @Test fun `every label is drawn in the one font the app ships`() { + for (flavor in listOf("light", "dark")) { + val labels = style(flavor).second.labelLayers() + assertTrue(flavor, labels.isNotEmpty()) + for (layout in labels) assertEquals(flavor, JsonArray(listOf(Json.parseToJsonElement("\"$font\""))), layout.getValue("text-font")) + } + } + + @Test fun `names are drawn in Latin letters only`() { + for (flavor in listOf("light", "dark")) { + val (text, style) = style(flavor) + assertFalse(flavor, text.contains("pgf:")) + val nameLabels = style.labelLayers().map { it.getValue("text-field") }.filter { it.toString().contains("\"name") } + assertTrue(flavor, nameLabels.isNotEmpty()) + for (field in nameLabels) assertEquals(flavor, latinLabel, field) + } + } + + @Test fun `glyphs and sprites are read from the app's own assets`() { + for (flavor in listOf("light", "dark")) { + val style = style(flavor).second + assertEquals("asset://map/fonts/{fontstack}/{range}.pbf", style.getValue("glyphs").jsonPrimitive.content) + assertEquals("asset://map/sprites/$flavor", style.getValue("sprite").jsonPrimitive.content) + } + } + + @Test fun `every glyph range a Latin label needs is there`() { + for (start in latinRanges) { + val range = File(assets, "fonts/$font/$start-${start + 255}.pbf") + assertTrue("missing $range", range.length() > 0) + } + } + + @Test fun `both sprite sheets are there, at both densities`() { + for (sheet in listOf("light", "light@2x", "dark", "dark@2x")) { + for (extension in listOf("json", "png")) { + assertTrue("missing $sheet.$extension", File(assets, "sprites/$sheet.$extension").length() > 0) + } + } + } + + @Test fun `the licences ship beside what they cover`() { + assertTrue(File(assets, "LICENSE.md").readText().contains("BSD 3-Clause")) + assertTrue(File(assets, "fonts/OFL.txt").readText().contains("SIL OPEN FONT LICENSE")) + } +} diff --git a/android/app/src/test/kotlin/org/onebusaway/vehicletracker/ui/MapStyleTest.kt b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/ui/MapStyleTest.kt new file mode 100644 index 0000000..0e8f01a --- /dev/null +++ b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/ui/MapStyleTest.kt @@ -0,0 +1,34 @@ +package org.onebusaway.vehicletracker.ui + +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive +import org.junit.Assert.assertEquals +import org.junit.Assert.assertThrows +import org.junit.Test +import org.onebusaway.vehicletracker.ui.map.MAP_FILE_PLACEHOLDER +import org.onebusaway.vehicletracker.ui.map.streetStyleJson +import java.io.File + +class MapStyleTest { + private val template = """{"version":8,"sources":{"protomaps":{"type":"vector","url":"pmtiles://file://$MAP_FILE_PLACEHOLDER"}},"layers":[]}""" + + private fun sourceUrl(style: String): String = + Json.parseToJsonElement(style).jsonObject["sources"]!!.jsonObject["protomaps"]!!.jsonObject["url"]!!.jsonPrimitive.content + + @Test fun `the file's path goes into the source`() { + val file = File("/data/user/0/org.onebusaway.vehicletracker/no_backup/map/map-1.pmtiles") + + assertEquals("pmtiles://file://${file.absolutePath}", sourceUrl(streetStyleJson(template, file))) + } + + @Test fun `a path JSON has to escape still makes valid JSON with the path intact`() { + val file = File("/tmp/a \"quoted\" \\ name/map.pmtiles") + + assertEquals("pmtiles://file://${file.absolutePath}", sourceUrl(streetStyleJson(template, file))) + } + + @Test fun `a style that names no file is refused`() { + assertThrows(IllegalArgumentException::class.java) { streetStyleJson("""{"version":8}""", File("/map.pmtiles")) } + } +} diff --git a/android/map-style/README.md b/android/map-style/README.md new file mode 100644 index 0000000..a76377f --- /dev/null +++ b/android/map-style/README.md @@ -0,0 +1,39 @@ +# Street map style + +`generate.mjs` builds the street map the Android app draws under the route, and +writes it to `android/app/src/main/assets/map/` with the fonts and icons it +reads. Those files are committed, so building the app needs neither Node nor +the network. Run this only to change them, with Node 18 or newer: + +```bash +npm ci +npm run generate +``` + +What it writes: + +- `style-light.json` and `style-dark.json`, from + [`@protomaps/basemaps`](https://github.com/protomaps/basemaps) 5.7.2 with + `lang: 'en'`, changed in two ways: every label is drawn in one font, Noto + Sans Regular, and names in Latin letters only (below). The tile source reads + `pmtiles://file://__MAP_FILE__`; the app puts the downloaded file's path + there (`MapStyle.kt`). +- `fonts/Noto Sans Regular/`: the 7 glyph ranges a label in Latin letters can + need, 0.66 MB. +- `sprites/`: the light and dark icon sheets, at 1x and 2x. +- `LICENSE.md` (the style is BSD-3-Clause, its design CC0, its icons MIT) and + `fonts/OFL.txt` (the SIL Open Font License), which have to ship with them. + +Everything is fetched from fixed commits of +[`protomaps/basemaps-assets`](https://github.com/protomaps/basemaps-assets) and +`protomaps/basemaps`, so a second run writes the same bytes. + +**Why Latin letters only.** The style Protomaps generates for English falls +back to a place's local name, in its own script, when it has no English name. +Each script needs its own font: Devanagari alone is 6.6 MB. Rather than ship +every one, or draw labels with their letters missing, the app draws the English +name, or the local name when it is written in Latin letters, and leaves other +places unlabelled. Labels in local scripts are a later step. + +The map files themselves are each agency's own: see section 12.6 of +`docs/deployment.md`. diff --git a/android/map-style/generate.mjs b/android/map-style/generate.mjs new file mode 100644 index 0000000..2ca7c96 --- /dev/null +++ b/android/map-style/generate.mjs @@ -0,0 +1,99 @@ +// Builds the street map style the driver app draws under the route, and copies the fonts and +// icons it reads, into ../app/src/main/assets/map/. Those files are committed, so building the +// app needs neither Node nor the network. Run this only to change them: +// +// npm ci +// npm run generate +// +// Everything is fetched from fixed commits, so running it again writes the same bytes. + +import { layers, namedFlavor } from '@protomaps/basemaps'; +import { mkdir, rm, writeFile } from 'node:fs/promises'; + +const OUT = new URL('../app/src/main/assets/map/', import.meta.url); + +const BASEMAPS_ASSETS = 'https://raw.githubusercontent.com/protomaps/basemaps-assets/028c18f713baecad011301ff7a69acc39bcc2ae7'; +const BASEMAPS_LICENSE = 'https://raw.githubusercontent.com/protomaps/basemaps/f7bcb4869434030ba23271f43e9dbcf6bfc5d63f/LICENSE.md'; + +const FONT = 'Noto Sans Regular'; + +// The glyph ranges a label in Latin letters can need: Basic Latin and Latin-1, Latin Extended-A +// and -B, spacing modifiers, combining marks (and Greek), Latin Extended Additional (Vietnamese), +// punctuation and currency, and letterlike symbols and arrows. +const GLYPH_RANGES = [0, 256, 512, 768, 7680, 8192, 8448]; + +// MapStyle.kt replaces this with the downloaded file's path. +const MAP_FILE = '__MAP_FILE__'; + +const ATTRIBUTION = '© OpenStreetMap contributors'; + +// The English name, or the name itself when Protomaps has not marked it as written in another +// script; otherwise no label. A non-Latin script needs a font of its own, several megabytes +// each, so until there is a way to ship one per agency such places go unlabelled rather than +// being drawn with their letters missing. +const LATIN_LABEL = ['case', ['has', 'script'], ['get', 'name:en'], ['coalesce', ['get', 'name:en'], ['get', 'name']]]; + +const NAME_FIELDS = ['name', 'name:en', 'pgf:name', 'name2', 'pgf:name2', 'name3', 'pgf:name3', 'script']; + +function readsNames(expression) { + const json = JSON.stringify(expression); + return NAME_FIELDS.some((field) => json.includes(`"${field}"`)); +} + +function streetStyle(flavor) { + const style = { + version: 8, + glyphs: 'asset://map/fonts/{fontstack}/{range}.pbf', + sprite: `asset://map/sprites/${flavor}`, + sources: { + protomaps: { type: 'vector', url: `pmtiles://file://${MAP_FILE}`, attribution: ATTRIBUTION }, + }, + layers: layers('protomaps', namedFlavor(flavor), { lang: 'en' }), + }; + for (const layer of style.layers) { + const layout = layer.layout; + if (!layout || !('text-field' in layout)) continue; + if (readsNames(layout['text-field'])) layout['text-field'] = LATIN_LABEL; + layout['text-font'] = [FONT]; + } + const json = JSON.stringify(style); + // Anything left over here is a label the app has no font for. + for (const leftover of ['Noto Sans Medium', 'Noto Sans Italic', 'Devanagari', 'pgf:']) { + if (json.includes(leftover)) throw new Error(`style-${flavor}.json still mentions ${leftover}`); + } + return json; +} + +async function fetchBytes(url) { + const response = await fetch(url); + if (!response.ok) throw new Error(`${url}: HTTP ${response.status}`); + return Buffer.from(await response.arrayBuffer()); +} + +async function save(path, bytes) { + const file = new URL(path, OUT); + await mkdir(new URL('.', file), { recursive: true }); + // Text files end with a newline, as the rest of the repository's do. + if (/\.(json|md|txt)$/.test(path) && bytes.at(-1) !== 0x0a) bytes = Buffer.concat([bytes, Buffer.from('\n')]); + await writeFile(file, bytes); + console.log(`${path} (${bytes.length} bytes)`); +} + +await rm(OUT, { recursive: true, force: true }); + +for (const flavor of ['light', 'dark']) { + await save(`style-${flavor}.json`, Buffer.from(streetStyle(flavor) + '\n')); + for (const sheet of [flavor, `${flavor}@2x`]) { + for (const extension of ['json', 'png']) { + await save(`sprites/${sheet}.${extension}`, await fetchBytes(`${BASEMAPS_ASSETS}/sprites/v4/${sheet}.${extension}`)); + } + } +} + +for (const start of GLYPH_RANGES) { + const range = `${start}-${start + 255}.pbf`; + await save(`fonts/${FONT}/${range}`, await fetchBytes(`${BASEMAPS_ASSETS}/fonts/${encodeURIComponent(FONT)}/${range}`)); +} + +await save('fonts/OFL.txt', await fetchBytes(`${BASEMAPS_ASSETS}/fonts/OFL.txt`)); +await save('LICENSE.md', await fetchBytes(BASEMAPS_LICENSE)); diff --git a/android/map-style/package-lock.json b/android/map-style/package-lock.json new file mode 100644 index 0000000..848f0b1 --- /dev/null +++ b/android/map-style/package-lock.json @@ -0,0 +1,22 @@ +{ + "name": "map-style", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "map-style", + "dependencies": { + "@protomaps/basemaps": "5.7.2" + } + }, + "node_modules/@protomaps/basemaps": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@protomaps/basemaps/-/basemaps-5.7.2.tgz", + "integrity": "sha512-K1Yk6bWdULulYg+R2QRVXx4NzJZan5YQhpejEG0c1/sXruJrfPIPZuakpf3jwAgVmjIRVQwAv+yRafDeN0aaUQ==", + "license": "BSD-3-Clause", + "bin": { + "generate_style": "src/cli.ts" + } + } + } +} diff --git a/android/map-style/package.json b/android/map-style/package.json new file mode 100644 index 0000000..26a1a04 --- /dev/null +++ b/android/map-style/package.json @@ -0,0 +1,11 @@ +{ + "name": "map-style", + "private": true, + "type": "module", + "scripts": { + "generate": "node generate.mjs" + }, + "dependencies": { + "@protomaps/basemaps": "5.7.2" + } +} From 8ff907c7075c1c8db1a629672f75dbc7f66bc7ea Mon Sep 17 00:00:00 2001 From: DIVESH PATIL Date: Tue, 6 Oct 2026 15:25:16 +0530 Subject: [PATCH 05/11] feat(android): draw streets under the route from the downloaded map --- .../vehicletracker/ui/map/RouteMap.kt | 159 ++++++++++++++---- .../ui/tracking/TrackingScreen.kt | 2 +- .../ui/tracking/TrackingViewModel.kt | 8 +- android/app/src/main/res/values/strings.xml | 3 + .../onebusaway/vehicletracker/data/Fakes.kt | 6 + .../vehicletracker/ui/ViewModelsTest.kt | 21 ++- 6 files changed, 161 insertions(+), 38 deletions(-) diff --git a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/map/RouteMap.kt b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/map/RouteMap.kt index 3bd7f8d..4fc7096 100644 --- a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/map/RouteMap.kt +++ b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/map/RouteMap.kt @@ -21,6 +21,7 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect @@ -56,6 +57,7 @@ import org.maplibre.android.maps.MapView import org.maplibre.android.maps.Style import org.maplibre.android.style.expressions.Expression import org.maplibre.android.style.layers.CircleLayer +import org.maplibre.android.style.layers.Layer import org.maplibre.android.style.layers.LineLayer import org.maplibre.android.style.layers.Property import org.maplibre.android.style.layers.PropertyFactory.circleColor @@ -77,9 +79,14 @@ import org.maplibre.android.style.sources.GeoJsonSource import org.maplibre.geojson.FeatureCollection import org.maplibre.geojson.Point import org.onebusaway.vehicletracker.R +import org.onebusaway.vehicletracker.data.map.MapFailure +import org.onebusaway.vehicletracker.data.map.MapFileState +import org.onebusaway.vehicletracker.data.map.downloadPercent import org.onebusaway.vehicletracker.engine.Adherence +import org.onebusaway.vehicletracker.engine.GeoPoint import org.onebusaway.vehicletracker.engine.ShapeGeometry import org.onebusaway.vehicletracker.engine.TripGeometry +import java.io.File import kotlin.math.roundToInt // The sizes and the off-route look are iOS's, from RouteMapViewController and MapGlyphs @@ -124,10 +131,11 @@ fun Context.glEsVersion(): Int = getSystemService(ActivityManager::class.java).d * The trip on a map, as spec §6.3 has it: the shape in the route colour over a darker casing, * the stops with the next one enlarged and named, the vehicle pointed along its course, and the * matched position while it is off the route. The camera follows heading-up with the vehicle a - * third of the way up. There is no street map under it yet, only a plain background. + * third of the way up. Under it is the agency's street map once the file is on the phone, and a + * plain background until then, with a note while the first copy downloads. */ @Composable -fun RouteMap(geometry: TripGeometry, adherence: Adherence?, modifier: Modifier = Modifier) { +fun RouteMap(geometry: TripGeometry, adherence: Adherence?, mapFile: MapFileState, modifier: Modifier = Modifier) { val context = LocalContext.current val dark = isSystemInDarkTheme() val labelColor = MaterialTheme.colorScheme.onSurface.toArgb() @@ -143,6 +151,8 @@ fun RouteMap(geometry: TripGeometry, adherence: Adherence?, modifier: Modifier = onDispose { lifecycle.removeObserver(observer) } } LaunchedEffect(geometry, adherence) { controller.show(geometry, adherence) } + val streetFile = (mapFile as? MapFileState.Ready)?.file + LaunchedEffect(streetFile) { controller.useStreets(streetFile) } // Restarted by every drag, so the map goes back only once the driver has left it alone. LaunchedEffect(controller.following, controller.drags) { if (!controller.following) { @@ -157,6 +167,7 @@ fun RouteMap(geometry: TripGeometry, adherence: Adherence?, modifier: Modifier = modifier = Modifier.fillMaxSize(), onRelease = { controller.destroy() }, ) + MapFileNote(mapFile, Modifier.align(Alignment.TopStart).padding(8.dp)) if (!controller.following) { FilledTonalButton( onClick = controller::follow, @@ -168,6 +179,26 @@ fun RouteMap(geometry: TripGeometry, adherence: Adherence?, modifier: Modifier = } } +/** A line over the map while it has no streets to show yet. Nothing once it has, or when the agency has no map. */ +@Composable +private fun MapFileNote(state: MapFileState, modifier: Modifier = Modifier) { + val text = when (state) { + is MapFileState.Downloading -> stringResource(R.string.tracking_map_downloading, downloadPercent(state.bytes, state.total)) + is MapFileState.Failed -> stringResource( + if (state.reason == MapFailure.NO_SPACE) R.string.tracking_map_no_space else R.string.tracking_map_retrying, + ) + MapFileState.None, is MapFileState.Ready -> return + } + Surface( + modifier = modifier, + shape = MaterialTheme.shapes.small, + color = MaterialTheme.colorScheme.surface.copy(alpha = 0.9f), + shadowElevation = 2.dp, + ) { + Text(text, Modifier.padding(horizontal = 10.dp, vertical = 6.dp), style = MaterialTheme.typography.labelMedium) + } +} + /** * Owns the [MapView] and pushes the trip and each fix into it: a port of iOS's * `RouteMapViewController`. It touches the map only for what changed since the fix before, which @@ -175,7 +206,7 @@ fun RouteMap(geometry: TripGeometry, adherence: Adherence?, modifier: Modifier = */ private class RouteMapController( private val context: Context, - dark: Boolean, + private val dark: Boolean, private val labelColor: Int, private val haloColor: Int, ) { @@ -195,6 +226,14 @@ private class RouteMapController( private var started = false private var resumed = false private var destroyed = false + private var vehicleActive = false + + /** + * The street map file the map reads, from the first one it is given. It never changes after + * that: MapLibre crashes if the file under an open map is replaced (maplibre-native #3658), so + * a newer file waits until the screen opens again. + */ + private var streetFile: File? = null private var latestGeometry: TripGeometry? = null private var latestAdherence: Adherence? = null @@ -231,21 +270,44 @@ private class RouteMapController( isRotateGesturesEnabled = false isTiltGesturesEnabled = false isCompassEnabled = false - // Nothing on the plain background needs crediting. isLogoEnabled = false - isAttributionEnabled = false } map.addOnCameraMoveStartedListener { reason -> if (reason == MapLibreMap.OnCameraMoveStartedListener.REASON_API_GESTURE) drags++ } - map.setStyle(Style.Builder().fromJson(plainStyle(dark))) { style -> - if (destroyed) return@setStyle - this.style = style - addLayers(style) - activateVehicle(map, style) - render() - } + loadStyle(map) + } + } + + /** Puts the streets in [file] under the trip, unless the map already has a file. */ + fun useStreets(file: File?) { + if (file == null || streetFile != null || destroyed) return + streetFile = file + map?.let(::loadStyle) + } + + private fun loadStyle(map: MapLibreMap) { + val file = streetFile + val json = if (file != null) streetStyle(context, dark, file) else plainStyle(dark) + map.setStyle(Style.Builder().fromJson(json)) { style -> + // A plain style that finishes after the streets were asked for is already being replaced. + if (destroyed || (file == null) != (streetFile == null)) return@setStyle + onStyleLoaded(map, style, streets = file != null) + } + } + + private fun onStyleLoaded(map: MapLibreMap, style: Style, streets: Boolean) { + this.style = style + // Above every road but below the street names, so they stay readable over the route. + addLayers(style, below = if (streets) style.layers.firstOrNull { it is SymbolLayer }?.id else null) + // OpenStreetMap's licence asks for its credit wherever its data is on screen. + map.uiSettings.isAttributionEnabled = streets + if (!vehicleActive) { + activateVehicle(map, style) + vehicleActive = true } + repaint(style) + render() } fun show(geometry: TripGeometry, adherence: Adherence?) { @@ -327,21 +389,27 @@ private class RouteMapController( state = next } - private fun addLayers(style: Style) { + /** + * The trip's layers. The line, its casing and the stops go below the layer called [below] when + * there is one; the next stop's name and the matched position always go on top. + */ + private fun addLayers(style: Style, below: String?) { + fun addRouteLayer(layer: Layer) = if (below != null) style.addLayerBelow(layer, below) else style.addLayer(layer) + style.addSource(GeoJsonSource(ROUTE_SOURCE)) style.addSource(GeoJsonSource(STOPS_SOURCE)) style.addSource(GeoJsonSource(NEXT_STOP_SOURCE)) style.addSource(GeoJsonSource(SNAPPED_SOURCE)) // Casing first: layers draw in the order they are added, so the line sits centred on the // wider one underneath it. - style.addLayer( + addRouteLayer( LineLayer(CASING_LAYER, ROUTE_SOURCE).withProperties( lineWidth(CASING_WIDTH), lineCap(Property.LINE_CAP_ROUND), lineJoin(Property.LINE_JOIN_ROUND), ), ) - style.addLayer( + addRouteLayer( LineLayer(ROUTE_LAYER, ROUTE_SOURCE).withProperties( lineWidth(ROUTE_WIDTH), lineCap(Property.LINE_CAP_ROUND), @@ -349,7 +417,7 @@ private class RouteMapController( ), ) val isNext = Expression.eq(Expression.get(NEXT_STOP_PROPERTY), Expression.literal(true)) - style.addLayer( + addRouteLayer( CircleLayer(STOPS_LAYER, STOPS_SOURCE).withProperties( circleRadius(Expression.switchCase(isNext, Expression.literal(NEXT_STOP_RADIUS), Expression.literal(STOP_RADIUS))), circleStrokeColor(Color.WHITE), @@ -430,11 +498,7 @@ private class RouteMapController( heading = FollowHeading() shape = ShapeGeometry.of(geometry.shapePoints) - val routeColor = routeLineColor(geometry.routeColor) - style.getSourceAs(ROUTE_SOURCE)?.setGeoJson(routeLineString(geometry.shapePoints)) - style.getLayer(CASING_LAYER)?.setProperties(lineColor(casingColor(routeColor)), lineOpacity(1f)) - style.getLayer(ROUTE_LAYER)?.setProperties(lineColor(routeColor), lineOpacity(1f)) - style.getLayer(STOPS_LAYER)?.setProperties(circleColor(routeColor)) + paintRoute(style, geometry) drawStops(style, geometry, nextStopIndex = -1) setSnappedVisible(style, visible = false) @@ -465,19 +529,8 @@ private class RouteMapController( // The line is only ever drawn two ways, so it is restyled only when it crosses between // them, or on the first fix, which decides which. - if (previous?.isOnRoute != next.isOnRoute) { - val opacity = if (next.isOnRoute) 1f else OFF_ROUTE_OPACITY - style.getLayer(CASING_LAYER)?.setProperties(lineOpacity(opacity)) - style.getLayer(ROUTE_LAYER)?.setProperties(lineOpacity(opacity)) - component.applyStyle(vehicleOptions(next.isOnRoute)) - // applyStyle also sets the map's padding to the options' own, none, which would drop the - // vehicle to the middle. Put the follow padding straight back, in the same frame. - if (following && state != null) applyFollowPadding(animationMs = 0) - setSnappedVisible(style, visible = !next.isOnRoute) - } - next.snapped?.let { snapped -> - style.getSourceAs(SNAPPED_SOURCE)?.setGeoJson(Point.fromLngLat(snapped.lon, snapped.lat)) - } + if (previous?.isOnRoute != next.isOnRoute) paintOnRoute(style, next.isOnRoute) + next.snapped?.let { drawSnapped(style, it) } if (previous?.nextStopIndex != next.nextStopIndex) drawStops(style, geometry, next.nextStopIndex) if (previous == null) { @@ -487,6 +540,44 @@ private class RouteMapController( } } + /** + * Draws the trip on a style that has just replaced another, as it was on the old one: a new + * style starts with none of the trip's data. The camera stays where it is. + */ + private fun repaint(style: Style) { + val geometry = drawnGeometry ?: return + val current = state + paintRoute(style, geometry) + drawStops(style, geometry, current?.nextStopIndex ?: -1) + paintOnRoute(style, current?.isOnRoute ?: true) + current?.snapped?.let { drawSnapped(style, it) } + } + + /** The shape in the route colour over its darker casing, and the stops in the same colour. */ + private fun paintRoute(style: Style, geometry: TripGeometry) { + val routeColor = routeLineColor(geometry.routeColor) + style.getSourceAs(ROUTE_SOURCE)?.setGeoJson(routeLineString(geometry.shapePoints)) + style.getLayer(CASING_LAYER)?.setProperties(lineColor(casingColor(routeColor)), lineOpacity(1f)) + style.getLayer(ROUTE_LAYER)?.setProperties(lineColor(routeColor), lineOpacity(1f)) + style.getLayer(STOPS_LAYER)?.setProperties(circleColor(routeColor)) + } + + /** Off the route the line fades, the vehicle turns grey and the matched position shows, as on iOS. */ + private fun paintOnRoute(style: Style, onRoute: Boolean) { + val opacity = if (onRoute) 1f else OFF_ROUTE_OPACITY + style.getLayer(CASING_LAYER)?.setProperties(lineOpacity(opacity)) + style.getLayer(ROUTE_LAYER)?.setProperties(lineOpacity(opacity)) + map?.locationComponent?.applyStyle(vehicleOptions(onRoute)) + // applyStyle also sets the map's padding to the options' own, none, which would drop the + // vehicle to the middle. Put the follow padding straight back, in the same frame. + if (following && state != null) applyFollowPadding(animationMs = 0) + setSnappedVisible(style, visible = !onRoute) + } + + private fun drawSnapped(style: Style, snapped: GeoPoint) { + style.getSourceAs(SNAPPED_SOURCE)?.setGeoJson(Point.fromLngLat(snapped.lon, snapped.lat)) + } + private fun drawStops(style: Style, geometry: TripGeometry, nextStopIndex: Int) { style.getSourceAs(STOPS_SOURCE)?.setGeoJson(stopFeatures(geometry.stops, nextStopIndex)) val nextStop = geometry.stops.getOrNull(nextStopIndex) diff --git a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/tracking/TrackingScreen.kt b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/tracking/TrackingScreen.kt index 7dc0957..cfe1cb7 100644 --- a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/tracking/TrackingScreen.kt +++ b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/tracking/TrackingScreen.kt @@ -69,7 +69,7 @@ fun TrackingScreen( // With no geometry there is no route to draw, and the panel already says so. val geometry = state.tracking.geometry if (mapSupported && geometry != null) { - RouteMap(geometry, state.tracking.adherence, modifier) + RouteMap(geometry, state.tracking.adherence, state.mapFile, modifier) } else { Spacer(modifier) } diff --git a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/tracking/TrackingViewModel.kt b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/tracking/TrackingViewModel.kt index 0454a2e..34991fc 100644 --- a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/tracking/TrackingViewModel.kt +++ b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/tracking/TrackingViewModel.kt @@ -14,6 +14,8 @@ import org.onebusaway.vehicletracker.data.ActiveTrip import org.onebusaway.vehicletracker.data.TrackingRepository import org.onebusaway.vehicletracker.data.TrackingState import org.onebusaway.vehicletracker.data.TripStateStore +import org.onebusaway.vehicletracker.data.map.MapFileSource +import org.onebusaway.vehicletracker.data.map.MapFileState import javax.inject.Inject data class TrackingUiState( @@ -21,6 +23,7 @@ data class TrackingUiState( val activeTrip: ActiveTrip? = null, val ending: Boolean = false, val endTripError: Boolean = false, + val mapFile: MapFileState = MapFileState.None, ) @HiltViewModel @@ -28,13 +31,14 @@ class TrackingViewModel @Inject constructor( private val trackingRepository: TrackingRepository, tripStateStore: TripStateStore, private val tripEnder: TripEnder, + mapFiles: MapFileSource, ) : ViewModel() { private val _uiState = MutableStateFlow(TrackingUiState()) val uiState: StateFlow = _uiState.asStateFlow() init { - combine(trackingRepository.state, tripStateStore.activeTrip, tripEnder.state) { tracking, trip, end -> - TrackingUiState(tracking = tracking, activeTrip = trip, ending = end.ending, endTripError = end.failed) + combine(trackingRepository.state, tripStateStore.activeTrip, tripEnder.state, mapFiles.state) { tracking, trip, end, mapFile -> + TrackingUiState(tracking = tracking, activeTrip = trip, ending = end.ending, endTripError = end.failed, mapFile = mapFile) } .onEach { _uiState.value = it } .launchIn(viewModelScope) diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index f8896d3..6560cc8 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -99,6 +99,9 @@ Schedule unavailable Re-center + Downloading map, %1$d%% + Not enough space for the map + Map not downloaded yet, will retry Resume Shift? diff --git a/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/Fakes.kt b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/Fakes.kt index e59390d..7c70f68 100644 --- a/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/Fakes.kt +++ b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/Fakes.kt @@ -1,6 +1,8 @@ package org.onebusaway.vehicletracker.data import kotlinx.coroutines.flow.MutableStateFlow +import org.onebusaway.vehicletracker.data.map.MapFileSource +import org.onebusaway.vehicletracker.data.map.MapFileState import org.onebusaway.vehicletracker.engine.TripGeometry import org.onebusaway.vehicletracker.service.ServiceController import java.security.GeneralSecurityException @@ -41,6 +43,10 @@ class FakeCryptor : Cryptor { } } +class FakeMapFileSource : MapFileSource { + override val state = MutableStateFlow(MapFileState.None) +} + class FakeSessionStore : SessionStore { val state = MutableStateFlow(Session(null, null, null)) override val session = state diff --git a/android/app/src/test/kotlin/org/onebusaway/vehicletracker/ui/ViewModelsTest.kt b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/ui/ViewModelsTest.kt index afb5fba..bdb8e71 100644 --- a/android/app/src/test/kotlin/org/onebusaway/vehicletracker/ui/ViewModelsTest.kt +++ b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/ui/ViewModelsTest.kt @@ -25,6 +25,7 @@ import org.junit.Test import org.onebusaway.vehicletracker.data.* import org.onebusaway.vehicletracker.data.api.ApiFactory import org.onebusaway.vehicletracker.data.api.TrackerApiProvider +import org.onebusaway.vehicletracker.data.map.MapFileState import org.onebusaway.vehicletracker.engine.AdherenceEvaluator import org.onebusaway.vehicletracker.engine.TripFixtures import org.onebusaway.vehicletracker.engine.TripGeometry @@ -41,6 +42,7 @@ import org.onebusaway.vehicletracker.ui.tracking.TrackingViewModel import org.onebusaway.vehicletracker.ui.tracking.TripEnder import org.onebusaway.vehicletracker.ui.vehicles.VehicleViewModel import org.onebusaway.vehicletracker.ui.vehicles.VehiclesUiState +import java.io.File import java.io.IOException import java.time.Duration import java.time.OffsetDateTime @@ -755,6 +757,7 @@ class ViewModelsTest { /** Builds a [TrackingViewModel] on an active T1 whose server answers each end with [endResponse]. */ private fun withTrackingViewModel( endResponse: MockResponse = MockResponse().setBody("""{"status":"trip ended"}"""), + mapFiles: FakeMapFileSource = FakeMapFileSource(), block: (TrackingViewModel, TrackingRepository, FakeTripGeometryStore) -> Unit, ) { val server = MockWebServer().apply { start() } @@ -766,7 +769,7 @@ class ViewModelsTest { val geometryStore = FakeTripGeometryStore().apply { stored = TripFixtures.t1 } val tripRepository = TripRepository(provider, tripState, FakeVehiclePrefsStore(), clock = { 0L }) val tripEnder = TripEnder(tripRepository, tripState, geometryStore, FakeServiceController()) - val vm = TrackingViewModel(tracking, tripState, tripEnder) + val vm = TrackingViewModel(tracking, tripState, tripEnder, mapFiles) awaitCondition(description = "active trip loaded") { vm.uiState.value.activeTrip != null } block(vm, tracking, geometryStore) } finally { @@ -787,6 +790,22 @@ class ViewModelsTest { } } + @Test fun `the map file's state reaches the tracking screen`() = runTest(dispatcher) { + val mapFiles = FakeMapFileSource() + withTrackingViewModel(mapFiles = mapFiles) { vm, _, _ -> + assertEquals(MapFileState.None, vm.uiState.value.mapFile) + + mapFiles.state.value = MapFileState.Downloading(40, 100) + dispatcher.scheduler.advanceUntilIdle() + assertEquals(MapFileState.Downloading(40, 100), vm.uiState.value.mapFile) + + val file = File("/data/map/map-1.pmtiles") + mapFiles.state.value = MapFileState.Ready(file) + dispatcher.scheduler.advanceUntilIdle() + assertEquals(MapFileState.Ready(file), vm.uiState.value.mapFile) + } + } + @Test fun `the tracking service is told while the screen is visible`() = runTest(dispatcher) { withTrackingViewModel { vm, tracking, _ -> assertEquals(false, tracking.liveView.value) From 044fb71c77768d4061586fbf26195b0dc62acaa3 Mon Sep 17 00:00:00 2001 From: DIVESH PATIL Date: Tue, 6 Oct 2026 15:25:44 +0530 Subject: [PATCH 06/11] docs: explain how to make and host the driver map file --- docs/android-smoke-test.md | 40 +++++++++++++++++++++++++++++--- docs/configuration.md | 8 +++---- docs/deployment.md | 47 ++++++++++++++++++++++++++++++++++++-- 3 files changed, 86 insertions(+), 9 deletions(-) diff --git a/docs/android-smoke-test.md b/docs/android-smoke-test.md index e0f3215..7dbfeb7 100644 --- a/docs/android-smoke-test.md +++ b/docs/android-smoke-test.md @@ -376,9 +376,10 @@ then start `T1` as in Check 1 (it is badged **Next** until `$ST1`). ### Check 2c: The map draws the trip and follows the vehicle The Tracking screen draws the run on a map between the adherence panel and the -trip counters: spec §6.3 of the iOS design, with the iOS map's sizes. There is -no street map under it yet, only a plain background. Run this with `T1` started -and the drive loop from Check 2b going. +trip counters: spec §6.3 of the iOS design, with the iOS map's sizes. With +`MAP_PMTILES_URL` unset, as in step 1, it draws on a plain background; Check 2d +adds the street map. Run this with `T1` started and the drive loop from Check 2b +going. 1. Watch the map from the moment the trip starts, through the detour, to ST3. 2. Partway along, drag the map sideways with one finger, then leave it alone. @@ -420,6 +421,39 @@ On the emulator the map stays north-up: `adb emu geo fix` sends a position with no course. On a phone it turns to keep the direction of travel pointing up, and holds the last direction while the vehicle stands still. +### Check 2d: The street map downloads, and works offline + +This needs the [`pmtiles`](https://github.com/protomaps/go-pmtiles) tool. Cut a +small map around the fixture's route from a Protomaps build (pick a date listed +at [maps.protomaps.com/builds](https://maps.protomaps.com/builds)), serve it from +your machine, and restart the server from step 1 pointing at it. The debug build +may fetch it over plain `http` from `10.0.2.2`; a release build needs `https`. + +```bash +pmtiles extract https://build.protomaps.com/.pmtiles /tmp/smoke.pmtiles \ + --bbox=-122.36,47.59,-122.30,47.62 --maxzoom=15 +(cd /tmp && python3 -m http.server 8092 &) +export MAP_PMTILES_URL=http://10.0.2.2:8092/smoke.pmtiles +# stop the server from step 1, then start it again the same way +``` + +With `T1` started and the drive loop from Check 2b going, switch to another app +and back, so the app asks the server for the map. Then turn on airplane mode, +force-stop the app, open it again and resume the shift. + +**Expected outcome:** + +- **While it downloads:** "Downloading map" and a percentage at the top left of + the map, over the plain background. +- **Once it is done:** streets, road names and places appear under the route + without the map jumping, and the vehicle stays a third of the way up. Street + names are drawn over the route line; the stops, the next stop's name and the + vehicle are drawn over the street names. An ⓘ at the bottom left opens + "© OpenStreetMap contributors". +- **Offline:** after the restart in airplane mode the banner says "No + connection", and the streets are all still there. +- **Dark theme** (Check 2c, step 4): the streets turn dark too. + ### Check 3 — Network loss flips the status red, recovery flips it back green 1. Disable networking on the device/emulator (physical airplane mode, or on diff --git a/docs/configuration.md b/docs/configuration.md index 54761ed..9ec7698 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -81,10 +81,10 @@ Rider mode, when on, verifies riders against the same schedule. ## Driver app map -Optional, and not used yet: the Android app does not download the map file, so -for now this only sets what `GET /api/v1/map` returns. The file is a PMTiles -map of the agency's service area, hosted wherever the agency likes; the server -never downloads it. +Optional. The PMTiles file the driver app downloads for its offline street +map, hosted wherever the agency likes; the server never downloads it. +[Deployment §12.6](deployment.md#126-offline-street-map) covers making and +hosting one. Unset, the app draws the route on a plain background. | Variable | Default | Status | Purpose | |---|---|---|---| diff --git a/docs/deployment.md b/docs/deployment.md index 56124a1..03030d5 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -84,7 +84,7 @@ Rules that apply to the whole table: | Variable | Default | Purpose | |---|---|---| -| `MAP_PMTILES_URL` | unset | Not used yet: the Android app does not download the file, so for now this only sets what `GET /api/v1/map` returns. Set it to an `https` URL of a PMTiles map file covering your service area, hosted wherever you like; the server never fetches the file. A value that is not an `http(s)` URL with a host, or that contains a username or password, stops the server at startup. Plain `http` is accepted with a warning, but Android release builds refuse to download over it. | +| `MAP_PMTILES_URL` | unset | The street map the driver app shows under the route: an `https` URL of a PMTiles file covering your service area, hosted wherever you like. Section [12.6](#126-offline-street-map) says how to make and host one. The server never fetches the file; it hands the URL to drivers at `GET /api/v1/map`. Unset, the app draws the route on a plain background. A value that is not an `http(s)` URL with a host, or that contains a username or password, stops the server at startup. Plain `http` is accepted with a warning, but Android release builds refuse to download over it. | ### Admin UI and proxying @@ -819,7 +819,8 @@ targets Java 17, so build with a JDK 17 toolchain. The output is but defines no `signingConfig`, so signing is the agency's job. Android will not install an unsigned APK. -The APK is about 20 MB, nearly all of it the map library. The release build +The APK is about 21 MB, nearly all of it the map library. The street map is not +in it: each phone downloads your map file (section 12.6). The release build carries that library for ARM phones only (`arm64-v8a` and `armeabi-v7a`), which halves the download; it will not install on an x86 emulator, where the debug build is the one to use. The map needs OpenGL ES 3.0. On a phone without it the @@ -929,3 +930,45 @@ which build a driver is running when you are debugging a report from the field. Then tell drivers three things: the server URL, their email, and their password. The app's [smoke-test walkthrough](android-smoke-test.md) is a useful script for verifying a new build end to end before you distribute it. + +### 12.6 Offline street map + +The Tracking screen can draw the trip over a street map that works with no +signal: the app downloads one map file of your service area and reads it from +the phone. Without one it draws the route on a plain background. You host the +file; the server only tells the app where it is (`MAP_PMTILES_URL`, section 3). + +**Make the file.** Cut your area out of a [Protomaps](https://protomaps.com) +daily build with the [`pmtiles`](https://github.com/protomaps/go-pmtiles) tool: + +```bash +pmtiles extract https://build.protomaps.com/.pmtiles agency.pmtiles \ + --bbox=,,, --maxzoom=15 +``` + +Builds are listed at [maps.protomaps.com/builds](https://maps.protomaps.com/builds) +and each is kept for about a week. It has to be a Protomaps build: the app's +style is made for its layers, and any other file draws a blank map. In October +2026 a city like Seattle came to about 22 MB and all of King County Metro's +service area to 93 MB. `--maxzoom=14` makes the file about 60% smaller, with a +little less detail when fully zoomed in: worth it when drivers use mobile data. + +**Host it.** Any HTTPS host that serves a static file works: your own web +server, object storage, a release asset. It has to send an `ETag` or +`Last-Modified` header and answer byte-range requests, as common hosts do; then +a download cut off part-way carries on where it stopped. Set `MAP_PMTILES_URL` +to the file's URL and restart the server. + +**What phones do.** Once the driver has signed in, the app downloads the file +in the background, on any connection, and shows "Downloading map" on the +Tracking screen until it is done. It needs the file's size plus 50 MB free, and +says so when the phone is too full. Once a day it asks your host whether the +file has changed. To update the map, replace the file at the same URL: within a +day phones fetch the new version quietly and show it the next time the Tracking +screen opens. To drop the map, unset `MAP_PMTILES_URL`: within a day phones +stop using it, and they delete their copy the next time the app starts. + +Street names are drawn in Latin letters only: the English name where +OpenStreetMap has one, or else the local name when it is written in Latin +letters. A place named only in another script, such as Devanagari, has no label +for now. From 3f4d0ec45a0e260506f29032dd34bae13bacb10f Mon Sep 17 00:00:00 2001 From: DIVESH PATIL Date: Tue, 6 Oct 2026 15:57:43 +0530 Subject: [PATCH 07/11] fix(android): draw nothing while the street style loads --- .../kotlin/org/onebusaway/vehicletracker/ui/map/RouteMap.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/map/RouteMap.kt b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/map/RouteMap.kt index 4fc7096..6a0463e 100644 --- a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/map/RouteMap.kt +++ b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/ui/map/RouteMap.kt @@ -289,6 +289,10 @@ private class RouteMapController( private fun loadStyle(map: MapLibreMap) { val file = streetFile val json = if (file != null) streetStyle(context, dark, file) else plainStyle(dark) + // setStyle retires the current style at once, and MapLibre throws on any later use of it. + // Until the new one has loaded there is nothing to draw on: render() waits, and + // onStyleLoaded puts the trip back. + style = null map.setStyle(Style.Builder().fromJson(json)) { style -> // A plain style that finishes after the streets were asked for is already being replaced. if (destroyed || (file == null) != (streetFile == null)) return@setStyle From c8e80995b565715b1976b4115f652f719585d696 Mon Sep 17 00:00:00 2001 From: DIVESH PATIL Date: Tue, 6 Oct 2026 15:58:18 +0530 Subject: [PATCH 08/11] fix(android): log a failed map check instead of crashing the app --- .../vehicletracker/data/map/MapFileState.kt | 3 ++ .../vehicletracker/data/map/MapRepository.kt | 21 +++++++++-- .../data/map/MapRepositoryTest.kt | 37 +++++++++++++++++++ 3 files changed, 58 insertions(+), 3 deletions(-) diff --git a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapFileState.kt b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapFileState.kt index 87c1497..71d9ee7 100644 --- a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapFileState.kt +++ b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapFileState.kt @@ -26,6 +26,9 @@ enum class MapFailure { /** What the host sent is not a complete vector map file. */ INVALID_FILE, + + /** Anything else, such as `map.json` failing to save. It is logged, and the next refresh tries again. */ + UNEXPECTED, } /** The street map's state, as the tracking screen reads it. */ diff --git a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapRepository.kt b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapRepository.kt index d682ca1..02de340 100644 --- a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapRepository.kt +++ b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/MapRepository.kt @@ -1,6 +1,7 @@ package org.onebusaway.vehicletracker.data.map import android.util.Log +import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job import kotlinx.coroutines.delay @@ -47,7 +48,7 @@ class MapRepository @Inject constructor( private val _state = MutableStateFlow(MapFileState.None) override val state: StateFlow = _state.asStateFlow() - private val started: Job = scope.launch { start() } + private val started: Job = scope.launch { orLogged("Reading the map record", otherwise = {}) { start() } } private val lock = Any() private var running: Job? = null @@ -78,7 +79,7 @@ class MapRepository @Inject constructor( private suspend fun keepTrying() { var wait = FIRST_RETRY_MS - while (check() == Outcome.RETRY) { + while (orLogged("The map check", otherwise = { failed(MapFailure.UNEXPECTED, retry = false) }) { check() } == Outcome.RETRY) { delay(wait) wait = (wait * 2).coerceAtMost(LAST_RETRY_MS) } @@ -148,7 +149,7 @@ class MapRepository @Inject constructor( store.save(store.load().copy(pending = null, rejected = RejectedMap(url, result.version ?: FileVersion(), now()))) failed(MapFailure.INVALID_FILE, retry = false) } - MapFailure.NO_SPACE -> failed(MapFailure.NO_SPACE, retry = false) + MapFailure.NO_SPACE, MapFailure.UNEXPECTED -> failed(result.reason, retry = false) MapFailure.NETWORK -> failed(MapFailure.NETWORK) } } @@ -166,4 +167,18 @@ class MapRepository @Inject constructor( } private fun isRecent(epochSec: Long): Boolean = now() - epochSec in 0 until CHECK_EVERY_S + + /** + * Runs [block], logging what it throws, such as an IOException from a save on a full phone, + * and answering [otherwise] instead. Nothing above this catches it, and an exception that + * leaves the app's scope crashes the app. Cancellation passes through. + */ + private inline fun orLogged(what: String, otherwise: () -> T, block: () -> T): T = try { + block() + } catch (e: CancellationException) { + throw e + } catch (e: Exception) { + Log.w(TAG, "$what failed", e) + otherwise() + } } diff --git a/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/MapRepositoryTest.kt b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/MapRepositoryTest.kt index fbb0cdb..70582a3 100644 --- a/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/MapRepositoryTest.kt +++ b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/MapRepositoryTest.kt @@ -383,6 +383,43 @@ class MapRepositoryTest { assertTrue(repository.state.value is MapFileState.Ready) } + // A directory where the record's temporary file goes makes every save fail, as a full phone + // would. The failure must end the check, not escape the app's scope and crash the app: runTest + // fails a test whose background coroutine throws. + @Test fun `a record that cannot be saved fails the check instead of crashing the app`() = runTest { + setUp() + val repository = started() + val blocker = File(dir, "map.json.tmp").apply { mkdir() } + fetcher.steps += fetcher.complete(v1) + + repository.refresh() + advanceTimeBy(60 * 60_000L) + + assertEquals(MapFileState.Failed(MapFailure.UNEXPECTED), repository.state.value) + assertEquals("not retried on a timer", 1, fetcher.requests.size) + + blocker.delete() + fetcher.steps += fetcher.complete(v1) + repository.refresh() + settle() + + assertTrue(repository.state.value is MapFileState.Ready) + } + + // A read-only directory, because start-up cleaning would remove a blocking file before the save. + @Test fun `a record that cannot be rewritten at start does not crash the app`() = runTest { + setUp() + store.save(MapRecord(current = StoredMap(url, "map-gone.pmtiles", v1, clock))) + dir.setWritable(false) + try { + val repository = started() + + assertEquals(MapFileState.None, repository.state.value) + } finally { + dir.setWritable(true) + } + } + private inner class FakeMapServer : MapServer { val answers = ArrayDeque() var default: MapServerAnswer = MapServerAnswer.File(url) From 80ef72365c220483e47b27cb19250d1d3f880e6c Mon Sep 17 00:00:00 2001 From: DIVESH PATIL Date: Tue, 6 Oct 2026 15:58:18 +0530 Subject: [PATCH 09/11] fix(android): check the map again each day the app stays open --- .../onebusaway/vehicletracker/MainActivity.kt | 2 +- .../data/map/RefreshWhenSignedIn.kt | 17 ++++++++---- .../data/map/RefreshWhenSignedInTest.kt | 26 +++++++++++++++++++ 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/MainActivity.kt b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/MainActivity.kt index e0db308..d091f9f 100644 --- a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/MainActivity.kt +++ b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/MainActivity.kt @@ -53,7 +53,7 @@ class MainActivity : ComponentActivity() { repeatOnLifecycle(Lifecycle.State.RESUMED) { launch { rearmWhenActive(trackingRepository.state, serviceController::startTracking) } // Fetches the agency's street map, or checks it is current, whenever the app comes - // to the front signed in, and when the driver signs in. + // to the front signed in, when the driver signs in, and each day it stays in front. refreshWhenSignedIn(sessionStore.session, mapRepository::refresh) } } diff --git a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/RefreshWhenSignedIn.kt b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/RefreshWhenSignedIn.kt index 73f4847..beb4da2 100644 --- a/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/RefreshWhenSignedIn.kt +++ b/android/app/src/main/kotlin/org/onebusaway/vehicletracker/data/map/RefreshWhenSignedIn.kt @@ -1,16 +1,23 @@ package org.onebusaway.vehicletracker.data.map +import kotlinx.coroutines.delay import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.distinctUntilChanged -import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.map import org.onebusaway.vehicletracker.data.Session /** - * Calls [refresh] when collection starts with the driver signed in, and again each time they sign - * in. Calling it on every resume costs nothing once the map is current: [MapRepository.refresh] - * asks the network only when a check is due. + * Calls [refresh] when collection starts with the driver signed in, each time they sign in, and + * once a day after that for as long as collection lasts: a driver can keep the app in front for a + * whole day and more. Calling it costs nothing while the map is current, because + * [MapRepository.refresh] goes to the network only when a check is due. */ internal suspend fun refreshWhenSignedIn(session: Flow, refresh: () -> Unit) { - session.map { it.token != null }.distinctUntilChanged().filter { it }.collect { refresh() } + session.map { it.token != null }.distinctUntilChanged().collectLatest { signedIn -> + while (signedIn) { + refresh() + delay(CHECK_EVERY_S * 1000) + } + } } diff --git a/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/RefreshWhenSignedInTest.kt b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/RefreshWhenSignedInTest.kt index 8f435c4..c5165f6 100644 --- a/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/RefreshWhenSignedInTest.kt +++ b/android/app/src/test/kotlin/org/onebusaway/vehicletracker/data/map/RefreshWhenSignedInTest.kt @@ -3,6 +3,7 @@ package org.onebusaway.vehicletracker.data.map import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.launch import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.advanceTimeBy import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest import org.junit.Assert.assertEquals @@ -58,6 +59,31 @@ class RefreshWhenSignedInTest { assertEquals(1, refreshes) } + // Without this, a driver who keeps the app in front would never get the daily check. + @Test fun `staying signed in with the app in front refreshes again each day`() = runTest { + session.value = signedIn + startCollecting() + + advanceTimeBy(CHECK_EVERY_S * 1000 - 1) + assertEquals(1, refreshes) + + advanceTimeBy(2) + assertEquals(2, refreshes) + + advanceTimeBy(CHECK_EVERY_S * 1000) + assertEquals(3, refreshes) + } + + @Test fun `signing out stops the daily refresh`() = runTest { + session.value = signedIn + startCollecting() + + emit(signedOut) + advanceTimeBy(3 * CHECK_EVERY_S * 1000) + + assertEquals(1, refreshes) + } + @Test fun `signing out and in again refreshes again`() = runTest { session.value = signedIn startCollecting() From 99afa6dbee3dcab2fc4a3acf5fcf234423e08b21 Mon Sep 17 00:00:00 2001 From: DIVESH PATIL Date: Tue, 6 Oct 2026 15:58:18 +0530 Subject: [PATCH 10/11] fix(android): fetch the map assets before replacing the old ones --- android/map-style/generate.mjs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/android/map-style/generate.mjs b/android/map-style/generate.mjs index 2ca7c96..eea86dc 100644 --- a/android/map-style/generate.mjs +++ b/android/map-style/generate.mjs @@ -79,21 +79,22 @@ async function save(path, bytes) { console.log(`${path} (${bytes.length} bytes)`); } -await rm(OUT, { recursive: true, force: true }); - +// Everything is built and fetched first, so a failed download leaves the committed assets as they were. +const files = []; for (const flavor of ['light', 'dark']) { - await save(`style-${flavor}.json`, Buffer.from(streetStyle(flavor) + '\n')); + files.push([`style-${flavor}.json`, Buffer.from(streetStyle(flavor) + '\n')]); for (const sheet of [flavor, `${flavor}@2x`]) { for (const extension of ['json', 'png']) { - await save(`sprites/${sheet}.${extension}`, await fetchBytes(`${BASEMAPS_ASSETS}/sprites/v4/${sheet}.${extension}`)); + files.push([`sprites/${sheet}.${extension}`, await fetchBytes(`${BASEMAPS_ASSETS}/sprites/v4/${sheet}.${extension}`)]); } } } - for (const start of GLYPH_RANGES) { const range = `${start}-${start + 255}.pbf`; - await save(`fonts/${FONT}/${range}`, await fetchBytes(`${BASEMAPS_ASSETS}/fonts/${encodeURIComponent(FONT)}/${range}`)); + files.push([`fonts/${FONT}/${range}`, await fetchBytes(`${BASEMAPS_ASSETS}/fonts/${encodeURIComponent(FONT)}/${range}`)]); } +files.push(['fonts/OFL.txt', await fetchBytes(`${BASEMAPS_ASSETS}/fonts/OFL.txt`)]); +files.push(['LICENSE.md', await fetchBytes(BASEMAPS_LICENSE)]); -await save('fonts/OFL.txt', await fetchBytes(`${BASEMAPS_ASSETS}/fonts/OFL.txt`)); -await save('LICENSE.md', await fetchBytes(BASEMAPS_LICENSE)); +await rm(OUT, { recursive: true, force: true }); +for (const [path, bytes] of files) await save(path, bytes); From ed3897122e2b28fc6b3f23d26879cac28e7fbbcb Mon Sep 17 00:00:00 2001 From: DIVESH PATIL Date: Tue, 6 Oct 2026 15:58:18 +0530 Subject: [PATCH 11/11] docs: say when a removed map leaves the Tracking screen --- docs/deployment.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/deployment.md b/docs/deployment.md index 03030d5..ee148bc 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -966,7 +966,9 @@ says so when the phone is too full. Once a day it asks your host whether the file has changed. To update the map, replace the file at the same URL: within a day phones fetch the new version quietly and show it the next time the Tracking screen opens. To drop the map, unset `MAP_PMTILES_URL`: within a day phones -stop using it, and they delete their copy the next time the app starts. +learn it is gone, the Tracking screen goes back to the plain background the next +time it opens, and the file is deleted the next time the app starts. A Tracking +screen that is open at the time keeps what it shows until then. Street names are drawn in Latin letters only: the English name where OpenStreetMap has one, or else the local name when it is written in Latin