summaryrefslogtreecommitdiff
path: root/android
diff options
context:
space:
mode:
authorAntonio Zugaldia <antonio@mapbox.com>2015-11-24 17:35:22 -0500
committerAntonio Zugaldia <antonio@mapbox.com>2015-11-24 17:35:22 -0500
commitaa018736b286f39536419716a86369def8a5009f (patch)
tree0d3811cb35cc9274ff2b504fe700c5d55088fdeb /android
parente87834f15d43981bf9aca3a82d1f31059d0fd8a7 (diff)
downloadqtlocation-mapboxgl-aa018736b286f39536419716a86369def8a5009f.tar.gz
still some work needed on onSingleTapConfirmed()
Diffstat (limited to 'android')
-rw-r--r--android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java2
-rw-r--r--android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java82
2 files changed, 54 insertions, 30 deletions
diff --git a/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java b/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java
index 0f9668be8f..e3254e8f72 100644
--- a/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java
+++ b/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java
@@ -196,7 +196,7 @@ final class InfoWindow {
}
private void onClose() {
- mMapView.get().deselectMarker();
+ mMapView.get().deselectMarker(getBoundMarker());
}
InfoWindow setBoundMarker(Marker boundMarker) {
diff --git a/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java b/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java
index 8844184142..a37d09a3a8 100644
--- a/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java
+++ b/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java
@@ -81,6 +81,7 @@ import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
/**
@@ -201,7 +202,7 @@ public final class MapView extends FrameLayout {
// Every annotation that has been added to the map
private final List<Annotation> mAnnotations = new ArrayList<>();
private List<Marker> mMarkersNearLastTap = new ArrayList<>();
- private Marker mSelectedMarker;
+ private List<Marker> mSelectedMarkers = new ArrayList<>();
private InfoWindowAdapter mInfoWindowAdapter;
private SpriteFactory mSpriteFactory;
private ArrayList<Sprite> mSprites = new ArrayList<>();
@@ -808,7 +809,7 @@ public final class MapView extends FrameLayout {
@Override
public void onMapChanged(@MapChange int change) {
if ((change == REGION_WILL_CHANGE) || (change == REGION_WILL_CHANGE_ANIMATED)) {
- deselectMarker();
+ deselectMarkers();
}
if (change == DID_FINISH_LOADING_MAP) {
@@ -2018,12 +2019,12 @@ public final class MapView extends FrameLayout {
return;
}
- if (marker == mSelectedMarker) {
+ if (mSelectedMarkers.contains(marker)) {
return;
}
// Need to deselect any currently selected annotation first
- deselectMarker();
+ deselectMarker(marker);
boolean handledDefaultClick = false;
if (mOnMarkerClickListener != null) {
@@ -2038,20 +2039,41 @@ public final class MapView extends FrameLayout {
marker.showInfoWindow();
}
- mSelectedMarker = marker;
+ mSelectedMarkers.add(marker);
}
/**
- * Deselects any currently selected marker. The selected marker will have it's info window closed.
+ * Deselects any currently selected marker. All markers will have it's info window closed.
*/
@UiThread
- public void deselectMarker() {
- if (mSelectedMarker != null) {
- if (mSelectedMarker.isInfoWindowShown()) {
- mSelectedMarker.hideInfoWindow();
- mSelectedMarker = null;
+ public void deselectMarkers() {
+ if (mSelectedMarkers.isEmpty()) {
+ return;
+ }
+
+ for (Marker marker: mSelectedMarkers) {
+ if (marker.isInfoWindowShown()) {
+ marker.hideInfoWindow();
}
}
+
+ mSelectedMarkers = new ArrayList<>();
+ }
+
+ /**
+ * Deselects a currently selected marker. The selected marker will have it's info window closed.
+ */
+ @UiThread
+ public void deselectMarker(@NonNull Marker marker) {
+ if (!mSelectedMarkers.contains(marker)) {
+ return;
+ }
+
+ if (marker.isInfoWindowShown()) {
+ marker.hideInfoWindow();
+ }
+
+ mSelectedMarkers.remove(marker);
}
//
@@ -2129,8 +2151,8 @@ public final class MapView extends FrameLayout {
*/
@UiThread
@Nullable
- public Marker getSelectedMarker() {
- return mSelectedMarker;
+ public List<Marker> getSelectedMarkers() {
+ return mSelectedMarkers;
}
private void adjustTopOffsetPixels() {
@@ -2144,12 +2166,12 @@ public final class MapView extends FrameLayout {
}
}
- if (mSelectedMarker != null) {
- if (mSelectedMarker.isInfoWindowShown()) {
- Marker temp = mSelectedMarker;
+ for (Marker marker: mSelectedMarkers) {
+ if (marker.isInfoWindowShown()) {
+ Marker temp = marker;
temp.hideInfoWindow();
temp.showInfoWindow();
- mSelectedMarker = temp;
+ marker = temp;
}
}
}
@@ -2426,19 +2448,21 @@ public final class MapView extends FrameLayout {
Collections.sort(nearbyMarkers);
if (nearbyMarkers == mMarkersNearLastTap) {
+ // TODO
// the selection candidates haven't changed; cycle through them
- if (mSelectedMarker != null && (mSelectedMarker.getId() == mMarkersNearLastTap.get(mMarkersNearLastTap.size() - 1).getId())) {
- // the selected marker is the last in the set; cycle back to the first
- // note: this could be the selected marker if only one in set
- newSelectedMarkerId = mMarkersNearLastTap.get(0).getId();
- } else if (mSelectedMarker != null) {
- // otherwise increment the selection through the candidates
- long result = mMarkersNearLastTap.indexOf(mSelectedMarker);
- newSelectedMarkerId = mMarkersNearLastTap.get((int) result + 1).getId();
- } else {
+// if (mSelectedMarker != null
+// && (mSelectedMarker.getId() == mMarkersNearLastTap.get(mMarkersNearLastTap.size() - 1).getId())) {
+// // the selected marker is the last in the set; cycle back to the first
+// // note: this could be the selected marker if only one in set
+// newSelectedMarkerId = mMarkersNearLastTap.get(0).getId();
+// } else if (mSelectedMarker != null) {
+// // otherwise increment the selection through the candidates
+// long result = mMarkersNearLastTap.indexOf(mSelectedMarker);
+// newSelectedMarkerId = mMarkersNearLastTap.get((int) result + 1).getId();
+// } else {
// no current selection; select the first one
newSelectedMarkerId = mMarkersNearLastTap.get(0).getId();
- }
+// }
} else {
// start tracking a new set of nearby markers
mMarkersNearLastTap = nearbyMarkers;
@@ -2459,7 +2483,7 @@ public final class MapView extends FrameLayout {
Annotation annotation = mAnnotations.get(i);
if (annotation instanceof Marker) {
if (annotation.getId() == newSelectedMarkerId) {
- if (mSelectedMarker == null || annotation.getId() != mSelectedMarker.getId()) {
+ if (mSelectedMarkers.isEmpty() || !mSelectedMarkers.contains(annotation)) {
selectMarker((Marker) annotation);
}
break;
@@ -2469,7 +2493,7 @@ public final class MapView extends FrameLayout {
} else {
// deselect any selected marker
- deselectMarker();
+ deselectMarkers();
// notify app of map click
if (mOnMapClickListener != null) {