summaryrefslogtreecommitdiff
path: root/platform/android/src/conversion/constant.hpp
diff options
context:
space:
mode:
authorIvo van Dongen <info@ivovandongen.nl>2016-07-26 17:02:52 -0400
committerIvo van Dongen <info@ivovandongen.nl>2016-08-02 16:58:03 -0400
commit10b2cc60a7b274f71b46976b1e9e89031b9e44ca (patch)
tree8f3cccee03e5a4205c4754f7eb723ec73d19c8b5 /platform/android/src/conversion/constant.hpp
parented821c06d96e414b43db6fd1505389803cb022d4 (diff)
downloadqtlocation-mapboxgl-10b2cc60a7b274f71b46976b1e9e89031b9e44ca.tar.gz
[android] #5610 - Runtime style api - part 2
Diffstat (limited to 'platform/android/src/conversion/constant.hpp')
-rw-r--r--platform/android/src/conversion/constant.hpp95
1 files changed, 95 insertions, 0 deletions
diff --git a/platform/android/src/conversion/constant.hpp b/platform/android/src/conversion/constant.hpp
new file mode 100644
index 0000000000..9a570d3717
--- /dev/null
+++ b/platform/android/src/conversion/constant.hpp
@@ -0,0 +1,95 @@
+#pragma once
+
+#include "conversion.hpp"
+
+#include <mbgl/util/optional.hpp>
+#include <jni/jni.hpp>
+
+#include <string>
+#include <array>
+#include <vector>
+#include <sstream>
+
+namespace mbgl {
+namespace android {
+namespace conversion {
+
+template <>
+struct Converter<jni::jobject*, bool> {
+ Result<jni::jobject*> operator()(jni::JNIEnv& env, const bool& value) const {
+ static jni::jclass* javaClass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/lang/Boolean")).release();
+ static jni::jmethodID* constructor = &jni::GetMethodID(env, *javaClass, "<init>", "(Z)V");
+ return {&jni::NewObject(env, *javaClass, *constructor, (jboolean) value)};
+ }
+};
+
+template <>
+struct Converter<jni::jobject*, float> {
+ Result<jni::jobject*> operator()(jni::JNIEnv& env, const float& value) const {
+ static jni::jclass* javaClass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/lang/Float")).release();
+ static jni::jmethodID* constructor = &jni::GetMethodID(env, *javaClass, "<init>", "(F)V");
+ return {&jni::NewObject(env, *javaClass, *constructor, (jfloat) value)};
+ }
+};
+
+template <>
+struct Converter<jni::jobject*, std::string> {
+ Result<jni::jobject*> operator()(jni::JNIEnv& env, const std::string& value) const {
+ return {jni::Make<jni::String>(env, value).Get()};
+ }
+};
+
+template <>
+struct Converter<jni::jobject*, Color> {
+ Result<jni::jobject*> operator()(jni::JNIEnv& env, const Color& value) const {
+ std::stringstream sstream;
+ sstream << "rgba(" << value.r << ", " << value.g << ", " << value.b << ", " << value.a << ")";
+ std::string result = sstream.str();
+ return convert<jni::jobject*, std::string>(env, result);
+ }
+};
+
+template <std::size_t N>
+struct Converter<jni::jobject*, std::array<float, N>> {
+ Result<jni::jobject*> operator()(jni::JNIEnv& env, const std::array<float, N>& value) const {
+ std::vector<float> v;
+ for (const float& id : value) {
+ v.push_back(id);
+ }
+ return convert<jni::jobject*, std::vector<float>>(env, v);
+ }
+};
+
+template <>
+struct Converter<jni::jobject*, std::vector<std::string>> {
+ Result<jni::jobject*> operator()(jni::JNIEnv& env, const std::vector<std::string>& value) const {
+ static jni::jclass* stringCass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/lang/String")).release();
+ jni::jarray<jni::jobject>& jarray = jni::NewObjectArray(env, value.size(), *stringCass);
+
+ for(size_t i = 0; i < value.size(); i = i + 1) {
+ Result<jni::jobject*> converted = convert<jni::jobject*, std::string>(env, value.at(i));
+ jni::SetObjectArrayElement(env, jarray, i, *converted);
+ }
+
+ return &jarray;
+ }
+};
+
+template <>
+struct Converter<jni::jobject*, std::vector<float>> {
+ Result<jni::jobject*> operator()(jni::JNIEnv& env, const std::vector<float>& value) const {
+ static jni::jclass* floatClass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/lang/Float")).release();
+ jni::jarray<jni::jobject>& jarray = jni::NewObjectArray(env, value.size(), *floatClass);
+
+ for(size_t i = 0; i < value.size(); i = i + 1) {
+ Result<jni::jobject*> converted = convert<jni::jobject*, float>(env, value.at(i));
+ jni::SetObjectArrayElement(env, jarray, i, *converted);
+ }
+
+ return &jarray;
+ }
+};
+
+} // namespace conversion
+} // namespace style
+} // namespace mbgl