diff options
Diffstat (limited to 'platform/android/src/offline/offline_region_definition.cpp')
-rw-r--r-- | platform/android/src/offline/offline_region_definition.cpp | 108 |
1 files changed, 37 insertions, 71 deletions
diff --git a/platform/android/src/offline/offline_region_definition.cpp b/platform/android/src/offline/offline_region_definition.cpp index a856672902..23e5b7466b 100644 --- a/platform/android/src/offline/offline_region_definition.cpp +++ b/platform/android/src/offline/offline_region_definition.cpp @@ -10,19 +10,16 @@ namespace android { // OfflineRegionDefinition // -jni::Class<OfflineRegionDefinition> OfflineRegionDefinition::javaClass; - void OfflineRegionDefinition::registerNative(jni::JNIEnv& env) { - javaClass = *jni::Class<OfflineRegionDefinition>::Find(env).NewGlobalRef(env).release(); + jni::Class<OfflineRegionDefinition>::Singleton(env); } mbgl::OfflineRegionDefinition OfflineRegionDefinition::getDefinition(JNIEnv& env, - jni::Object<OfflineRegionDefinition> jDefinition) { - - if (jDefinition.IsInstanceOf(env, OfflineTilePyramidRegionDefinition::javaClass)) { - return OfflineTilePyramidRegionDefinition::getDefinition(env, jni::Object<OfflineTilePyramidRegionDefinition>(*jDefinition)); - } else if (jDefinition.IsInstanceOf(env, OfflineGeometryRegionDefinition::javaClass)) { - return OfflineGeometryRegionDefinition::getDefinition(env, jni::Object<OfflineGeometryRegionDefinition>(*jDefinition)); + const jni::Object<OfflineRegionDefinition>& jDefinition) { + if (jDefinition.IsInstanceOf(env, jni::Class<OfflineTilePyramidRegionDefinition>::Singleton(env))) { + return OfflineTilePyramidRegionDefinition::getDefinition(env, jni::Cast(env, jni::Class<OfflineTilePyramidRegionDefinition>::Singleton(env), jDefinition)); + } else if (jDefinition.IsInstanceOf(env, jni::Class<OfflineGeometryRegionDefinition>::Singleton(env))) { + return OfflineGeometryRegionDefinition::getDefinition(env, jni::Cast(env, jni::Class<OfflineGeometryRegionDefinition>::Singleton(env), jDefinition)); } throw std::runtime_error("Unknown offline region definition java class"); @@ -30,105 +27,74 @@ mbgl::OfflineRegionDefinition OfflineRegionDefinition::getDefinition(JNIEnv& env // OfflineTilePyramidRegionDefinition // -jni::Object<OfflineTilePyramidRegionDefinition> OfflineTilePyramidRegionDefinition::New(jni::JNIEnv& env, const mbgl::OfflineTilePyramidRegionDefinition& definition) { - - //Convert objects - auto styleURL = jni::Make<jni::String>(env, definition.styleURL); - auto bounds = LatLngBounds::New(env, definition.bounds); - +jni::Local<jni::Object<OfflineRegionDefinition>> OfflineTilePyramidRegionDefinition::New(jni::JNIEnv& env, const mbgl::OfflineTilePyramidRegionDefinition& definition) { + static auto& javaClass = jni::Class<OfflineTilePyramidRegionDefinition>::Singleton(env); static auto constructor = javaClass.GetConstructor<jni::String, jni::Object<LatLngBounds>, jni::jdouble, jni::jdouble, jni::jfloat>(env); - auto jdefinition = javaClass.New(env, constructor, styleURL, bounds, definition.minZoom, definition.maxZoom, definition.pixelRatio); - - //Delete References - jni::DeleteLocalRef(env, styleURL); - jni::DeleteLocalRef(env, bounds); - return jdefinition; + return javaClass.New(env, constructor, + jni::Make<jni::String>(env, definition.styleURL), + LatLngBounds::New(env, definition.bounds), + definition.minZoom, + definition.maxZoom, + definition.pixelRatio); } -mbgl::OfflineTilePyramidRegionDefinition OfflineTilePyramidRegionDefinition::getDefinition(jni::JNIEnv& env, jni::Object<OfflineTilePyramidRegionDefinition> jDefinition) { +mbgl::OfflineTilePyramidRegionDefinition OfflineTilePyramidRegionDefinition::getDefinition(jni::JNIEnv& env, const jni::Object<OfflineTilePyramidRegionDefinition>& jDefinition) { // Field references + static auto& javaClass = jni::Class<OfflineTilePyramidRegionDefinition>::Singleton(env); static auto styleURLF = javaClass.GetField<jni::String>(env, "styleURL"); static auto boundsF = javaClass.GetField<jni::Object<LatLngBounds>>(env, "bounds"); static auto minZoomF = javaClass.GetField<jni::jdouble>(env, "minZoom"); static auto maxZoomF = javaClass.GetField<jni::jdouble>(env, "maxZoom"); static auto pixelRatioF = javaClass.GetField<jni::jfloat>(env, "pixelRatio"); - // Get objects - auto jStyleURL = jDefinition.Get(env, styleURLF); - auto jBounds = jDefinition.Get(env, boundsF); - - // Create definition - mbgl::OfflineTilePyramidRegionDefinition definition( - jni::Make<std::string>(env, jStyleURL), - LatLngBounds::getLatLngBounds(env, jBounds), + return mbgl::OfflineTilePyramidRegionDefinition( + jni::Make<std::string>(env, jDefinition.Get(env, styleURLF)), + LatLngBounds::getLatLngBounds(env, jDefinition.Get(env, boundsF)), jDefinition.Get(env, minZoomF), jDefinition.Get(env, maxZoomF), jDefinition.Get(env, pixelRatioF) ); - - // Delete references - jni::DeleteLocalRef(env, jStyleURL); - jni::DeleteLocalRef(env, jBounds); - - return definition; } -jni::Class<OfflineTilePyramidRegionDefinition> OfflineTilePyramidRegionDefinition::javaClass; - void OfflineTilePyramidRegionDefinition::registerNative(jni::JNIEnv& env) { - javaClass = *jni::Class<OfflineTilePyramidRegionDefinition>::Find(env).NewGlobalRef(env).release(); + jni::Class<OfflineTilePyramidRegionDefinition>::Singleton(env); } // OfflineGeometryRegionDefinition // -jni::Object<OfflineGeometryRegionDefinition> OfflineGeometryRegionDefinition::New(jni::JNIEnv& env, const mbgl::OfflineGeometryRegionDefinition& definition) { - //Convert objects - auto styleURL = jni::Make<jni::String>(env, definition.styleURL); - auto geometry = geojson::Geometry::New(env, definition.geometry); - +jni::Local<jni::Object<OfflineRegionDefinition>> OfflineGeometryRegionDefinition::New(jni::JNIEnv& env, const mbgl::OfflineGeometryRegionDefinition& definition) { + static auto& javaClass = jni::Class<OfflineGeometryRegionDefinition>::Singleton(env); static auto constructor = javaClass.GetConstructor<jni::String, jni::Object<geojson::Geometry>, jni::jdouble, jni::jdouble, jni::jfloat>(env); - auto jdefinition = javaClass.New(env, constructor, styleURL, geometry, definition.minZoom, definition.maxZoom, definition.pixelRatio); - - //Delete References - jni::DeleteLocalRef(env, styleURL); - jni::DeleteLocalRef(env, geometry); - return jdefinition; + return javaClass.New(env, constructor, + jni::Make<jni::String>(env, definition.styleURL), + geojson::Geometry::New(env, definition.geometry), + definition.minZoom, + definition.maxZoom, + definition.pixelRatio); } -mbgl::OfflineGeometryRegionDefinition OfflineGeometryRegionDefinition::getDefinition(jni::JNIEnv& env, jni::Object<OfflineGeometryRegionDefinition> jDefinition) { +mbgl::OfflineGeometryRegionDefinition OfflineGeometryRegionDefinition::getDefinition(jni::JNIEnv& env, const jni::Object<OfflineGeometryRegionDefinition>& jDefinition) { // Field references + static auto& javaClass = jni::Class<OfflineGeometryRegionDefinition>::Singleton(env); static auto styleURLF = javaClass.GetField<jni::String>(env, "styleURL"); static auto geometryF = javaClass.GetField<jni::Object<geojson::Geometry>>(env, "geometry"); static auto minZoomF = javaClass.GetField<jni::jdouble>(env, "minZoom"); static auto maxZoomF = javaClass.GetField<jni::jdouble>(env, "maxZoom"); static auto pixelRatioF = javaClass.GetField<jni::jfloat>(env, "pixelRatio"); - // Get objects - auto jStyleURL = jDefinition.Get(env, styleURLF); - auto jGeometry = jDefinition.Get(env, geometryF); - - // Create definition - mbgl::OfflineGeometryRegionDefinition definition( - jni::Make<std::string>(env, jStyleURL), - geojson::Geometry::convert(env, jGeometry), - jDefinition.Get(env, minZoomF), - jDefinition.Get(env, maxZoomF), - jDefinition.Get(env, pixelRatioF) + return mbgl::OfflineGeometryRegionDefinition( + jni::Make<std::string>(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) ); - - // Delete references - jni::DeleteLocalRef(env, jStyleURL); - jni::DeleteLocalRef(env, jGeometry); - - return definition; } -jni::Class<OfflineGeometryRegionDefinition> OfflineGeometryRegionDefinition::javaClass; - void OfflineGeometryRegionDefinition::registerNative(jni::JNIEnv& env) { - javaClass = *jni::Class<OfflineGeometryRegionDefinition>::Find(env).NewGlobalRef(env).release(); + jni::Class<OfflineGeometryRegionDefinition>::Singleton(env); } } // namespace android |