diff options
Diffstat (limited to 'platform/android/src/style')
-rw-r--r-- | platform/android/src/style/conversion/function.hpp | 30 | ||||
-rw-r--r-- | platform/android/src/style/conversion/gson.hpp | 114 | ||||
-rw-r--r-- | platform/android/src/style/conversion/property_value.hpp | 7 | ||||
-rw-r--r-- | platform/android/src/style/layers/layer.cpp | 10 | ||||
-rw-r--r-- | platform/android/src/style/layers/layer.hpp | 3 |
5 files changed, 20 insertions, 144 deletions
diff --git a/platform/android/src/style/conversion/function.hpp b/platform/android/src/style/conversion/function.hpp index 510efd3c94..d6669b4508 100644 --- a/platform/android/src/style/conversion/function.hpp +++ b/platform/android/src/style/conversion/function.hpp @@ -7,7 +7,8 @@ #include "../../java/lang.hpp" #include <jni/jni.hpp> -#include "gson.hpp" +#include "../../gson/json_element.hpp" + #include <tuple> #include <map> @@ -16,41 +17,32 @@ namespace android { namespace conversion { template <class T> -struct Converter<jni::jobject*, mbgl::style::CameraFunction<T>> { +struct Converter<jni::Object<android::gson::JsonElement>, mbgl::style::CameraFunction<T>> { - Result<jni::jobject*> operator()(jni::JNIEnv& env, const mbgl::style::CameraFunction<T>& value) const { + Result<jni::Object<android::gson::JsonElement>> operator()(jni::JNIEnv& env, const mbgl::style::CameraFunction<T>& value) const { // Convert expressions mbgl::Value expressionValue = value.getExpression().serialize(); - JsonEvaluator jsonEvaluator{env}; - jni::jobject* converted = apply_visitor(jsonEvaluator, expressionValue); - - return converted; + return gson::JsonElement::New(env, expressionValue); } }; template <class T> -struct Converter<jni::jobject*, mbgl::style::SourceFunction<T>> { +struct Converter<jni::Object<android::gson::JsonElement>, mbgl::style::SourceFunction<T>> { - Result<jni::jobject*> operator()(jni::JNIEnv& env, const mbgl::style::SourceFunction<T>& value) const { + Result<jni::Object<android::gson::JsonElement>> operator()(jni::JNIEnv& env, const mbgl::style::SourceFunction<T>& value) const { // Convert expressions mbgl::Value expressionValue = value.getExpression().serialize(); - JsonEvaluator jsonEvaluator{env}; - jni::jobject* converted = apply_visitor(jsonEvaluator, expressionValue); - - return converted; + return gson::JsonElement::New(env, expressionValue); } }; template <class T> -struct Converter<jni::jobject*, mbgl::style::CompositeFunction<T>> { +struct Converter<jni::Object<android::gson::JsonElement>, mbgl::style::CompositeFunction<T>> { - Result<jni::jobject*> operator()(jni::JNIEnv& env, const mbgl::style::CompositeFunction<T>& value) const { + Result<jni::Object<android::gson::JsonElement>> operator()(jni::JNIEnv& env, const mbgl::style::CompositeFunction<T>& value) const { // Convert expressions mbgl::Value expressionValue = value.getExpression().serialize(); - JsonEvaluator jsonEvaluator{env}; - jni::jobject* converted = apply_visitor(jsonEvaluator, expressionValue); - - return converted; + return gson::JsonElement::New(env, expressionValue); } }; diff --git a/platform/android/src/style/conversion/gson.hpp b/platform/android/src/style/conversion/gson.hpp deleted file mode 100644 index 02c3fdd30d..0000000000 --- a/platform/android/src/style/conversion/gson.hpp +++ /dev/null @@ -1,114 +0,0 @@ -#pragma once - -#include "../../conversion/constant.hpp" -#include "../../conversion/collection.hpp" - -#include <mapbox/geometry.hpp> -#include <jni/jni.hpp> -#include "../../jni/local_object.hpp" -#include "mapbox/geometry/feature.hpp" - -namespace mbgl { -namespace android { -namespace conversion { - -/** - * Turn mapbox::geometry::value type into Java Json - */ -class JsonEvaluator { -public: - - jni::JNIEnv& env; - - jni::jobject* operator()(const mapbox::geometry::null_value_t) const { - return (jni::jobject*) nullptr;; - } - - jni::jobject* operator()(const bool& value) const { - static jni::jclass* javaClass = jni::NewGlobalRef(env, &jni::FindClass(env, "com/google/gson/JsonPrimitive")).release(); - static jni::jmethodID* constructor = &jni::GetMethodID(env, *javaClass, "<init>", "(Ljava/lang/Boolean;)V"); - - // Create JsonPrimitive - jni::LocalObject<jni::jobject> converted = jni::NewLocalObject(env, *convert<jni::jobject*, bool>(env, value)); - jni::jobject* object = &jni::NewObject(env, *javaClass, *constructor, *converted); - - return object; - } - - template <class Number> - jni::jobject* operator()(const Number& value) const { - static jni::jclass* javaClass = jni::NewGlobalRef(env, &jni::FindClass(env, "com/google/gson/JsonPrimitive")).release(); - static jni::jmethodID* constructor = &jni::GetMethodID(env, *javaClass, "<init>", "(Ljava/lang/Number;)V"); - - // Create JsonPrimitive - jni::LocalObject<jni::jobject> converted = jni::NewLocalObject(env, *convert<jni::jobject*, Number>(env, value)); - jni::jobject* object = &jni::NewObject(env, *javaClass, *constructor, converted.get()); - - return object; - } - - jni::jobject* operator()(const std::string value) const { - static jni::jclass* javaClass = jni::NewGlobalRef(env, &jni::FindClass(env, "com/google/gson/JsonPrimitive")).release(); - static jni::jmethodID* constructor = &jni::GetMethodID(env, *javaClass, "<init>", "(Ljava/lang/String;)V"); - - // Create JsonPrimitive - jni::LocalObject<jni::jobject> converted = jni::NewLocalObject(env, *convert<jni::jobject*, std::string>(env, value)); - jni::jobject* object = &jni::NewObject(env, *javaClass, *constructor, converted.get()); - - return object; - } - - jni::jobject* operator()(const std::vector<mapbox::geometry::value> values) const { - static jni::jclass* javaClass = jni::NewGlobalRef(env, &jni::FindClass(env, "com/google/gson/JsonArray")).release(); - static jni::jmethodID* constructor = &jni::GetMethodID(env, *javaClass, "<init>", "()V");; - static jni::jmethodID* add = &jni::GetMethodID(env, *javaClass, "add", "(Lcom/google/gson/JsonElement;)V"); - - // Create json array - jni::jobject* jarray = &jni::NewObject(env, *javaClass, *constructor); - - // Add values - for (const auto &v : values) { - jni::LocalObject<jni::jobject> converted = jni::NewLocalObject(env, mapbox::geometry::value::visit(v, *this)); - jni::CallMethod<void>(env, jarray, *add, converted.get()); - } - - return jarray; - } - - jni::jobject* operator()(const std::unordered_map<std::string, mapbox::geometry::value> value) const { - static jni::jclass* javaClass = jni::NewGlobalRef(env, &jni::FindClass(env, "com/google/gson/JsonObject")).release(); - static jni::jmethodID* constructor = &jni::GetMethodID(env, *javaClass, "<init>", "()V");; - static jni::jmethodID* add = &jni::GetMethodID(env, *javaClass, "add", "(Ljava/lang/String;Lcom/google/gson/JsonElement;)V"); - - // Create json object - jni::jobject* jsonObject = &jni::NewObject(env, *javaClass, *constructor); - - // Add items - for (auto &item : value) { - jni::LocalObject<jni::jobject> converted = jni::NewLocalObject(env, mbgl::Value::visit(item.second, *this)); - jni::LocalObject<jni::jobject> key = jni::NewLocalObject(env, *convert<jni::jobject*, std::string>(env, item.first)); - jni::CallMethod<void>(env, jsonObject, *add, key.get(), converted.get()); - } - - return jsonObject; - } - -private: - -}; - -/** - * mapbox::geometry::value -> Java Json - */ -template <> -struct Converter<jni::jobject*, mapbox::geometry::value> { - Result<jni::jobject*> operator()(jni::JNIEnv& env, const mapbox::geometry::value& value) const { - JsonEvaluator evaluator { env } ; - jni::jobject* converted = mapbox::geometry::value::visit(value, evaluator); - return { converted }; - } -}; - -} -} -} diff --git a/platform/android/src/style/conversion/property_value.hpp b/platform/android/src/style/conversion/property_value.hpp index 4ed25eac25..902d1e80b2 100644 --- a/platform/android/src/style/conversion/property_value.hpp +++ b/platform/android/src/style/conversion/property_value.hpp @@ -7,7 +7,6 @@ #include "../../conversion/constant.hpp" #include "types.hpp" #include "function.hpp" -#include "gson.hpp" namespace mbgl { namespace android { @@ -32,15 +31,15 @@ public: } jni::jobject* operator()(const mbgl::style::CameraFunction<T> &value) const { - return *convert<jni::jobject*, mbgl::style::CameraFunction<T>>(env, value); + return *convert<jni::Object<android::gson::JsonElement>, mbgl::style::CameraFunction<T>>(env, value); } jni::jobject* operator()(const mbgl::style::SourceFunction<T> &value) const { - return *convert<jni::jobject*, mbgl::style::SourceFunction<T>>(env, value); + return *convert<jni::Object<android::gson::JsonElement>, mbgl::style::SourceFunction<T>>(env, value); } jni::jobject* operator()(const mbgl::style::CompositeFunction<T> &value) const { - return *convert<jni::jobject*, mbgl::style::CompositeFunction<T>>(env, value); + return *convert<jni::Object<android::gson::JsonElement>, mbgl::style::CompositeFunction<T>>(env, value); } private: diff --git a/platform/android/src/style/layers/layer.cpp b/platform/android/src/style/layers/layer.cpp index a2f4087fce..6fe6e3cb29 100644 --- a/platform/android/src/style/layers/layer.cpp +++ b/platform/android/src/style/layers/layer.cpp @@ -26,7 +26,6 @@ // C++ -> Java conversion #include "../conversion/property_value.hpp" #include <mbgl/style/filter.hpp> -#include "../conversion/gson.hpp" #include <string> @@ -153,20 +152,19 @@ namespace android { } }; - jni::Object<gson::JsonArray> Layer::getFilter(jni::JNIEnv& env) { + jni::Object<gson::JsonElement> Layer::getFilter(jni::JNIEnv& env) { using namespace mbgl::style; using namespace mbgl::style::conversion; Filter filter = layer.accept(GetFilterEvaluator()); - jni::jobject* converted = nullptr; + jni::Object<gson::JsonElement> converted; if (filter.is<ExpressionFilter>()) { ExpressionFilter filterExpression = filter.get<ExpressionFilter>(); mbgl::Value expressionValue = filterExpression.expression.get()->serialize(); - conversion::JsonEvaluator jsonEvaluator{env}; - converted = apply_visitor(jsonEvaluator, expressionValue); + converted = gson::JsonElement::New(env, expressionValue); } - return jni::Object<gson::JsonArray>(converted); + return converted; } struct SetSourceLayerEvaluator { diff --git a/platform/android/src/style/layers/layer.hpp b/platform/android/src/style/layers/layer.hpp index 19713a1baa..2486b0dfa6 100644 --- a/platform/android/src/style/layers/layer.hpp +++ b/platform/android/src/style/layers/layer.hpp @@ -5,6 +5,7 @@ #include <mbgl/style/layer.hpp> #include "../../gson/json_array.hpp" #include "../value.hpp" +#include "../../gson/json_element.hpp" #include <jni/jni.hpp> @@ -68,7 +69,7 @@ public: void setFilter(jni::JNIEnv&, jni::Array<jni::Object<>>); - jni::Object<gson::JsonArray> getFilter(jni::JNIEnv&); + jni::Object<gson::JsonElement> getFilter(jni::JNIEnv&); void setSourceLayer(jni::JNIEnv&, jni::String); |