From 3040d407723ed8a8e2dfa27ad0ba49f534772342 Mon Sep 17 00:00:00 2001 From: Ivo van Dongen Date: Fri, 24 Feb 2017 16:35:27 +0200 Subject: [PATCH] [android] remove source returns reference --- .../java/com/mapbox/mapboxsdk/maps/MapboxMap.java | 12 ++++++++---- .../com/mapbox/mapboxsdk/maps/NativeMapView.java | 14 ++++++++------ .../mapboxsdk/testapp/style/RuntimeStyleTests.java | 3 ++- platform/android/src/native_map_view.cpp | 9 +++++++-- platform/android/src/native_map_view.hpp | 2 +- 5 files changed, 26 insertions(+), 14 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java index 033986eed..ecea6b224 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java @@ -350,20 +350,24 @@ public final class MapboxMap { * Removes the source. Any references to the source become invalid and should not be used anymore * * @param sourceId the source to remove + * @return the source handle or null if the source was not present */ @UiThread - public void removeSource(@NonNull String sourceId) { - nativeMapView.removeSource(sourceId); + @Nullable + public Source removeSource(@NonNull String sourceId) { + return nativeMapView.removeSource(sourceId); } /** * Removes the source, preserving the reverence for re-use * * @param source the source to remove + * @return the source */ @UiThread - public void removeSource(@NonNull Source source) { - nativeMapView.removeSource(source); + @Nullable + public Source removeSource(@NonNull Source source) { + return nativeMapView.removeSource(source); } /** diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java index 2e495a25c..47f4ad722 100755 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java @@ -806,18 +806,20 @@ final class NativeMapView { nativeAddSource(source.getNativePtr()); } - public void removeSource(@NonNull String sourceId) { + @Nullable + public Source removeSource(@NonNull String sourceId) { if (isDestroyedOn("removeSource")) { - return; + return null; } - nativeRemoveSourceById(sourceId); + return nativeRemoveSourceById(sourceId); } - public void removeSource(@NonNull Source source) { + public Source removeSource(@NonNull Source source) { if (isDestroyedOn("removeSource")) { - return; + return null; } nativeRemoveSource(source.getNativePtr()); + return source; } public void addImage(@NonNull String name, @NonNull Bitmap image) { @@ -1087,7 +1089,7 @@ final class NativeMapView { private native void nativeAddSource(long nativeSourcePtr) throws CannotAddSourceException; - private native void nativeRemoveSourceById(String sourceId); + private native Source nativeRemoveSourceById(String sourceId); private native void nativeRemoveSource(long sourcePtr); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/RuntimeStyleTests.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/RuntimeStyleTests.java index 30d7c9a37..cda4b62d5 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/RuntimeStyleTests.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/RuntimeStyleTests.java @@ -192,7 +192,8 @@ public class RuntimeStyleTests { mapboxMap.addSource(new VectorSource("my-source", "mapbox://mapbox.mapbox-terrain-v2")); // Remove - mapboxMap.removeSource("my-source"); + Source mySource = mapboxMap.removeSource("my-source"); + assertNotNull(mySource); assertNull(mapboxMap.getLayer("my-source")); // Add diff --git a/platform/android/src/native_map_view.cpp b/platform/android/src/native_map_view.cpp index e188a98c6..5587300c1 100755 --- a/platform/android/src/native_map_view.cpp +++ b/platform/android/src/native_map_view.cpp @@ -844,8 +844,13 @@ void NativeMapView::addSource(JNIEnv& env, jni::jlong sourcePtr) { } } -void NativeMapView::removeSourceById(JNIEnv& env, jni::String id) { - map->removeSource(jni::Make(env, id)); +jni::Object NativeMapView::removeSourceById(JNIEnv& env, jni::String id) { + std::unique_ptr coreSource = map->removeSource(jni::Make(env, id)); + if (coreSource) { + return jni::Object(createJavaSourcePeer(env, *map, *coreSource)); + } else { + return jni::Object(); + } } void NativeMapView::removeSource(JNIEnv&, jlong sourcePtr) { diff --git a/platform/android/src/native_map_view.hpp b/platform/android/src/native_map_view.hpp index 968c98bd6..7b3694e73 100755 --- a/platform/android/src/native_map_view.hpp +++ b/platform/android/src/native_map_view.hpp @@ -217,7 +217,7 @@ public: void addSource(JNIEnv&, jni::jlong); - void removeSourceById(JNIEnv&, jni::String); + jni::Object removeSourceById(JNIEnv&, jni::String); void removeSource(JNIEnv&, jlong);