summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java
diff options
context:
space:
mode:
authorTobrun <tobrun.van.nuland@gmail.com>2016-11-23 10:53:39 +0100
committerGitHub <noreply@github.com>2016-11-23 10:53:39 +0100
commitedb487b74d800d46f04b27dd7610a028720de79a (patch)
tree9c505790a26cc01ba3a8bc4c3565b824bcf8979e /platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java
parent4577c56745d90cfa00837d00e5e5605260a54879 (diff)
downloadqtlocation-mapboxgl-edb487b74d800d46f04b27dd7610a028720de79a.tar.gz
[android] - move camera logic to dedicated transform class (#6919)
* [android] - move camera logic to dedicated transform class post camera updates to the message queue, this makes calling an new camera update in the on finish of another update possible. Simplify transform.java implementation. * fail the step if instrumentation tests fail, fixup typo
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java26
1 files changed, 23 insertions, 3 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java
index 4b26be558f..9e08d93bfc 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java
@@ -30,7 +30,7 @@ import java.util.List;
* Exposes convenience methods to add/remove/update all subtypes of annotations found in com.mapbox.mapboxsdk.annotations.
* </p>
*/
-class AnnotationManager {
+class AnnotationManager implements MapView.OnMapChangedListener {
private NativeMapView nativeMapView;
private IconManager iconManager;
@@ -41,6 +41,7 @@ class AnnotationManager {
private List<Marker> selectedMarkers;
private MapboxMap.OnMarkerClickListener onMarkerClickListener;
+ private boolean isWaitingForRenderInvoke;
AnnotationManager(NativeMapView view, IconManager iconManager, InfoWindowManager manager) {
this.nativeMapView = view;
@@ -48,6 +49,19 @@ class AnnotationManager {
this.infoWindowManager = manager;
this.selectedMarkers = new ArrayList<>();
this.annotations = new LongSparseArray<>();
+
+ if (view != null) {
+ // null checking needed for unit tests
+ view.addOnMapChangedListener(this);
+ }
+ }
+
+ @Override
+ public void onMapChanged(@MapView.MapChange int change) {
+ if (isWaitingForRenderInvoke && change == MapView.DID_FINISH_RENDERING_FRAME_FULLY_RENDERED) {
+ isWaitingForRenderInvoke = false;
+ markerViewManager.invalidateViewMarkersInVisibleRegion();
+ }
}
//
@@ -194,18 +208,24 @@ class AnnotationManager {
}
MarkerView addMarker(@NonNull BaseMarkerViewOptions markerOptions, @NonNull MapboxMap mapboxMap) {
+ isWaitingForRenderInvoke = true;
MarkerView marker = prepareViewMarker(markerOptions);
marker.setMapboxMap(mapboxMap);
long id = nativeMapView.addMarker(marker);
marker.setId(id);
annotations.put(id, marker);
- markerViewManager.invalidateViewMarkersInVisibleRegion();
return marker;
}
List<MarkerView> addMarkerViews(@NonNull List<? extends BaseMarkerViewOptions> markerViewOptions, @NonNull MapboxMap mapboxMap) {
List<MarkerView> markers = new ArrayList<>();
for (BaseMarkerViewOptions markerViewOption : markerViewOptions) {
+ // if last marker
+ if (markerViewOptions.indexOf(markerViewOption) == markerViewOptions.size() - 1) {
+ // get notified when render occurs to invalidate and draw MarkerViews
+ isWaitingForRenderInvoke = true;
+ }
+ // add marker to map
MarkerView marker = prepareViewMarker(markerViewOption);
marker.setMapboxMap(mapboxMap);
long id = nativeMapView.addMarker(marker);
@@ -283,7 +303,7 @@ class AnnotationManager {
}
if (infoWindowManager.isInfoWindowValidForMarker(marker) || infoWindowManager.getInfoWindowAdapter() != null) {
- infoWindowManager.getInfoWindows().add(marker.showInfoWindow(mapboxMap, mapboxMap.getMapView()));
+ infoWindowManager.add(marker.showInfoWindow(mapboxMap, mapboxMap.getMapView()));
}
}