summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobrun <tobrun.van.nuland@gmail.com>2018-01-30 13:49:55 +0100
committerTobrun <tobrun.van.nuland@gmail.com>2018-01-30 13:49:55 +0100
commitbabdab0f4109dc5e90373727406ab7377b94eeea (patch)
tree2c4bdd2b0666314c2ee7570a508d23caa6d648bf
parentee0ef4f9e70c887585a960718b0a667f37443815 (diff)
downloadqtlocation-mapboxgl-upstream/tvn-use-style-in-binding.tar.gz
[android] - attempt to use style from core inside the style from androidupstream/tvn-use-style-in-binding
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Style.java4
-rw-r--r--platform/android/src/style/style.cpp24
-rw-r--r--platform/android/src/style/style.hpp11
3 files changed, 31 insertions, 8 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Style.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Style.java
index 032bd028bb..fa1dff6903 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Style.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Style.java
@@ -28,6 +28,10 @@ public class Style {
private String url;
private String json;
+ private Style(int nativePtr) {
+ this.nativePtr = nativePtr;
+ }
+
// todo make private
Style() {
initialize();
diff --git a/platform/android/src/style/style.cpp b/platform/android/src/style/style.cpp
index 5e366e39a5..77225ad389 100644
--- a/platform/android/src/style/style.cpp
+++ b/platform/android/src/style/style.cpp
@@ -3,14 +3,26 @@
namespace mbgl {
namespace android {
-Style::Style(jni::JNIEnv &) {
+ Style::Style(jni::JNIEnv& env, mbgl::style::Style& coreStyle)
+ : style(coreStyle)
+ , javaPeer(createJavaPeer(env).NewGlobalRef(env)){
-}
+ }
-Style::~Style() {
-}
+ Style::~Style() {
+ }
+
+ jni::Object<Style> Style::createJavaPeer(jni::JNIEnv& env) {
+ static auto constructor = Style::javaClass.template GetConstructor<jni::jlong>(env);
+ return jni::Object<Style>(Style::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
+ }
+
+ jni::Class<Style> Style::javaClass;
+
+ jni::String Style::getJSON(jni::JNIEnv& env) {
+ return jni::Make<jni::String>(env, style.getJSON());
+ }
-jni::Class<Style> Style::javaClass;
void Style::registerNative(jni::JNIEnv& env) {
//Register classes
@@ -21,7 +33,7 @@ void Style::registerNative(jni::JNIEnv& env) {
// Register the peer
jni::RegisterNativePeer<Style>(
env, Style::javaClass, "nativePtr",
- std::make_unique<Style, JNIEnv&>,
+ std::make_unique<Style, JNIEnv&, mbgl::style::Style&>,
"initialize",
"finalize"
);
diff --git a/platform/android/src/style/style.hpp b/platform/android/src/style/style.hpp
index 6c80c72bca..54897ac6c9 100644
--- a/platform/android/src/style/style.hpp
+++ b/platform/android/src/style/style.hpp
@@ -16,17 +16,24 @@ public:
// TODO move to style package
static constexpr auto Name() { return "com/mapbox/mapboxsdk/maps/Style"; };
- Style(jni::JNIEnv &);
+ Style(jni::JNIEnv&, mbgl::style::Style&);
~Style();
static jni::Class<Style> javaClass;
// TODO add methods
- static void registerNative(jni::JNIEnv &);
+ static void registerNative(jni::JNIEnv&);
+
+ jni::Object<Style> createJavaPeer(jni::JNIEnv&);
+ jni::String getJSON(jni::JNIEnv&);
private:
+ // Raw pointer that is valid at all times.
+ mbgl::style::Style& style;
+ // Set when the source is added to a map.
+ jni::UniqueObject<Style> javaPeer;
};
}