Add ClientOptions to be able to pass around client name and version (#365)
* ClientOptions and Qt user agent * Update CHANGELOG.md Co-authored-by: Oliver Wipfli <oliver.wipfli@leichteralsluft.ch> Co-authored-by: Oliver Wipfli <oliver.wipfli@leichteralsluft.ch>
This commit is contained in:
@@ -16,8 +16,9 @@ namespace mbgl {
|
||||
|
||||
class AssetManagerFileSource::Impl {
|
||||
public:
|
||||
Impl(ActorRef<Impl>, AAssetManager* assetManager_, const ResourceOptions options) :
|
||||
resourceOptions(options.clone()),
|
||||
Impl(ActorRef<Impl>, AAssetManager* assetManager_, const ResourceOptions resourceOptions_, const ClientOptions clientOptions_) :
|
||||
resourceOptions(resourceOptions_.clone()),
|
||||
clientOptions(clientOptions_.clone()),
|
||||
assetManager(assetManager_) {}
|
||||
|
||||
void request(const std::string& url, ActorRef<FileSourceRequest> req) {
|
||||
@@ -46,20 +47,31 @@ public:
|
||||
return resourceOptions.clone();
|
||||
}
|
||||
|
||||
void setClientOptions(ClientOptions options) {
|
||||
clientOptions = options;
|
||||
}
|
||||
|
||||
ClientOptions getClientOptions() {
|
||||
return clientOptions.clone();
|
||||
}
|
||||
|
||||
private:
|
||||
AAssetManager* assetManager;
|
||||
ResourceOptions resourceOptions;
|
||||
ClientOptions clientOptions;
|
||||
};
|
||||
|
||||
AssetManagerFileSource::AssetManagerFileSource(jni::JNIEnv& env,
|
||||
const jni::Object<android::AssetManager>& assetManager_,
|
||||
const ResourceOptions options)
|
||||
const ResourceOptions resourceOptions,
|
||||
const ClientOptions clientOptions)
|
||||
: assetManager(jni::NewGlobal(env, assetManager_)),
|
||||
impl(std::make_unique<util::Thread<Impl>>(
|
||||
util::makeThreadPrioritySetter(platform::EXPERIMENTAL_THREAD_PRIORITY_FILE),
|
||||
"AssetManagerFileSource",
|
||||
AAssetManager_fromJava(&env, jni::Unwrap(assetManager.get())),
|
||||
options.clone())) {}
|
||||
resourceOptions.clone(),
|
||||
clientOptions.clone())) {}
|
||||
|
||||
AssetManagerFileSource::~AssetManagerFileSource() = default;
|
||||
|
||||
@@ -82,4 +94,13 @@ void AssetManagerFileSource::setResourceOptions(ResourceOptions options) {
|
||||
ResourceOptions AssetManagerFileSource::getResourceOptions() {
|
||||
return impl->actor().ask(&Impl::getResourceOptions).get();
|
||||
}
|
||||
|
||||
void AssetManagerFileSource::setClientOptions(ClientOptions options) {
|
||||
impl->actor().invoke(&Impl::setClientOptions, options.clone());
|
||||
}
|
||||
|
||||
ClientOptions AssetManagerFileSource::getClientOptions() {
|
||||
return impl->actor().ask(&Impl::getClientOptions).get();
|
||||
}
|
||||
|
||||
} // namespace mbgl
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include <mbgl/storage/file_source.hpp>
|
||||
#include <mbgl/storage/resource_options.hpp>
|
||||
#include <mbgl/util/client_options.hpp>
|
||||
|
||||
#include "asset_manager.hpp"
|
||||
|
||||
@@ -15,7 +16,7 @@ template <typename T> class Thread;
|
||||
|
||||
class AssetManagerFileSource : public FileSource {
|
||||
public:
|
||||
AssetManagerFileSource(jni::JNIEnv&, const jni::Object<android::AssetManager>&, const ResourceOptions);
|
||||
AssetManagerFileSource(jni::JNIEnv&, const jni::Object<android::AssetManager>&, const ResourceOptions, const ClientOptions);
|
||||
~AssetManagerFileSource() override;
|
||||
|
||||
std::unique_ptr<AsyncRequest> request(const Resource&, Callback) override;
|
||||
@@ -24,6 +25,9 @@ public:
|
||||
void setResourceOptions(ResourceOptions options) override;
|
||||
ResourceOptions getResourceOptions() override;
|
||||
|
||||
void setClientOptions(ClientOptions options) override;
|
||||
ClientOptions getClientOptions() override;
|
||||
|
||||
private:
|
||||
class Impl;
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <mbgl/storage/file_source_manager.hpp>
|
||||
#include <mbgl/storage/resource_options.hpp>
|
||||
#include <mbgl/storage/resource_transform.hpp>
|
||||
#include <mbgl/util/client_options.hpp>
|
||||
#include <mbgl/util/logging.hpp>
|
||||
|
||||
#include <mbgl/storage/sqlite3.hpp>
|
||||
@@ -25,12 +26,12 @@ FileSource::FileSource(jni::JNIEnv& _env, const jni::String& apiKey, const jni::
|
||||
mapbox::sqlite::setTempPath(path);
|
||||
|
||||
mbgl::FileSourceManager::get()->registerFileSourceFactory(
|
||||
mbgl::FileSourceType::Asset, [](const mbgl::ResourceOptions& opts) {
|
||||
mbgl::FileSourceType::Asset, [](const mbgl::ResourceOptions& resourceOptions, const mbgl::ClientOptions& clientOptions) {
|
||||
auto env{android::AttachEnv()};
|
||||
std::unique_ptr<mbgl::FileSource> assetFileSource;
|
||||
if (android::Mapbox::hasInstance(*env)) {
|
||||
auto assetManager = android::Mapbox::getAssetManager(*env);
|
||||
assetFileSource = std::make_unique<AssetManagerFileSource>(*env, assetManager, opts.clone());
|
||||
assetFileSource = std::make_unique<AssetManagerFileSource>(*env, assetManager, resourceOptions.clone(), clientOptions.clone());
|
||||
}
|
||||
return assetFileSource;
|
||||
});
|
||||
@@ -44,10 +45,10 @@ FileSource::FileSource(jni::JNIEnv& _env, const jni::String& apiKey, const jni::
|
||||
// Create a core file sources
|
||||
// TODO: Split Android FileSource API to smaller interfaces
|
||||
resourceLoader =
|
||||
mbgl::FileSourceManager::get()->getFileSource(mbgl::FileSourceType::ResourceLoader, resourceOptions);
|
||||
mbgl::FileSourceManager::get()->getFileSource(mbgl::FileSourceType::ResourceLoader, resourceOptions, clientOptions);
|
||||
databaseSource = std::static_pointer_cast<mbgl::DatabaseFileSource>(std::shared_ptr<mbgl::FileSource>(
|
||||
mbgl::FileSourceManager::get()->getFileSource(mbgl::FileSourceType::Database, resourceOptions)));
|
||||
onlineSource = mbgl::FileSourceManager::get()->getFileSource(mbgl::FileSourceType::Network, resourceOptions);
|
||||
mbgl::FileSourceManager::get()->getFileSource(mbgl::FileSourceType::Database, resourceOptions, clientOptions)));
|
||||
onlineSource = mbgl::FileSourceManager::get()->getFileSource(mbgl::FileSourceType::Network, resourceOptions, clientOptions);
|
||||
}
|
||||
|
||||
FileSource::~FileSource() {
|
||||
@@ -199,6 +200,17 @@ mbgl::ResourceOptions FileSource::getSharedResourceOptions(jni::JNIEnv& env,
|
||||
return {};
|
||||
}
|
||||
|
||||
mbgl::ClientOptions FileSource::getSharedClientOptions(jni::JNIEnv& env,
|
||||
const jni::Object<FileSource>& jFileSource) {
|
||||
FileSource* fileSource = FileSource::getNativePeer(env, jFileSource);
|
||||
// Core could be compiled without support for any sources.
|
||||
if (fileSource) {
|
||||
return fileSource->clientOptions.clone();
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
// FileSource::ResourcesCachePathChangeCallback //
|
||||
|
||||
void FileSource::ResourcesCachePathChangeCallback::onSuccess(jni::JNIEnv& env,
|
||||
|
||||
@@ -72,12 +72,15 @@ public:
|
||||
|
||||
static mbgl::ResourceOptions getSharedResourceOptions(jni::JNIEnv&, const jni::Object<FileSource>&);
|
||||
|
||||
static mbgl::ClientOptions getSharedClientOptions(jni::JNIEnv&, const jni::Object<FileSource>&);
|
||||
|
||||
static void registerNative(jni::JNIEnv&);
|
||||
|
||||
private:
|
||||
const std::string DATABASE_FILE = "/mbgl-offline.db";
|
||||
optional<int> activationCounter;
|
||||
mbgl::ResourceOptions resourceOptions;
|
||||
mbgl::ClientOptions clientOptions;
|
||||
std::unique_ptr<Actor<ResourceTransform::TransformCallback>> resourceTransform;
|
||||
std::function<void()> pathChangeCallback;
|
||||
std::shared_ptr<mbgl::DatabaseFileSource> databaseSource;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include <mbgl/storage/resource.hpp>
|
||||
#include <mbgl/storage/resource_options.hpp>
|
||||
#include <mbgl/storage/response.hpp>
|
||||
#include <mbgl/util/client_options.hpp>
|
||||
#include <mbgl/util/logging.hpp>
|
||||
|
||||
#include <mbgl/util/async_request.hpp>
|
||||
@@ -17,15 +18,20 @@ namespace mbgl {
|
||||
|
||||
class HTTPFileSource::Impl {
|
||||
public:
|
||||
Impl(const ResourceOptions options): resourceOptions(options.clone()){};
|
||||
Impl(const ResourceOptions resourceOptions_, const ClientOptions clientOptions_)
|
||||
: resourceOptions(resourceOptions_.clone()), clientOptions(clientOptions_.clone()) {};
|
||||
|
||||
android::UniqueEnv env { android::AttachEnv() };
|
||||
|
||||
void setResourceOptions(ResourceOptions options) {resourceOptions = options;};
|
||||
ResourceOptions getResourceOptions() {return resourceOptions.clone(); };
|
||||
|
||||
void setClientOptions(ClientOptions options) {clientOptions = options;};
|
||||
ClientOptions getClientOptions() {return clientOptions.clone();};
|
||||
|
||||
private:
|
||||
ResourceOptions resourceOptions;
|
||||
ClientOptions clientOptions;
|
||||
};
|
||||
|
||||
class HTTPRequest : public AsyncRequest {
|
||||
@@ -191,8 +197,8 @@ void HTTPRequest::onFailure(jni::JNIEnv& env, int type, const jni::String& messa
|
||||
async.send();
|
||||
}
|
||||
|
||||
HTTPFileSource::HTTPFileSource(const ResourceOptions& options)
|
||||
: impl(std::make_unique<Impl>(options.clone())) {
|
||||
HTTPFileSource::HTTPFileSource(const ResourceOptions& resourceOptions, const ClientOptions& clientOptions)
|
||||
: impl(std::make_unique<Impl>(resourceOptions.clone(), clientOptions.clone())) {
|
||||
}
|
||||
|
||||
HTTPFileSource::~HTTPFileSource() = default;
|
||||
@@ -209,4 +215,12 @@ ResourceOptions HTTPFileSource::getResourceOptions() {
|
||||
return impl->getResourceOptions();
|
||||
}
|
||||
|
||||
void HTTPFileSource::setClientOptions(ClientOptions options) {
|
||||
impl->setClientOptions(options.clone());
|
||||
}
|
||||
|
||||
ClientOptions HTTPFileSource::getClientOptions() {
|
||||
return impl->getClientOptions();
|
||||
}
|
||||
|
||||
} // namespace mbgl
|
||||
|
||||
@@ -85,7 +85,8 @@ NativeMapView::NativeMapView(jni::JNIEnv& _env,
|
||||
// Create the core map
|
||||
map = std::make_unique<mbgl::Map>(
|
||||
*rendererFrontend, *this, options,
|
||||
mbgl::android::FileSource::getSharedResourceOptions(_env, jFileSource));
|
||||
mbgl::android::FileSource::getSharedResourceOptions(_env, jFileSource),
|
||||
mbgl::android::FileSource::getSharedClientOptions(_env, jFileSource));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -27,7 +27,9 @@ void handleException(std::exception_ptr exception,
|
||||
OfflineManager::OfflineManager(jni::JNIEnv& env, const jni::Object<FileSource>& jFileSource)
|
||||
: fileSource(std::static_pointer_cast<mbgl::DatabaseFileSource>(
|
||||
std::shared_ptr<mbgl::FileSource>(mbgl::FileSourceManager::get()->getFileSource(
|
||||
mbgl::FileSourceType::Database, FileSource::getSharedResourceOptions(env, jFileSource))))) {
|
||||
mbgl::FileSourceType::Database,
|
||||
FileSource::getSharedResourceOptions(env, jFileSource),
|
||||
FileSource::getSharedClientOptions(env, jFileSource))))) {
|
||||
if (!fileSource) {
|
||||
ThrowNew(env, jni::FindClass(env, "java/lang/IllegalStateException"), "Offline functionality is disabled.");
|
||||
}
|
||||
|
||||
@@ -18,7 +18,9 @@ OfflineRegion::OfflineRegion(jni::JNIEnv& env, jni::jlong offlineRegionPtr, cons
|
||||
: region(reinterpret_cast<mbgl::OfflineRegion*>(offlineRegionPtr)),
|
||||
fileSource(std::static_pointer_cast<mbgl::DatabaseFileSource>(
|
||||
std::shared_ptr<mbgl::FileSource>(mbgl::FileSourceManager::get()->getFileSource(
|
||||
mbgl::FileSourceType::Database, FileSource::getSharedResourceOptions(env, jFileSource))))) {
|
||||
mbgl::FileSourceType::Database,
|
||||
FileSource::getSharedResourceOptions(env, jFileSource),
|
||||
FileSource::getSharedClientOptions(env, jFileSource))))) {
|
||||
if (!fileSource) {
|
||||
ThrowNew(env, jni::FindClass(env, "java/lang/IllegalStateException"), "Offline functionality is disabled.");
|
||||
}
|
||||
|
||||
@@ -46,6 +46,7 @@ MapSnapshotter::MapSnapshotter(jni::JNIEnv& _env,
|
||||
size,
|
||||
pixelRatio,
|
||||
mbgl::android::FileSource::getSharedResourceOptions(_env, _jFileSource),
|
||||
mbgl::android::FileSource::getSharedClientOptions(_env, _jFileSource),
|
||||
*this,
|
||||
_localIdeographFontFamily ? jni::Make<std::string>(_env, _localIdeographFontFamily) : optional<std::string>{});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user