package com.google.maps.android.clustering; import android.content.Context; import android.os.AsyncTask; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.model.CameraPosition; import com.google.android.gms.maps.model.Marker; import com.google.maps.android.clustering.ClusterItem; import com.google.maps.android.clustering.algo.Algorithm; import com.google.maps.android.clustering.algo.NonHierarchicalDistanceBasedAlgorithm; import com.google.maps.android.clustering.algo.PreCachingAlgorithmDecorator; import com.google.maps.android.clustering.algo.ScreenBasedAlgorithm; import com.google.maps.android.clustering.algo.ScreenBasedAlgorithmAdapter; import com.google.maps.android.clustering.view.ClusterRenderer; import com.google.maps.android.clustering.view.DefaultClusterRenderer; import com.google.maps.android.collections.MarkerManager; import java.util.Collection; import java.util.Set; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; /* JADX INFO: loaded from: classes2.dex */ public class ClusterManager implements GoogleMap.OnCameraIdleListener, GoogleMap.OnMarkerClickListener, GoogleMap.OnInfoWindowClickListener { private ScreenBasedAlgorithm mAlgorithm; private final MarkerManager.Collection mClusterMarkers; private ClusterManager.ClusterTask mClusterTask; private final ReadWriteLock mClusterTaskLock; private GoogleMap mMap; private final MarkerManager mMarkerManager; private final MarkerManager.Collection mMarkers; private OnClusterClickListener mOnClusterClickListener; private OnClusterInfoWindowClickListener mOnClusterInfoWindowClickListener; private OnClusterInfoWindowLongClickListener mOnClusterInfoWindowLongClickListener; private OnClusterItemClickListener mOnClusterItemClickListener; private OnClusterItemInfoWindowClickListener mOnClusterItemInfoWindowClickListener; private OnClusterItemInfoWindowLongClickListener mOnClusterItemInfoWindowLongClickListener; private CameraPosition mPreviousCameraPosition; private ClusterRenderer mRenderer; public interface OnClusterClickListener { boolean onClusterClick(Cluster cluster); } public interface OnClusterInfoWindowClickListener { void onClusterInfoWindowClick(Cluster cluster); } public interface OnClusterInfoWindowLongClickListener { void onClusterInfoWindowLongClick(Cluster cluster); } public interface OnClusterItemClickListener { boolean onClusterItemClick(T t); } public interface OnClusterItemInfoWindowClickListener { void onClusterItemInfoWindowClick(T t); } public interface OnClusterItemInfoWindowLongClickListener { void onClusterItemInfoWindowLongClick(T t); } public ClusterManager(Context context, GoogleMap googleMap) { this(context, googleMap, new MarkerManager(googleMap)); } public ClusterManager(Context context, GoogleMap googleMap, MarkerManager markerManager) { this.mClusterTaskLock = new ReentrantReadWriteLock(); this.mMap = googleMap; this.mMarkerManager = markerManager; this.mClusterMarkers = markerManager.newCollection(); this.mMarkers = markerManager.newCollection(); this.mRenderer = new DefaultClusterRenderer(context, googleMap, this); this.mAlgorithm = new ScreenBasedAlgorithmAdapter(new PreCachingAlgorithmDecorator(new NonHierarchicalDistanceBasedAlgorithm())); this.mClusterTask = new ClusterTask(); this.mRenderer.onAdd(); } public MarkerManager.Collection getMarkerCollection() { return this.mMarkers; } public MarkerManager.Collection getClusterMarkerCollection() { return this.mClusterMarkers; } public MarkerManager getMarkerManager() { return this.mMarkerManager; } public void setRenderer(ClusterRenderer clusterRenderer) { this.mRenderer.setOnClusterClickListener(null); this.mRenderer.setOnClusterItemClickListener(null); this.mClusterMarkers.clear(); this.mMarkers.clear(); this.mRenderer.onRemove(); this.mRenderer = clusterRenderer; clusterRenderer.onAdd(); this.mRenderer.setOnClusterClickListener(this.mOnClusterClickListener); this.mRenderer.setOnClusterInfoWindowClickListener(this.mOnClusterInfoWindowClickListener); this.mRenderer.setOnClusterInfoWindowLongClickListener(this.mOnClusterInfoWindowLongClickListener); this.mRenderer.setOnClusterItemClickListener(this.mOnClusterItemClickListener); this.mRenderer.setOnClusterItemInfoWindowClickListener(this.mOnClusterItemInfoWindowClickListener); this.mRenderer.setOnClusterItemInfoWindowLongClickListener(this.mOnClusterItemInfoWindowLongClickListener); cluster(); } public void setAlgorithm(Algorithm algorithm) { if (algorithm instanceof ScreenBasedAlgorithm) { setAlgorithm((ScreenBasedAlgorithm) algorithm); } else { setAlgorithm((ScreenBasedAlgorithm) new ScreenBasedAlgorithmAdapter(algorithm)); } } public void setAlgorithm(ScreenBasedAlgorithm screenBasedAlgorithm) { screenBasedAlgorithm.lock(); try { Algorithm algorithm = getAlgorithm(); this.mAlgorithm = screenBasedAlgorithm; if (algorithm != null) { algorithm.lock(); try { screenBasedAlgorithm.addItems(algorithm.getItems()); algorithm.unlock(); } catch (Throwable th) { algorithm.unlock(); throw th; } } screenBasedAlgorithm.unlock(); if (this.mAlgorithm.shouldReclusterOnMapMovement()) { this.mAlgorithm.onCameraChange(this.mMap.getCameraPosition()); } cluster(); } catch (Throwable th2) { screenBasedAlgorithm.unlock(); throw th2; } } public void setAnimation(boolean z) { this.mRenderer.setAnimation(z); } public ClusterRenderer getRenderer() { return this.mRenderer; } public Algorithm getAlgorithm() { return this.mAlgorithm; } public void clearItems() { Algorithm algorithm = getAlgorithm(); algorithm.lock(); try { algorithm.clearItems(); } finally { algorithm.unlock(); } } public boolean addItems(Collection collection) { Algorithm algorithm = getAlgorithm(); algorithm.lock(); try { return algorithm.addItems(collection); } finally { algorithm.unlock(); } } public boolean addItem(T t) { Algorithm algorithm = getAlgorithm(); algorithm.lock(); try { return algorithm.addItem(t); } finally { algorithm.unlock(); } } public boolean removeItems(Collection collection) { Algorithm algorithm = getAlgorithm(); algorithm.lock(); try { return algorithm.removeItems(collection); } finally { algorithm.unlock(); } } public boolean removeItem(T t) { Algorithm algorithm = getAlgorithm(); algorithm.lock(); try { return algorithm.removeItem(t); } finally { algorithm.unlock(); } } public boolean updateItem(T t) { Algorithm algorithm = getAlgorithm(); algorithm.lock(); try { return algorithm.updateItem(t); } finally { algorithm.unlock(); } } public void cluster() { this.mClusterTaskLock.writeLock().lock(); try { this.mClusterTask.cancel(true); ClusterManager.ClusterTask clusterTask = new ClusterTask(); this.mClusterTask = clusterTask; clusterTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, Float.valueOf(this.mMap.getCameraPosition().zoom)); } finally { this.mClusterTaskLock.writeLock().unlock(); } } @Override // com.google.android.gms.maps.GoogleMap.OnCameraIdleListener public void onCameraIdle() { ClusterRenderer clusterRenderer = this.mRenderer; if (clusterRenderer instanceof GoogleMap.OnCameraIdleListener) { ((GoogleMap.OnCameraIdleListener) clusterRenderer).onCameraIdle(); } this.mAlgorithm.onCameraChange(this.mMap.getCameraPosition()); if (this.mAlgorithm.shouldReclusterOnMapMovement()) { cluster(); return; } CameraPosition cameraPosition = this.mPreviousCameraPosition; if (cameraPosition == null || cameraPosition.zoom != this.mMap.getCameraPosition().zoom) { this.mPreviousCameraPosition = this.mMap.getCameraPosition(); cluster(); } } @Override // com.google.android.gms.maps.GoogleMap.OnMarkerClickListener public boolean onMarkerClick(Marker marker) { return getMarkerManager().onMarkerClick(marker); } @Override // com.google.android.gms.maps.GoogleMap.OnInfoWindowClickListener public void onInfoWindowClick(Marker marker) { getMarkerManager().onInfoWindowClick(marker); } private class ClusterTask extends AsyncTask>> { private ClusterTask() { } /* JADX INFO: Access modifiers changed from: protected */ @Override // android.os.AsyncTask public Set> doInBackground(Float... fArr) { Algorithm algorithm = ClusterManager.this.getAlgorithm(); algorithm.lock(); try { return algorithm.getClusters(fArr[0].floatValue()); } finally { algorithm.unlock(); } } /* JADX INFO: Access modifiers changed from: protected */ @Override // android.os.AsyncTask public void onPostExecute(Set> set) { ClusterManager.this.mRenderer.onClustersChanged(set); } } public void setOnClusterClickListener(OnClusterClickListener onClusterClickListener) { this.mOnClusterClickListener = onClusterClickListener; this.mRenderer.setOnClusterClickListener(onClusterClickListener); } public void setOnClusterInfoWindowClickListener(OnClusterInfoWindowClickListener onClusterInfoWindowClickListener) { this.mOnClusterInfoWindowClickListener = onClusterInfoWindowClickListener; this.mRenderer.setOnClusterInfoWindowClickListener(onClusterInfoWindowClickListener); } public void setOnClusterInfoWindowLongClickListener(OnClusterInfoWindowLongClickListener onClusterInfoWindowLongClickListener) { this.mOnClusterInfoWindowLongClickListener = onClusterInfoWindowLongClickListener; this.mRenderer.setOnClusterInfoWindowLongClickListener(onClusterInfoWindowLongClickListener); } public void setOnClusterItemClickListener(OnClusterItemClickListener onClusterItemClickListener) { this.mOnClusterItemClickListener = onClusterItemClickListener; this.mRenderer.setOnClusterItemClickListener(onClusterItemClickListener); } public void setOnClusterItemInfoWindowClickListener(OnClusterItemInfoWindowClickListener onClusterItemInfoWindowClickListener) { this.mOnClusterItemInfoWindowClickListener = onClusterItemInfoWindowClickListener; this.mRenderer.setOnClusterItemInfoWindowClickListener(onClusterItemInfoWindowClickListener); } public void setOnClusterItemInfoWindowLongClickListener(OnClusterItemInfoWindowLongClickListener onClusterItemInfoWindowLongClickListener) { this.mOnClusterItemInfoWindowLongClickListener = onClusterItemInfoWindowLongClickListener; this.mRenderer.setOnClusterItemInfoWindowLongClickListener(onClusterItemInfoWindowLongClickListener); } }