Loading cardinal-android/.gitignore +1 −1 Original line number Diff line number Diff line Loading @@ -9,4 +9,4 @@ .externalNativeBuild .cxx local.properties secrets.properties cardinal-android/app/build.gradle.kts +34 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,9 @@ */ import com.android.build.api.dsl.ApkSigningConfig import java.io.FileInputStream import java.io.FileNotFoundException import java.util.Properties plugins { alias(libs.plugins.android.application) Loading @@ -29,6 +32,30 @@ plugins { kotlin("plugin.serialization") version "2.2.21" } val stadiaKey = Properties().apply { try { load(FileInputStream(File(rootProject.projectDir, "secrets.properties"))) } catch (ex: FileNotFoundException) { // No-op. } }.getProperty("stadiaKey", "").ifEmpty { val keyFromEnv = System.getenv("STADIA_KEY") if (keyFromEnv.isNullOrEmpty()) { keyFromEnv } else { null } } val defaultPeliasEndpoint = if (stadiaKey != null) { "https://api.stadiamaps.com/geocoding/v1" } else { "https://maps.earth/pelias/v1" } val defaultValhallaEndpoint = if (stadiaKey != null) { "https://api.stadiamaps.com/route/v1" } else { "https://maps.earth/valhalla/route" } android { namespace = "earth.maps.cardinal" compileSdk = 36 Loading Loading @@ -80,11 +107,17 @@ android { signingConfig = signingConfigs["release"] as ApkSigningConfig manifestPlaceholders["icon"] = "@mipmap/ic_launcher" manifestPlaceholders["round_icon"] = "@mipmap/ic_launcher_round" resValue("string", "default_pelias_endpoint", defaultPeliasEndpoint) resValue("string", "default_valhalla_endpoint", defaultValhallaEndpoint) resValue("string", "default_api_key", stadiaKey.orEmpty()) } debug { applicationIdSuffix = ".debug" manifestPlaceholders["icon"] = "@mipmap/ic_launcher_debug" manifestPlaceholders["round_icon"] = "@mipmap/ic_launcher_round_debug" resValue("string", "default_pelias_endpoint", defaultPeliasEndpoint) resValue("string", "default_valhalla_endpoint", defaultValhallaEndpoint) resValue("string", "default_api_key", stadiaKey.orEmpty()) } } Loading Loading @@ -121,6 +154,7 @@ android { commandLine = listOf( "cargo", "run", "--locked", "--bin", "uniffi-bindgen", "-p", Loading cardinal-android/app/src/main/java/earth/maps/cardinal/data/AppPreferences.kt +25 −8 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.content.Context import android.content.SharedPreferences import android.text.format.DateFormat import androidx.core.content.edit import earth.maps.cardinal.R import java.util.Locale /** Loading Loading @@ -55,8 +56,6 @@ class AppPreferences(private val context: Context) { private const val KEY_VALHALLA_API_KEY = "valhalla_api_key" // Default values private const val DEFAULT_PELIAS_BASE_URL = "https://maps.earth/pelias/v1" private const val DEFAULT_VALHALLA_BASE_URL = "https://maps.earth/valhalla/route" private const val DEFAULT_LAST_ROUTING_MODE = "auto" // Contrast level constants Loading Loading @@ -338,8 +337,12 @@ class AppPreferences(private val context: Context) { * Returns the default Pelias base URL if none is saved. */ fun loadPeliasBaseUrl(): String { return prefs.getString(KEY_PELIAS_BASE_URL, DEFAULT_PELIAS_BASE_URL) ?: DEFAULT_PELIAS_BASE_URL val url = prefs.getString(KEY_PELIAS_BASE_URL, null) return if (url.isNullOrBlank()) { context.getString(R.string.default_pelias_endpoint) } else { url } } /** Loading @@ -360,7 +363,12 @@ class AppPreferences(private val context: Context) { * Returns null if no API key is saved. */ fun loadPeliasApiKey(): String? { return prefs.getString(KEY_PELIAS_API_KEY, null) val key = prefs.getString(KEY_PELIAS_API_KEY, null) return if (key.isNullOrBlank() && loadPeliasBaseUrl() == context.getString(R.string.default_pelias_endpoint)) { context.getString(R.string.default_api_key) } else { key } } // Valhalla API configuration methods Loading @@ -379,8 +387,12 @@ class AppPreferences(private val context: Context) { * Returns the default Valhalla base URL if none is saved. */ fun loadValhallaBaseUrl(): String { return prefs.getString(KEY_VALHALLA_BASE_URL, DEFAULT_VALHALLA_BASE_URL) ?: DEFAULT_VALHALLA_BASE_URL val url = prefs.getString(KEY_VALHALLA_BASE_URL, null) return if (url.isNullOrBlank()) { context.getString(R.string.default_valhalla_endpoint) } else { url } } /** Loading @@ -401,6 +413,11 @@ class AppPreferences(private val context: Context) { * Returns null if no API key is saved. */ fun loadValhallaApiKey(): String? { return prefs.getString(KEY_VALHALLA_API_KEY, null) val key = prefs.getString(KEY_VALHALLA_API_KEY, null) return if (key.isNullOrBlank() && loadValhallaBaseUrl() == context.getString(R.string.default_valhalla_endpoint)) { context.getString(R.string.default_api_key) } else { key } } } cardinal-android/app/src/main/java/earth/maps/cardinal/tileserver/TileDownloadManager.kt +1 −1 Original line number Diff line number Diff line Loading @@ -893,7 +893,7 @@ class TileDownloadManager( var fileOutputStream: FileOutputStream? = null try { val url = ValhallaTileUtils.getTileUrl( "https://cardinaldata.airmail.rs/valhalla-250825", hierarchyLevel, tileIndex "https://tiles.maps.murena.com/valhalla-250825", hierarchyLevel, tileIndex ) Log.v(TAG, "Downloading Valhalla tile $hierarchyLevel/$tileIndex from $url") Loading cardinal-android/app/src/main/res/values/strings.xml +1 −1 Original line number Diff line number Diff line Loading @@ -118,7 +118,7 @@ <string name="disabled">Disabled</string> <!-- Tile Server URL --> <string name="tile_url_template">https://pmtiles.ellenhp.workers.dev/planet-250825.pmtiles/planet-250825/{z}/{x}/{y}.mvt</string> <string name="tile_url_template">https://tiles.maps.murena.com/tiles/planet-260112/planet/{z}/{x}/{y}.mvt</string> <!-- Privacy and Accessibility Settings --> <string name="privacy_settings_title">Offline Settings</string> Loading Loading
cardinal-android/.gitignore +1 −1 Original line number Diff line number Diff line Loading @@ -9,4 +9,4 @@ .externalNativeBuild .cxx local.properties secrets.properties
cardinal-android/app/build.gradle.kts +34 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,9 @@ */ import com.android.build.api.dsl.ApkSigningConfig import java.io.FileInputStream import java.io.FileNotFoundException import java.util.Properties plugins { alias(libs.plugins.android.application) Loading @@ -29,6 +32,30 @@ plugins { kotlin("plugin.serialization") version "2.2.21" } val stadiaKey = Properties().apply { try { load(FileInputStream(File(rootProject.projectDir, "secrets.properties"))) } catch (ex: FileNotFoundException) { // No-op. } }.getProperty("stadiaKey", "").ifEmpty { val keyFromEnv = System.getenv("STADIA_KEY") if (keyFromEnv.isNullOrEmpty()) { keyFromEnv } else { null } } val defaultPeliasEndpoint = if (stadiaKey != null) { "https://api.stadiamaps.com/geocoding/v1" } else { "https://maps.earth/pelias/v1" } val defaultValhallaEndpoint = if (stadiaKey != null) { "https://api.stadiamaps.com/route/v1" } else { "https://maps.earth/valhalla/route" } android { namespace = "earth.maps.cardinal" compileSdk = 36 Loading Loading @@ -80,11 +107,17 @@ android { signingConfig = signingConfigs["release"] as ApkSigningConfig manifestPlaceholders["icon"] = "@mipmap/ic_launcher" manifestPlaceholders["round_icon"] = "@mipmap/ic_launcher_round" resValue("string", "default_pelias_endpoint", defaultPeliasEndpoint) resValue("string", "default_valhalla_endpoint", defaultValhallaEndpoint) resValue("string", "default_api_key", stadiaKey.orEmpty()) } debug { applicationIdSuffix = ".debug" manifestPlaceholders["icon"] = "@mipmap/ic_launcher_debug" manifestPlaceholders["round_icon"] = "@mipmap/ic_launcher_round_debug" resValue("string", "default_pelias_endpoint", defaultPeliasEndpoint) resValue("string", "default_valhalla_endpoint", defaultValhallaEndpoint) resValue("string", "default_api_key", stadiaKey.orEmpty()) } } Loading Loading @@ -121,6 +154,7 @@ android { commandLine = listOf( "cargo", "run", "--locked", "--bin", "uniffi-bindgen", "-p", Loading
cardinal-android/app/src/main/java/earth/maps/cardinal/data/AppPreferences.kt +25 −8 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.content.Context import android.content.SharedPreferences import android.text.format.DateFormat import androidx.core.content.edit import earth.maps.cardinal.R import java.util.Locale /** Loading Loading @@ -55,8 +56,6 @@ class AppPreferences(private val context: Context) { private const val KEY_VALHALLA_API_KEY = "valhalla_api_key" // Default values private const val DEFAULT_PELIAS_BASE_URL = "https://maps.earth/pelias/v1" private const val DEFAULT_VALHALLA_BASE_URL = "https://maps.earth/valhalla/route" private const val DEFAULT_LAST_ROUTING_MODE = "auto" // Contrast level constants Loading Loading @@ -338,8 +337,12 @@ class AppPreferences(private val context: Context) { * Returns the default Pelias base URL if none is saved. */ fun loadPeliasBaseUrl(): String { return prefs.getString(KEY_PELIAS_BASE_URL, DEFAULT_PELIAS_BASE_URL) ?: DEFAULT_PELIAS_BASE_URL val url = prefs.getString(KEY_PELIAS_BASE_URL, null) return if (url.isNullOrBlank()) { context.getString(R.string.default_pelias_endpoint) } else { url } } /** Loading @@ -360,7 +363,12 @@ class AppPreferences(private val context: Context) { * Returns null if no API key is saved. */ fun loadPeliasApiKey(): String? { return prefs.getString(KEY_PELIAS_API_KEY, null) val key = prefs.getString(KEY_PELIAS_API_KEY, null) return if (key.isNullOrBlank() && loadPeliasBaseUrl() == context.getString(R.string.default_pelias_endpoint)) { context.getString(R.string.default_api_key) } else { key } } // Valhalla API configuration methods Loading @@ -379,8 +387,12 @@ class AppPreferences(private val context: Context) { * Returns the default Valhalla base URL if none is saved. */ fun loadValhallaBaseUrl(): String { return prefs.getString(KEY_VALHALLA_BASE_URL, DEFAULT_VALHALLA_BASE_URL) ?: DEFAULT_VALHALLA_BASE_URL val url = prefs.getString(KEY_VALHALLA_BASE_URL, null) return if (url.isNullOrBlank()) { context.getString(R.string.default_valhalla_endpoint) } else { url } } /** Loading @@ -401,6 +413,11 @@ class AppPreferences(private val context: Context) { * Returns null if no API key is saved. */ fun loadValhallaApiKey(): String? { return prefs.getString(KEY_VALHALLA_API_KEY, null) val key = prefs.getString(KEY_VALHALLA_API_KEY, null) return if (key.isNullOrBlank() && loadValhallaBaseUrl() == context.getString(R.string.default_valhalla_endpoint)) { context.getString(R.string.default_api_key) } else { key } } }
cardinal-android/app/src/main/java/earth/maps/cardinal/tileserver/TileDownloadManager.kt +1 −1 Original line number Diff line number Diff line Loading @@ -893,7 +893,7 @@ class TileDownloadManager( var fileOutputStream: FileOutputStream? = null try { val url = ValhallaTileUtils.getTileUrl( "https://cardinaldata.airmail.rs/valhalla-250825", hierarchyLevel, tileIndex "https://tiles.maps.murena.com/valhalla-250825", hierarchyLevel, tileIndex ) Log.v(TAG, "Downloading Valhalla tile $hierarchyLevel/$tileIndex from $url") Loading
cardinal-android/app/src/main/res/values/strings.xml +1 −1 Original line number Diff line number Diff line Loading @@ -118,7 +118,7 @@ <string name="disabled">Disabled</string> <!-- Tile Server URL --> <string name="tile_url_template">https://pmtiles.ellenhp.workers.dev/planet-250825.pmtiles/planet-250825/{z}/{x}/{y}.mvt</string> <string name="tile_url_template">https://tiles.maps.murena.com/tiles/planet-260112/planet/{z}/{x}/{y}.mvt</string> <!-- Privacy and Accessibility Settings --> <string name="privacy_settings_title">Offline Settings</string> Loading