#include "line_string.hpp" #include "position.hpp" namespace mbgl { namespace android { namespace geojson { mapbox::geojson::line_string LineString::convert(jni::JNIEnv &env, jni::Object jLineString) { mapbox::geojson::line_string lineString; if (jLineString) { auto jPositionList = LineString::getCoordinates(env, jLineString); lineString = LineString::convert(env, jPositionList); jni::DeleteLocalRef(env, jPositionList); } return lineString; } mapbox::geojson::line_string LineString::convert(jni::JNIEnv &env, jni::Object*/> jPositionList) { mapbox::geojson::line_string lineString; if (jPositionList) { auto jPositionArray = java::util::List::toArray(env, jPositionList); auto size = jPositionArray.Length(env); for (std::size_t i = 0; i < size; i++) { auto jPosition = jPositionArray.Get(env, i); lineString.push_back(Position::convert(env, jPosition)); jni::DeleteLocalRef(env, jPosition); } jni::DeleteLocalRef(env, jPositionArray); } return lineString; } jni::Object LineString::getCoordinates(jni::JNIEnv &env, jni::Object jLineString) { static auto method = LineString::javaClass.GetMethod ()>(env, "getCoordinates"); return jLineString.Call(env, method); } void LineString::registerNative(jni::JNIEnv &env) { // Lookup the class javaClass = *jni::Class::Find(env).NewGlobalRef(env).release(); } jni::Class LineString::javaClass; } // namespace geojson } // namespace android } // namespace mbgl