From 780fe619b3b3857d9186100f0584eb27f5f3dae7 Mon Sep 17 00:00:00 2001 From: bsudekum Date: Mon, 11 Jan 2016 15:51:12 -0800 Subject: [PATCH] Upgrades to android 3.0.0, adds logo/attribution prop --- android/API.md | 2 + android/build.gradle | 2 +- .../ReactNativeMapboxGLManager.java | 40 ++++++++++++------- .../ReactNativeMapboxGLModule.java | 2 +- index.android.js | 2 + 5 files changed, 32 insertions(+), 16 deletions(-) diff --git a/android/API.md b/android/API.md index 64ac4c7..6544596 100644 --- a/android/API.md +++ b/android/API.md @@ -16,6 +16,8 @@ | `direction` | `double` | Optional | `0` | Heading of the map in degrees where 0 is north and 180 is south | | `debugActive` | `bool` | Optional | `false` | Turns on debug mode. | | `style` | flexbox `view` | Optional | NA | Styles the actual map view container | +| `attributionButtonIsHidden` | `bool` | Optional | `false` | Whether attribution button is visible in lower left corner. *If true you must still attribute OpenStreetMap in your app. [Ref](https://www.mapbox.com/about/maps/)* | +| `logoIsHidden` | `bool` | Optional | `false` | Whether logo is visible in lower left corner. | ## Events diff --git a/android/build.gradle b/android/build.gradle index 4fc3e0d..9f75fde 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -31,7 +31,7 @@ repositories { dependencies { compile 'com.facebook.react:react-native:0.14.+' - compile('com.mapbox.mapboxsdk:mapbox-android-sdk:2.3.0@aar') { + compile('com.mapbox.mapboxsdk:mapbox-android-sdk:3.0.0@aar') { transitive = true } } diff --git a/android/src/main/java/com/mapbox/reactnativemapboxgl/ReactNativeMapboxGLManager.java b/android/src/main/java/com/mapbox/reactnativemapboxgl/ReactNativeMapboxGLManager.java index b0a0a65..11e3060 100644 --- a/android/src/main/java/com/mapbox/reactnativemapboxgl/ReactNativeMapboxGLManager.java +++ b/android/src/main/java/com/mapbox/reactnativemapboxgl/ReactNativeMapboxGLManager.java @@ -25,8 +25,8 @@ import com.mapbox.mapboxsdk.annotations.PolylineOptions; import com.mapbox.mapboxsdk.constants.MyLocationTracking; import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.views.MapView; -import com.mapbox.mapboxsdk.annotations.Sprite; -import com.mapbox.mapboxsdk.annotations.SpriteFactory; +import com.mapbox.mapboxsdk.annotations.Icon; +import com.mapbox.mapboxsdk.annotations.IconFactory; import android.support.v4.content.ContextCompat; import android.graphics.drawable.Drawable; import android.graphics.BitmapFactory; @@ -62,6 +62,8 @@ public class ReactNativeMapboxGLManager extends SimpleViewManager { public static final String PROP_ZOOM_LEVEL = "zoomLevel"; public static final String PROP_SET_TILT = "tilt"; public static final String PROP_COMPASS_IS_HIDDEN = "compassIsHidden"; + public static final String PROP_LOGO_IS_HIDDEN = "logoIsHidden"; + public static final String PROP_ATTRIBUTION_BUTTON_IS_HIDDEN = "attributionButtonIsHidden"; private MapView mapView; @@ -105,10 +107,17 @@ public class ReactNativeMapboxGLManager extends SimpleViewManager { } @ReactProp(name = PROP_ANNOTATIONS) - public void setAnnotations(MapView view, @Nullable ReadableArray value) { + public void setAnnotationClear(MapView view, @Nullable ReadableArray value) { + setAnnotations(view, value, true); + } + + public void setAnnotations(MapView view, @Nullable ReadableArray value, boolean clearMap) { if (value == null || value.size() < 1) { Log.e(REACT_CLASS, "Error: No annotations"); } else { + if (clearMap) { + view.removeAllAnnotations(); + } int size = value.size(); for (int i = 0; i < size; i++) { ReadableMap annotation = value.getMap(i); @@ -132,17 +141,8 @@ public class ReactNativeMapboxGLManager extends SimpleViewManager { String annotationURL = annotationImage.getString("url"); try { Drawable image = drawableFromUrl(mapView, annotationURL); - SpriteFactory spriteFactory = view.getSpriteFactory(); - Sprite icon; - - if (annotationImage.hasKey("height") && annotationImage.hasKey("width")) { - int height = annotationImage.getInt("height"); - int width = annotationImage.getInt("width"); - icon = spriteFactory.fromDrawable(image, width, height); - } else { - icon = spriteFactory.fromDrawable(image); - } - + IconFactory iconFactory = view.getIconFactory(); + Icon icon = iconFactory.fromDrawable(image); marker.icon(icon); } catch (Exception e) { e.printStackTrace(); @@ -301,6 +301,18 @@ public class ReactNativeMapboxGLManager extends SimpleViewManager { view.setCompassEnabled(!value); } + @ReactProp(name = PROP_LOGO_IS_HIDDEN) + public void setLogoIsHidden(MapView view, Boolean value) { + int visibility = (value ? android.view.View.INVISIBLE : android.view.View.VISIBLE); + view.setLogoVisibility(visibility); + } + + @ReactProp(name = PROP_ATTRIBUTION_BUTTON_IS_HIDDEN) + public void setAttributionButtonIsHidden(MapView view, Boolean value) { + int visibility = (value ? android.view.View.INVISIBLE : android.view.View.VISIBLE); + view.setAttributionVisibility(visibility); + } + public void setCenterCoordinateZoomLevel(MapView view, @Nullable ReadableMap center) { if (center != null) { double latitude = center.getDouble("latitude"); diff --git a/android/src/main/java/com/mapbox/reactnativemapboxgl/ReactNativeMapboxGLModule.java b/android/src/main/java/com/mapbox/reactnativemapboxgl/ReactNativeMapboxGLModule.java index 0d403b6..00bc782 100644 --- a/android/src/main/java/com/mapbox/reactnativemapboxgl/ReactNativeMapboxGLModule.java +++ b/android/src/main/java/com/mapbox/reactnativemapboxgl/ReactNativeMapboxGLModule.java @@ -88,7 +88,7 @@ public class ReactNativeMapboxGLModule extends ReactContextBaseJavaModule { @ReactMethod public void addAnnotations(int mapRef, ReadableArray value) { - aPackage.getManager().setAnnotations(aPackage.getManager().getMapView(), value); + aPackage.getManager().setAnnotations(aPackage.getManager().getMapView(), value, false); } @ReactMethod diff --git a/index.android.js b/index.android.js index 48d0790..755b2ec 100644 --- a/index.android.js +++ b/index.android.js @@ -45,6 +45,8 @@ var ReactMapView = requireNativeComponent('RCTMapbox', { name: 'RCTMapbox', propTypes: { accessToken: React.PropTypes.string.isRequired, + attributionButtonIsHidden: React.PropTypes.bool, + logoIsHidden: React.PropTypes.bool, annotations: React.PropTypes.arrayOf(React.PropTypes.shape({ title: React.PropTypes.string, subtitle: React.PropTypes.string,