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 3fd9a2af5..e1a9cd8cd 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 @@ -692,28 +692,35 @@ public class MapboxMap { int count = polylineOptionsList.size(); Polyline polyline; List polylines = new ArrayList<>(count); - for (PolylineOptions options : polylineOptionsList) { - polyline = options.getPolyline(); - if (!polyline.getPoints().isEmpty()) { - polylines.add(polyline); - } - } - long[] ids = mMapView.addPolylines(polylines); - long id = 0; - Polyline p; - - for (int i = 0; i < polylines.size(); i++) { - p = polylines.get(i); - p.setMapboxMap(this); - if (ids != null) { - id = ids[i]; - } else { - // unit test - id++; + if(count>0) { + for (PolylineOptions options : polylineOptionsList) { + polyline = options.getPolyline(); + if (!polyline.getPoints().isEmpty()) { + polylines.add(polyline); + } + } + + long[] ids = mMapView.addPolylines(polylines); + + // if unit tests or polylines are correctly added to map + if (ids == null || ids.length == polylines.size()) { + long id = 0; + Polyline p; + + for (int i = 0; i < polylines.size(); i++) { + p = polylines.get(i); + p.setMapboxMap(this); + if (ids != null) { + id = ids[i]; + } else { + // unit test + id++; + } + p.setId(id); + mAnnotations.put(id, p); + } } - p.setId(id); - mAnnotations.put(id, p); } return polylines; } @@ -750,26 +757,32 @@ public class MapboxMap { Polygon polygon; List polygons = new ArrayList<>(count); - for (PolygonOptions polygonOptions : polygonOptionsList) { - polygon = polygonOptions.getPolygon(); - if (!polygon.getPoints().isEmpty()) { - polygons.add(polygon); + if(count>0) { + for (PolygonOptions polygonOptions : polygonOptionsList) { + polygon = polygonOptions.getPolygon(); + if (!polygon.getPoints().isEmpty()) { + polygons.add(polygon); + } } - } - long[] ids = mMapView.addPolygons(polygons); - long id = 0; - for (int i = 0; i < polygons.size(); i++) { - polygon = polygons.get(i); - polygon.setMapboxMap(this); - if (ids != null) { - id = ids[i]; - } else { - // unit test - id++; + long[] ids = mMapView.addPolygons(polygons); + + // if unit tests or polygons correcly added to map + if(ids==null || ids.length==polygons.size()) { + long id = 0; + for (int i = 0; i < polygons.size(); i++) { + polygon = polygons.get(i); + polygon.setMapboxMap(this); + if (ids != null) { + id = ids[i]; + } else { + // unit test + id++; + } + polygon.setId(id); + mAnnotations.put(id, polygon); + } } - polygon.setId(id); - mAnnotations.put(id, polygon); } return polygons; } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/MapboxMapTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/MapboxMapTest.java index 2032cfe90..1705f44fa 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/MapboxMapTest.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/MapboxMapTest.java @@ -581,6 +581,22 @@ public class MapboxMapTest { assertTrue("Polygon should be ignored", !mMapboxMap.getPolygons().contains(polygonOptions3.getPolygon())); } + @Test + public void addPolygonsEmpty() { + mMapboxMap.addPolygons(new ArrayList()); + assertEquals("Polygons size should be 0", 0, mMapboxMap.getPolygons().size()); + } + + @Test + public void addPolygonsSingle() { + List polygonList = new ArrayList<>(); + PolygonOptions polygonOptions = new PolygonOptions().fillColor(Color.BLACK).add(new LatLng()); + polygonList.add(polygonOptions); + mMapboxMap.addPolygons(polygonList); + assertEquals("Polygons size should be 1", 1, mMapboxMap.getPolygons().size()); + assertTrue(mMapboxMap.getPolygons().contains(polygonOptions.getPolygon())); + } + @Test public void testAddPolyline() { PolylineOptions polylineOptions = new PolylineOptions().add(new LatLng()); @@ -611,6 +627,22 @@ public class MapboxMapTest { assertTrue("Polyline should be ignored", !mMapboxMap.getPolylines().contains(polygonOptions3.getPolyline())); } + @Test + public void testAddPolylinesEmpty() { + mMapboxMap.addPolylines(new ArrayList()); + assertEquals("Polygons size should be 0", 0, mMapboxMap.getPolylines().size()); + } + + @Test + public void testAddPolylinesSingle() { + List polylineList = new ArrayList<>(); + PolylineOptions polygonOptions = new PolylineOptions().color(Color.BLACK).add(new LatLng()); + polylineList.add(polygonOptions); + mMapboxMap.addPolylines(polylineList); + assertEquals("Polygons size should be 1", 1, mMapboxMap.getPolylines().size()); + assertTrue(mMapboxMap.getPolylines().contains(polygonOptions.getPolyline())); + } + @Test public void testRemoveMarker() { MarkerOptions markerOptions = new MarkerOptions();