From 4ba0fc51a55b0d36762772f4e3d0869382c87734 Mon Sep 17 00:00:00 2001 From: NoelClick Date: Sat, 15 Nov 2025 19:24:42 -0800 Subject: [PATCH] [android] Make it possible to set a custom map download URL Signed-off-by: NoelClick --- .../src/main/res/values/donottranslate.xml | 1 + .../sdk/DownloadResourcesLegacyActivity.cpp | 26 ++++++++++++++----- .../sdk/DownloadResourcesLegacyActivity.java | 1 + .../java/app/organicmaps/sdk/Framework.java | 10 +++++++ .../java/app/organicmaps/sdk/OrganicMaps.java | 7 +++++ .../src/main/res/values/donottranslate.xml | 1 + 6 files changed, 39 insertions(+), 7 deletions(-) diff --git a/android/app/src/main/res/values/donottranslate.xml b/android/app/src/main/res/values/donottranslate.xml index f44c59fc4..be5bba6d3 100644 --- a/android/app/src/main/res/values/donottranslate.xml +++ b/android/app/src/main/res/values/donottranslate.xml @@ -43,6 +43,7 @@ Backup LeftButton pref_power + CustomMapDownloadUrl %1$s: %2$s %2$s :%1$s diff --git a/android/sdk/src/main/cpp/app/organicmaps/sdk/DownloadResourcesLegacyActivity.cpp b/android/sdk/src/main/cpp/app/organicmaps/sdk/DownloadResourcesLegacyActivity.cpp index cd23a3a15..339329c06 100644 --- a/android/sdk/src/main/cpp/app/organicmaps/sdk/DownloadResourcesLegacyActivity.cpp +++ b/android/sdk/src/main/cpp/app/organicmaps/sdk/DownloadResourcesLegacyActivity.cpp @@ -42,12 +42,16 @@ using namespace std::placeholders; namespace { + std::unique_ptr & LegacyDownloader() + { + static auto downloader = storage::GetDownloader(); + return downloader; + } -static std::vector g_filesToDownload; -static int g_totalDownloadedBytes; -static int g_totalBytesToDownload; -static std::shared_ptr g_currentRequest; - + static std::vector g_filesToDownload; + static int g_totalDownloadedBytes; + static int g_totalBytesToDownload; + static std::shared_ptr g_currentRequest; } // namespace extern "C" @@ -152,11 +156,11 @@ JNIEXPORT jint JNICALL Java_app_organicmaps_sdk_DownloadResourcesLegacyActivity_ return ERR_NO_MORE_FILES; /// @todo One downloader instance with cached servers. All this routine will be refactored some time. - static auto downloader = storage::GetDownloader(); + auto & downloader = LegacyDownloader(); storage::Storage const & storage = g_framework->GetStorage(); downloader->SetDataVersion(storage.GetCurrentDataVersion()); - downloader->EnsureMetaConfigReady([&storage, ptr = jni::make_global_ref(listener)]() + downloader->EnsureMetaConfigReady([&storage, ptr = jni::make_global_ref(listener), &downloader]() { auto const & curFile = g_filesToDownload.back(); auto const fileName = curFile.GetFileName(MapFileType::Map); @@ -177,4 +181,12 @@ JNIEXPORT void JNICALL Java_app_organicmaps_sdk_DownloadResourcesLegacyActivity_ LOG(LDEBUG, ("cancelCurrentFile, currentRequest=", g_currentRequest)); g_currentRequest.reset(); } + +JNIEXPORT void JNICALL Java_app_organicmaps_sdk_DownloadResourcesLegacyActivity_nativeResetMetaConfig(JNIEnv *, + jclass) +{ + auto & downloader = LegacyDownloader(); + if (downloader) + downloader->ResetMetaConfig(); +} } diff --git a/android/sdk/src/main/java/app/organicmaps/sdk/DownloadResourcesLegacyActivity.java b/android/sdk/src/main/java/app/organicmaps/sdk/DownloadResourcesLegacyActivity.java index ffc0f3af3..bb06da2c2 100644 --- a/android/sdk/src/main/java/app/organicmaps/sdk/DownloadResourcesLegacyActivity.java +++ b/android/sdk/src/main/java/app/organicmaps/sdk/DownloadResourcesLegacyActivity.java @@ -27,4 +27,5 @@ public class DownloadResourcesLegacyActivity public static native int nativeGetBytesToDownload(); public static native int nativeStartNextFileDownload(Listener listener); public static native void nativeCancelCurrentFile(); + public static native void nativeResetMetaConfig(); } diff --git a/android/sdk/src/main/java/app/organicmaps/sdk/Framework.java b/android/sdk/src/main/java/app/organicmaps/sdk/Framework.java index d0dc92311..1c14fe671 100644 --- a/android/sdk/src/main/java/app/organicmaps/sdk/Framework.java +++ b/android/sdk/src/main/java/app/organicmaps/sdk/Framework.java @@ -1,5 +1,6 @@ package app.organicmaps.sdk; +import android.content.Context; import android.graphics.Bitmap; import androidx.annotation.Keep; import androidx.annotation.NonNull; @@ -348,4 +349,13 @@ public class Framework public static native void nativeMemoryWarning(); public static native void nativeSaveRoute(); + public static native void nativeSetCustomMapDownloadUrl(String url); + + public static void applyCustomMapDownloadUrl(@NonNull Context context, @Nullable String url) + { + String trimmed = url != null ? url.trim() : ""; + nativeSetCustomMapDownloadUrl(trimmed); + // Reset the legacy downloader too (world/coasts). + app.organicmaps.sdk.DownloadResourcesLegacyActivity.nativeResetMetaConfig(); + } } diff --git a/android/sdk/src/main/java/app/organicmaps/sdk/OrganicMaps.java b/android/sdk/src/main/java/app/organicmaps/sdk/OrganicMaps.java index b6cbf0eb8..8d7a4a5cf 100644 --- a/android/sdk/src/main/java/app/organicmaps/sdk/OrganicMaps.java +++ b/android/sdk/src/main/java/app/organicmaps/sdk/OrganicMaps.java @@ -2,6 +2,8 @@ package app.organicmaps.sdk; import android.content.Context; import android.content.SharedPreferences; +import android.preference.PreferenceManager; + import androidx.annotation.NonNull; import androidx.lifecycle.DefaultLifecycleObserver; import androidx.lifecycle.LifecycleOwner; @@ -167,6 +169,11 @@ public final class OrganicMaps implements DefaultLifecycleObserver /* isTablet */ false); Config.setStoragePath(writablePath); + // Use the same prefs as SettingsPrefsFragment + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext); + final String savedUrl = prefs.getString(mContext.getString(R.string.pref_custom_map_download_url), ""); + Framework.nativeSetCustomMapDownloadUrl(savedUrl.trim()); + mPlatformInitialized = true; Logger.i(TAG, "Platform initialized"); } diff --git a/android/sdk/src/main/res/values/donottranslate.xml b/android/sdk/src/main/res/values/donottranslate.xml index 8f677d6ec..ba7508e2d 100644 --- a/android/sdk/src/main/res/values/donottranslate.xml +++ b/android/sdk/src/main/res/values/donottranslate.xml @@ -3,4 +3,5 @@ OrganicMapsPrefs EnableLogging EmulateBadExternalStorage + CustomMapDownloadUrl