#pragma once #include #include #include #include #include "asset_manager.hpp" #include #include "util/tile_server_options.hpp" namespace mln { template class Actor; namespace android { /** * Peer class for the Android FileSource holder. Ensures that a single core * FileSource of a ResourceLoader type is used. */ class FileSource { public: static constexpr auto Name() { return "org/maplibre/android/storage/FileSource"; }; struct ResourceTransformCallback { static constexpr auto Name() { return "org/maplibre/android/storage/" "FileSource$ResourceTransformCallback"; } static std::string onURL(jni::JNIEnv&, const jni::Object&, int, std::string); }; struct ResourcesCachePathChangeCallback { static constexpr auto Name() { return "org/maplibre/android/storage/" "FileSource$ResourcesCachePathChangeCallback"; } static void onSuccess(jni::JNIEnv&, const jni::Object&, const jni::String&); static void onError(jni::JNIEnv&, const jni::Object&, const jni::String&); }; FileSource(jni::JNIEnv&, const jni::String&, const jni::String&, const jni::Object&); ~FileSource(); void setTileServerOptions(jni::JNIEnv& _env, const jni::Object& _options); jni::Local getApiKey(jni::JNIEnv&); void setApiKey(jni::JNIEnv&, const jni::String&); jni::Local getAPIBaseUrl(jni::JNIEnv&); void setAPIBaseUrl(jni::JNIEnv&, const jni::String&); void setResourceTransform(jni::JNIEnv&, const jni::Object&); void setResourceCachePath(jni::JNIEnv&, const jni::String&, const jni::Object&); void resume(jni::JNIEnv&); void pause(jni::JNIEnv&); jni::jboolean isResumed(jni::JNIEnv&); static FileSource* getNativePeer(jni::JNIEnv&, const jni::Object&); static mln::ResourceOptions getSharedResourceOptions(jni::JNIEnv&, const jni::Object&); static mln::ClientOptions getSharedClientOptions(jni::JNIEnv&, const jni::Object&); static void registerNative(jni::JNIEnv&); private: const std::string DATABASE_FILE = "/mbgl-offline.db"; std::optional activationCounter; mln::ResourceOptions resourceOptions; mln::ClientOptions clientOptions; std::unique_ptr> resourceTransform; std::function pathChangeCallback; std::shared_ptr databaseSource; std::shared_ptr onlineSource; std::shared_ptr resourceLoader; }; } // namespace android } // namespace mln