summaryrefslogtreecommitdiff
path: root/platform/android/src/offline/offline_region_definition.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/src/offline/offline_region_definition.cpp')
-rw-r--r--platform/android/src/offline/offline_region_definition.cpp108
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