summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--platform/android/src/java_types.cpp4
-rw-r--r--platform/android/src/java_types.hpp2
-rw-r--r--platform/android/src/style/android_conversion.hpp7
-rw-r--r--platform/android/src/style/value.cpp10
-rw-r--r--platform/android/src/style/value.hpp4
5 files changed, 22 insertions, 5 deletions
diff --git a/platform/android/src/java_types.cpp b/platform/android/src/java_types.cpp
index 6383426387..dd165470cf 100644
--- a/platform/android/src/java_types.cpp
+++ b/platform/android/src/java_types.cpp
@@ -13,6 +13,8 @@ namespace java {
jni::jclass* Number::jclass;
jni::jmethodID* Number::floatValueMethodId;
+ jni::jmethodID* Number::doubleValueMethodId;
+ jni::jmethodID* Number::longValueMethodId;
jni::jclass* Map::jclass;
jni::jmethodID* Map::getMethodId;
@@ -27,6 +29,8 @@ namespace java {
Number::jclass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/lang/Number")).release();
Number::floatValueMethodId = &jni::GetMethodID(env, *Number::jclass, "floatValue", "()F");
+ Number::doubleValueMethodId = &jni::GetMethodID(env, *Number::jclass, "doubleValue", "()D");
+ Number::longValueMethodId = &jni::GetMethodID(env, *Number::jclass, "longValue", "()J");
Map::jclass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/util/Map")).release();
Map::getMethodId = &jni::GetMethodID(env, *Map::jclass, "get", "(Ljava/lang/Object;)Ljava/lang/Object;");
diff --git a/platform/android/src/java_types.hpp b/platform/android/src/java_types.hpp
index b416a75b91..edec5cb550 100644
--- a/platform/android/src/java_types.hpp
+++ b/platform/android/src/java_types.hpp
@@ -22,6 +22,8 @@ namespace java {
struct Number {
static jni::jclass* jclass;
static jni::jmethodID* floatValueMethodId;
+ static jni::jmethodID* doubleValueMethodId;
+ static jni::jmethodID* longValueMethodId;
};
struct Map {
diff --git a/platform/android/src/style/android_conversion.hpp b/platform/android/src/style/android_conversion.hpp
index d9b88ab52b..e2b2685928 100644
--- a/platform/android/src/style/android_conversion.hpp
+++ b/platform/android/src/style/android_conversion.hpp
@@ -59,7 +59,8 @@ inline optional<bool> toBool(const mbgl::android::Value& value) {
inline optional<float> toNumber(const mbgl::android::Value& value) {
if (value.isNumber()) {
- return value.toNumber();
+ auto num = value.toFloat();
+ return num;
} else {
return {};
}
@@ -81,8 +82,8 @@ inline optional<Value> toValue(const mbgl::android::Value& value) {
} else if (value.isString()) {
return { value.toString() };
} else if (value.isNumber()) {
- // Need to cast to a double here as the float is otherwise considered a bool...
- return { (double) value.toNumber() };
+ auto doubleVal = value.toDouble();
+ return { doubleVal - (int) doubleVal > 0.0 ? doubleVal : value.toLong() };
} else {
return {};
}
diff --git a/platform/android/src/style/value.cpp b/platform/android/src/style/value.cpp
index 0b5d81feb1..da953c14be 100644
--- a/platform/android/src/style/value.cpp
+++ b/platform/android/src/style/value.cpp
@@ -55,10 +55,18 @@ namespace android {
return jni::Make<std::string>(jenv, jni::String(string));
}
- float Value::toNumber() const {
+ float Value::toFloat() const {
return jni::CallMethod<jni::jfloat>(jenv, value.get(), *java::Number::floatValueMethodId);
}
+ double Value::toDouble() const {
+ return jni::CallMethod<jni::jdouble>(jenv, value.get(), *java::Number::doubleValueMethodId);
+ }
+
+ long Value::toLong() const {
+ return jni::CallMethod<jni::jlong>(jenv, value.get(), *java::Number::longValueMethodId);
+ }
+
bool Value::toBool() const {
return jni::CallMethod<jni::jboolean>(jenv, value.get(), *java::Boolean::booleanValueMethodId);
}
diff --git a/platform/android/src/style/value.hpp b/platform/android/src/style/value.hpp
index 461fc1a033..761ce4d730 100644
--- a/platform/android/src/style/value.hpp
+++ b/platform/android/src/style/value.hpp
@@ -21,7 +21,9 @@ public:
bool isNumber() const;
std::string toString() const;
- float toNumber() const;
+ float toFloat() const;
+ double toDouble() const;
+ long toLong() const;
bool toBool() const;
Value get(const char* key) const;
int getLength() const;