From 731a1756bce069e27c4942bcca39eae24c7f3ee4 Mon Sep 17 00:00:00 2001 From: akkas Date: Thu, 3 Dec 2015 14:38:08 +0200 Subject: [PATCH] Fixed Markers issue closes #434 --- .../android/fragments/MapViewFragment.java | 27 ++++++++++++++----- .../lokki/android/models/Person.java | 7 ++++- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/App/src/main/java/cc/softwarefactory/lokki/android/fragments/MapViewFragment.java b/App/src/main/java/cc/softwarefactory/lokki/android/fragments/MapViewFragment.java index a7c0f799..9417aa5b 100644 --- a/App/src/main/java/cc/softwarefactory/lokki/android/fragments/MapViewFragment.java +++ b/App/src/main/java/cc/softwarefactory/lokki/android/fragments/MapViewFragment.java @@ -48,6 +48,7 @@ import com.google.maps.android.clustering.ClusterManager; import java.util.ArrayList; +import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -84,7 +85,7 @@ public class MapViewFragment extends Fragment { private Context context; private double radiusMultiplier = 0.9; // Dont want to fill the screen from edge to edge... private GoogleMap map; - private List markers; + private HashMap markers; private LatLng startLocation = null; private SupportMapFragment fragment; private TextView placeAddingTip; @@ -92,7 +93,7 @@ public class MapViewFragment extends Fragment { private ContactService contactService; public MapViewFragment() { - markers = new ArrayList<>(); + markers = new HashMap(); placesOverlay = new ArrayList<>(); } @@ -558,14 +559,26 @@ protected void onPostExecute(Bitmap bitmapResult) { if (bitmapResult == null || cancelAsyncTasks || !isAdded() || map == null) { return; } - Person marker = person; - - if (!markers.contains(marker)) { - markers.add(marker); + Person marker = null; + try{ + marker = (Person) person.clone(); + } + catch (CloneNotSupportedException e){ + Log.e(TAG, e.getMessage()); + return; + } + Person oldMarker = markers.get(marker.getEmail()); + if (oldMarker ==null) { + Log.v(TAG, "Adding newmarker:" + marker.toString() + " Position:" + marker.getPosition().toString()); + markers.put(marker.getEmail(), marker); clusterManager.addItem(marker); } else { - clusterManager.removeItem(marker); + Log.v(TAG, "Removing old marker:" + marker.toString() + " Position:" + oldMarker.getPosition().toString()); + clusterManager.removeItem(oldMarker); + markers.remove(oldMarker); + Log.v(TAG, "Updating marker:" + marker.toString() + " Position:" + marker.getPosition().toString()); clusterManager.addItem(marker); + markers.put(marker.getEmail(), marker); } if (marker.getEmail().equals(MainApplication.emailBeingTracked)) { diff --git a/App/src/main/java/cc/softwarefactory/lokki/android/models/Person.java b/App/src/main/java/cc/softwarefactory/lokki/android/models/Person.java index 6b2d6cfe..851b19d2 100644 --- a/App/src/main/java/cc/softwarefactory/lokki/android/models/Person.java +++ b/App/src/main/java/cc/softwarefactory/lokki/android/models/Person.java @@ -9,7 +9,7 @@ import java.util.Date; -public abstract class Person implements ClusterItem { +public abstract class Person implements ClusterItem, Cloneable { private String userId; private String email; private UserLocation location; @@ -75,4 +75,9 @@ public Bitmap getMarkerPhoto() { public void setMarkerPhoto(Bitmap markerPhoto) { this.markerPhoto = markerPhoto; } + + @Override + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } }