diff options
author | tobrun <tobrun.van.nuland@gmail.com> | 2018-12-20 19:34:55 +0100 |
---|---|---|
committer | Tobrun <tobrun@mapbox.com> | 2019-01-15 17:15:23 +0100 |
commit | 9ba0737e6a653cafec5d02982c06c31da970f6ca (patch) | |
tree | 7d6984708ee7518c60c738d380d5288b0d510792 /platform/android/src/gson/json_element.cpp | |
parent | 59cfce30849615c5657c2079c5912dd61254a25e (diff) | |
download | qtlocation-mapboxgl-9ba0737e6a653cafec5d02982c06c31da970f6ca.tar.gz |
[android] - expose query feature extensions
Diffstat (limited to 'platform/android/src/gson/json_element.cpp')
-rw-r--r-- | platform/android/src/gson/json_element.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/platform/android/src/gson/json_element.cpp b/platform/android/src/gson/json_element.cpp index 7c9a34c03c..405efe71ca 100644 --- a/platform/android/src/gson/json_element.cpp +++ b/platform/android/src/gson/json_element.cpp @@ -2,6 +2,7 @@ #include "json_array.hpp" #include "json_object.hpp" #include "json_primitive.hpp" +#include "../math/math.hpp" namespace mbgl { namespace android { @@ -58,13 +59,21 @@ mbgl::Value JsonElement::convert(jni::JNIEnv &env, const jni::Object<JsonElement static auto getAsBoolean = primitiveClass.GetMethod<jni::jboolean ()>(env, "getAsBoolean"); static auto getAsString = primitiveClass.GetMethod<jni::String ()>(env, "getAsString"); static auto getAsDouble = primitiveClass.GetMethod<jni::jdouble ()>(env, "getAsDouble"); + static auto getAsInteger = primitiveClass.GetMethod<jni::jint ()>(env, "getAsInt"); if (jsonElement.Call(env, isJsonPrimitive)) { auto primitive = jni::Cast(env, primitiveClass, jsonElement); if (primitive.Call(env, isBoolean)) { return bool(primitive.Call(env, getAsBoolean)); } else if (primitive.Call(env, isNumber)) { - return primitive.Call(env, getAsDouble); // TODO: how to differentiate types here? + auto value = primitive.Call(env, getAsDouble); + if (value == math::Math::rint(env, value)) { + // uint64_t + return static_cast<uint64_t>(primitive.Call(env, getAsInteger)); + } else { + // double + return value; + } } else if (primitive.Call(env, isString)) { return jni::Make<std::string>(env, primitive.Call(env, getAsString)); } else { |