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