diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2016-11-14 10:44:06 +0100 |
---|---|---|
committer | Ivo van Dongen <ivovandongen@users.noreply.github.com> | 2016-11-14 14:05:18 +0100 |
commit | 8d53f9f09191b390a5a6f31b41714a8178ed326b (patch) | |
tree | f64b06229a09bb278f682594ed983de421311300 /platform/android/src/jni.cpp | |
parent | f66ea0bef9071cf7c27e456e7eb9528b8cff5e30 (diff) | |
download | qtlocation-mapboxgl-8d53f9f09191b390a5a6f31b41714a8178ed326b.tar.gz |
[android] return layer ownership on remove
Diffstat (limited to 'platform/android/src/jni.cpp')
-rwxr-xr-x | platform/android/src/jni.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/platform/android/src/jni.cpp b/platform/android/src/jni.cpp index 1d4849dcfb..6c346ec931 100755 --- a/platform/android/src/jni.cpp +++ b/platform/android/src/jni.cpp @@ -1109,7 +1109,10 @@ void nativeAddLayer(JNIEnv *env, jni::jobject* obj, jlong nativeMapViewPtr, jlon } } -void nativeRemoveLayer(JNIEnv *env, jni::jobject* obj, jlong nativeMapViewPtr, jni::jstring* id) { +/** + * Remove by layer id. Ownership is not transferred back + */ +void nativeRemoveLayerById(JNIEnv *env, jni::jobject* obj, jlong nativeMapViewPtr, jni::jstring* id) { assert(nativeMapViewPtr != 0); NativeMapView *nativeMapView = reinterpret_cast<NativeMapView *>(nativeMapViewPtr); try { @@ -1119,6 +1122,22 @@ void nativeRemoveLayer(JNIEnv *env, jni::jobject* obj, jlong nativeMapViewPtr, j } } +/** + * Remove with wrapper object id. Ownership is transferred back to the wrapper + */ +void nativeRemoveLayer(JNIEnv *env, jni::jobject* obj, jlong nativeMapViewPtr, jlong layerPtr) { + assert(nativeMapViewPtr != 0); + NativeMapView *nativeMapView = reinterpret_cast<NativeMapView *>(nativeMapViewPtr); + mbgl::android::Layer *layer = reinterpret_cast<mbgl::android::Layer *>(layerPtr); + try { + std::unique_ptr<mbgl::style::Layer> coreLayer = nativeMapView->getMap().removeLayer(layer->get().getID()); + layer->setLayer(std::move(coreLayer)); + } catch (const std::runtime_error& error) { + jni::ThrowNew(*env, jni::FindClass(*env, "com/mapbox/mapboxsdk/style/layers/NoSuchLayerException"), error.what()); + } +} + + jni::jobject* nativeGetSource(JNIEnv *env, jni::jobject* obj, jni::jlong nativeMapViewPtr, jni::jstring* sourceId) { assert(env); assert(nativeMapViewPtr != 0); @@ -1838,7 +1857,8 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { MAKE_NATIVE_METHOD(nativeFlyTo, "(JDDDJDD)V"), MAKE_NATIVE_METHOD(nativeGetLayer, "(JLjava/lang/String;)Lcom/mapbox/mapboxsdk/style/layers/Layer;"), MAKE_NATIVE_METHOD(nativeAddLayer, "(JJLjava/lang/String;)V"), - MAKE_NATIVE_METHOD(nativeRemoveLayer, "(JLjava/lang/String;)V"), + MAKE_NATIVE_METHOD(nativeRemoveLayerById, "(JLjava/lang/String;)V"), + MAKE_NATIVE_METHOD(nativeRemoveLayer, "(JJ)V"), MAKE_NATIVE_METHOD(nativeGetSource, "(JLjava/lang/String;)Lcom/mapbox/mapboxsdk/style/sources/Source;"), MAKE_NATIVE_METHOD(nativeAddSource, "(JJ)V"), MAKE_NATIVE_METHOD(nativeRemoveSource, "(JLjava/lang/String;)V"), |