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/function.hpp208
-rw-r--r--platform/android/src/style/conversion/property_value.hpp19
-rw-r--r--platform/android/src/style/functions/categorical_stops.cpp18
-rw-r--r--platform/android/src/style/functions/categorical_stops.hpp23
-rw-r--r--platform/android/src/style/functions/exponential_stops.cpp18
-rw-r--r--platform/android/src/style/functions/exponential_stops.hpp24
-rw-r--r--platform/android/src/style/functions/identity_stops.cpp18
-rw-r--r--platform/android/src/style/functions/identity_stops.hpp21
-rw-r--r--platform/android/src/style/functions/interval_stops.cpp18
-rw-r--r--platform/android/src/style/functions/interval_stops.hpp23
-rw-r--r--platform/android/src/style/functions/stop.cpp21
-rw-r--r--platform/android/src/style/functions/stop.hpp36
-rw-r--r--platform/android/src/style/layers/custom_layer.cpp10
-rw-r--r--platform/android/src/style/layers/custom_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/layer.cpp34
-rw-r--r--platform/android/src/style/layers/layer.cpp.ejs13
-rw-r--r--platform/android/src/style/layers/layer.hpp5
19 files changed, 100 insertions, 424 deletions
diff --git a/platform/android/src/style/conversion/function.hpp b/platform/android/src/style/conversion/function.hpp
index ad01a7afc2..d6669b4508 100644
--- a/platform/android/src/style/conversion/function.hpp
+++ b/platform/android/src/style/conversion/function.hpp
@@ -5,13 +5,9 @@
#include "../../conversion/constant.hpp"
#include "types.hpp"
#include "../../java/lang.hpp"
-#include "../functions/stop.hpp"
-#include "../functions/categorical_stops.hpp"
-#include "../functions/exponential_stops.hpp"
-#include "../functions/identity_stops.hpp"
-#include "../functions/interval_stops.hpp"
#include <jni/jni.hpp>
+#include "../../gson/json_element.hpp"
#include <tuple>
#include <map>
@@ -20,205 +16,33 @@ namespace mbgl {
namespace android {
namespace conversion {
-/**
- * Conversion from core composite value to java type
- */
-class CategoricalValueEvaluator {
-public:
-
- CategoricalValueEvaluator(jni::JNIEnv& _env) : env(_env) {}
-
- template <class T>
- jni::jobject* operator()(const T &value) const {
- return *convert<jni::jobject*, T>(env, value);
- }
-
-private:
- jni::JNIEnv& env;
-};
-
-/**
- * Conversion from core composite value to java type
- */
-template <>
-struct Converter<jni::jobject*, mbgl::style::CategoricalValue> {
-
- Result<jni::jobject*> operator()(jni::JNIEnv& env, const mbgl::style::CategoricalValue& value) const {
- CategoricalValueEvaluator evaluator(env);
- return apply_visitor(evaluator, value);
- }
-};
-
-template <class I, class O>
-jni::Array<jni::Object<Stop>> toFunctionStopJavaArray(jni::JNIEnv& env, std::map<I, O> value) {
-
- auto jarray = jni::Array<jni::Object<Stop>>::New(env, value.size(), Stop::javaClass);
-
- size_t i = 0;
- for (auto const& stop : value) {
- jni::jobject* in = *convert<jni::jobject*, I>(env, stop.first);
- jni::jobject* out = *convert<jni::jobject*, O>(env, stop.second);
-
- auto jstop = Stop::New(env, jni::Object<>(in), jni::Object<>(out));
- jarray.Set(env, i, jstop);
-
- jni::DeleteLocalRef(env, in);
- jni::DeleteLocalRef(env, out);
- jni::DeleteLocalRef(env, jstop);
-
- i++;
- }
-
- return jarray;
-}
-
-template <class I, class O>
-jni::Array<jni::Object<Stop>> toFunctionStopJavaArray(jni::JNIEnv& env, std::map<float, std::map<I, O>> value) {
-
- auto jarray = jni::Array<jni::Object<Stop>>::New(env, value.size(), Stop::javaClass);
-
- for (auto const& zoomLevelMap : value) {
- size_t i = 0;
- for (auto const& stop: zoomLevelMap.second) {
- auto zoom = jni::Object<java::lang::Number>(*convert<jni::jobject*>(env, zoomLevelMap.first));
- auto in = jni::Object<>(*convert<jni::jobject*, I>(env, stop.first));
- auto out = jni::Object<>(*convert<jni::jobject*, O>(env, stop.second));
- auto compositeValue = Stop::CompositeValue::New(env, zoom, in);
-
- auto jstop = Stop::New(env, compositeValue, out);
- jarray.Set(env, i, jstop);
-
- jni::DeleteLocalRef(env, zoom);
- jni::DeleteLocalRef(env, in);
- jni::DeleteLocalRef(env, out);
- jni::DeleteLocalRef(env, compositeValue);
- jni::DeleteLocalRef(env, jstop);
-
- i++;
- }
- }
-
- return jarray;
-}
-
-template <class I, typename O>
-inline jni::jobject* convertCompositeStopsArray(jni::JNIEnv& env, std::map<float, std::map<I, O>> value) {
- static jni::jclass* javaClass = jni::NewGlobalRef(env, &jni::FindClass(env, "com/mapbox/mapboxsdk/style/functions/stops/Stop")).release();
- static jni::jmethodID* constructor = &jni::GetMethodID(env, *javaClass, "<init>", "(Ljava/lang/Object;Ljava/lang/Object;)V");
-
- jni::jarray<jni::jobject>& jarray = jni::NewObjectArray(env, value.size(), *javaClass);
-
- size_t i = 0;
- for (auto const& stop : value) {
- jni::jobject* in = *convert<jni::jobject*, I>(env, stop.first);
- jni::jobject* out = *convert<jni::jobject*, O>(env, stop.second);
- jni::SetObjectArrayElement(env, jarray, i, &jni::NewObject(env, *javaClass, *constructor, in, out));
- i++;
- jni::DeleteLocalRef(env, in);
- jni::DeleteLocalRef(env, out);
- }
-
- return &jarray;
-}
-
-/**
- * Conversion from core function stops to Stops java subclasses
- */
template <class T>
-class StopsEvaluator {
-public:
-
- StopsEvaluator(jni::JNIEnv& _env) : env(_env) {}
-
- jni::jobject* operator()(const mbgl::style::CategoricalStops<T> &value) const {
- return CategoricalStops::New(env, toFunctionStopJavaArray(env, value.stops)).Get();
- }
-
- jni::jobject* operator()(const mbgl::style::CompositeCategoricalStops<T> &value) const {
- return CategoricalStops::New(env, toFunctionStopJavaArray(env, value.stops)).Get();
- }
-
- jni::jobject* operator()(const mbgl::style::ExponentialStops<T> &value) const {
- return ExponentialStops::New(env, jni::Object<java::lang::Float>(*convert<jni::jobject*>(env, value.base)), toFunctionStopJavaArray(env, value.stops)).Get();
- }
+struct Converter<jni::Object<android::gson::JsonElement>, mbgl::style::CameraFunction<T>> {
- jni::jobject* operator()(const mbgl::style::CompositeExponentialStops<T> &value) const {
- return ExponentialStops::New(env, jni::Object<java::lang::Float>(*convert<jni::jobject*>(env, value.base)), toFunctionStopJavaArray(env, value.stops)).Get();
+ 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();
+ return gson::JsonElement::New(env, expressionValue);
}
-
- jni::jobject* operator()(const mbgl::style::IdentityStops<T> &) const {
- return IdentityStops::New(env).Get();
- }
-
- jni::jobject* operator()(const mbgl::style::IntervalStops<T> &value) const {
- return IntervalStops::New(env, toFunctionStopJavaArray(env, value.stops)).Get();
- }
-
- jni::jobject* operator()(const mbgl::style::CompositeIntervalStops<T> &value) const {
- return IntervalStops::New(env, toFunctionStopJavaArray(env, value.stops)).Get();
- }
-
-private:
- jni::JNIEnv& env;
};
template <class T>
-struct Converter<jni::jobject*, mbgl::style::CameraFunction<T>> {
+struct Converter<jni::Object<android::gson::JsonElement>, mbgl::style::SourceFunction<T>> {
- Result<jni::jobject*> operator()(jni::JNIEnv& env, const mbgl::style::CameraFunction<T>& value) const {
- static jni::jclass* clazz = jni::NewGlobalRef(env, &jni::FindClass(env, "com/mapbox/mapboxsdk/style/functions/CameraFunction")).release();
- static jni::jmethodID* constructor = &jni::GetMethodID(env, *clazz, "<init>", "(Lcom/mapbox/mapboxsdk/style/functions/stops/Stops;)V");
-
- StopsEvaluator<T> evaluator(env);
- jni::jobject* stops = apply_visitor(evaluator, value.stops);
- jni::jobject* converted = &jni::NewObject(env, *clazz, *constructor, stops);
-
- return { converted };
- }
-};
-
-template <class T>
-struct Converter<jni::jobject*, mbgl::style::SourceFunction<T>> {
-
- Result<jni::jobject*> operator()(jni::JNIEnv& env, const mbgl::style::SourceFunction<T>& value) const {
- static jni::jclass* clazz = jni::NewGlobalRef(env, &jni::FindClass(env, "com/mapbox/mapboxsdk/style/functions/SourceFunction")).release();
- static jni::jmethodID* constructor = &jni::GetMethodID(env, *clazz, "<init>",
- "(Ljava/lang/Object;Ljava/lang/String;Lcom/mapbox/mapboxsdk/style/functions/stops/Stops;)V");
-
- // Convert stops
- StopsEvaluator<T> evaluator(env);
- jni::jobject* stops = apply_visitor(evaluator, value.stops);
-
- // Convert default value
- jni::jobject* defaultValue = nullptr;
- if (value.defaultValue) {
- defaultValue = *convert<jni::jobject*>(env, *value.defaultValue);
- }
-
- return { &jni::NewObject(env, *clazz, *constructor, defaultValue, jni::Make<jni::String>(env, value.property).Get(), stops) };
+ 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();
+ return gson::JsonElement::New(env, expressionValue);
}
};
template <class T>
-struct Converter<jni::jobject*, mbgl::style::CompositeFunction<T>> {
-
- Result<jni::jobject*> operator()(jni::JNIEnv& env, const mbgl::style::CompositeFunction<T>& value) const {
- static jni::jclass* clazz = jni::NewGlobalRef(env, &jni::FindClass(env, "com/mapbox/mapboxsdk/style/functions/CompositeFunction")).release();
- static jni::jmethodID* constructor = &jni::GetMethodID(env, *clazz, "<init>",
- "(Ljava/lang/Object;Ljava/lang/String;Lcom/mapbox/mapboxsdk/style/functions/stops/Stops;)V");
-
- // Convert stops
- StopsEvaluator<T> evaluator(env);
- jni::jobject* stops = apply_visitor(evaluator, value.stops);
-
-
- // Convert default value
- jni::jobject* defaultValue = nullptr;
- if (value.defaultValue) {
- defaultValue = *convert<jni::jobject*>(env, *value.defaultValue);
- }
+struct Converter<jni::Object<android::gson::JsonElement>, mbgl::style::CompositeFunction<T>> {
- return { &jni::NewObject(env, *clazz, *constructor, defaultValue, jni::Make<jni::String>(env, value.property).Get(), stops) };
+ 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();
+ return gson::JsonElement::New(env, expressionValue);
}
};
diff --git a/platform/android/src/style/conversion/property_value.hpp b/platform/android/src/style/conversion/property_value.hpp
index a58cf975a7..902d1e80b2 100644
--- a/platform/android/src/style/conversion/property_value.hpp
+++ b/platform/android/src/style/conversion/property_value.hpp
@@ -2,6 +2,7 @@
#include <mbgl/style/property_value.hpp>
#include <mbgl/style/data_driven_property_value.hpp>
+#include <mbgl/style/heatmap_color_property_value.hpp>
#include "../../conversion/conversion.hpp"
#include "../../conversion/constant.hpp"
#include "types.hpp"
@@ -30,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:
@@ -70,6 +71,18 @@ struct Converter<jni::jobject*, mbgl::style::DataDrivenPropertyValue<T>> {
}
};
+/**
+ * Convert core heat map color property value to java
+ */
+template <>
+struct Converter<jni::jobject*, mbgl::style::HeatmapColorPropertyValue> {
+
+ Result<jni::jobject*> operator()(jni::JNIEnv& env, const mbgl::style::HeatmapColorPropertyValue value) const {
+ PropertyValueEvaluator<mbgl::style::HeatmapColorPropertyValue> evaluator(env);
+ return *convert<jni::jobject*>(env, value.evaluate(evaluator));
+ }
+};
+
} // namespace conversion
} // namespace android
} // namespace mbgl
diff --git a/platform/android/src/style/functions/categorical_stops.cpp b/platform/android/src/style/functions/categorical_stops.cpp
deleted file mode 100644
index 2aff9730a7..0000000000
--- a/platform/android/src/style/functions/categorical_stops.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "categorical_stops.hpp"
-
-namespace mbgl {
-namespace android {
-
-jni::Object<CategoricalStops> CategoricalStops::New(jni::JNIEnv& env, jni::Array<jni::Object<Stop>> stops) {
- static auto constructor = CategoricalStops::javaClass.GetConstructor<jni::Array<jni::Object<Stop>>>(env);
- return CategoricalStops::javaClass.New(env, constructor, stops);
-}
-
-jni::Class<CategoricalStops> CategoricalStops::javaClass;
-
-void CategoricalStops::registerNative(jni::JNIEnv& env) {
- CategoricalStops::javaClass = *jni::Class<CategoricalStops>::Find(env).NewGlobalRef(env).release();
-}
-
-} // namespace android
-} // namespace mbgl
diff --git a/platform/android/src/style/functions/categorical_stops.hpp b/platform/android/src/style/functions/categorical_stops.hpp
deleted file mode 100644
index a198c8d5c9..0000000000
--- a/platform/android/src/style/functions/categorical_stops.hpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#pragma once
-
-#include <mbgl/util/noncopyable.hpp>
-#include <jni/jni.hpp>
-
-#include "stop.hpp"
-
-namespace mbgl {
-namespace android {
-
-class CategoricalStops : private mbgl::util::noncopyable {
-public:
- static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/functions/stops/CategoricalStops"; };
-
- static jni::Object<CategoricalStops> New(jni::JNIEnv&, jni::Array<jni::Object<Stop>>);
-
- static jni::Class<CategoricalStops> javaClass;
-
- static void registerNative(jni::JNIEnv&);
-};
-
-} // namespace android
-} // namespace mbgl
diff --git a/platform/android/src/style/functions/exponential_stops.cpp b/platform/android/src/style/functions/exponential_stops.cpp
deleted file mode 100644
index 6390a0ec35..0000000000
--- a/platform/android/src/style/functions/exponential_stops.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "exponential_stops.hpp"
-
-namespace mbgl {
-namespace android {
-
-jni::Object<ExponentialStops> ExponentialStops::New(jni::JNIEnv& env, jni::Object<java::lang::Float> base, jni::Array<jni::Object<Stop>> stops) {
- static auto constructor = ExponentialStops::javaClass.GetConstructor<jni::Object<java::lang::Float>, jni::Array<jni::Object<Stop>>>(env);
- return ExponentialStops::javaClass.New(env, constructor, base, stops);
-}
-
-jni::Class<ExponentialStops> ExponentialStops::javaClass;
-
-void ExponentialStops::registerNative(jni::JNIEnv& env) {
- ExponentialStops::javaClass = *jni::Class<ExponentialStops>::Find(env).NewGlobalRef(env).release();
-}
-
-} // namespace android
-} // namespace mbgl
diff --git a/platform/android/src/style/functions/exponential_stops.hpp b/platform/android/src/style/functions/exponential_stops.hpp
deleted file mode 100644
index 391d723cef..0000000000
--- a/platform/android/src/style/functions/exponential_stops.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-#pragma once
-
-#include <mbgl/util/noncopyable.hpp>
-#include <jni/jni.hpp>
-
-#include "../../java/lang.hpp"
-#include "stop.hpp"
-
-namespace mbgl {
-namespace android {
-
-class ExponentialStops : private mbgl::util::noncopyable {
-public:
- static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/functions/stops/ExponentialStops"; };
-
- static jni::Object<ExponentialStops> New(jni::JNIEnv&, jni::Object<java::lang::Float>, jni::Array<jni::Object<Stop>>);
-
- static jni::Class<ExponentialStops> javaClass;
-
- static void registerNative(jni::JNIEnv&);
-};
-
-} // namespace android
-} // namespace mbgl
diff --git a/platform/android/src/style/functions/identity_stops.cpp b/platform/android/src/style/functions/identity_stops.cpp
deleted file mode 100644
index 239b0ddb88..0000000000
--- a/platform/android/src/style/functions/identity_stops.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "identity_stops.hpp"
-
-namespace mbgl {
-namespace android {
-
-jni::Object<IdentityStops> IdentityStops::New(jni::JNIEnv& env) {
- static auto constructor = IdentityStops::javaClass.GetConstructor<>(env);
- return IdentityStops::javaClass.New(env, constructor);
-}
-
-jni::Class<IdentityStops> IdentityStops::javaClass;
-
-void IdentityStops::registerNative(jni::JNIEnv& env) {
- IdentityStops::javaClass = *jni::Class<IdentityStops>::Find(env).NewGlobalRef(env).release();
-}
-
-} // namespace android
-} // namespace mbgl
diff --git a/platform/android/src/style/functions/identity_stops.hpp b/platform/android/src/style/functions/identity_stops.hpp
deleted file mode 100644
index 150b2135f0..0000000000
--- a/platform/android/src/style/functions/identity_stops.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-#pragma once
-
-#include <mbgl/util/noncopyable.hpp>
-#include <jni/jni.hpp>
-
-namespace mbgl {
-namespace android {
-
-class IdentityStops : private mbgl::util::noncopyable {
-public:
- static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/functions/stops/IdentityStops"; };
-
- static jni::Object<IdentityStops> New(jni::JNIEnv&);
-
- static jni::Class<IdentityStops> javaClass;
-
- static void registerNative(jni::JNIEnv&);
-};
-
-} // namespace android
-} // namespace mbgl
diff --git a/platform/android/src/style/functions/interval_stops.cpp b/platform/android/src/style/functions/interval_stops.cpp
deleted file mode 100644
index c3d9b6513f..0000000000
--- a/platform/android/src/style/functions/interval_stops.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "interval_stops.hpp"
-
-namespace mbgl {
-namespace android {
-
-jni::Object<IntervalStops> IntervalStops::New(jni::JNIEnv& env, jni::Array<jni::Object<Stop>> stops) {
- static auto constructor = IntervalStops::javaClass.GetConstructor<jni::Array<jni::Object<Stop>>>(env);
- return IntervalStops::javaClass.New(env, constructor, stops);
-}
-
-jni::Class<IntervalStops> IntervalStops::javaClass;
-
-void IntervalStops::registerNative(jni::JNIEnv& env) {
- IntervalStops::javaClass = *jni::Class<IntervalStops>::Find(env).NewGlobalRef(env).release();
-}
-
-} // namespace android
-} // namespace mbgl
diff --git a/platform/android/src/style/functions/interval_stops.hpp b/platform/android/src/style/functions/interval_stops.hpp
deleted file mode 100644
index e3f75159cf..0000000000
--- a/platform/android/src/style/functions/interval_stops.hpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#pragma once
-
-#include <mbgl/util/noncopyable.hpp>
-#include <jni/jni.hpp>
-
-#include "stop.hpp"
-
-namespace mbgl {
-namespace android {
-
-class IntervalStops : private mbgl::util::noncopyable {
-public:
- static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/functions/stops/IntervalStops"; };
-
- static jni::Object<IntervalStops> New(jni::JNIEnv&, jni::Array<jni::Object<Stop>>);
-
- static jni::Class<IntervalStops> javaClass;
-
- static void registerNative(jni::JNIEnv&);
-};
-
-} // namespace android
-} // namespace mbgl
diff --git a/platform/android/src/style/functions/stop.cpp b/platform/android/src/style/functions/stop.cpp
deleted file mode 100644
index f9ed4b7368..0000000000
--- a/platform/android/src/style/functions/stop.cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-#include "interval_stops.hpp"
-
-namespace mbgl {
-namespace android {
-
-jni::Object<Stop::CompositeValue> Stop::CompositeValue::New(jni::JNIEnv& env, jni::Object<java::lang::Number> zoom, jni::Object<> value) {
- static auto constructor = Stop::CompositeValue::javaClass.GetConstructor<jni::Object<java::lang::Number>, jni::Object<>>(env);
- return Stop::CompositeValue::javaClass.New(env, constructor, zoom, value);
-}
-
-jni::Class<Stop> Stop::javaClass;
-
-jni::Class<Stop::CompositeValue> Stop::CompositeValue::javaClass;
-
-void Stop::registerNative(jni::JNIEnv& env) {
- Stop::javaClass = *jni::Class<Stop>::Find(env).NewGlobalRef(env).release();
- Stop::CompositeValue::javaClass = *jni::Class<Stop::CompositeValue>::Find(env).NewGlobalRef(env).release();
-}
-
-} // namespace android
-} // namespace mbgl
diff --git a/platform/android/src/style/functions/stop.hpp b/platform/android/src/style/functions/stop.hpp
deleted file mode 100644
index 7c697db65d..0000000000
--- a/platform/android/src/style/functions/stop.hpp
+++ /dev/null
@@ -1,36 +0,0 @@
-#pragma once
-
-#include <mbgl/util/noncopyable.hpp>
-#include <jni/jni.hpp>
-
-#include "../../java/lang.hpp"
-
-namespace mbgl {
-namespace android {
-
-class Stop : private mbgl::util::noncopyable {
-public:
- static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/functions/stops/Stop"; };
-
- template<class I, class O>
- static jni::Object<Stop> New(jni::JNIEnv& env, jni::Object<I> in, jni::Object<O> out) {
- static auto constructor = Stop::javaClass.GetConstructor<jni::Object<>, jni::Object<>>(env);
- return Stop::javaClass.New(env, constructor, (jni::Object<>) in, (jni::Object<>) out);
- }
-
- static jni::Class<Stop> javaClass;
-
- static void registerNative(jni::JNIEnv&);
-
- class CompositeValue : private mbgl::util::noncopyable {
- public:
- static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/functions/stops/Stop$CompositeValue"; };
-
- static jni::Object<Stop::CompositeValue> New(jni::JNIEnv&, jni::Object<java::lang::Number>, jni::Object<>);
-
- static jni::Class<Stop::CompositeValue> javaClass;
- };
-};
-
-} // namespace android
-} // namespace mbgl
diff --git a/platform/android/src/style/layers/custom_layer.cpp b/platform/android/src/style/layers/custom_layer.cpp
index 51a48520bf..61e74a9cf5 100644
--- a/platform/android/src/style/layers/custom_layer.cpp
+++ b/platform/android/src/style/layers/custom_layer.cpp
@@ -7,14 +7,10 @@
namespace mbgl {
namespace android {
- CustomLayer::CustomLayer(jni::JNIEnv& env, jni::String layerId, jni::jlong initializeFunction, jni::jlong renderFunction, jni::jlong contextLostFunction, jni::jlong deinitializeFunction, jni::jlong context)
+ CustomLayer::CustomLayer(jni::JNIEnv& env, jni::String layerId, jni::jlong host)
: Layer(env, std::make_unique<mbgl::style::CustomLayer>(
jni::Make<std::string>(env, layerId),
- reinterpret_cast<mbgl::style::CustomLayerInitializeFunction>(initializeFunction),
- reinterpret_cast<mbgl::style::CustomLayerRenderFunction>(renderFunction),
- reinterpret_cast<mbgl::style::CustomLayerContextLostFunction>(contextLostFunction),
- reinterpret_cast<mbgl::style::CustomLayerDeinitializeFunction>(deinitializeFunction),
- reinterpret_cast<void*>(context))
+ std::unique_ptr<mbgl::style::CustomLayerHost>(reinterpret_cast<mbgl::style::CustomLayerHost*>(host)))
) {
}
@@ -53,7 +49,7 @@ namespace android {
// Register the peer
jni::RegisterNativePeer<CustomLayer>(
env, CustomLayer::javaClass, "nativePtr",
- std::make_unique<CustomLayer, JNIEnv&, jni::String, jni::jlong, jni::jlong, jni::jlong, jni::jlong, jni::jlong>,
+ std::make_unique<CustomLayer, JNIEnv&, jni::String, jni::jlong>,
"initialize",
"finalize",
METHOD(&CustomLayer::update, "nativeUpdate"));
diff --git a/platform/android/src/style/layers/custom_layer.hpp b/platform/android/src/style/layers/custom_layer.hpp
index 9e079c1288..7eb649d923 100644
--- a/platform/android/src/style/layers/custom_layer.hpp
+++ b/platform/android/src/style/layers/custom_layer.hpp
@@ -16,7 +16,7 @@ public:
static void registerNative(jni::JNIEnv&);
- CustomLayer(jni::JNIEnv&, jni::String, jni::jlong, jni::jlong, jni::jlong, jni::jlong, jni::jlong);
+ CustomLayer(jni::JNIEnv&, jni::String, jni::jlong);
CustomLayer(mbgl::Map&, mbgl::style::CustomLayer&);
diff --git a/platform/android/src/style/layers/heatmap_layer.cpp b/platform/android/src/style/layers/heatmap_layer.cpp
index 609499ec93..b3d90faab7 100644
--- a/platform/android/src/style/layers/heatmap_layer.cpp
+++ b/platform/android/src/style/layers/heatmap_layer.cpp
@@ -79,6 +79,16 @@ namespace android {
layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::setHeatmapIntensityTransition(options);
}
+ jni::Object<jni::ObjectTag> HeatmapLayer::getHeatmapColor(jni::JNIEnv& env) {
+ using namespace mbgl::android::conversion;
+ auto propertyValue = layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getHeatmapColor();
+ if (propertyValue.isUndefined()) {
+ propertyValue = layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getDefaultHeatmapColor();
+ }
+ Result<jni::jobject*> converted = convert<jni::jobject*>(env, propertyValue);
+ return jni::Object<jni::ObjectTag>(*converted);
+ }
+
jni::Object<jni::ObjectTag> HeatmapLayer::getHeatmapOpacity(jni::JNIEnv& env) {
using namespace mbgl::android::conversion;
Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getHeatmapOpacity());
@@ -125,6 +135,7 @@ namespace android {
METHOD(&HeatmapLayer::getHeatmapIntensityTransition, "nativeGetHeatmapIntensityTransition"),
METHOD(&HeatmapLayer::setHeatmapIntensityTransition, "nativeSetHeatmapIntensityTransition"),
METHOD(&HeatmapLayer::getHeatmapIntensity, "nativeGetHeatmapIntensity"),
+ METHOD(&HeatmapLayer::getHeatmapColor, "nativeGetHeatmapColor"),
METHOD(&HeatmapLayer::getHeatmapOpacityTransition, "nativeGetHeatmapOpacityTransition"),
METHOD(&HeatmapLayer::setHeatmapOpacityTransition, "nativeSetHeatmapOpacityTransition"),
METHOD(&HeatmapLayer::getHeatmapOpacity, "nativeGetHeatmapOpacity"));
diff --git a/platform/android/src/style/layers/heatmap_layer.hpp b/platform/android/src/style/layers/heatmap_layer.hpp
index 85f9f0292e..9e8908b062 100644
--- a/platform/android/src/style/layers/heatmap_layer.hpp
+++ b/platform/android/src/style/layers/heatmap_layer.hpp
@@ -39,6 +39,8 @@ public:
void setHeatmapIntensityTransition(jni::JNIEnv&, jlong duration, jlong delay);
jni::Object<TransitionOptions> getHeatmapIntensityTransition(jni::JNIEnv&);
+ jni::Object<jni::ObjectTag> getHeatmapColor(jni::JNIEnv&);
+
jni::Object<jni::ObjectTag> getHeatmapOpacity(jni::JNIEnv&);
void setHeatmapOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay);
jni::Object<TransitionOptions> getHeatmapOpacityTransition(jni::JNIEnv&);
diff --git a/platform/android/src/style/layers/layer.cpp b/platform/android/src/style/layers/layer.cpp
index 29530879a5..6fe6e3cb29 100644
--- a/platform/android/src/style/layers/layer.cpp
+++ b/platform/android/src/style/layers/layer.cpp
@@ -25,6 +25,7 @@
// C++ -> Java conversion
#include "../conversion/property_value.hpp"
+#include <mbgl/style/filter.hpp>
#include <string>
@@ -134,6 +135,38 @@ namespace android {
layer.accept(SetFilterEvaluator {std::move(*converted)});
}
+ struct GetFilterEvaluator {
+ mbgl::style::Filter noop(std::string layerType) {
+ Log::Warning(mbgl::Event::JNI, "%s doesn't support filter", layerType.c_str());
+ return {};
+ }
+
+ mbgl::style::Filter operator()(style::BackgroundLayer&) { return noop("BackgroundLayer"); }
+ mbgl::style::Filter operator()(style::CustomLayer&) { return noop("CustomLayer"); }
+ mbgl::style::Filter operator()(style::RasterLayer&) { return noop("RasterLayer"); }
+ mbgl::style::Filter operator()(style::HillshadeLayer&) { return noop("HillshadeLayer"); }
+
+ template <class LayerType>
+ mbgl::style::Filter operator()(LayerType& layer) {
+ return layer.getFilter();
+ }
+ };
+
+ jni::Object<gson::JsonElement> Layer::getFilter(jni::JNIEnv& env) {
+ using namespace mbgl::style;
+ using namespace mbgl::style::conversion;
+
+ Filter filter = layer.accept(GetFilterEvaluator());
+
+ jni::Object<gson::JsonElement> converted;
+ if (filter.is<ExpressionFilter>()) {
+ ExpressionFilter filterExpression = filter.get<ExpressionFilter>();
+ mbgl::Value expressionValue = filterExpression.expression.get()->serialize();
+ converted = gson::JsonElement::New(env, expressionValue);
+ }
+ return converted;
+ }
+
struct SetSourceLayerEvaluator {
std::string sourceLayer;
@@ -208,6 +241,7 @@ namespace android {
METHOD(&Layer::setLayoutProperty, "nativeSetLayoutProperty"),
METHOD(&Layer::setPaintProperty, "nativeSetPaintProperty"),
METHOD(&Layer::setFilter, "nativeSetFilter"),
+ METHOD(&Layer::getFilter, "nativeGetFilter"),
METHOD(&Layer::setSourceLayer, "nativeSetSourceLayer"),
METHOD(&Layer::getSourceLayer, "nativeGetSourceLayer"),
METHOD(&Layer::getMinZoom, "nativeGetMinZoom"),
diff --git a/platform/android/src/style/layers/layer.cpp.ejs b/platform/android/src/style/layers/layer.cpp.ejs
index 1debb096a3..b08f0ec4dc 100644
--- a/platform/android/src/style/layers/layer.cpp.ejs
+++ b/platform/android/src/style/layers/layer.cpp.ejs
@@ -48,12 +48,25 @@ namespace android {
// Property getters
<% for (const property of properties) { -%>
+<% if (property.name != 'heatmap-color') { -%>
jni::Object<jni::ObjectTag> <%- camelize(type) %>Layer::get<%- camelize(property.name) %>(jni::JNIEnv& env) {
using namespace mbgl::android::conversion;
Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::<%- camelize(type) %>Layer>()-><%- camelize(type) %>Layer::get<%- camelize(property.name) %>());
return jni::Object<jni::ObjectTag>(*converted);
}
+<% } else { -%>
+ jni::Object<jni::ObjectTag> HeatmapLayer::getHeatmapColor(jni::JNIEnv& env) {
+ using namespace mbgl::android::conversion;
+ auto propertyValue = layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getHeatmapColor();
+ if (propertyValue.isUndefined()) {
+ propertyValue = layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getDefaultHeatmapColor();
+ }
+ Result<jni::jobject*> converted = convert<jni::jobject*>(env, propertyValue);
+ return jni::Object<jni::ObjectTag>(*converted);
+ }
+
+<% } -%>
<% if (property.transition) { -%>
jni::Object<TransitionOptions> <%- camelize(type) %>Layer::get<%- camelize(property.name) %>Transition(jni::JNIEnv& env) {
using namespace mbgl::android::conversion;
diff --git a/platform/android/src/style/layers/layer.hpp b/platform/android/src/style/layers/layer.hpp
index 78c3f80b48..2486b0dfa6 100644
--- a/platform/android/src/style/layers/layer.hpp
+++ b/platform/android/src/style/layers/layer.hpp
@@ -3,8 +3,9 @@
#include <mbgl/util/noncopyable.hpp>
#include <mbgl/map/map.hpp>
#include <mbgl/style/layer.hpp>
-
+#include "../../gson/json_array.hpp"
#include "../value.hpp"
+#include "../../gson/json_element.hpp"
#include <jni/jni.hpp>
@@ -68,6 +69,8 @@ public:
void setFilter(jni::JNIEnv&, jni::Array<jni::Object<>>);
+ jni::Object<gson::JsonElement> getFilter(jni::JNIEnv&);
+
void setSourceLayer(jni::JNIEnv&, jni::String);
jni::String getSourceLayer(jni::JNIEnv&);