From 72926e504f115291b83672d14eb465b7cce11274 Mon Sep 17 00:00:00 2001 From: Dave Craig Date: Thu, 19 Mar 2026 12:45:43 +0000 Subject: [PATCH 1/2] =?UTF-8?q?Fix=20Yaound=C3=A9=20map=20test=20which=20w?= =?UTF-8?q?as=20using=20the=20wrong=20zoom=20level=20for=20tiles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/scottishtecharmy/soundscape/MvtPerformanceTest.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/androidTest/java/org/scottishtecharmy/soundscape/MvtPerformanceTest.kt b/app/src/androidTest/java/org/scottishtecharmy/soundscape/MvtPerformanceTest.kt index ebb2fa8a5..8a4e00a55 100644 --- a/app/src/androidTest/java/org/scottishtecharmy/soundscape/MvtPerformanceTest.kt +++ b/app/src/androidTest/java/org/scottishtecharmy/soundscape/MvtPerformanceTest.kt @@ -112,8 +112,8 @@ class MvtPerformanceTest { // Test the capital of Cameroon because it's dense println("Test Yaoundé") - for(x in 17430 until 17437) { - for(y in 16029 until 16034) { + for(x in 17430/2 until 17437/2) { + for(y in 16029/2 until 16034/2) { downloadAndParseTile(x, y, gridState) } } From 6796483f603b60c6c3abefb5c915668747f4c4fd Mon Sep 17 00:00:00 2001 From: Dave Craig Date: Thu, 19 Mar 2026 12:55:43 +0000 Subject: [PATCH 2/2] Set user agent for all network GETs The user agent will appear as "Soundscape/VERSION_NUMBER" and on unit test builds it will be followed by " (unit tests)". --- .../soundscape/network/ManifestClient.kt | 1 + .../soundscape/network/SearchProvider.kt | 1 + .../soundscape/network/TileClient.kt | 1 + .../network/UserAgentInterceptor.kt | 23 +++++++++++++++++++ .../soundscape/utils/OfflineDownloader.kt | 2 ++ 5 files changed, 28 insertions(+) create mode 100644 app/src/main/java/org/scottishtecharmy/soundscape/network/UserAgentInterceptor.kt diff --git a/app/src/main/java/org/scottishtecharmy/soundscape/network/ManifestClient.kt b/app/src/main/java/org/scottishtecharmy/soundscape/network/ManifestClient.kt index 956230d2b..a31bd0587 100644 --- a/app/src/main/java/org/scottishtecharmy/soundscape/network/ManifestClient.kt +++ b/app/src/main/java/org/scottishtecharmy/soundscape/network/ManifestClient.kt @@ -25,6 +25,7 @@ class ManifestClient(val applicationContext: Context) { private var retrofit : Retrofit? = null private val okHttpClient = OkHttpClient.Builder() + .addInterceptor(UserAgentInterceptor()) .addInterceptor { chain -> val response = chain.proceed(chain.request()) diff --git a/app/src/main/java/org/scottishtecharmy/soundscape/network/SearchProvider.kt b/app/src/main/java/org/scottishtecharmy/soundscape/network/SearchProvider.kt index fe0573ff0..e4752a462 100644 --- a/app/src/main/java/org/scottishtecharmy/soundscape/network/SearchProvider.kt +++ b/app/src/main/java/org/scottishtecharmy/soundscape/network/SearchProvider.kt @@ -62,6 +62,7 @@ interface PhotonSearchProvider { } } private val logging = OkHttpClient.Builder() + .addInterceptor(UserAgentInterceptor()) .addInterceptor(loggingInterceptor) .callTimeout(5, TimeUnit.SECONDS) .build() diff --git a/app/src/main/java/org/scottishtecharmy/soundscape/network/TileClient.kt b/app/src/main/java/org/scottishtecharmy/soundscape/network/TileClient.kt index 4de6a2ce9..ec9aadf33 100644 --- a/app/src/main/java/org/scottishtecharmy/soundscape/network/TileClient.kt +++ b/app/src/main/java/org/scottishtecharmy/soundscape/network/TileClient.kt @@ -23,6 +23,7 @@ abstract class TileClient(val applicationContext: Context) { protected val okHttpClient = OkHttpClient.Builder() .cache(myCache) + .addInterceptor(UserAgentInterceptor()) .addInterceptor { chain -> // Get the request from the chain. diff --git a/app/src/main/java/org/scottishtecharmy/soundscape/network/UserAgentInterceptor.kt b/app/src/main/java/org/scottishtecharmy/soundscape/network/UserAgentInterceptor.kt new file mode 100644 index 000000000..821595237 --- /dev/null +++ b/app/src/main/java/org/scottishtecharmy/soundscape/network/UserAgentInterceptor.kt @@ -0,0 +1,23 @@ +package org.scottishtecharmy.soundscape.network + +import okhttp3.Interceptor +import okhttp3.Response +import org.scottishtecharmy.soundscape.BuildConfig + +class UserAgentInterceptor : Interceptor { + override fun intercept(chain: Interceptor.Chain): Response { + val request = chain.request().newBuilder() + .header("User-Agent", USER_AGENT) + .build() + return chain.proceed(request) + } + + companion object { + val USER_AGENT: String = buildString { + append("Soundscape/${BuildConfig.VERSION_NAME}") + if (BuildConfig.BUILD_TYPE == "releaseTest") { + append(" (unit tests)") + } + } + } +} diff --git a/app/src/main/java/org/scottishtecharmy/soundscape/utils/OfflineDownloader.kt b/app/src/main/java/org/scottishtecharmy/soundscape/utils/OfflineDownloader.kt index 81c0a5aa0..a5ee94601 100644 --- a/app/src/main/java/org/scottishtecharmy/soundscape/utils/OfflineDownloader.kt +++ b/app/src/main/java/org/scottishtecharmy/soundscape/utils/OfflineDownloader.kt @@ -14,6 +14,7 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import okhttp3.OkHttpClient +import org.scottishtecharmy.soundscape.network.UserAgentInterceptor import okhttp3.ResponseBody import org.scottishtecharmy.soundscape.geojsonparser.geojson.FeatureCollection import org.scottishtecharmy.soundscape.network.IDownloadService @@ -82,6 +83,7 @@ class OfflineDownloader { init { // We want a long timeout here to allow for network caching to happen behind the scenes val okHttpClient = OkHttpClient.Builder() + .addInterceptor(UserAgentInterceptor()) .connectTimeout(3, TimeUnit.MINUTES) .readTimeout(3, TimeUnit.MINUTES) .build()