diff options
author | Tobrun <tobrun@mapbox.com> | 2016-02-22 09:40:51 +0100 |
---|---|---|
committer | Tobrun <tobrun@mapbox.com> | 2016-02-23 13:17:27 +0100 |
commit | 7b40cbcfd949371e04944a23ffe08b69862f6a1a (patch) | |
tree | eadfece169f119182cfad98e21c6c616f8fe38f3 | |
parent | 18380708cd123fc6e9bc191d843791d60c14c02c (diff) | |
download | qtlocation-mapboxgl-7b40cbcfd949371e04944a23ffe08b69862f6a1a.tar.gz |
[android] #4038 - fix crash on polygons and polylines with empty points + formatting commit
2 files changed, 54 insertions, 23 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 7127a7e671..3794e7ab3d 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 @@ -485,7 +485,7 @@ public class MapboxMap { @UiThread @NonNull public Marker addMarker(@NonNull MarkerOptions markerOptions) { - return addMarker((BaseMarkerOptions)markerOptions); + return addMarker((BaseMarkerOptions) markerOptions); } @UiThread @@ -567,10 +567,12 @@ public class MapboxMap { @NonNull public Polyline addPolyline(@NonNull PolylineOptions polylineOptions) { Polyline polyline = polylineOptions.getPolyline(); - long id = mMapView.addPolyline(polyline); - polyline.setMapboxMap(this); - polyline.setId(id); - mAnnotations.put(id, polyline); + if (!polyline.getPoints().isEmpty()) { + long id = mMapView.addPolyline(polyline); + polyline.setMapboxMap(this); + polyline.setId(id); + mAnnotations.put(id, polyline); + } return polyline; } @@ -584,9 +586,13 @@ public class MapboxMap { @NonNull public List<Polyline> addPolylines(@NonNull List<PolylineOptions> polylineOptionsList) { int count = polylineOptionsList.size(); + Polyline polyline; List<Polyline> polylines = new ArrayList<>(count); for (PolylineOptions options : polylineOptionsList) { - polylines.add(options.getPolyline()); + polyline = options.getPolyline(); + if (!polyline.getPoints().isEmpty()) { + polylines.add(polyline); + } } long[] ids = mMapView.addPolylines(polylines); @@ -618,10 +624,12 @@ public class MapboxMap { @NonNull public Polygon addPolygon(@NonNull PolygonOptions polygonOptions) { Polygon polygon = polygonOptions.getPolygon(); - long id = mMapView.addPolygon(polygon); - polygon.setId(id); - polygon.setMapboxMap(this); - mAnnotations.put(id, polygon); + if (!polygon.getPoints().isEmpty()) { + long id = mMapView.addPolygon(polygon); + polygon.setId(id); + polygon.setMapboxMap(this); + mAnnotations.put(id, polygon); + } return polygon; } @@ -635,21 +643,24 @@ public class MapboxMap { @NonNull public List<Polygon> addPolygons(@NonNull List<PolygonOptions> polygonOptionsList) { int count = polygonOptionsList.size(); + + Polygon polygon; List<Polygon> polygons = new ArrayList<>(count); for (PolygonOptions polygonOptions : polygonOptionsList) { - polygons.add(polygonOptions.getPolygon()); + polygon = polygonOptions.getPolygon(); + if (!polygon.getPoints().isEmpty()) { + polygons.add(polygon); + } } long[] ids = mMapView.addPolygons(polygons); long id = 0; - Polygon polygon; - for (int i = 0; i < polygons.size(); i++) { polygon = polygons.get(i); polygon.setMapboxMap(this); - if(ids!=null){ + if (ids != null) { id = ids[i]; - }else{ + } else { // unit test id++; } @@ -757,8 +768,8 @@ public class MapboxMap { for (int i = 0; i < count; i++) { ids[i] = mAnnotations.keyAt(i); annotation = mAnnotations.get(ids[i]); - if(annotation instanceof Marker){ - ((Marker)annotation).hideInfoWindow(); + if (annotation instanceof Marker) { + ((Marker) annotation).hideInfoWindow(); } } mMapView.removeAnnotations(ids); 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 de3ecd36b6..e453bd20bb 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 @@ -537,42 +537,62 @@ public class MapboxMapTest { @Test public void testAddPolygon() { - PolygonOptions polygonOptions = new PolygonOptions(); + PolygonOptions polygonOptions = new PolygonOptions().add(new LatLng()); Polygon polygon = mMapboxMap.addPolygon(polygonOptions); assertTrue("Polygon should be contained", mMapboxMap.getPolygons().contains(polygon)); } @Test + public void testAddEmptyPolygon() { + PolygonOptions polygonOptions = new PolygonOptions(); + Polygon polygon = mMapboxMap.addPolygon(polygonOptions); + assertTrue("Polygon should be ignored", !mMapboxMap.getPolygons().contains(polygon)); + } + + @Test public void testAddPolygons() { List<PolygonOptions> polygonList = new ArrayList<>(); - PolygonOptions polygonOptions1 = new PolygonOptions().fillColor(Color.BLACK); - PolygonOptions polygonOptions2 = new PolygonOptions().fillColor(Color.WHITE); + PolygonOptions polygonOptions1 = new PolygonOptions().fillColor(Color.BLACK).add(new LatLng()); + PolygonOptions polygonOptions2 = new PolygonOptions().fillColor(Color.WHITE).add(new LatLng()); + PolygonOptions polygonOptions3 = new PolygonOptions(); polygonList.add(polygonOptions1); polygonList.add(polygonOptions2); + polygonList.add(polygonOptions3); mMapboxMap.addPolygons(polygonList); assertEquals("Polygons size should be 2", 2, mMapboxMap.getPolygons().size()); assertTrue(mMapboxMap.getPolygons().contains(polygonOptions1.getPolygon())); assertTrue(mMapboxMap.getPolygons().contains(polygonOptions2.getPolygon())); + assertTrue("Polygon should be ignored", !mMapboxMap.getPolygons().contains(polygonOptions3.getPolygon())); } @Test public void testAddPolyline() { - PolylineOptions polylineOptions = new PolylineOptions(); + PolylineOptions polylineOptions = new PolylineOptions().add(new LatLng()); Polyline polyline = mMapboxMap.addPolyline(polylineOptions); assertTrue("Polyline should be contained", mMapboxMap.getPolylines().contains(polyline)); } @Test + public void testAddEmptyPolyline() { + PolylineOptions polylineOptions = new PolylineOptions(); + Polyline polyline = mMapboxMap.addPolyline(polylineOptions); + assertTrue("Polyline should be ignored", !mMapboxMap.getPolylines().contains(polyline)); + } + + @Test public void testAddPolylines() { List<PolylineOptions> polylineList = new ArrayList<>(); - PolylineOptions polygonOptions1 = new PolylineOptions().color(Color.BLACK); - PolylineOptions polygonOptions2 = new PolylineOptions().color(Color.WHITE); + PolylineOptions polygonOptions1 = new PolylineOptions().color(Color.BLACK).add(new LatLng()); + PolylineOptions polygonOptions2 = new PolylineOptions().color(Color.WHITE).add(new LatLng()); + PolylineOptions polygonOptions3 = new PolylineOptions(); polylineList.add(polygonOptions1); polylineList.add(polygonOptions2); + polylineList.add(polygonOptions3); mMapboxMap.addPolylines(polylineList); assertEquals("Polygons size should be 2", 2, mMapboxMap.getPolylines().size()); assertTrue(mMapboxMap.getPolylines().contains(polygonOptions1.getPolyline())); assertTrue(mMapboxMap.getPolylines().contains(polygonOptions2.getPolyline())); + assertTrue("Polyline should be ignored", !mMapboxMap.getPolylines().contains(polygonOptions3.getPolyline())); } @Test |