summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobrun <tobrun.van.nuland@gmail.com>2018-04-24 11:39:40 +0200
committerTobrun <tobrun@mapbox.com>2018-04-24 17:34:01 +0200
commit62b80c32846ea35d9c4f9915dc9c123ffe4fddc3 (patch)
treefca88508e246fa4a0005ff9e4c050d2c233b7399
parentb037a1db8ce3a76df083291469688533d5904745 (diff)
downloadqtlocation-mapboxgl-62b80c32846ea35d9c4f9915dc9c123ffe4fddc3.tar.gz
[android] - allow early callback registration
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java23
1 files changed, 18 insertions, 5 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java
index 4ccbc88375..9227aabdf3 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java
@@ -49,6 +49,7 @@ import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
@@ -73,9 +74,10 @@ import static com.mapbox.mapboxsdk.maps.widgets.CompassView.TIME_WAIT_IDLE;
public class MapView extends FrameLayout implements NativeMapView.ViewCallback {
private final MapCallback mapCallback = new MapCallback();
- private MapboxMap mapboxMap;
+ private final CopyOnWriteArrayList<OnMapChangedListener> onMapChangedListeners = new CopyOnWriteArrayList<>();
private NativeMapView nativeMapView;
+ private MapboxMap mapboxMap;
private MapboxMapOptions mapboxMapOptions;
private MapRenderer mapRenderer;
private boolean destroyed;
@@ -137,7 +139,7 @@ public class MapView extends FrameLayout implements NativeMapView.ViewCallback {
private void initialiseMap() {
Context context = getContext();
- addOnMapChangedListener(mapCallback);
+ nativeMapView.addOnMapChangedListener(mapCallback);
// callback for focal point invalidation
final FocalPointInvalidator focalPointInvalidator = new FocalPointInvalidator();
@@ -305,6 +307,17 @@ public class MapView extends FrameLayout implements NativeMapView.ViewCallback {
}
nativeMapView = new NativeMapView(getContext(), this, mapRenderer);
+ nativeMapView.addOnMapChangedListener(new OnMapChangedListener() {
+ @Override
+ public void onMapChanged(int change) {
+ // dispatch events to external listeners
+ if (!onMapChangedListeners.isEmpty()) {
+ for (OnMapChangedListener onMapChangedListener : onMapChangedListeners) {
+ onMapChangedListener.onMapChanged(change);
+ }
+ }
+ }
+ });
nativeMapView.resizeView(getMeasuredWidth(), getMeasuredHeight());
}
@@ -586,7 +599,7 @@ public class MapView extends FrameLayout implements NativeMapView.ViewCallback {
*/
public void addOnMapChangedListener(@Nullable OnMapChangedListener listener) {
if (listener != null) {
- nativeMapView.addOnMapChangedListener(listener);
+ onMapChangedListeners.add(listener);
}
}
@@ -597,8 +610,8 @@ public class MapView extends FrameLayout implements NativeMapView.ViewCallback {
* @see MapView#addOnMapChangedListener(OnMapChangedListener)
*/
public void removeOnMapChangedListener(@Nullable OnMapChangedListener listener) {
- if (listener != null) {
- nativeMapView.removeOnMapChangedListener(listener);
+ if (listener != null && onMapChangedListeners.contains(listener)) {
+ onMapChangedListeners.remove(listener);
}
}