summaryrefslogtreecommitdiff
path: root/platform/android/src/style
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/src/style')
-rw-r--r--platform/android/src/style/conversion/filter.cpp6
-rw-r--r--platform/android/src/style/conversion/filter.hpp2
-rw-r--r--platform/android/src/style/layers/background_layer.cpp11
-rw-r--r--platform/android/src/style/layers/background_layer.hpp2
-rw-r--r--platform/android/src/style/layers/circle_layer.cpp11
-rw-r--r--platform/android/src/style/layers/circle_layer.hpp2
-rw-r--r--platform/android/src/style/layers/custom_layer.cpp11
-rw-r--r--platform/android/src/style/layers/custom_layer.hpp6
-rw-r--r--platform/android/src/style/layers/fill_extrusion_layer.cpp11
-rw-r--r--platform/android/src/style/layers/fill_extrusion_layer.hpp2
-rw-r--r--platform/android/src/style/layers/fill_layer.cpp11
-rw-r--r--platform/android/src/style/layers/fill_layer.hpp2
-rw-r--r--platform/android/src/style/layers/heatmap_layer.cpp11
-rw-r--r--platform/android/src/style/layers/heatmap_layer.hpp2
-rw-r--r--platform/android/src/style/layers/hillshade_layer.cpp11
-rw-r--r--platform/android/src/style/layers/hillshade_layer.hpp2
-rw-r--r--platform/android/src/style/layers/layer.cpp12
-rw-r--r--platform/android/src/style/layers/layer.cpp.ejs11
-rw-r--r--platform/android/src/style/layers/layer.hpp2
-rw-r--r--platform/android/src/style/layers/layer.hpp.ejs2
-rw-r--r--platform/android/src/style/layers/line_layer.cpp11
-rw-r--r--platform/android/src/style/layers/line_layer.hpp2
-rw-r--r--platform/android/src/style/layers/raster_layer.cpp11
-rw-r--r--platform/android/src/style/layers/raster_layer.hpp2
-rw-r--r--platform/android/src/style/layers/symbol_layer.cpp11
-rw-r--r--platform/android/src/style/layers/symbol_layer.hpp2
-rw-r--r--platform/android/src/style/layers/unknown_layer.cpp11
-rw-r--r--platform/android/src/style/layers/unknown_layer.hpp2
-rw-r--r--platform/android/src/style/light.cpp11
-rw-r--r--platform/android/src/style/light.cpp.ejs11
-rw-r--r--platform/android/src/style/position.cpp19
-rw-r--r--platform/android/src/style/position.hpp5
-rw-r--r--platform/android/src/style/sources/custom_geometry_source.cpp35
-rw-r--r--platform/android/src/style/sources/custom_geometry_source.hpp7
-rw-r--r--platform/android/src/style/sources/geojson_source.cpp23
-rw-r--r--platform/android/src/style/sources/geojson_source.hpp17
-rw-r--r--platform/android/src/style/sources/image_source.cpp11
-rw-r--r--platform/android/src/style/sources/image_source.hpp2
-rw-r--r--platform/android/src/style/sources/raster_dem_source.cpp13
-rw-r--r--platform/android/src/style/sources/raster_dem_source.hpp5
-rw-r--r--platform/android/src/style/sources/raster_source.cpp13
-rw-r--r--platform/android/src/style/sources/raster_source.hpp5
-rw-r--r--platform/android/src/style/sources/source.cpp7
-rw-r--r--platform/android/src/style/sources/source.hpp4
-rw-r--r--platform/android/src/style/sources/unknown_source.cpp11
-rw-r--r--platform/android/src/style/sources/unknown_source.hpp2
-rw-r--r--platform/android/src/style/sources/vector_source.cpp16
-rw-r--r--platform/android/src/style/sources/vector_source.hpp7
-rw-r--r--platform/android/src/style/transition_options.cpp11
-rw-r--r--platform/android/src/style/transition_options.hpp5
-rw-r--r--platform/android/src/style/value.cpp52
-rw-r--r--platform/android/src/style/value.hpp4
52 files changed, 187 insertions, 291 deletions
diff --git a/platform/android/src/style/conversion/filter.cpp b/platform/android/src/style/conversion/filter.cpp
index 4eac0cf82b..44b5a71aa3 100644
--- a/platform/android/src/style/conversion/filter.cpp
+++ b/platform/android/src/style/conversion/filter.cpp
@@ -8,11 +8,11 @@ namespace mbgl {
namespace android {
namespace conversion {
-optional<mbgl::style::Filter> toFilter(jni::JNIEnv& env, jni::Array<jni::Object<>> jfilter) {
+optional<mbgl::style::Filter> toFilter(jni::JNIEnv& env, jni::Local<jni::Array<jni::Object<>>> jfilter) {
mbgl::optional<mbgl::style::Filter> filter;
if (jfilter) {
mbgl::style::conversion::Error error;
- auto converted = mbgl::style::conversion::convert<mbgl::style::Filter>(Value(env, jfilter), error);
+ auto converted = mbgl::style::conversion::convert<mbgl::style::Filter>(Value(env, std::move(jfilter)), error);
if (!converted) {
mbgl::Log::Error(mbgl::Event::JNI, "Error converting filter: " + error.message);
}
@@ -23,4 +23,4 @@ optional<mbgl::style::Filter> toFilter(jni::JNIEnv& env, jni::Array<jni::Object<
} // namespace conversion
} // namespace android
-} // namespace mbgl \ No newline at end of file
+} // namespace mbgl
diff --git a/platform/android/src/style/conversion/filter.hpp b/platform/android/src/style/conversion/filter.hpp
index df482de8f3..f638a853a1 100644
--- a/platform/android/src/style/conversion/filter.hpp
+++ b/platform/android/src/style/conversion/filter.hpp
@@ -9,7 +9,7 @@ namespace mbgl {
namespace android {
namespace conversion {
-optional<mbgl::style::Filter> toFilter(jni::JNIEnv&, jni::Array<jni::Object<>>);
+optional<mbgl::style::Filter> toFilter(jni::JNIEnv&, jni::Local<jni::Array<jni::Object<>>>);
} // namespace conversion
} // namespace android
diff --git a/platform/android/src/style/layers/background_layer.cpp b/platform/android/src/style/layers/background_layer.cpp
index a8f013b230..00c348b232 100644
--- a/platform/android/src/style/layers/background_layer.cpp
+++ b/platform/android/src/style/layers/background_layer.cpp
@@ -93,22 +93,21 @@ namespace android {
}
- jni::Class<BackgroundLayer> BackgroundLayer::javaClass;
-
jni::jobject* BackgroundLayer::createJavaPeer(jni::JNIEnv& env) {
- static auto constructor = BackgroundLayer::javaClass.template GetConstructor<jni::jlong>(env);
- return BackgroundLayer::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
+ static auto javaClass = jni::Class<BackgroundLayer>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}
void BackgroundLayer::registerNative(jni::JNIEnv& env) {
// Lookup the class
- BackgroundLayer::javaClass = *jni::Class<BackgroundLayer>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<BackgroundLayer>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<BackgroundLayer>(
- env, BackgroundLayer::javaClass, "nativePtr",
+ env, javaClass, "nativePtr",
std::make_unique<BackgroundLayer, JNIEnv&, jni::String>,
"initialize",
"finalize",
diff --git a/platform/android/src/style/layers/background_layer.hpp b/platform/android/src/style/layers/background_layer.hpp
index 95555a2d78..3b7f03ddb6 100644
--- a/platform/android/src/style/layers/background_layer.hpp
+++ b/platform/android/src/style/layers/background_layer.hpp
@@ -15,8 +15,6 @@ public:
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/BackgroundLayer"; };
- static jni::Class<BackgroundLayer> javaClass;
-
static void registerNative(jni::JNIEnv&);
BackgroundLayer(jni::JNIEnv&, jni::String);
diff --git a/platform/android/src/style/layers/circle_layer.cpp b/platform/android/src/style/layers/circle_layer.cpp
index 4c7f69e956..47a492dd43 100644
--- a/platform/android/src/style/layers/circle_layer.cpp
+++ b/platform/android/src/style/layers/circle_layer.cpp
@@ -206,22 +206,21 @@ namespace android {
}
- jni::Class<CircleLayer> CircleLayer::javaClass;
-
jni::jobject* CircleLayer::createJavaPeer(jni::JNIEnv& env) {
- static auto constructor = CircleLayer::javaClass.template GetConstructor<jni::jlong>(env);
- return CircleLayer::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
+ static auto javaClass = jni::Class<CircleLayer>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}
void CircleLayer::registerNative(jni::JNIEnv& env) {
// Lookup the class
- CircleLayer::javaClass = *jni::Class<CircleLayer>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<CircleLayer>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<CircleLayer>(
- env, CircleLayer::javaClass, "nativePtr",
+ env, javaClass, "nativePtr",
std::make_unique<CircleLayer, JNIEnv&, jni::String, jni::String>,
"initialize",
"finalize",
diff --git a/platform/android/src/style/layers/circle_layer.hpp b/platform/android/src/style/layers/circle_layer.hpp
index 9d323e92bb..03063b1fc1 100644
--- a/platform/android/src/style/layers/circle_layer.hpp
+++ b/platform/android/src/style/layers/circle_layer.hpp
@@ -15,8 +15,6 @@ public:
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/CircleLayer"; };
- static jni::Class<CircleLayer> javaClass;
-
static void registerNative(jni::JNIEnv&);
CircleLayer(jni::JNIEnv&, jni::String, jni::String);
diff --git a/platform/android/src/style/layers/custom_layer.cpp b/platform/android/src/style/layers/custom_layer.cpp
index 61e74a9cf5..c0dcc24f06 100644
--- a/platform/android/src/style/layers/custom_layer.cpp
+++ b/platform/android/src/style/layers/custom_layer.cpp
@@ -33,22 +33,21 @@ namespace android {
}
}
- jni::Class<CustomLayer> CustomLayer::javaClass;
-
jni::jobject* CustomLayer::createJavaPeer(jni::JNIEnv& env) {
- static auto constructor = CustomLayer::javaClass.template GetConstructor<jni::jlong>(env);
- return CustomLayer::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
+ static auto javaClass = jni::Class<CustomLayer>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}
void CustomLayer::registerNative(jni::JNIEnv& env) {
// Lookup the class
- CustomLayer::javaClass = *jni::Class<CustomLayer>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<CustomLayer>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<CustomLayer>(
- env, CustomLayer::javaClass, "nativePtr",
+ env, javaClass, "nativePtr",
std::make_unique<CustomLayer, JNIEnv&, jni::String, jni::jlong>,
"initialize",
"finalize",
diff --git a/platform/android/src/style/layers/custom_layer.hpp b/platform/android/src/style/layers/custom_layer.hpp
index 7eb649d923..75e1957717 100644
--- a/platform/android/src/style/layers/custom_layer.hpp
+++ b/platform/android/src/style/layers/custom_layer.hpp
@@ -9,19 +9,13 @@ namespace android {
class CustomLayer : public Layer {
public:
-
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/CustomLayer"; };
- static jni::Class<CustomLayer> javaClass;
-
static void registerNative(jni::JNIEnv&);
CustomLayer(jni::JNIEnv&, jni::String, jni::jlong);
-
CustomLayer(mbgl::Map&, mbgl::style::CustomLayer&);
-
CustomLayer(mbgl::Map&, std::unique_ptr<mbgl::style::CustomLayer>);
-
~CustomLayer();
void update(jni::JNIEnv&);
diff --git a/platform/android/src/style/layers/fill_extrusion_layer.cpp b/platform/android/src/style/layers/fill_extrusion_layer.cpp
index 492e1729b9..6c6a0bef5a 100644
--- a/platform/android/src/style/layers/fill_extrusion_layer.cpp
+++ b/platform/android/src/style/layers/fill_extrusion_layer.cpp
@@ -156,22 +156,21 @@ namespace android {
}
- jni::Class<FillExtrusionLayer> FillExtrusionLayer::javaClass;
-
jni::jobject* FillExtrusionLayer::createJavaPeer(jni::JNIEnv& env) {
- static auto constructor = FillExtrusionLayer::javaClass.template GetConstructor<jni::jlong>(env);
- return FillExtrusionLayer::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
+ static auto javaClass = jni::Class<FillExtrusionLayer>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}
void FillExtrusionLayer::registerNative(jni::JNIEnv& env) {
// Lookup the class
- FillExtrusionLayer::javaClass = *jni::Class<FillExtrusionLayer>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<FillExtrusionLayer>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<FillExtrusionLayer>(
- env, FillExtrusionLayer::javaClass, "nativePtr",
+ env, javaClass, "nativePtr",
std::make_unique<FillExtrusionLayer, JNIEnv&, jni::String, jni::String>,
"initialize",
"finalize",
diff --git a/platform/android/src/style/layers/fill_extrusion_layer.hpp b/platform/android/src/style/layers/fill_extrusion_layer.hpp
index 11a74bc8ef..233c3cc334 100644
--- a/platform/android/src/style/layers/fill_extrusion_layer.hpp
+++ b/platform/android/src/style/layers/fill_extrusion_layer.hpp
@@ -15,8 +15,6 @@ public:
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/FillExtrusionLayer"; };
- static jni::Class<FillExtrusionLayer> javaClass;
-
static void registerNative(jni::JNIEnv&);
FillExtrusionLayer(jni::JNIEnv&, jni::String, jni::String);
diff --git a/platform/android/src/style/layers/fill_layer.cpp b/platform/android/src/style/layers/fill_layer.cpp
index f4cddc8858..5182c546c8 100644
--- a/platform/android/src/style/layers/fill_layer.cpp
+++ b/platform/android/src/style/layers/fill_layer.cpp
@@ -143,22 +143,21 @@ namespace android {
}
- jni::Class<FillLayer> FillLayer::javaClass;
-
jni::jobject* FillLayer::createJavaPeer(jni::JNIEnv& env) {
- static auto constructor = FillLayer::javaClass.template GetConstructor<jni::jlong>(env);
- return FillLayer::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
+ static auto javaClass = jni::Class<FillLayer>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}
void FillLayer::registerNative(jni::JNIEnv& env) {
// Lookup the class
- FillLayer::javaClass = *jni::Class<FillLayer>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<FillLayer>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<FillLayer>(
- env, FillLayer::javaClass, "nativePtr",
+ env, javaClass, "nativePtr",
std::make_unique<FillLayer, JNIEnv&, jni::String, jni::String>,
"initialize",
"finalize",
diff --git a/platform/android/src/style/layers/fill_layer.hpp b/platform/android/src/style/layers/fill_layer.hpp
index a773cf785b..db1fee1667 100644
--- a/platform/android/src/style/layers/fill_layer.hpp
+++ b/platform/android/src/style/layers/fill_layer.hpp
@@ -15,8 +15,6 @@ public:
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/FillLayer"; };
- static jni::Class<FillLayer> javaClass;
-
static void registerNative(jni::JNIEnv&);
FillLayer(jni::JNIEnv&, jni::String, jni::String);
diff --git a/platform/android/src/style/layers/heatmap_layer.cpp b/platform/android/src/style/layers/heatmap_layer.cpp
index b3d90faab7..e83d92873f 100644
--- a/platform/android/src/style/layers/heatmap_layer.cpp
+++ b/platform/android/src/style/layers/heatmap_layer.cpp
@@ -109,22 +109,21 @@ namespace android {
}
- jni::Class<HeatmapLayer> HeatmapLayer::javaClass;
-
jni::jobject* HeatmapLayer::createJavaPeer(jni::JNIEnv& env) {
- static auto constructor = HeatmapLayer::javaClass.template GetConstructor<jni::jlong>(env);
- return HeatmapLayer::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
+ static auto javaClass = jni::Class<HeatmapLayer>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}
void HeatmapLayer::registerNative(jni::JNIEnv& env) {
// Lookup the class
- HeatmapLayer::javaClass = *jni::Class<HeatmapLayer>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<HeatmapLayer>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<HeatmapLayer>(
- env, HeatmapLayer::javaClass, "nativePtr",
+ env, javaClass, "nativePtr",
std::make_unique<HeatmapLayer, JNIEnv&, jni::String, jni::String>,
"initialize",
"finalize",
diff --git a/platform/android/src/style/layers/heatmap_layer.hpp b/platform/android/src/style/layers/heatmap_layer.hpp
index 9e8908b062..00ab27d854 100644
--- a/platform/android/src/style/layers/heatmap_layer.hpp
+++ b/platform/android/src/style/layers/heatmap_layer.hpp
@@ -15,8 +15,6 @@ public:
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/HeatmapLayer"; };
- static jni::Class<HeatmapLayer> javaClass;
-
static void registerNative(jni::JNIEnv&);
HeatmapLayer(jni::JNIEnv&, jni::String, jni::String);
diff --git a/platform/android/src/style/layers/hillshade_layer.cpp b/platform/android/src/style/layers/hillshade_layer.cpp
index d98e3ee074..b6409b3b3e 100644
--- a/platform/android/src/style/layers/hillshade_layer.cpp
+++ b/platform/android/src/style/layers/hillshade_layer.cpp
@@ -124,22 +124,21 @@ namespace android {
}
- jni::Class<HillshadeLayer> HillshadeLayer::javaClass;
-
jni::jobject* HillshadeLayer::createJavaPeer(jni::JNIEnv& env) {
- static auto constructor = HillshadeLayer::javaClass.template GetConstructor<jni::jlong>(env);
- return HillshadeLayer::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
+ static auto javaClass = jni::Class<HillshadeLayer>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}
void HillshadeLayer::registerNative(jni::JNIEnv& env) {
// Lookup the class
- HillshadeLayer::javaClass = *jni::Class<HillshadeLayer>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<HillshadeLayer>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<HillshadeLayer>(
- env, HillshadeLayer::javaClass, "nativePtr",
+ env, javaClass, "nativePtr",
std::make_unique<HillshadeLayer, JNIEnv&, jni::String, jni::String>,
"initialize",
"finalize",
diff --git a/platform/android/src/style/layers/hillshade_layer.hpp b/platform/android/src/style/layers/hillshade_layer.hpp
index 4b68251775..f824698058 100644
--- a/platform/android/src/style/layers/hillshade_layer.hpp
+++ b/platform/android/src/style/layers/hillshade_layer.hpp
@@ -15,8 +15,6 @@ public:
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/HillshadeLayer"; };
- static jni::Class<HillshadeLayer> javaClass;
-
static void registerNative(jni::JNIEnv&);
HillshadeLayer(jni::JNIEnv&, jni::String, jni::String);
diff --git a/platform/android/src/style/layers/layer.cpp b/platform/android/src/style/layers/layer.cpp
index 48e09674e8..fe4fb9aeb6 100644
--- a/platform/android/src/style/layers/layer.cpp
+++ b/platform/android/src/style/layers/layer.cpp
@@ -93,7 +93,7 @@ namespace android {
void Layer::setLayoutProperty(jni::JNIEnv& env, jni::String jname, jni::Object<> jvalue) {
// Convert and set property
- optional<mbgl::style::conversion::Error> error = layer.setLayoutProperty(jni::Make<std::string>(env, jname), Value(env, jvalue));
+ optional<mbgl::style::conversion::Error> error = layer.setLayoutProperty(jni::Make<std::string>(env, jname), Value(env, jni::SeizeLocal(env, std::move(jvalue))));
if (error) {
mbgl::Log::Error(mbgl::Event::JNI, "Error setting property: " + jni::Make<std::string>(env, jname) + " " + error->message);
return;
@@ -102,7 +102,7 @@ namespace android {
void Layer::setPaintProperty(jni::JNIEnv& env, jni::String jname, jni::Object<> jvalue) {
// Convert and set property
- optional<mbgl::style::conversion::Error> error = layer.setPaintProperty(jni::Make<std::string>(env, jname), Value(env, jvalue));
+ optional<mbgl::style::conversion::Error> error = layer.setPaintProperty(jni::Make<std::string>(env, jname), Value(env, jni::SeizeLocal(env, std::move(jvalue))));
if (error) {
mbgl::Log::Error(mbgl::Event::JNI, "Error setting property: " + jni::Make<std::string>(env, jname) + " " + error->message);
return;
@@ -128,7 +128,7 @@ namespace android {
using namespace mbgl::style::conversion;
Error error;
- optional<Filter> converted = convert<Filter>(Value(env, jfilter), error);
+ optional<Filter> converted = convert<Filter>(Value(env, jni::SeizeLocal(env, std::move(jfilter))), error);
if (!converted) {
mbgl::Log::Error(mbgl::Event::JNI, "Error setting filter: " + error.message);
return;
@@ -246,16 +246,14 @@ namespace android {
return jni::Object<jni::ObjectTag>(*convert<jni::jobject*>(env, layer.getVisibility()));
}
- jni::Class<Layer> Layer::javaClass;
-
void Layer::registerNative(jni::JNIEnv& env) {
// Lookup the class
- Layer::javaClass = *jni::Class<Layer>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<Layer>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
- jni::RegisterNativePeer<Layer>(env, Layer::javaClass, "nativePtr",
+ jni::RegisterNativePeer<Layer>(env, javaClass, "nativePtr",
METHOD(&Layer::getId, "nativeGetId"),
METHOD(&Layer::setLayoutProperty, "nativeSetLayoutProperty"),
METHOD(&Layer::setPaintProperty, "nativeSetPaintProperty"),
diff --git a/platform/android/src/style/layers/layer.cpp.ejs b/platform/android/src/style/layers/layer.cpp.ejs
index b08f0ec4dc..7dbb031b25 100644
--- a/platform/android/src/style/layers/layer.cpp.ejs
+++ b/platform/android/src/style/layers/layer.cpp.ejs
@@ -84,22 +84,21 @@ namespace android {
<% } -%>
<% } -%>
- jni::Class<<%- camelize(type) %>Layer> <%- camelize(type) %>Layer::javaClass;
-
jni::jobject* <%- camelize(type) %>Layer::createJavaPeer(jni::JNIEnv& env) {
- static auto constructor = <%- camelize(type) %>Layer::javaClass.template GetConstructor<jni::jlong>(env);
- return <%- camelize(type) %>Layer::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
+ static auto javaClass = jni::Class<<%- camelize(type) %>Layer>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}
void <%- camelize(type) %>Layer::registerNative(jni::JNIEnv& env) {
// Lookup the class
- <%- camelize(type) %>Layer::javaClass = *jni::Class<<%- camelize(type) %>Layer>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<<%- camelize(type) %>Layer>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<<%- camelize(type) %>Layer>(
- env, <%- camelize(type) %>Layer::javaClass, "nativePtr",
+ env, javaClass, "nativePtr",
<% if (type === 'background') { -%>
std::make_unique<<%- camelize(type) %>Layer, JNIEnv&, jni::String>,
<% } else { -%>
diff --git a/platform/android/src/style/layers/layer.hpp b/platform/android/src/style/layers/layer.hpp
index 41022bf74a..8112dd18d6 100644
--- a/platform/android/src/style/layers/layer.hpp
+++ b/platform/android/src/style/layers/layer.hpp
@@ -17,8 +17,6 @@ public:
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/Layer"; };
- static jni::Class<Layer> javaClass;
-
static void registerNative(jni::JNIEnv&);
/*
diff --git a/platform/android/src/style/layers/layer.hpp.ejs b/platform/android/src/style/layers/layer.hpp.ejs
index 837049b4c3..dd599d71df 100644
--- a/platform/android/src/style/layers/layer.hpp.ejs
+++ b/platform/android/src/style/layers/layer.hpp.ejs
@@ -19,8 +19,6 @@ public:
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/<%- camelize(type) %>Layer"; };
- static jni::Class<<%- camelize(type) %>Layer> javaClass;
-
static void registerNative(jni::JNIEnv&);
<% if (type === 'background') { -%>
diff --git a/platform/android/src/style/layers/line_layer.cpp b/platform/android/src/style/layers/line_layer.cpp
index f143ecc236..2656bd9c09 100644
--- a/platform/android/src/style/layers/line_layer.cpp
+++ b/platform/android/src/style/layers/line_layer.cpp
@@ -243,22 +243,21 @@ namespace android {
}
- jni::Class<LineLayer> LineLayer::javaClass;
-
jni::jobject* LineLayer::createJavaPeer(jni::JNIEnv& env) {
- static auto constructor = LineLayer::javaClass.template GetConstructor<jni::jlong>(env);
- return LineLayer::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
+ static auto javaClass = jni::Class<LineLayer>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}
void LineLayer::registerNative(jni::JNIEnv& env) {
// Lookup the class
- LineLayer::javaClass = *jni::Class<LineLayer>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<LineLayer>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<LineLayer>(
- env, LineLayer::javaClass, "nativePtr",
+ env, javaClass, "nativePtr",
std::make_unique<LineLayer, JNIEnv&, jni::String, jni::String>,
"initialize",
"finalize",
diff --git a/platform/android/src/style/layers/line_layer.hpp b/platform/android/src/style/layers/line_layer.hpp
index 9eef1349cb..4d1e759c1b 100644
--- a/platform/android/src/style/layers/line_layer.hpp
+++ b/platform/android/src/style/layers/line_layer.hpp
@@ -15,8 +15,6 @@ public:
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/LineLayer"; };
- static jni::Class<LineLayer> javaClass;
-
static void registerNative(jni::JNIEnv&);
LineLayer(jni::JNIEnv&, jni::String, jni::String);
diff --git a/platform/android/src/style/layers/raster_layer.cpp b/platform/android/src/style/layers/raster_layer.cpp
index 53086951e4..c52891b662 100644
--- a/platform/android/src/style/layers/raster_layer.cpp
+++ b/platform/android/src/style/layers/raster_layer.cpp
@@ -162,22 +162,21 @@ namespace android {
}
- jni::Class<RasterLayer> RasterLayer::javaClass;
-
jni::jobject* RasterLayer::createJavaPeer(jni::JNIEnv& env) {
- static auto constructor = RasterLayer::javaClass.template GetConstructor<jni::jlong>(env);
- return RasterLayer::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
+ static auto javaClass = jni::Class<RasterLayer>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}
void RasterLayer::registerNative(jni::JNIEnv& env) {
// Lookup the class
- RasterLayer::javaClass = *jni::Class<RasterLayer>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<RasterLayer>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<RasterLayer>(
- env, RasterLayer::javaClass, "nativePtr",
+ env, javaClass, "nativePtr",
std::make_unique<RasterLayer, JNIEnv&, jni::String, jni::String>,
"initialize",
"finalize",
diff --git a/platform/android/src/style/layers/raster_layer.hpp b/platform/android/src/style/layers/raster_layer.hpp
index d1c1b45234..4e268c36e5 100644
--- a/platform/android/src/style/layers/raster_layer.hpp
+++ b/platform/android/src/style/layers/raster_layer.hpp
@@ -15,8 +15,6 @@ public:
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/RasterLayer"; };
- static jni::Class<RasterLayer> javaClass;
-
static void registerNative(jni::JNIEnv&);
RasterLayer(jni::JNIEnv&, jni::String, jni::String);
diff --git a/platform/android/src/style/layers/symbol_layer.cpp b/platform/android/src/style/layers/symbol_layer.cpp
index d44744a6cf..953c73e221 100644
--- a/platform/android/src/style/layers/symbol_layer.cpp
+++ b/platform/android/src/style/layers/symbol_layer.cpp
@@ -492,22 +492,21 @@ namespace android {
}
- jni::Class<SymbolLayer> SymbolLayer::javaClass;
-
jni::jobject* SymbolLayer::createJavaPeer(jni::JNIEnv& env) {
- static auto constructor = SymbolLayer::javaClass.template GetConstructor<jni::jlong>(env);
- return SymbolLayer::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
+ static auto javaClass = jni::Class<SymbolLayer>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}
void SymbolLayer::registerNative(jni::JNIEnv& env) {
// Lookup the class
- SymbolLayer::javaClass = *jni::Class<SymbolLayer>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<SymbolLayer>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<SymbolLayer>(
- env, SymbolLayer::javaClass, "nativePtr",
+ env, javaClass, "nativePtr",
std::make_unique<SymbolLayer, JNIEnv&, jni::String, jni::String>,
"initialize",
"finalize",
diff --git a/platform/android/src/style/layers/symbol_layer.hpp b/platform/android/src/style/layers/symbol_layer.hpp
index 417e5e143f..3835e01bf1 100644
--- a/platform/android/src/style/layers/symbol_layer.hpp
+++ b/platform/android/src/style/layers/symbol_layer.hpp
@@ -15,8 +15,6 @@ public:
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/SymbolLayer"; };
- static jni::Class<SymbolLayer> javaClass;
-
static void registerNative(jni::JNIEnv&);
SymbolLayer(jni::JNIEnv&, jni::String, jni::String);
diff --git a/platform/android/src/style/layers/unknown_layer.cpp b/platform/android/src/style/layers/unknown_layer.cpp
index 8ffda82bfc..9f877e4896 100644
--- a/platform/android/src/style/layers/unknown_layer.cpp
+++ b/platform/android/src/style/layers/unknown_layer.cpp
@@ -22,16 +22,15 @@ namespace android {
: Layer(map, std::move(coreLayer)) {
}
- jni::Class<UnknownLayer> UnknownLayer::javaClass;
-
jni::jobject* UnknownLayer::createJavaPeer(jni::JNIEnv& env) {
- static auto constructor = UnknownLayer::javaClass.template GetConstructor<jni::jlong>(env);
- return UnknownLayer::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
+ static auto javaClass = jni::Class<UnknownLayer>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}
void UnknownLayer::registerNative(jni::JNIEnv& env) {
// Lookup the class
- UnknownLayer::javaClass = *jni::Class<UnknownLayer>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<UnknownLayer>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
@@ -39,7 +38,7 @@ namespace android {
// Register the peer
jni::RegisterNativePeer<UnknownLayer>(
- env, UnknownLayer::javaClass, "nativePtr",
+ env, javaClass, "nativePtr",
init,
"initialize",
"finalize");
diff --git a/platform/android/src/style/layers/unknown_layer.hpp b/platform/android/src/style/layers/unknown_layer.hpp
index 67992ea007..0610c843f1 100644
--- a/platform/android/src/style/layers/unknown_layer.hpp
+++ b/platform/android/src/style/layers/unknown_layer.hpp
@@ -12,8 +12,6 @@ public:
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/UnknownLayer"; };
- static jni::Class<UnknownLayer> javaClass;
-
static void registerNative(jni::JNIEnv&);
UnknownLayer(mbgl::Map&, mbgl::style::Layer&);
diff --git a/platform/android/src/style/light.cpp b/platform/android/src/style/light.cpp
index 71f1cb076e..64afb89204 100644
--- a/platform/android/src/style/light.cpp
+++ b/platform/android/src/style/light.cpp
@@ -23,11 +23,10 @@ jni::jobject* Light::createJavaLightPeer(jni::JNIEnv& env, Map& map, mbgl::style
return result;
}
-jni::Class<Light> Light::javaClass;
-
jni::jobject* Light::createJavaPeer(jni::JNIEnv& env) {
- static auto constructor = Light::javaClass.template GetConstructor<jni::jlong>(env);
- return Light::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
+ static auto javaClass = jni::Class<Light>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}
void Light::setAnchor(jni::JNIEnv& env, jni::String property) {
@@ -121,11 +120,11 @@ void Light::setIntensityTransition(jni::JNIEnv&, jlong duration, jlong delay) {
void Light::registerNative(jni::JNIEnv& env) {
// Lookup the class
- Light::javaClass = *jni::Class<Light>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<Light>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
- jni::RegisterNativePeer<Light>(env, Light::javaClass, "nativePtr",
+ jni::RegisterNativePeer<Light>(env, javaClass, "nativePtr",
METHOD(&Light::getAnchor, "nativeGetAnchor"),
METHOD(&Light::setAnchor, "nativeSetAnchor"),
METHOD(&Light::getPositionTransition, "nativeGetPositionTransition"),
diff --git a/platform/android/src/style/light.cpp.ejs b/platform/android/src/style/light.cpp.ejs
index 17f0bba09d..f18dc57a4f 100644
--- a/platform/android/src/style/light.cpp.ejs
+++ b/platform/android/src/style/light.cpp.ejs
@@ -26,11 +26,10 @@ jni::jobject* Light::createJavaLightPeer(jni::JNIEnv& env, Map& map, mbgl::style
return result;
}
-jni::Class<Light> Light::javaClass;
-
jni::jobject* Light::createJavaPeer(jni::JNIEnv& env) {
- static auto constructor = Light::javaClass.template GetConstructor<jni::jlong>(env);
- return Light::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
+ static auto javaClass = jni::Class<Light>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}
<% for (const property of properties) { -%>
@@ -106,11 +105,11 @@ void Light::set<%- camelize(property.name) %>Transition(jni::JNIEnv&, jlong dura
<% } -%>
void Light::registerNative(jni::JNIEnv& env) {
// Lookup the class
- Light::javaClass = *jni::Class<Light>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<Light>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
- jni::RegisterNativePeer<Light>(env, Light::javaClass, "nativePtr",<% for(var i = 0; i < properties.length; i++) {%>
+ jni::RegisterNativePeer<Light>(env, javaClass, "nativePtr",<% for(var i = 0; i < properties.length; i++) {%>
<% if (properties[i].transition) { -%>
METHOD(&Light::get<%- camelize(properties[i].name) %>Transition, "nativeGet<%- camelize(properties[i].name) %>Transition"),
METHOD(&Light::set<%- camelize(properties[i].name) %>Transition, "nativeSet<%- camelize(properties[i].name) %>Transition"),
diff --git a/platform/android/src/style/position.cpp b/platform/android/src/style/position.cpp
index 0bbcefcbcd..c6918a2e9a 100644
--- a/platform/android/src/style/position.cpp
+++ b/platform/android/src/style/position.cpp
@@ -4,29 +4,30 @@ namespace mbgl {
namespace android {
jni::Object<Position> Position::fromPosition(jni::JNIEnv& env, jfloat radialCoordinate, jfloat azimuthalAngle, jfloat polarAngle) {
- static auto method = Position::javaClass.GetStaticMethod<jni::Object<Position> (jfloat, jfloat, jfloat)>(env, "fromPosition");
- return Position::javaClass.Call(env, method, radialCoordinate, azimuthalAngle, polarAngle);
+ static auto javaClass = jni::Class<Position>::Singleton(env);
+ static auto method = javaClass.GetStaticMethod<jni::Object<Position> (jfloat, jfloat, jfloat)>(env, "fromPosition");
+ return javaClass.Call(env, method, radialCoordinate, azimuthalAngle, polarAngle);
}
void Position::registerNative(jni::JNIEnv& env) {
- // Lookup the class
- Position::javaClass = *jni::Class<Position>::Find(env).NewGlobalRef(env).release();
+ jni::Class<Position>::Singleton(env);
}
-jni::Class<Position> Position::javaClass;
-
float Position::getRadialCoordinate(jni::JNIEnv& env, jni::Object<Position> position){
- static auto field = Position::javaClass.GetField<jfloat>(env, "radialCoordinate");
+ static auto javaClass = jni::Class<Position>::Singleton(env);
+ static auto field = javaClass.GetField<jfloat>(env, "radialCoordinate");
return position.Get(env, field);
}
float Position::getAzimuthalAngle(jni::JNIEnv& env, jni::Object<Position> position){
- static auto field = Position::javaClass.GetField<jfloat>(env, "azimuthalAngle");
+ static auto javaClass = jni::Class<Position>::Singleton(env);
+ static auto field = javaClass.GetField<jfloat>(env, "azimuthalAngle");
return position.Get(env, field);
}
float Position::getPolarAngle(jni::JNIEnv& env, jni::Object<Position> position){
- static auto field = Position::javaClass.GetField<jfloat>(env, "polarAngle");
+ static auto javaClass = jni::Class<Position>::Singleton(env);
+ static auto field = javaClass.GetField<jfloat>(env, "polarAngle");
return position.Get(env, field);
}
diff --git a/platform/android/src/style/position.hpp b/platform/android/src/style/position.hpp
index 4aafa853db..4f3738da9f 100644
--- a/platform/android/src/style/position.hpp
+++ b/platform/android/src/style/position.hpp
@@ -9,21 +9,16 @@ namespace android {
class Position : private mbgl::util::noncopyable {
public:
-
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/light/Position"; };
static jni::Object<Position> fromPosition(jni::JNIEnv&, jfloat, jfloat, jfloat);
- static jni::Class<Position> javaClass;
-
static void registerNative(jni::JNIEnv&);
static float getRadialCoordinate(jni::JNIEnv&, jni::Object<Position>);
static float getAzimuthalAngle(jni::JNIEnv&, jni::Object<Position>);
static float getPolarAngle(jni::JNIEnv&, jni::Object<Position>);
-
};
-
} // namespace android
} // namespace mbgl \ No newline at end of file
diff --git a/platform/android/src/style/sources/custom_geometry_source.cpp b/platform/android/src/style/sources/custom_geometry_source.cpp
index e9a530f75b..029824eae0 100644
--- a/platform/android/src/style/sources/custom_geometry_source.cpp
+++ b/platform/android/src/style/sources/custom_geometry_source.cpp
@@ -21,7 +21,7 @@ namespace android {
// the value was originally a CustomGeometrySourceOptions object on the Java side. If it fails
// to convert, it's a bug in our serialization or Java-side static typing.
static style::CustomGeometrySource::Options convertCustomGeometrySourceOptions(jni::JNIEnv& env,
- jni::Object<> options,
+ jni::Local<jni::Object<>> options,
style::TileFunction fetchFn,
style::TileFunction cancelFn) {
using namespace mbgl::style::conversion;
@@ -29,7 +29,7 @@ namespace android {
return style::CustomGeometrySource::Options();
}
Error error;
- optional<style::CustomGeometrySource::Options> result = convert<style::CustomGeometrySource::Options>(Value(env, options), error);
+ optional<style::CustomGeometrySource::Options> result = convert<style::CustomGeometrySource::Options>(Value(env, std::move(options)), error);
if (!result) {
throw std::logic_error(error.message);
}
@@ -43,7 +43,7 @@ namespace android {
jni::Object<> options)
: Source(env, std::make_unique<mbgl::style::CustomGeometrySource>(
jni::Make<std::string>(env, sourceId),
- convertCustomGeometrySourceOptions(env, options,
+ convertCustomGeometrySourceOptions(env, jni::SeizeLocal(env, std::move(options)),
std::bind(&CustomGeometrySource::fetchTile, this, std::placeholders::_1),
std::bind(&CustomGeometrySource::cancelTile, this, std::placeholders::_1)))) {
}
@@ -61,44 +61,48 @@ namespace android {
void CustomGeometrySource::fetchTile (const mbgl::CanonicalTileID& tileID) {
android::UniqueEnv _env = android::AttachEnv();
+ static auto javaClass = jni::Class<CustomGeometrySource>::Singleton(*_env);
static auto fetchTile = javaClass.GetMethod<void (jni::jint, jni::jint, jni::jint)>(*_env, "fetchTile");
assert(javaPeer);
- auto peer = jni::Cast(*_env, *javaPeer, javaClass);
+ auto peer = jni::Cast(*_env, javaClass, *javaPeer);
peer.Call(*_env, fetchTile, (int)tileID.z, (int)tileID.x, (int)tileID.y);
};
void CustomGeometrySource::cancelTile(const mbgl::CanonicalTileID& tileID) {
android::UniqueEnv _env = android::AttachEnv();
+ static auto javaClass = jni::Class<CustomGeometrySource>::Singleton(*_env);
static auto cancelTile = javaClass.GetMethod<void (jni::jint, jni::jint, jni::jint)>(*_env, "cancelTile");
assert(javaPeer);
- auto peer = jni::Cast(*_env, *javaPeer, javaClass);
+ auto peer = jni::Cast(*_env, javaClass, *javaPeer);
peer.Call(*_env, cancelTile, (int)tileID.z, (int)tileID.x, (int)tileID.y);
};
void CustomGeometrySource::startThreads() {
android::UniqueEnv _env = android::AttachEnv();
+ static auto javaClass = jni::Class<CustomGeometrySource>::Singleton(*_env);
static auto startThreads = javaClass.GetMethod<void ()>(*_env, "startThreads");
assert(javaPeer);
- auto peer = jni::Cast(*_env, *javaPeer, javaClass);
+ auto peer = jni::Cast(*_env, javaClass, *javaPeer);
peer.Call(*_env, startThreads);
}
void CustomGeometrySource::releaseThreads() {
android::UniqueEnv _env = android::AttachEnv();
+ static auto javaClass = jni::Class<CustomGeometrySource>::Singleton(*_env);
static auto releaseThreads = javaClass.GetMethod<void ()>(*_env, "releaseThreads");
assert(javaPeer);
- auto peer = jni::Cast(*_env, *javaPeer, javaClass);
+ auto peer = jni::Cast(*_env, javaClass, *javaPeer);
peer.Call(*_env, releaseThreads);
};
@@ -107,11 +111,12 @@ namespace android {
jni::jint y) {
android::UniqueEnv _env = android::AttachEnv();
+ static auto javaClass = jni::Class<CustomGeometrySource>::Singleton(*_env);
static auto isCancelled = javaClass.GetMethod<jboolean (jni::jint, jni::jint, jni::jint)>(*_env, "isCancelled");
assert(javaPeer);
- auto peer = jni::Cast(*_env, *javaPeer, javaClass);
+ auto peer = jni::Cast(*_env, javaClass, *javaPeer);
return peer.Call(*_env, isCancelled, z, x, y);
};
@@ -147,16 +152,16 @@ namespace android {
std::vector<mbgl::Feature> features;
if (rendererFrontend) {
- features = rendererFrontend->querySourceFeatures(source.getID(), { {}, toFilter(env, jfilter) });
+ features = rendererFrontend->querySourceFeatures(source.getID(),
+ { {}, toFilter(env, jni::SeizeLocal(env, std::move(jfilter))) });
}
return *convert<jni::Array<jni::Object<Feature>>, std::vector<mbgl::Feature>>(env, features);
}
- jni::Class<CustomGeometrySource> CustomGeometrySource::javaClass;
-
jni::Object<Source> CustomGeometrySource::createJavaPeer(jni::JNIEnv& env) {
- static auto constructor = CustomGeometrySource::javaClass.template GetConstructor<jni::jlong>(env);
- return jni::Object<Source>(CustomGeometrySource::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
+ static auto javaClass = jni::Class<CustomGeometrySource>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return jni::Object<Source>(javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
}
void CustomGeometrySource::addToMap(JNIEnv& env, jni::Object<Source> obj, mbgl::Map& map, AndroidRendererFrontend& frontend) {
@@ -174,13 +179,13 @@ namespace android {
void CustomGeometrySource::registerNative(jni::JNIEnv& env) {
// Lookup the class
- CustomGeometrySource::javaClass = *jni::Class<CustomGeometrySource>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<CustomGeometrySource>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<CustomGeometrySource>(
- env, CustomGeometrySource::javaClass, "nativePtr",
+ env, javaClass, "nativePtr",
std::make_unique<CustomGeometrySource, JNIEnv&, jni::String, jni::Object<>>,
"initialize",
"finalize",
diff --git a/platform/android/src/style/sources/custom_geometry_source.hpp b/platform/android/src/style/sources/custom_geometry_source.hpp
index 801f81b089..ecfadd659c 100644
--- a/platform/android/src/style/sources/custom_geometry_source.hpp
+++ b/platform/android/src/style/sources/custom_geometry_source.hpp
@@ -18,14 +18,10 @@ public:
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/sources/CustomGeometrySource"; };
- static jni::Class<CustomGeometrySource> javaClass;
-
static void registerNative(jni::JNIEnv&);
CustomGeometrySource(jni::JNIEnv&, jni::String, jni::Object<>);
-
CustomGeometrySource(jni::JNIEnv&, mbgl::style::Source&, AndroidRendererFrontend&);
-
~CustomGeometrySource();
bool removeFromMap(JNIEnv&, jni::Object<Source>, mbgl::Map&) override;
@@ -36,6 +32,8 @@ public:
bool isCancelled(jni::jint z, jni::jint x, jni::jint y);
void startThreads();
void releaseThreads();
+
+private:
void setTileData(jni::JNIEnv& env, jni::jint z, jni::jint x, jni::jint y, jni::Object<geojson::FeatureCollection> jf);
void invalidateTile(jni::JNIEnv& env, jni::jint z, jni::jint x, jni::jint y);
@@ -44,7 +42,6 @@ public:
jni::Array<jni::Object<geojson::Feature>> querySourceFeatures(jni::JNIEnv&,
jni::Array<jni::Object<>> );
-private:
jni::Object<Source> createJavaPeer(jni::JNIEnv&);
}; // class CustomGeometrySource
diff --git a/platform/android/src/style/sources/geojson_source.cpp b/platform/android/src/style/sources/geojson_source.cpp
index 9d6ca704eb..b9f3f73801 100644
--- a/platform/android/src/style/sources/geojson_source.cpp
+++ b/platform/android/src/style/sources/geojson_source.cpp
@@ -29,13 +29,14 @@ namespace android {
// This conversion is expected not to fail because it's used only in contexts where
// the value was originally a GeoJsonOptions object on the Java side. If it fails
// to convert, it's a bug in our serialization or Java-side static typing.
- static style::GeoJSONOptions convertGeoJSONOptions(jni::JNIEnv& env, jni::Object<> options) {
+ static style::GeoJSONOptions convertGeoJSONOptions(jni::JNIEnv& env, jni::Local<jni::Object<>> options) {
using namespace mbgl::style::conversion;
if (!options) {
return style::GeoJSONOptions();
}
Error error;
- optional<style::GeoJSONOptions> result = convert<style::GeoJSONOptions>(mbgl::android::Value(env, options), error);
+ optional<style::GeoJSONOptions> result = convert<style::GeoJSONOptions>(
+ mbgl::android::Value(env, std::move(options)), error);
if (!result) {
throw std::logic_error(error.message);
}
@@ -45,7 +46,7 @@ namespace android {
GeoJSONSource::GeoJSONSource(jni::JNIEnv& env, jni::String sourceId, jni::Object<> options)
: Source(env, std::make_unique<mbgl::style::GeoJSONSource>(
jni::Make<std::string>(env, sourceId),
- convertGeoJSONOptions(env, options)))
+ convertGeoJSONOptions(env, jni::SeizeLocal(env, std::move(options)))))
, threadPool(sharedThreadPool())
, converter(std::make_unique<Actor<FeatureConverter>>(*threadPool)) {
}
@@ -100,22 +101,22 @@ namespace android {
std::vector<mbgl::Feature> features;
if (rendererFrontend) {
- features = rendererFrontend->querySourceFeatures(source.getID(), { {}, toFilter(env, jfilter) });
+ features = rendererFrontend->querySourceFeatures(source.getID(),
+ { {}, toFilter(env, jni::SeizeLocal(env, std::move(jfilter))) });
}
return *convert<jni::Array<jni::Object<Feature>>, std::vector<mbgl::Feature>>(env, features);
}
- jni::Class<GeoJSONSource> GeoJSONSource::javaClass;
-
jni::Object<Source> GeoJSONSource::createJavaPeer(jni::JNIEnv& env) {
- static auto constructor = GeoJSONSource::javaClass.template GetConstructor<jni::jlong>(env);
- return jni::Object<Source>(GeoJSONSource::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
+ static auto javaClass = jni::Class<GeoJSONSource>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return jni::Object<Source>(javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
}
template <class JNIType>
void GeoJSONSource::setCollectionAsync(jni::JNIEnv& env, jni::Object<JNIType> jObject) {
- std::shared_ptr<jni::jobject> object = std::shared_ptr<jni::jobject>(jObject.NewGlobalRef(env).release()->Get(), GenericGlobalRefDeleter());
+ std::shared_ptr<jni::jobject> object = std::shared_ptr<jni::jobject>(jObject.NewGlobalRef(env).release().Get(), GenericGlobalRefDeleter());
Update::Converter converterFn = [this, object](ActorRef<Callback> _callback) {
converter->self().invoke(&FeatureConverter::convertObject<JNIType>, jni::Object<JNIType>(*object), _callback);
@@ -158,13 +159,13 @@ namespace android {
void GeoJSONSource::registerNative(jni::JNIEnv& env) {
// Lookup the class
- GeoJSONSource::javaClass = *jni::Class<GeoJSONSource>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<GeoJSONSource>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<GeoJSONSource>(
- env, GeoJSONSource::javaClass, "nativePtr",
+ env, javaClass, "nativePtr",
std::make_unique<GeoJSONSource, JNIEnv&, jni::String, jni::Object<>>,
"initialize",
"finalize",
diff --git a/platform/android/src/style/sources/geojson_source.hpp b/platform/android/src/style/sources/geojson_source.hpp
index 24ea3c73f8..eb28e2470b 100644
--- a/platform/android/src/style/sources/geojson_source.hpp
+++ b/platform/android/src/style/sources/geojson_source.hpp
@@ -30,35 +30,26 @@ struct Update {
class GeoJSONSource : public Source {
public:
-
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/sources/GeoJsonSource"; };
- static jni::Class<GeoJSONSource> javaClass;
-
static void registerNative(jni::JNIEnv&);
GeoJSONSource(jni::JNIEnv&, jni::String, jni::Object<>);
-
GeoJSONSource(jni::JNIEnv&, mbgl::style::Source&, AndroidRendererFrontend&);
-
~GeoJSONSource();
+private:
void setGeoJSONString(jni::JNIEnv&, jni::String);
-
void setFeatureCollection(jni::JNIEnv&, jni::Object<geojson::FeatureCollection>);
-
void setFeature(jni::JNIEnv&, jni::Object<geojson::Feature>);
-
void setGeometry(jni::JNIEnv&, jni::Object<geojson::Geometry>);
-
void setURL(jni::JNIEnv&, jni::String);
- jni::String getURL(jni::JNIEnv&);
-
jni::Array<jni::Object<geojson::Feature>> querySourceFeatures(jni::JNIEnv&,
- jni::Array<jni::Object<>> jfilter);
+ jni::Array<jni::Object<>>);
+
+ jni::String getURL(jni::JNIEnv&);
-private:
jni::Object<Source> createJavaPeer(jni::JNIEnv&);
std::unique_ptr<Update> awaitingUpdate;
std::unique_ptr<Update> update;
diff --git a/platform/android/src/style/sources/image_source.cpp b/platform/android/src/style/sources/image_source.cpp
index 278564485d..343b7439c8 100644
--- a/platform/android/src/style/sources/image_source.cpp
+++ b/platform/android/src/style/sources/image_source.cpp
@@ -50,22 +50,21 @@ namespace android {
LatLngQuad::getLatLngArray(env, coordinatesObject));
}
- jni::Class<ImageSource> ImageSource::javaClass;
-
jni::Object<Source> ImageSource::createJavaPeer(jni::JNIEnv& env) {
- static auto constructor = ImageSource::javaClass.template GetConstructor<jni::jlong>(env);
- return jni::Object<Source>(ImageSource::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
+ static auto javaClass = jni::Class<ImageSource>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return jni::Object<Source>(javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
}
void ImageSource::registerNative(jni::JNIEnv& env) {
// Lookup the class
- ImageSource::javaClass = *jni::Class<ImageSource>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<ImageSource>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<ImageSource>(
- env, ImageSource::javaClass, "nativePtr",
+ env, javaClass, "nativePtr",
std::make_unique<ImageSource, JNIEnv&, jni::String, jni::Object<LatLngQuad>>,
"initialize",
"finalize",
diff --git a/platform/android/src/style/sources/image_source.hpp b/platform/android/src/style/sources/image_source.hpp
index 6021a03dc3..b09d4f8c95 100644
--- a/platform/android/src/style/sources/image_source.hpp
+++ b/platform/android/src/style/sources/image_source.hpp
@@ -15,8 +15,6 @@ public:
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/sources/ImageSource"; };
- static jni::Class<ImageSource> javaClass;
-
static void registerNative(jni::JNIEnv&);
ImageSource(jni::JNIEnv&, jni::String, jni::Object<LatLngQuad>);
diff --git a/platform/android/src/style/sources/raster_dem_source.cpp b/platform/android/src/style/sources/raster_dem_source.cpp
index 75e0159d7c..73d04f27c1 100644
--- a/platform/android/src/style/sources/raster_dem_source.cpp
+++ b/platform/android/src/style/sources/raster_dem_source.cpp
@@ -17,7 +17,7 @@ namespace android {
env,
std::make_unique<mbgl::style::RasterDEMSource>(
jni::Make<std::string>(env, sourceId),
- convertURLOrTileset(Value(env, urlOrTileSet)),
+ convertURLOrTileset(Value(env, jni::SeizeLocal(env, std::move(urlOrTileSet)))),
tileSize
)
) {
@@ -36,22 +36,21 @@ namespace android {
return url ? jni::Make<jni::String>(env, *url) : jni::String();
}
- jni::Class<RasterDEMSource> RasterDEMSource::javaClass;
-
jni::Object<Source> RasterDEMSource::createJavaPeer(jni::JNIEnv& env) {
- static auto constructor = RasterDEMSource::javaClass.template GetConstructor<jni::jlong>(env);
- return jni::Object<Source>(RasterDEMSource::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
+ static auto javaClass = jni::Class<RasterDEMSource>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return jni::Object<Source>(javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
}
void RasterDEMSource::registerNative(jni::JNIEnv& env) {
// Lookup the class
- RasterDEMSource::javaClass = *jni::Class<RasterDEMSource>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<RasterDEMSource>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<RasterDEMSource>(
- env, RasterDEMSource::javaClass, "nativePtr",
+ env, javaClass, "nativePtr",
std::make_unique<RasterDEMSource, JNIEnv&, jni::String, jni::Object<>, jni::jint>,
"initialize",
"finalize",
diff --git a/platform/android/src/style/sources/raster_dem_source.hpp b/platform/android/src/style/sources/raster_dem_source.hpp
index 56924c1f8d..25d9fe90cd 100644
--- a/platform/android/src/style/sources/raster_dem_source.hpp
+++ b/platform/android/src/style/sources/raster_dem_source.hpp
@@ -9,17 +9,12 @@ namespace android {
class RasterDEMSource : public Source {
public:
-
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/sources/RasterDemSource"; };
- static jni::Class<RasterDEMSource> javaClass;
-
static void registerNative(jni::JNIEnv&);
RasterDEMSource(jni::JNIEnv&, jni::String, jni::Object<>, jni::jint);
-
RasterDEMSource(jni::JNIEnv&, mbgl::style::Source&, AndroidRendererFrontend&);
-
~RasterDEMSource();
jni::String getURL(jni::JNIEnv&);
diff --git a/platform/android/src/style/sources/raster_source.cpp b/platform/android/src/style/sources/raster_source.cpp
index 33223a5b69..4eef41c8b1 100644
--- a/platform/android/src/style/sources/raster_source.cpp
+++ b/platform/android/src/style/sources/raster_source.cpp
@@ -16,7 +16,7 @@ namespace android {
env,
std::make_unique<mbgl::style::RasterSource>(
jni::Make<std::string>(env, sourceId),
- convertURLOrTileset(Value(env, urlOrTileSet)),
+ convertURLOrTileset(Value(env, jni::SeizeLocal(env, std::move(urlOrTileSet)))),
tileSize
)
) {
@@ -35,22 +35,21 @@ namespace android {
return url ? jni::Make<jni::String>(env, *url) : jni::String();
}
- jni::Class<RasterSource> RasterSource::javaClass;
-
jni::Object<Source> RasterSource::createJavaPeer(jni::JNIEnv& env) {
- static auto constructor = RasterSource::javaClass.template GetConstructor<jni::jlong>(env);
- return jni::Object<Source>(RasterSource::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
+ static auto javaClass = jni::Class<RasterSource>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return jni::Object<Source>(javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
}
void RasterSource::registerNative(jni::JNIEnv& env) {
// Lookup the class
- RasterSource::javaClass = *jni::Class<RasterSource>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<RasterSource>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<RasterSource>(
- env, RasterSource::javaClass, "nativePtr",
+ env, javaClass, "nativePtr",
std::make_unique<RasterSource, JNIEnv&, jni::String, jni::Object<>, jni::jint>,
"initialize",
"finalize",
diff --git a/platform/android/src/style/sources/raster_source.hpp b/platform/android/src/style/sources/raster_source.hpp
index a1da22f40d..888d9f601d 100644
--- a/platform/android/src/style/sources/raster_source.hpp
+++ b/platform/android/src/style/sources/raster_source.hpp
@@ -9,17 +9,12 @@ namespace android {
class RasterSource : public Source {
public:
-
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/sources/RasterSource"; };
- static jni::Class<RasterSource> javaClass;
-
static void registerNative(jni::JNIEnv&);
RasterSource(jni::JNIEnv&, jni::String, jni::Object<>, jni::jint);
-
RasterSource(jni::JNIEnv&, mbgl::style::Source&, AndroidRendererFrontend&);
-
~RasterSource();
jni::String getURL(jni::JNIEnv&);
diff --git a/platform/android/src/style/sources/source.cpp b/platform/android/src/style/sources/source.cpp
index d2e2426c0b..c7968786ec 100644
--- a/platform/android/src/style/sources/source.cpp
+++ b/platform/android/src/style/sources/source.cpp
@@ -76,6 +76,7 @@ namespace android {
if (ownedSource.get() == nullptr && javaPeer.get() != nullptr) {
// Manually clear the java peer
android::UniqueEnv env = android::AttachEnv();
+ static auto javaClass = jni::Class<Source>::Singleton(*env);
static auto nativePtrField = javaClass.GetField<jlong>(*env, "nativePtr");
javaPeer->Set(*env, nativePtrField, (jlong) 0);
javaPeer.reset();
@@ -140,16 +141,14 @@ namespace android {
rendererFrontend = nullptr;
}
- jni::Class<Source> Source::javaClass;
-
void Source::registerNative(jni::JNIEnv& env) {
// Lookup the class
- Source::javaClass = *jni::Class<Source>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<Source>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
- jni::RegisterNativePeer<Source>(env, Source::javaClass, "nativePtr",
+ jni::RegisterNativePeer<Source>(env, javaClass, "nativePtr",
METHOD(&Source::getId, "nativeGetId"),
METHOD(&Source::getAttribution, "nativeGetAttribution")
);
diff --git a/platform/android/src/style/sources/source.hpp b/platform/android/src/style/sources/source.hpp
index 6b906eb9c0..492be8dfec 100644
--- a/platform/android/src/style/sources/source.hpp
+++ b/platform/android/src/style/sources/source.hpp
@@ -17,8 +17,6 @@ public:
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/sources/Source"; };
- static jni::Class<Source> javaClass;
-
static void registerNative(jni::JNIEnv&);
static jni::Object<Source> peerForCoreSource(jni::JNIEnv&, mbgl::style::Source&, AndroidRendererFrontend&);
@@ -53,7 +51,7 @@ protected:
mbgl::style::Source& source;
// Set when the source is added to a map.
- jni::UniqueObject<Source> javaPeer;
+ jni::Global<jni::Object<Source>> javaPeer;
// RendererFrontend pointer is valid only when added to the map.
AndroidRendererFrontend* rendererFrontend { nullptr };
diff --git a/platform/android/src/style/sources/unknown_source.cpp b/platform/android/src/style/sources/unknown_source.cpp
index 4b5510c1db..8e91798392 100644
--- a/platform/android/src/style/sources/unknown_source.cpp
+++ b/platform/android/src/style/sources/unknown_source.cpp
@@ -18,22 +18,21 @@ namespace android {
: Source(env, coreSource, createJavaPeer(env), frontend) {
}
- jni::Class<UnknownSource> UnknownSource::javaClass;
-
jni::Object<Source> UnknownSource::createJavaPeer(jni::JNIEnv& env) {
- static auto constructor = UnknownSource::javaClass.template GetConstructor<jni::jlong>(env);
- return jni::Object<Source>(UnknownSource::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
+ static auto javaClass = jni::Class<UnknownSource>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return jni::Object<Source>(javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
}
void UnknownSource::registerNative(jni::JNIEnv& env) {
// Lookup the class
- UnknownSource::javaClass = *jni::Class<UnknownSource>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<UnknownSource>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<UnknownSource>(
- env, UnknownSource::javaClass, "nativePtr",
+ env, javaClass, "nativePtr",
init,
"initialize",
"finalize"
diff --git a/platform/android/src/style/sources/unknown_source.hpp b/platform/android/src/style/sources/unknown_source.hpp
index 414d420c61..855aea7c63 100644
--- a/platform/android/src/style/sources/unknown_source.hpp
+++ b/platform/android/src/style/sources/unknown_source.hpp
@@ -12,8 +12,6 @@ public:
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/sources/UnknownSource"; };
- static jni::Class<UnknownSource> javaClass;
-
static void registerNative(jni::JNIEnv&);
UnknownSource(jni::JNIEnv&, mbgl::style::Source&, AndroidRendererFrontend&);
diff --git a/platform/android/src/style/sources/vector_source.cpp b/platform/android/src/style/sources/vector_source.cpp
index 9a9548d283..69052bd98c 100644
--- a/platform/android/src/style/sources/vector_source.cpp
+++ b/platform/android/src/style/sources/vector_source.cpp
@@ -25,7 +25,7 @@ namespace android {
env,
std::make_unique<mbgl::style::VectorSource>(
jni::Make<std::string>(env, sourceId),
- convertURLOrTileset(Value(env, urlOrTileSet))
+ convertURLOrTileset(Value(env, jni::SeizeLocal(env, std::move(urlOrTileSet))))
)
) {
}
@@ -51,27 +51,27 @@ namespace android {
std::vector<mbgl::Feature> features;
if (rendererFrontend) {
- features = rendererFrontend->querySourceFeatures(source.getID(), { toVector(env, jSourceLayerIds), toFilter(env, jfilter) });
+ features = rendererFrontend->querySourceFeatures(source.getID(),
+ { toVector(env, jSourceLayerIds), toFilter(env, jni::SeizeLocal(env, std::move(jfilter))) });
}
return *convert<jni::Array<jni::Object<Feature>>, std::vector<mbgl::Feature>>(env, features);
}
- jni::Class<VectorSource> VectorSource::javaClass;
-
jni::Object<Source> VectorSource::createJavaPeer(jni::JNIEnv& env) {
- static auto constructor = VectorSource::javaClass.template GetConstructor<jni::jlong>(env);
- return jni::Object<Source>(VectorSource::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
+ static auto javaClass = jni::Class<VectorSource>::Singleton(env);
+ static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
+ return jni::Object<Source>(javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
}
void VectorSource::registerNative(jni::JNIEnv& env) {
// Lookup the class
- VectorSource::javaClass = *jni::Class<VectorSource>::Find(env).NewGlobalRef(env).release();
+ static auto javaClass = jni::Class<VectorSource>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<VectorSource>(
- env, VectorSource::javaClass, "nativePtr",
+ env, javaClass, "nativePtr",
std::make_unique<VectorSource, JNIEnv&, jni::String, jni::Object<>>,
"initialize",
"finalize",
diff --git a/platform/android/src/style/sources/vector_source.hpp b/platform/android/src/style/sources/vector_source.hpp
index 16049f5c77..587a4be208 100644
--- a/platform/android/src/style/sources/vector_source.hpp
+++ b/platform/android/src/style/sources/vector_source.hpp
@@ -10,25 +10,20 @@ namespace android {
class VectorSource : public Source {
public:
-
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/sources/VectorSource"; };
- static jni::Class<VectorSource> javaClass;
-
static void registerNative(jni::JNIEnv&);
VectorSource(jni::JNIEnv&, jni::String, jni::Object<>);
-
VectorSource(jni::JNIEnv&, mbgl::style::Source&, AndroidRendererFrontend&);
-
~VectorSource();
+private:
jni::Array<jni::Object<geojson::Feature>> querySourceFeatures(jni::JNIEnv&, jni::Array<jni::String>,
jni::Array<jni::Object<>> jfilter);
jni::String getURL(jni::JNIEnv&);
-private:
jni::Object<Source> createJavaPeer(jni::JNIEnv&);
}; // class VectorSource
diff --git a/platform/android/src/style/transition_options.cpp b/platform/android/src/style/transition_options.cpp
index c70aa5fe2e..84bd909125 100644
--- a/platform/android/src/style/transition_options.cpp
+++ b/platform/android/src/style/transition_options.cpp
@@ -4,17 +4,14 @@ namespace mbgl {
namespace android {
jni::Object<TransitionOptions> TransitionOptions::fromTransitionOptions(jni::JNIEnv& env, jlong duration, jlong delay) {
- static auto method = TransitionOptions::javaClass.GetStaticMethod<jni::Object<TransitionOptions> (jlong, jlong)>(env, "fromTransitionOptions");
- return TransitionOptions::javaClass.Call(env, method, duration, delay);
+ static auto javaClass = jni::Class<TransitionOptions>::Singleton(env);
+ static auto method = javaClass.GetStaticMethod<jni::Object<TransitionOptions> (jlong, jlong)>(env, "fromTransitionOptions");
+ return javaClass.Call(env, method, duration, delay);
}
void TransitionOptions::registerNative(jni::JNIEnv& env) {
- // Lookup the class
- TransitionOptions::javaClass = *jni::Class<TransitionOptions>::Find(env).NewGlobalRef(env).release();
+ jni::Class<TransitionOptions>::Singleton(env);
}
-jni::Class<TransitionOptions> TransitionOptions::javaClass;
-
-
} // namespace android
} // namespace mbgl \ No newline at end of file
diff --git a/platform/android/src/style/transition_options.hpp b/platform/android/src/style/transition_options.hpp
index 3e6b0bc488..83276ca1d8 100644
--- a/platform/android/src/style/transition_options.hpp
+++ b/platform/android/src/style/transition_options.hpp
@@ -9,17 +9,12 @@ namespace android {
class TransitionOptions : private mbgl::util::noncopyable {
public:
-
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/TransitionOptions"; };
static jni::Object<TransitionOptions> fromTransitionOptions(jni::JNIEnv&, jlong duration, jlong offset);
- static jni::Class<TransitionOptions> javaClass;
-
static void registerNative(jni::JNIEnv&);
-
};
-
} // namespace android
} // namespace mbgl \ No newline at end of file
diff --git a/platform/android/src/style/value.cpp b/platform/android/src/style/value.cpp
index 70bdea6677..6cdf134931 100644
--- a/platform/android/src/style/value.cpp
+++ b/platform/android/src/style/value.cpp
@@ -4,84 +4,70 @@
namespace mbgl {
namespace android {
-
- class ObjectDeleter {
- public:
- ObjectDeleter() = default;
- ObjectDeleter(JNIEnv& e) : env(e) {}
-
- void operator()(jni::jobject* p) const {
- if (p) {
- jni::DeleteLocalRef(env, p);
- }
- }
-
- private:
- JNIEnv& env;
- };
-
// Instance
- Value::Value(jni::JNIEnv& _env, jni::jobject* _value) : env(_env), value(_value, ObjectDeleter(env)) {}
+ Value::Value(jni::JNIEnv& _env, jni::Local<jni::Object<>> _value)
+ : env(_env),
+ value(std::move(_value)) {}
bool Value::isNull() const {
- return value == nullptr;
+ return !value;
}
bool Value::isArray() const {
- return jni::IsInstanceOf(env, value.get(), *java::ObjectArray::jclass);
+ return jni::IsInstanceOf(env, value->Get(), *java::ObjectArray::jclass);
}
bool Value::isObject() const {
- return jni::IsInstanceOf(env, value.get(), *java::Map::jclass);;
+ return jni::IsInstanceOf(env, value->Get(), *java::Map::jclass);
}
bool Value::isString() const {
- return jni::IsInstanceOf(env, value.get(), *java::String::jclass);
+ return jni::IsInstanceOf(env, value->Get(), *java::String::jclass);
}
bool Value::isBool() const {
- return jni::IsInstanceOf(env, value.get(), *java::Boolean::jclass);
+ return jni::IsInstanceOf(env, value->Get(), *java::Boolean::jclass);
}
bool Value::isNumber() const {
- return jni::IsInstanceOf(env, value.get(), *java::Number::jclass);
+ return jni::IsInstanceOf(env, value->Get(), *java::Number::jclass);
}
std::string Value::toString() const {
- jni::jstring* string = reinterpret_cast<jni::jstring*>(value.get());
+ jni::jstring* string = reinterpret_cast<jni::jstring*>(value->Get());
return jni::Make<std::string>(env, jni::String(string));
}
float Value::toFloat() const {
- return jni::CallMethod<jni::jfloat>(env, value.get(), *java::Number::floatValueMethodId);
+ return jni::CallMethod<jni::jfloat>(env, value->Get(), *java::Number::floatValueMethodId);
}
double Value::toDouble() const {
- return jni::CallMethod<jni::jdouble>(env, value.get(), *java::Number::doubleValueMethodId);
+ return jni::CallMethod<jni::jdouble>(env, value->Get(), *java::Number::doubleValueMethodId);
}
long Value::toLong() const {
- return jni::CallMethod<jni::jlong>(env, value.get(), *java::Number::longValueMethodId);
+ return jni::CallMethod<jni::jlong>(env, value->Get(), *java::Number::longValueMethodId);
}
bool Value::toBool() const {
- return jni::CallMethod<jni::jboolean>(env, value.get(), *java::Boolean::booleanValueMethodId);
+ return jni::CallMethod<jni::jboolean>(env, value->Get(), *java::Boolean::booleanValueMethodId);
}
Value Value::get(const char* key) const {
- jni::jobject* member = jni::CallMethod<jni::jobject*>(env, value.get(), *java::Map::getMethodId, jni::Make<jni::String>(env, std::string(key)).Get());
- return Value(env, member);
+ jni::jobject* member = jni::CallMethod<jni::jobject*>(env, value->Get(), *java::Map::getMethodId, jni::Make<jni::String>(env, std::string(key)).Get());
+ return Value(env, jni::SeizeLocal(env, jni::Object<>(member)));
}
int Value::getLength() const {
- auto array = (jni::jarray<jni::jobject>*) value.get();
+ auto array = (jni::jarray<jni::jobject>*) value->Get();
return jni::GetArrayLength(env, *array);
}
Value Value::get(const int index) const {
- auto array = (jni::jarray<jni::jobject>*) value.get();
- return Value(env, jni::GetObjectArrayElement(env, *array, index));
+ auto array = (jni::jarray<jni::jobject>*) value->Get();
+ return Value(env, jni::SeizeLocal(env, jni::Object<>(jni::GetObjectArrayElement(env, *array, index))));
}
}
}
diff --git a/platform/android/src/style/value.hpp b/platform/android/src/style/value.hpp
index 2057b93454..bd1c552be0 100644
--- a/platform/android/src/style/value.hpp
+++ b/platform/android/src/style/value.hpp
@@ -9,7 +9,7 @@ namespace android {
class Value {
public:
- Value(jni::JNIEnv&, jni::jobject*);
+ Value(jni::JNIEnv&, jni::Local<jni::Object<>>);
Value(Value&&) = default;
Value& operator=(Value&&) = default;
@@ -34,7 +34,7 @@ public:
Value get(const int index ) const;
jni::JNIEnv& env;
- std::shared_ptr<jni::jobject> value;
+ jni::Local<jni::Object<>> value;
};
}