From bff7d1bb0c620dcb60cedfd1f969150ed067bfad Mon Sep 17 00:00:00 2001 From: bsudekum Date: Sun, 13 Dec 2015 11:29:05 -0800 Subject: [PATCH] User location event --- .../ReactNativeMapboxGLManager.java | 31 +++++++++++++------ index.android.js | 7 ++++- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/android/src/main/java/com/mapbox/reactnativemapboxgl/ReactNativeMapboxGLManager.java b/android/src/main/java/com/mapbox/reactnativemapboxgl/ReactNativeMapboxGLManager.java index 6ac787a..a690dee 100644 --- a/android/src/main/java/com/mapbox/reactnativemapboxgl/ReactNativeMapboxGLManager.java +++ b/android/src/main/java/com/mapbox/reactnativemapboxgl/ReactNativeMapboxGLManager.java @@ -3,6 +3,8 @@ package com.mapbox.reactnativemapboxgl; import android.graphics.Color; import android.util.Log; +import android.location.Location; + import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.ReactContext; @@ -177,15 +179,26 @@ public class ReactNativeMapboxGLManager extends SimpleViewManager { }); } -// @ReactProp(name = PROP_ONUSER_LOCATION_CHANGE, defaultBoolean = true) -// public void onUserLocationChange(final MapView view, Boolean value) { -// view.setOnMyLocationChangeListener(new MapView.OnMyLocationChangeListener() { -// @Override -// public void onUserLocationChange(int location) { -// -// } -// }); -// } + @ReactProp(name = PROP_ONUSER_LOCATION_CHANGE, defaultBoolean = true) + public void onMyLocationChange(final MapView view, Boolean value) { + view.setOnMyLocationChangeListener(new MapView.OnMyLocationChangeListener() { + @Override + public void onMyLocationChange(@Nullable Location location) { + WritableMap event = Arguments.createMap(); + WritableMap locationMap = Arguments.createMap(); + locationMap.putDouble("latitude", location.getLatitude()); + locationMap.putDouble("longitude", location.getLongitude()); + locationMap.putDouble("accuracy", location.getAccuracy()); + locationMap.putDouble("altitude", location.getAltitude()); + locationMap.putDouble("bearing", location.getBearing()); + locationMap.putDouble("speed", location.getSpeed()); + locationMap.putString("provider", location.getProvider()); + event.putMap("src", locationMap); + ReactContext reactContext = (ReactContext) view.getContext(); + reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(view.getId(), "topSelect", event); + } + }); + } @ReactProp(name = PROP_CENTER_COORDINATE) public void setCenterCoordinate(MapView view, @Nullable ReadableMap center) { diff --git a/index.android.js b/index.android.js index 6f0aed1..22d080e 100644 --- a/index.android.js +++ b/index.android.js @@ -32,6 +32,7 @@ var ReactMapView = requireNativeComponent('RCTMapbox', { zoomLevel: React.PropTypes.number, tilt: React.PropTypes.number, onRegionChange: React.PropTypes.func, + onUserLocationChange: React.PropTypes.func, removeAllAnnotations: React.PropTypes.bool, // Fix for https://github.com/mapbox/react-native-mapbox-gl/issues/118 scaleY: React.PropTypes.number, @@ -75,10 +76,14 @@ var ReactMapViewWrapper = React.createClass({ handleOnChange(event) { if (this.props.onRegionChange) this.props.onRegionChange(event.nativeEvent.src); }, + handleUserLocation(event) { + if (this.props.onUserLocationChange) this.props.onUserLocationChange(event.nativeEvent.src); + }, render() { return + onChange={this.handleOnChange} + onSelect={this.handleUserLocation} /> } });