Skip to content

Commit bbb66c4

Browse files
authored
feat(clustering): make ClusterManager and its public API open with JvmSuppressWildcards (#1759)
1 parent b32ce9e commit bbb66c4

1 file changed

Lines changed: 29 additions & 28 deletions

File tree

clustering/src/main/java/com/google/maps/android/clustering/ClusterManager.kt

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,16 @@ import kotlinx.coroutines.launch
3737
import kotlinx.coroutines.withContext
3838
import java.util.concurrent.locks.ReadWriteLock
3939
import 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

Comments
 (0)