#include "offline_region_definition.hpp" #include "../geometry/lat_lng_bounds.hpp" #include "../geojson/geometry.hpp" #include namespace mbgl { namespace android { // OfflineRegionDefinition // void OfflineRegionDefinition::registerNative(jni::JNIEnv& env) { jni::Class::Singleton(env); } mbgl::OfflineRegionDefinition OfflineRegionDefinition::getDefinition(JNIEnv& env, const jni::Object& jDefinition) { if (jDefinition.IsInstanceOf(env, jni::Class::Singleton(env))) { return OfflineTilePyramidRegionDefinition::getDefinition(env, jni::Cast(env, jni::Class::Singleton(env), jDefinition)); } else if (jDefinition.IsInstanceOf(env, jni::Class::Singleton(env))) { return OfflineGeometryRegionDefinition::getDefinition(env, jni::Cast(env, jni::Class::Singleton(env), jDefinition)); } throw std::runtime_error("Unknown offline region definition java class"); } // OfflineTilePyramidRegionDefinition // jni::Local> OfflineTilePyramidRegionDefinition::New(jni::JNIEnv& env, const mbgl::OfflineTilePyramidRegionDefinition& definition) { static auto& javaClass = jni::Class::Singleton(env); static auto constructor = javaClass.GetConstructor, jni::jdouble, jni::jdouble, jni::jfloat>(env); return javaClass.New(env, constructor, jni::Make(env, definition.styleURL), LatLngBounds::New(env, definition.bounds), definition.minZoom, definition.maxZoom, definition.pixelRatio); } mbgl::OfflineTilePyramidRegionDefinition OfflineTilePyramidRegionDefinition::getDefinition(jni::JNIEnv& env, const jni::Object& jDefinition) { // Field references static auto& javaClass = jni::Class::Singleton(env); static auto styleURLF = javaClass.GetField(env, "styleURL"); static auto boundsF = javaClass.GetField>(env, "bounds"); static auto minZoomF = javaClass.GetField(env, "minZoom"); static auto maxZoomF = javaClass.GetField(env, "maxZoom"); static auto pixelRatioF = javaClass.GetField(env, "pixelRatio"); return mbgl::OfflineTilePyramidRegionDefinition( jni::Make(env, jDefinition.Get(env, styleURLF)), LatLngBounds::getLatLngBounds(env, jDefinition.Get(env, boundsF)), jDefinition.Get(env, minZoomF), jDefinition.Get(env, maxZoomF), jDefinition.Get(env, pixelRatioF) ); } void OfflineTilePyramidRegionDefinition::registerNative(jni::JNIEnv& env) { jni::Class::Singleton(env); } // OfflineGeometryRegionDefinition // jni::Local> OfflineGeometryRegionDefinition::New(jni::JNIEnv& env, const mbgl::OfflineGeometryRegionDefinition& definition) { static auto& javaClass = jni::Class::Singleton(env); static auto constructor = javaClass.GetConstructor, jni::jdouble, jni::jdouble, jni::jfloat>(env); return javaClass.New(env, constructor, jni::Make(env, definition.styleURL), geojson::Geometry::New(env, definition.geometry), definition.minZoom, definition.maxZoom, definition.pixelRatio); } mbgl::OfflineGeometryRegionDefinition OfflineGeometryRegionDefinition::getDefinition(jni::JNIEnv& env, const jni::Object& jDefinition) { // Field references static auto& javaClass = jni::Class::Singleton(env); static auto styleURLF = javaClass.GetField(env, "styleURL"); static auto geometryF = javaClass.GetField>(env, "geometry"); static auto minZoomF = javaClass.GetField(env, "minZoom"); static auto maxZoomF = javaClass.GetField(env, "maxZoom"); static auto pixelRatioF = javaClass.GetField(env, "pixelRatio"); return mbgl::OfflineGeometryRegionDefinition( jni::Make(env, jDefinition.Get(env, styleURLF)), geojson::Geometry::convert(env, jDefinition.Get(env, geometryF)), jDefinition.Get(env, minZoomF), jDefinition.Get(env, maxZoomF), jDefinition.Get(env, pixelRatioF) ); } void OfflineGeometryRegionDefinition::registerNative(jni::JNIEnv& env) { jni::Class::Singleton(env); } } // namespace android } // namespace mbgl