From 4a0448ebd684d94d40fdb2700f5fb26c4ac63365 Mon Sep 17 00:00:00 2001 From: Artur Klamborowski Date: Tue, 22 Oct 2019 15:32:53 +0200 Subject: [PATCH 1/4] Update icon when we reuse marker --- .../sharewire/googlemapsclustering/ClusterRenderer.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/library/src/main/java/net/sharewire/googlemapsclustering/ClusterRenderer.java b/library/src/main/java/net/sharewire/googlemapsclustering/ClusterRenderer.java index b7876d3..c8d3bee 100644 --- a/library/src/main/java/net/sharewire/googlemapsclustering/ClusterRenderer.java +++ b/library/src/main/java/net/sharewire/googlemapsclustering/ClusterRenderer.java @@ -76,6 +76,7 @@ void setIconGenerator(@NonNull IconGenerator iconGenerator) { void render(@NonNull List> clusters) { List> clustersToAdd = new ArrayList<>(); List> clustersToRemove = new ArrayList<>(); + List> clustersToUpdate = new ArrayList<>(); for (Cluster cluster : clusters) { if (!mMarkers.containsKey(cluster)) { @@ -86,6 +87,8 @@ void render(@NonNull List> clusters) { for (Cluster cluster : mMarkers.keySet()) { if (!clusters.contains(cluster)) { clustersToRemove.add(cluster); + }else{ + clustersToUpdate.add(cluster); } } @@ -109,6 +112,12 @@ void render(@NonNull List> clusters) { mMarkers.remove(clusterToRemove); } + //Update clusters + for (Cluster clusterToUpdate : clustersToUpdate) { + BitmapDescriptor markerIcon = getMarkerIcon(clusterToUpdate); + mMarkers.get(clusterToUpdate).setIcon(markerIcon); + } + // Add the new clusters. for (Cluster clusterToAdd : clustersToAdd) { Marker markerToAdd; From 79c61dd791ea48d4c603616feb76fc1ee2a39142 Mon Sep 17 00:00:00 2001 From: Artur Klamborowski Date: Tue, 22 Oct 2019 15:33:09 +0200 Subject: [PATCH 2/4] Update library version to 0.1.4 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index cc33bf2..08d555d 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ task clean(type: Delete) { ext { versionCode = 1 - versionName = '0.1.3' + versionName = '0.1.4' minSdkVersion = 16 targetSdkVersion = 27 From 0208252599db83e3b3fe510152a4e71ebe9873eb Mon Sep 17 00:00:00 2001 From: Artur Klamborowski Date: Wed, 23 Oct 2019 07:58:13 +0200 Subject: [PATCH 3/4] Check for equality of items in cluster and replace cluster if items are not equal --- .../googlemapsclustering/ClusterRenderer.java | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/library/src/main/java/net/sharewire/googlemapsclustering/ClusterRenderer.java b/library/src/main/java/net/sharewire/googlemapsclustering/ClusterRenderer.java index c8d3bee..e401938 100644 --- a/library/src/main/java/net/sharewire/googlemapsclustering/ClusterRenderer.java +++ b/library/src/main/java/net/sharewire/googlemapsclustering/ClusterRenderer.java @@ -16,6 +16,7 @@ import com.google.android.gms.maps.model.MarkerOptions; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -76,7 +77,6 @@ void setIconGenerator(@NonNull IconGenerator iconGenerator) { void render(@NonNull List> clusters) { List> clustersToAdd = new ArrayList<>(); List> clustersToRemove = new ArrayList<>(); - List> clustersToUpdate = new ArrayList<>(); for (Cluster cluster : clusters) { if (!mMarkers.containsKey(cluster)) { @@ -84,11 +84,19 @@ void render(@NonNull List> clusters) { } } - for (Cluster cluster : mMarkers.keySet()) { - if (!clusters.contains(cluster)) { - clustersToRemove.add(cluster); - }else{ - clustersToUpdate.add(cluster); + for (Cluster existingCluster : mMarkers.keySet()) { + int indexOfExistingCluster = clusters.indexOf(existingCluster); + boolean newClustersContainsExistingCluster = indexOfExistingCluster >= 0; + + if (!newClustersContainsExistingCluster) { + clustersToRemove.add(existingCluster); + } else { + Cluster clusterWithNewData = clusters.get(indexOfExistingCluster); + boolean itemsAreEqual = existingCluster.getItems().containsAll(clusterWithNewData.getItems()); + if(!itemsAreEqual) { + clustersToRemove.add(existingCluster); + clustersToAdd.add(clusterWithNewData); + } } } @@ -112,12 +120,6 @@ void render(@NonNull List> clusters) { mMarkers.remove(clusterToRemove); } - //Update clusters - for (Cluster clusterToUpdate : clustersToUpdate) { - BitmapDescriptor markerIcon = getMarkerIcon(clusterToUpdate); - mMarkers.get(clusterToUpdate).setIcon(markerIcon); - } - // Add the new clusters. for (Cluster clusterToAdd : clustersToAdd) { Marker markerToAdd; From acfd011f315d45e7e73d89c4fe4fc925708a4128 Mon Sep 17 00:00:00 2001 From: Artur Klamborowski Date: Wed, 23 Oct 2019 07:58:37 +0200 Subject: [PATCH 4/4] Increase version to 0.1.5 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 08d555d..9a67868 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ task clean(type: Delete) { ext { versionCode = 1 - versionName = '0.1.4' + versionName = '0.1.5' minSdkVersion = 16 targetSdkVersion = 27