Skip to content

Commit b803dc0

Browse files
authored
feat: add constructor parameter for custom Executor in cluster renderers (#1682)
Adds overloaded constructors to `ClusterRendererMultipleItems`, `DefaultClusterRenderer`, and `DefaultAdvancedMarkersClusterRenderer` that accept an `Executor` parameter. This allows injecting a synchronous executor (or any custom executor) during testing, resolving issues with `Executors.newSingleThreadExecutor()` creating background threads in test environments.
1 parent 706bb21 commit b803dc0

3 files changed

Lines changed: 18 additions & 3 deletions

File tree

library/src/main/java/com/google/maps/android/clustering/view/ClusterRendererMultipleItems.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public class ClusterRendererMultipleItems<T extends ClusterItem> implements Clus
8888
private final float mDensity;
8989
private boolean mAnimate;
9090
private long mAnimationDurationMs;
91-
private final Executor mExecutor = Executors.newSingleThreadExecutor();
91+
private final Executor mExecutor;
9292
private final Queue<AnimationTask> ongoingAnimations = new LinkedList<>();
9393
private static TimeInterpolator animationInterp = new DecelerateInterpolator();
9494

@@ -171,7 +171,12 @@ public void setAnimationInterpolator(TimeInterpolator interpolator) {
171171
private ClusterManager.OnClusterItemInfoWindowLongClickListener<T> mItemInfoWindowLongClickListener;
172172

173173
public ClusterRendererMultipleItems(Context context, GoogleMap map, ClusterManager<T> clusterManager) {
174+
this(context, map, clusterManager, Executors.newSingleThreadExecutor());
175+
}
176+
177+
public ClusterRendererMultipleItems(Context context, GoogleMap map, ClusterManager<T> clusterManager, Executor executor) {
174178
mMap = map;
179+
mExecutor = executor;
175180
mAnimate = true;
176181
mAnimationDurationMs = 300;
177182
mDensity = context.getResources().getDisplayMetrics().density;

library/src/main/java/com/google/maps/android/clustering/view/DefaultAdvancedMarkersClusterRenderer.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public class DefaultAdvancedMarkersClusterRenderer<T extends ClusterItem> implem
8282
private final float mDensity;
8383
private boolean mAnimate;
8484
private long mAnimationDurationMs;
85-
private final Executor mExecutor = Executors.newSingleThreadExecutor();
85+
private final Executor mExecutor;
8686

8787
private static final int[] BUCKETS = {10, 20, 50, 100, 200, 500, 1000};
8888
private ShapeDrawable mColoredCircleBackground;
@@ -133,7 +133,12 @@ public class DefaultAdvancedMarkersClusterRenderer<T extends ClusterItem> implem
133133
private ClusterManager.OnClusterItemInfoWindowLongClickListener<T> mItemInfoWindowLongClickListener;
134134

135135
public DefaultAdvancedMarkersClusterRenderer(Context context, GoogleMap map, ClusterManager<T> clusterManager) {
136+
this(context, map, clusterManager, Executors.newSingleThreadExecutor());
137+
}
138+
139+
public DefaultAdvancedMarkersClusterRenderer(Context context, GoogleMap map, ClusterManager<T> clusterManager, Executor executor) {
136140
mMap = map;
141+
mExecutor = executor;
137142
mAnimate = true;
138143
mAnimationDurationMs = 300;
139144
mDensity = context.getResources().getDisplayMetrics().density;

library/src/main/java/com/google/maps/android/clustering/view/DefaultClusterRenderer.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public class DefaultClusterRenderer<T extends ClusterItem> implements ClusterRen
8181
private final float mDensity;
8282
private boolean mAnimate;
8383
private long mAnimationDurationMs;
84-
private final Executor mExecutor = Executors.newSingleThreadExecutor();
84+
private final Executor mExecutor;
8585

8686
private static final int[] BUCKETS = {10, 20, 50, 100, 200, 500, 1000};
8787
private ShapeDrawable mColoredCircleBackground;
@@ -132,7 +132,12 @@ public class DefaultClusterRenderer<T extends ClusterItem> implements ClusterRen
132132
private ClusterManager.OnClusterItemInfoWindowLongClickListener<T> mItemInfoWindowLongClickListener;
133133

134134
public DefaultClusterRenderer(Context context, GoogleMap map, ClusterManager<T> clusterManager) {
135+
this(context, map, clusterManager, Executors.newSingleThreadExecutor());
136+
}
137+
138+
public DefaultClusterRenderer(Context context, GoogleMap map, ClusterManager<T> clusterManager, Executor executor) {
135139
mMap = map;
140+
mExecutor = executor;
136141
mAnimate = true;
137142
mAnimationDurationMs = 300;
138143
mDensity = context.getResources().getDisplayMetrics().density;

0 commit comments

Comments
 (0)