diff --git a/android/cpp/jni.cpp b/android/cpp/jni.cpp index d517bfa62..ab83b2f43 100644 --- a/android/cpp/jni.cpp +++ b/android/cpp/jni.cpp @@ -40,6 +40,10 @@ jmethodID latLngConstructorId = nullptr; jfieldID latLngLatitudeId = nullptr; jfieldID latLngLongitudeId = nullptr; +jclass polylineClass = nullptr; +jmethodID polylineConstructorId = nullptr; +jfieldID polylineAlphaId = nullptr; + jclass latLngZoomClass = nullptr; jmethodID latLngZoomConstructorId = nullptr; jfieldID latLngZoomLatitudeId = nullptr; @@ -460,8 +464,21 @@ jlong JNICALL nativeAddPolyline(JNIEnv *env, jobject obj, jlong nativeMapViewPtr assert(nativeMapViewPtr != 0); // NativeMapView *nativeMapView = reinterpret_cast(nativeMapViewPtr); + // ***** Java fields ***** // - return -1; + // float alpha; + // boolean visible; + // List points + // int color + // float width + + jfloat alpha = env->GetFloatField(polyline, polylineAlphaId); + if (env->ExceptionCheck()) { + env->ExceptionDescribe(); + return -1; + } + + return (jlong)alpha; } void JNICALL nativeRemoveAnnotation(JNIEnv *env, jobject obj, jlong nativeMapViewPtr, jlong annotationId) { @@ -821,6 +838,24 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { return JNI_ERR; } + polylineClass = env->FindClass("com/mapbox/mapboxgl/annotations/Polyline"); + if (polylineClass == nullptr) { + env->ExceptionDescribe(); + return JNI_ERR; + } + + polylineConstructorId = env->GetMethodID(polylineClass, "", "()V"); + if (polylineConstructorId == nullptr) { + env->ExceptionDescribe(); + return JNI_ERR; + } + + polylineAlphaId = env->GetFieldID(polylineClass, "alpha", "F"); + if (polylineAlphaId == nullptr) { + env->ExceptionDescribe(); + return JNI_ERR; + } + latLngZoomClass = env->FindClass("com/mapbox/mapboxgl/geometry/LatLngZoom"); if (latLngZoomClass == nullptr) { env->ExceptionDescribe(); @@ -1069,6 +1104,12 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { return JNI_ERR; } + polylineClass = reinterpret_cast(env->NewGlobalRef(polylineClass)); + if (polylineClass == nullptr) { + env->ExceptionDescribe(); + return JNI_ERR; + } + latLngZoomClass = reinterpret_cast(env->NewGlobalRef(latLngZoomClass)); if (latLngZoomClass == nullptr) { env->ExceptionDescribe(); @@ -1152,6 +1193,11 @@ extern "C" JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved) { latLngLongitudeId = nullptr; latLngLatitudeId = nullptr; + env->DeleteGlobalRef(polylineClass); + polylineClass = nullptr; + polylineConstructorId = nullptr; + polylineAlphaId = nullptr; + env->DeleteGlobalRef(latLngZoomClass); latLngZoomClass = nullptr; latLngZoomConstructorId = nullptr; diff --git a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/views/NativeMapView.java b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/views/NativeMapView.java index f28cf88eb..be1680aba 100644 --- a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/views/NativeMapView.java +++ b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/views/NativeMapView.java @@ -221,6 +221,7 @@ class NativeMapView { } public long addPolyline(Polyline polyline) { + // NH TODO Throw exception if returns -1 return nativeAddPolyline(mNativeMapViewPtr, polyline); }