#include "point.hpp" #include "../java/util.hpp" #include "../java_types.hpp" #include "../style/value.hpp" namespace mbgl { namespace android { namespace geojson { mapbox::geojson::point Point::convert(jni::JNIEnv &env, jni::Object jPoint) { mapbox::geojson::point point; if (jPoint) { auto jDoubleList = Point::coordinates(env, jPoint); point = Point::convert(env, jDoubleList); jni::DeleteLocalRef(env, jDoubleList); } return point; } mapbox::geojson::point Point::convert(jni::JNIEnv &env, jni::Object*/> jDoubleList) { mapbox::geojson::point point; if (jDoubleList) { auto jDoubleArray = java::util::List::toArray(env, jDoubleList); auto lonObject = jDoubleArray.Get(env, 0); auto latObject = jDoubleArray.Get(env, 1); point.x = jni::CallMethod(env, lonObject, *java::Number::doubleValueMethodId); point.y = jni::CallMethod(env, latObject, *java::Number::doubleValueMethodId); jni::DeleteLocalRef(env, lonObject); jni::DeleteLocalRef(env, latObject); jni::DeleteLocalRef(env, jDoubleArray); } return point; } jni::Object Point::coordinates(jni::JNIEnv &env, jni::Object jPoint) { static auto method = Point::javaClass.GetMethod ()>(env, "coordinates"); return jPoint.Call(env, method); } void Point::registerNative(jni::JNIEnv &env) { // Lookup the class javaClass = *jni::Class::Find(env).NewGlobalRef(env).release(); } jni::Class Point::javaClass; } // namespace geojson } // namespace android } // namespace mbgl