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 cf56f6346..84bc759eb 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 @@ -291,6 +291,22 @@ public final class MapboxMap { nativeMapView.removeLayer(layer); } + /** + * Retrieve all the sources in the style + * + * @return all the sources in the current style + */ + @UiThread + public List getSources() { + return nativeMapView.getSources(); + } + + /** + * Retrieve a source by id + * + * @param sourceId the source's id + * @return the source if present in the current style + */ @Nullable @UiThread public Source getSource(@NonNull String sourceId) { 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 a3ec1cc3c..1ec7f1687 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 @@ -782,6 +782,13 @@ final class NativeMapView { nativeRemoveLayer(layer.getNativePtr()); } + public List getSources() { + if (isDestroyedOn("getSources")) { + return null; + } + return Arrays.asList(nativeGetSources()); + } + public Source getSource(@NonNull String sourceId) { if (isDestroyedOn("getSource")) { return null; @@ -1071,6 +1078,8 @@ final class NativeMapView { private native void nativeRemoveLayer(long layerId); + private native Source[] nativeGetSources(); + private native Source nativeGetSource(String sourceId); private native void nativeAddSource(long nativeSourcePtr) throws CannotAddSourceException; 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 f24e6dbf5..30d71c0ff 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 @@ -85,6 +85,26 @@ public class RuntimeStyleTests { onView(withId(R.id.mapView)).perform(new AddRemoveLayerAction()); } + @Test + public void testListSources() { + ViewUtils.checkViewIsDisplayed(R.id.mapView); + onView(withId(R.id.mapView)).perform(new BaseViewAction() { + + @Override + public void perform(UiController uiController, View view) { + MapboxMap mapboxMap = rule.getActivity().getMapboxMap(); + + List sources = mapboxMap.getSources(); + assertNotNull(sources); + assertTrue(sources.size() > 0); + for (Source source: sources) { + assertNotNull(source); + } + } + + }); + } + @Test public void testAddRemoveSource() { ViewUtils.checkViewIsDisplayed(R.id.mapView); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java index 8624feaec..cd50dc2f0 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java @@ -154,6 +154,9 @@ public class RuntimeStyleActivity extends AppCompatActivity { case R.id.action_list_layers: listLayers(); return true; + case R.id.action_list_sources: + listSources(); + return true; case R.id.action_water_color: setWaterColor(); return true; @@ -211,6 +214,16 @@ public class RuntimeStyleActivity extends AppCompatActivity { Toast.makeText(this, builder.toString(), Toast.LENGTH_LONG).show(); } + private void listSources() { + List sources = mapboxMap.getSources(); + StringBuilder builder = new StringBuilder("Sources:"); + for (Source source : sources) { + builder.append("\n"); + builder.append(source.getId()); + } + Toast.makeText(this, builder.toString(), Toast.LENGTH_LONG).show(); + } + private void setLayerInvisible() { String[] roadLayers = new String[] {"water"}; for (String roadLayer : roadLayers) { diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_runtime_style.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_runtime_style.xml index 4b1f928d1..86f0b4fae 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_runtime_style.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_runtime_style.xml @@ -6,6 +6,10 @@ android:id="@+id/action_list_layers" android:title="List all layers in the style" mapbox:showAsAction="never" /> + > NativeMapView::getSources(JNIEnv& env) { + // Get the core sources + std::vector sources = map->getSources(); + + // Convert + jni::Array> jSources = jni::Array>::New(env, sources.size(), Source::javaClass); + int index = 0; + for (auto source : sources) { + auto jSource = jni::Object(createJavaSourcePeer(env, *map, *source)); + jSources.Set(env, index, jSource); + jni::DeleteLocalRef(env, jSource); + index++; + } + + return jSources; +} jni::Object NativeMapView::getSource(JNIEnv& env, jni::String sourceId) { // Find the source @@ -1356,6 +1372,7 @@ void NativeMapView::registerNative(jni::JNIEnv& env) { METHOD(&NativeMapView::addLayer, "nativeAddLayer"), METHOD(&NativeMapView::removeLayerById, "nativeRemoveLayerById"), METHOD(&NativeMapView::removeLayer, "nativeRemoveLayer"), + METHOD(&NativeMapView::getSources, "nativeGetSources"), METHOD(&NativeMapView::getSource, "nativeGetSource"), METHOD(&NativeMapView::addSource, "nativeAddSource"), METHOD(&NativeMapView::removeSourceById, "nativeRemoveSourceById"), diff --git a/platform/android/src/native_map_view.hpp b/platform/android/src/native_map_view.hpp index fb6c7fa69..b34eb2cab 100755 --- a/platform/android/src/native_map_view.hpp +++ b/platform/android/src/native_map_view.hpp @@ -211,6 +211,8 @@ public: void removeLayer(JNIEnv&, jlong); + jni::Array> getSources(JNIEnv&); + jni::Object getSource(JNIEnv&, jni::String); void addSource(JNIEnv&, jni::jlong);