diff --git a/library/src/main/java/com/google/maps/android/clustering/ClusterManager.java b/library/src/main/java/com/google/maps/android/clustering/ClusterManager.java index 093db34f6..b78de4310 100644 --- a/library/src/main/java/com/google/maps/android/clustering/ClusterManager.java +++ b/library/src/main/java/com/google/maps/android/clustering/ClusterManager.java @@ -93,13 +93,13 @@ public MarkerManager getMarkerManager() { return mMarkerManager; } - public void setRenderer(ClusterRenderer view) { + public void setRenderer(ClusterRenderer renderer) { mRenderer.setOnClusterClickListener(null); mRenderer.setOnClusterItemClickListener(null); mClusterMarkers.clear(); mMarkers.clear(); mRenderer.onRemove(); - mRenderer = view; + mRenderer = renderer; mRenderer.onAdd(); mRenderer.setOnClusterClickListener(mOnClusterClickListener); mRenderer.setOnClusterInfoWindowClickListener(mOnClusterInfoWindowClickListener); diff --git a/library/src/main/java/com/google/maps/android/clustering/view/DefaultClusterRenderer.java b/library/src/main/java/com/google/maps/android/clustering/view/DefaultClusterRenderer.java index bbb53b299..d0d25b2d6 100644 --- a/library/src/main/java/com/google/maps/android/clustering/view/DefaultClusterRenderer.java +++ b/library/src/main/java/com/google/maps/android/clustering/view/DefaultClusterRenderer.java @@ -93,12 +93,12 @@ public class DefaultClusterRenderer implements ClusterRen /** * Icons for each bucket. */ - private SparseArray mIcons = new SparseArray(); + private SparseArray mIcons = new SparseArray<>(); /** * Markers for single ClusterItems. */ - private MarkerCache mMarkerCache = new MarkerCache(); + private MarkerCache mMarkerCache = new MarkerCache<>(); /** * If cluster size is less than this size, display individual markers. @@ -111,10 +111,9 @@ public class DefaultClusterRenderer implements ClusterRen private Set> mClusters; /** - * Lookup between markers and the associated cluster. + * Markers for Clusters. */ - private Map> mMarkerToCluster = new HashMap>(); - private Map, Marker> mClusterToMarker = new HashMap, Marker>(); + private MarkerCache> mClusterMarkerCache = new MarkerCache<>(); /** * The target zoom level for the current set of clusters. @@ -160,7 +159,7 @@ public void onInfoWindowClick(Marker marker) { mClusterManager.getClusterMarkerCollection().setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { - return mClickListener != null && mClickListener.onClusterClick(mMarkerToCluster.get(marker)); + return mClickListener != null && mClickListener.onClusterClick(mClusterMarkerCache.get(marker)); } }); @@ -168,7 +167,7 @@ public boolean onMarkerClick(Marker marker) { @Override public void onInfoWindowClick(Marker marker) { if (mInfoWindowClickListener != null) { - mInfoWindowClickListener.onClusterInfoWindowClick(mMarkerToCluster.get(marker)); + mInfoWindowClickListener.onClusterInfoWindowClick(mClusterMarkerCache.get(marker)); } } }); @@ -216,7 +215,7 @@ protected String getClusterText(int bucket) { if (bucket < BUCKETS[0]) { return String.valueOf(bucket); } - return String.valueOf(bucket) + "+"; + return bucket + "+"; } /** @@ -389,7 +388,7 @@ public void run() { // markers to animate from. List existingClustersOnScreen = null; if (DefaultClusterRenderer.this.mClusters != null && mAnimate) { - existingClustersOnScreen = new ArrayList(); + existingClustersOnScreen = new ArrayList<>(); for (Cluster c : DefaultClusterRenderer.this.mClusters) { if (shouldRenderAsCluster(c) && visibleBounds.contains(c.getPosition())) { Point point = mSphericalMercatorProjection.toPoint(c.getPosition()); @@ -428,7 +427,7 @@ public void run() { // markers to animate from. List newClustersOnScreen = null; if (mAnimate) { - newClustersOnScreen = new ArrayList(); + newClustersOnScreen = new ArrayList<>(); for (Cluster c : clusters) { if (shouldRenderAsCluster(c) && visibleBounds.contains(c.getPosition())) { Point p = mSphericalMercatorProjection.toPoint(c.getPosition()); @@ -528,11 +527,11 @@ private class MarkerModifier extends Handler implements MessageQueue.IdleHandler private final Lock lock = new ReentrantLock(); private final Condition busyCondition = lock.newCondition(); - private Queue mCreateMarkerTasks = new LinkedList(); - private Queue mOnScreenCreateMarkerTasks = new LinkedList(); - private Queue mRemoveMarkerTasks = new LinkedList(); - private Queue mOnScreenRemoveMarkerTasks = new LinkedList(); - private Queue mAnimationTasks = new LinkedList(); + private Queue mCreateMarkerTasks = new LinkedList<>(); + private Queue mOnScreenCreateMarkerTasks = new LinkedList<>(); + private Queue mRemoveMarkerTasks = new LinkedList<>(); + private Queue mOnScreenRemoveMarkerTasks = new LinkedList<>(); + private Queue mAnimationTasks = new LinkedList<>(); /** * Whether the idle listener has been added to the UI thread's MessageQueue. @@ -659,10 +658,8 @@ private void performNextTask() { } private void removeMarker(Marker m) { - Cluster cluster = mMarkerToCluster.get(m); - mClusterToMarker.remove(cluster); mMarkerCache.remove(m); - mMarkerToCluster.remove(m); + mClusterMarkerCache.remove(m); mClusterManager.getMarkerManager().remove(m); } @@ -715,8 +712,8 @@ public boolean queueIdle() { * A cache of markers representing individual ClusterItems. */ private static class MarkerCache { - private Map mCache = new HashMap(); - private Map mCacheReverse = new HashMap(); + private Map mCache = new HashMap<>(); + private Map mCacheReverse = new HashMap<>(); public Marker get(T item) { return mCache.get(item); @@ -799,7 +796,7 @@ public T getClusterItem(Marker marker) { * @return a marker from a cluster or null if it does not exists */ public Marker getMarker(Cluster cluster) { - return mClusterToMarker.get(cluster); + return mClusterMarkerCache.get(cluster); } /** @@ -809,7 +806,7 @@ public Marker getMarker(Cluster cluster) { * @return a Cluster from a marker or null if it does not exists */ public Cluster getCluster(Marker marker) { - return mMarkerToCluster.get(marker); + return mClusterMarkerCache.get(marker); } /** @@ -869,15 +866,14 @@ private void perform(MarkerModifier markerModifier) { return; } - Marker marker = mClusterToMarker.get(cluster); + Marker marker = mClusterMarkerCache.get(cluster); MarkerWithPosition markerWithPosition; if (marker == null) { MarkerOptions markerOptions = new MarkerOptions(). position(animateFrom == null ? cluster.getPosition() : animateFrom); onBeforeClusterRendered(cluster, markerOptions); marker = mClusterManager.getClusterMarkerCollection().addMarker(markerOptions); - mMarkerToCluster.put(marker, cluster); - mClusterToMarker.put(cluster, marker); + mClusterMarkerCache.put(cluster, marker); markerWithPosition = new MarkerWithPosition(marker); if (animateFrom != null) { markerModifier.animate(markerWithPosition, animateFrom, cluster.getPosition()); @@ -950,10 +946,8 @@ public void perform() { @Override public void onAnimationEnd(Animator animation) { if (mRemoveOnComplete) { - Cluster cluster = mMarkerToCluster.get(marker); - mClusterToMarker.remove(cluster); mMarkerCache.remove(marker); - mMarkerToCluster.remove(marker); + mClusterMarkerCache.remove(marker); mMarkerManager.remove(marker); } markerWithPosition.position = to;