diff options
author | Tobrun <tobrun.van.nuland@gmail.com> | 2018-04-24 11:39:40 +0200 |
---|---|---|
committer | Tobrun <tobrun@mapbox.com> | 2018-05-14 11:38:21 +0200 |
commit | 5380d80c88087f20238592aaa19e8b48fc383a5e (patch) | |
tree | b46b5b7d4369928c664a3105eb0d775480ee1ea5 /platform | |
parent | 7854dfa3a02a7c5425b1c5066012fb81028df967 (diff) | |
download | qtlocation-mapboxgl-5380d80c88087f20238592aaa19e8b48fc383a5e.tar.gz |
[android] - allow early callback registration
Diffstat (limited to 'platform')
-rw-r--r-- | platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java | 23 |
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); } } |