@@ -37,15 +37,16 @@ import kotlinx.coroutines.launch
3737import kotlinx.coroutines.withContext
3838import java.util.concurrent.locks.ReadWriteLock
3939import java.util.concurrent.locks.ReentrantReadWriteLock
40+ import kotlin.jvm.JvmSuppressWildcards
4041
4142/* *
4243 * Groups many items on a map based on zoom level.
4344 *
44- *
45- * ClusterManager should be added to the map as an: * [com.google.android.gms.maps.GoogleMap.OnCameraIdleListener]
46- * * [com.google.android.gms.maps.GoogleMap.OnMarkerClickListener]
45+ * ClusterManager should be added to the map as an:
46+ * - [com.google.android.gms.maps.GoogleMap.OnCameraIdleListener]
47+ * - [com.google.android.gms.maps.GoogleMap.OnMarkerClickListener]
4748 */
48- class ClusterManager <T : ClusterItem >
49+ open class ClusterManager <T : ClusterItem >
4950 @JvmOverloads
5051 constructor (
5152 context: Context ,
@@ -84,7 +85,7 @@ class ClusterManager<T : ClusterItem>
8485 mRenderer.onAdd()
8586 }
8687
87- var renderer: ClusterRenderer <T >
88+ open var renderer: ClusterRenderer <T >
8889 get() = mRenderer
8990 set(value) {
9091 mRenderer.setOnClusterClickListener(null )
@@ -103,7 +104,7 @@ class ClusterManager<T : ClusterItem>
103104 cluster()
104105 }
105106
106- var algorithm: Algorithm <T >
107+ open var algorithm: Algorithm <T >
107108 get() = mAlgorithm
108109 set(value) {
109110 if (value is ScreenBasedAlgorithm <* >) {
@@ -113,7 +114,7 @@ class ClusterManager<T : ClusterItem>
113114 }
114115 }
115116
116- fun setAlgorithm (algorithm : ScreenBasedAlgorithm <T >) {
117+ open fun setAlgorithm (algorithm : ScreenBasedAlgorithm <T >) {
117118 algorithm.lock()
118119 try {
119120 val oldAlgorithm = this .algorithm
@@ -136,15 +137,15 @@ class ClusterManager<T : ClusterItem>
136137 cluster()
137138 }
138139
139- fun setAnimation (animate : Boolean ) {
140+ open fun setAnimation (animate : Boolean ) {
140141 mRenderer.setAnimation(animate)
141142 }
142143
143144 /* *
144145 * Removes all items from the cluster manager. After calling this method you must invoke
145146 * [.cluster] for the map to be cleared.
146147 */
147- fun clearItems () {
148+ open fun clearItems () {
148149 val algorithm = algorithm
149150 algorithm.lock()
150151 try {
@@ -160,7 +161,7 @@ class ClusterManager<T : ClusterItem>
160161 * @param items items to add to clusters
161162 * @return true if the cluster manager contents changed as a result of the call
162163 */
163- fun addItems (items : Collection <T >? ): Boolean {
164+ open fun addItems (items : Collection <@JvmSuppressWildcards T >? ): Boolean {
164165 val algorithm = algorithm
165166 algorithm.lock()
166167 try {
@@ -176,7 +177,7 @@ class ClusterManager<T : ClusterItem>
176177 * @param myItem item to add to clusters
177178 * @return true if the cluster manager contents changed as a result of the call
178179 */
179- fun addItem (myItem : T ): Boolean {
180+ open fun addItem (myItem : T ): Boolean {
180181 val algorithm = algorithm
181182 algorithm.lock()
182183 try {
@@ -186,10 +187,10 @@ class ClusterManager<T : ClusterItem>
186187 }
187188 }
188189
189- fun diff (
190- add : Collection <T >? ,
191- remove : Collection <T >? ,
192- modify : Collection <T >? ,
190+ open fun diff (
191+ add : Collection <@JvmSuppressWildcards T >? ,
192+ remove : Collection <@JvmSuppressWildcards T >? ,
193+ modify : Collection <@JvmSuppressWildcards T >? ,
193194 ) {
194195 val algorithm = algorithm
195196 algorithm.lock()
@@ -223,7 +224,7 @@ class ClusterManager<T : ClusterItem>
223224 * @param items items to remove from clusters
224225 * @return true if the cluster manager contents changed as a result of the call
225226 */
226- fun removeItems (items : Collection <T >? ): Boolean {
227+ open fun removeItems (items : Collection <@JvmSuppressWildcards T >? ): Boolean {
227228 val algorithm = algorithm
228229 algorithm.lock()
229230 try {
@@ -239,7 +240,7 @@ class ClusterManager<T : ClusterItem>
239240 * @param item item to remove from clusters
240241 * @return true if the item was removed from the cluster manager as a result of this call
241242 */
242- fun removeItem (item : T ): Boolean {
243+ open fun removeItem (item : T ): Boolean {
243244 val algorithm = algorithm
244245 algorithm.lock()
245246 try {
@@ -256,7 +257,7 @@ class ClusterManager<T : ClusterItem>
256257 * @return true if the item was updated in the cluster manager, false if the item is not
257258 * contained within the cluster manager and the cluster manager contents are unchanged
258259 */
259- fun updateItem (item : T ): Boolean {
260+ open fun updateItem (item : T ): Boolean {
260261 val algorithm = algorithm
261262 algorithm.lock()
262263 try {
@@ -270,7 +271,7 @@ class ClusterManager<T : ClusterItem>
270271 * Force a re-cluster on the map. You should call this after adding, removing, updating,
271272 * or clearing item(s).
272273 */
273- fun cluster () {
274+ open fun cluster () {
274275 mClusterTaskLock.writeLock().lock()
275276 try {
276277 // Attempt to cancel the in-flight request.
@@ -298,7 +299,7 @@ class ClusterManager<T : ClusterItem>
298299 /* *
299300 * Might re-cluster.
300301 */
301- override fun onCameraIdle () {
302+ open override fun onCameraIdle () {
302303 if (mRenderer is OnCameraIdleListener ) {
303304 (mRenderer as OnCameraIdleListener ).onCameraIdle()
304305 }
@@ -316,17 +317,17 @@ class ClusterManager<T : ClusterItem>
316317 }
317318 }
318319
319- override fun onMarkerClick (marker : Marker ): Boolean = markerManager.onMarkerClick(marker)
320+ open override fun onMarkerClick (marker : Marker ): Boolean = markerManager.onMarkerClick(marker)
320321
321- override fun onInfoWindowClick (marker : Marker ) {
322+ open override fun onInfoWindowClick (marker : Marker ) {
322323 markerManager.onInfoWindowClick(marker)
323324 }
324325
325326 /* *
326327 * Sets a callback that's invoked when a Cluster is tapped. Note: For this listener to function,
327328 * the ClusterManager must be added as a click listener to the map.
328329 */
329- fun setOnClusterClickListener (listener : OnClusterClickListener <T >? ) {
330+ open fun setOnClusterClickListener (listener : OnClusterClickListener <T >? ) {
330331 mOnClusterClickListener = listener
331332 mRenderer.setOnClusterClickListener(listener)
332333 }
@@ -335,7 +336,7 @@ class ClusterManager<T : ClusterItem>
335336 * Sets a callback that's invoked when a Cluster info window is tapped. Note: For this listener to function,
336337 * the ClusterManager must be added as a info window click listener to the map.
337338 */
338- fun setOnClusterInfoWindowClickListener (listener : OnClusterInfoWindowClickListener <T >? ) {
339+ open fun setOnClusterInfoWindowClickListener (listener : OnClusterInfoWindowClickListener <T >? ) {
339340 mOnClusterInfoWindowClickListener = listener
340341 mRenderer.setOnClusterInfoWindowClickListener(listener)
341342 }
@@ -344,7 +345,7 @@ class ClusterManager<T : ClusterItem>
344345 * Sets a callback that's invoked when a Cluster info window is long-pressed. Note: For this listener to function,
345346 * the ClusterManager must be added as a info window click listener to the map.
346347 */
347- fun setOnClusterInfoWindowLongClickListener (listener : OnClusterInfoWindowLongClickListener <T >? ) {
348+ open fun setOnClusterInfoWindowLongClickListener (listener : OnClusterInfoWindowLongClickListener <T >? ) {
348349 mOnClusterInfoWindowLongClickListener = listener
349350 mRenderer.setOnClusterInfoWindowLongClickListener(listener)
350351 }
@@ -353,7 +354,7 @@ class ClusterManager<T : ClusterItem>
353354 * Sets a callback that's invoked when an individual ClusterItem is tapped. Note: For this
354355 * listener to function, the ClusterManager must be added as a click listener to the map.
355356 */
356- fun setOnClusterItemClickListener (listener : OnClusterItemClickListener <T >? ) {
357+ open fun setOnClusterItemClickListener (listener : OnClusterItemClickListener <T >? ) {
357358 mOnClusterItemClickListener = listener
358359 mRenderer.setOnClusterItemClickListener(listener)
359360 }
@@ -362,7 +363,7 @@ class ClusterManager<T : ClusterItem>
362363 * Sets a callback that's invoked when an individual ClusterItem's Info Window is tapped. Note: For this
363364 * listener to function, the ClusterManager must be added as a info window click listener to the map.
364365 */
365- fun setOnClusterItemInfoWindowClickListener (listener : OnClusterItemInfoWindowClickListener <T >? ) {
366+ open fun setOnClusterItemInfoWindowClickListener (listener : OnClusterItemInfoWindowClickListener <T >? ) {
366367 mOnClusterItemInfoWindowClickListener = listener
367368 mRenderer.setOnClusterItemInfoWindowClickListener(listener)
368369 }
@@ -371,7 +372,7 @@ class ClusterManager<T : ClusterItem>
371372 * Sets a callback that's invoked when an individual ClusterItem's Info Window is long-pressed. Note: For this
372373 * listener to function, the ClusterManager must be added as a info window click listener to the map.
373374 */
374- fun setOnClusterItemInfoWindowLongClickListener (listener : OnClusterItemInfoWindowLongClickListener <T >? ) {
375+ open fun setOnClusterItemInfoWindowLongClickListener (listener : OnClusterItemInfoWindowLongClickListener <T >? ) {
375376 mOnClusterItemInfoWindowLongClickListener = listener
376377 mRenderer.setOnClusterItemInfoWindowLongClickListener(listener)
377378 }
0 commit comments