Skip to content

Commit e8948c9

Browse files
sarahsnow1tallytalwar
authored andcommitted
Restore Markers (#433)
* add property getters for BitmapMarker * Add marker restoration code to MarkerManager, make StyleStringGenerator singleton * add all bitmapmarker properties to markeroptions * expand MarkerOptions for all BitmapMarker properties * improve MarkerManager and related tests * Restore markers when scene updates complete & update custom marker sample * make MarkerManager singleton and update custom marker example to show restoration after orientation change * synchronized list * configure marker convenience methods * rename MarkerManager to BitmapMarkerManager for clarity * add BitmapMarkerOptions and deprecate MarkerOptions * checkstyle fixes
1 parent b2c37f0 commit e8948c9

25 files changed

+1168
-280
lines changed

config/checkstyle/checkstyle-suppressions.xml

+3
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,7 @@
1919
<suppress checks="ConstantName" files="R.java" />
2020
<suppress checks="ParameterNumberCheck" files="src/main/java/com/mapzen/android/graphics/MapzenMap.java"/>
2121
<suppress checks="[a-zA-Z0-9]*" files="src/main/java/com/mapzen/android/graphics/TmpHttpHandler.java"/>
22+
<suppress checks="ParameterNumberCheck" files="src/main/java/com/mapzen/android/graphics/MapReadyInitializer.java"/>
23+
<suppress checks="ParameterNumberCheck" files="src/main/java/com/mapzen/android/graphics/model/MarkerManager.java"/>
24+
<suppress checks="ParameterNumberCheck" files="src/main/java/com/mapzen/android/graphics/model/BitmapMarkerManager.java"/>
2225
</suppressions>

core/src/main/java/com/mapzen/android/graphics/GraphicsModule.java

+29
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package com.mapzen.android.graphics;
22

3+
import com.mapzen.android.graphics.internal.StyleStringGenerator;
4+
import com.mapzen.android.graphics.model.BitmapMarkerFactory;
5+
import com.mapzen.android.graphics.model.BitmapMarkerManager;
6+
37
import javax.inject.Singleton;
48

59
import dagger.Module;
@@ -34,4 +38,29 @@
3438
@Provides @Singleton public SceneUpdateManager providesSceneUpdateManager() {
3539
return new SceneUpdateManager();
3640
}
41+
42+
/**
43+
* Returns the object used create {@link com.mapzen.android.graphics.model.BitmapMarker}s.
44+
* @return
45+
*/
46+
@Provides @Singleton public BitmapMarkerFactory providesBitmapMarkerFactory() {
47+
return new BitmapMarkerFactory();
48+
}
49+
50+
/**
51+
* Returns the object used to generate a style string for a Tangram
52+
* {@link com.mapzen.tangram.Marker}.
53+
*/
54+
@Provides @Singleton public StyleStringGenerator providesStyleStringGenerator() {
55+
return new StyleStringGenerator();
56+
}
57+
58+
/**
59+
* Returns the object used to manager markers.
60+
* {@link com.mapzen.tangram.Marker}.
61+
*/
62+
@Provides @Singleton public BitmapMarkerManager providesBitmapMarkerManager(
63+
BitmapMarkerFactory bitmapMarkerFactory, StyleStringGenerator styleStringGenerator) {
64+
return new BitmapMarkerManager(bitmapMarkerFactory, styleStringGenerator);
65+
}
3766
}

core/src/main/java/com/mapzen/android/graphics/MapInitializer.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.mapzen.android.core.MapzenManager;
44
import com.mapzen.android.graphics.model.BubbleWrapStyle;
55
import com.mapzen.android.graphics.model.MapStyle;
6+
import com.mapzen.android.graphics.model.BitmapMarkerManager;
67
import com.mapzen.tangram.MapController;
78
import com.mapzen.tangram.SceneError;
89
import com.mapzen.tangram.SceneUpdate;
@@ -33,18 +34,21 @@ public class MapInitializer {
3334

3435
MapReadyInitializer mapReadyInitializer;
3536

37+
private BitmapMarkerManager bitmapMarkerManager;
38+
3639
/**
3740
* Creates a new instance.
3841
*/
3942
@Inject MapInitializer(Context context, MapzenMapHttpHandler mapzenMapHttpHandler,
4043
MapDataManager mapDataManager, MapStateManager mapStateManager,
41-
SceneUpdateManager sceneUpdateManager) {
44+
SceneUpdateManager sceneUpdateManager, BitmapMarkerManager bitmapMarkerManager) {
4245
this.context = context;
4346
this.mapzenMapHttpHandler = mapzenMapHttpHandler;
4447
this.mapDataManager = mapDataManager;
4548
this.mapStateManager = mapStateManager;
4649
this.sceneUpdateManager = sceneUpdateManager;
4750
mapReadyInitializer = new MapReadyInitializer();
51+
this.bitmapMarkerManager = bitmapMarkerManager;
4852
}
4953

5054
/**
@@ -93,7 +97,7 @@ private void loadMap(final MapView mapView, String sceneFile, final OnMapReadyCa
9397
new MapController.SceneLoadListener() {
9498
@Override public void onSceneReady(int sceneId, SceneError sceneError) {
9599
mapReadyInitializer.onMapReady(mapView, mapzenMapHttpHandler, callback, mapDataManager,
96-
mapStateManager, sceneUpdateManager, locale);
100+
mapStateManager, sceneUpdateManager, locale, bitmapMarkerManager);
97101
}
98102
});
99103
controller.loadSceneFileAsync(sceneFile, sceneUpdates);

core/src/main/java/com/mapzen/android/graphics/MapReadyInitializer.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.mapzen.android.graphics;
22

33
import com.mapzen.android.core.MapzenManager;
4-
import com.mapzen.android.graphics.model.MarkerManager;
4+
import com.mapzen.android.graphics.model.BitmapMarkerManager;
55
import com.mapzen.tangram.MapController;
66

77
import java.util.Locale;
@@ -24,14 +24,16 @@ class MapReadyInitializer {
2424
*/
2525
void onMapReady(MapView mapView, MapzenMapHttpHandler mapzenMapHttpHandler,
2626
OnMapReadyCallback callback, MapDataManager mapDataManager, MapStateManager mapStateManager,
27-
SceneUpdateManager sceneUpdateManager, Locale locale) {
27+
SceneUpdateManager sceneUpdateManager, Locale locale,
28+
BitmapMarkerManager bitmapMarkerManager) {
2829
MapController mapController = mapView.getTangramMapView().getMap(null);
2930
mapController.setSceneLoadListener(null);
3031
mapController.setHttpHandler(mapzenMapHttpHandler.httpHandler());
3132
MapzenManager mapzenManager = MapzenManager.instance(mapView.getContext());
33+
bitmapMarkerManager.setMapController(mapController);
3234
callback.onMapReady(
3335
new MapzenMap(mapView, mapController, new OverlayManager(mapView, mapController,
3436
mapDataManager, mapStateManager), mapStateManager, new LabelPickHandler(mapView),
35-
new MarkerManager(mapController), sceneUpdateManager, locale, mapzenManager));
37+
bitmapMarkerManager, sceneUpdateManager, locale, mapzenManager));
3638
}
3739
}

core/src/main/java/com/mapzen/android/graphics/MapzenMap.java

+28-7
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,20 @@
33
import com.mapzen.android.core.MapzenManager;
44
import com.mapzen.android.graphics.internal.StyleStringGenerator;
55
import com.mapzen.android.graphics.model.BitmapMarker;
6+
import com.mapzen.android.graphics.model.BitmapMarkerManager;
7+
import com.mapzen.android.graphics.model.BitmapMarkerOptions;
68
import com.mapzen.android.graphics.model.CameraType;
79
import com.mapzen.android.graphics.model.EaseType;
810
import com.mapzen.android.graphics.model.MapStyle;
911
import com.mapzen.android.graphics.model.Marker;
10-
import com.mapzen.android.graphics.model.MarkerManager;
1112
import com.mapzen.android.graphics.model.MarkerOptions;
1213
import com.mapzen.android.graphics.model.Polygon;
1314
import com.mapzen.android.graphics.model.Polyline;
1415
import com.mapzen.tangram.LngLat;
1516
import com.mapzen.tangram.MapController;
1617
import com.mapzen.tangram.MapData;
1718
import com.mapzen.tangram.MarkerPickResult;
19+
import com.mapzen.tangram.SceneError;
1820
import com.mapzen.tangram.SceneUpdate;
1921
import com.mapzen.tangram.TouchInput;
2022

@@ -48,7 +50,7 @@ public class MapzenMap {
4850
private final OverlayManager overlayManager;
4951
private final MapStateManager mapStateManager;
5052
private final LabelPickHandler labelPickHandler;
51-
private final MarkerManager markerManager;
53+
private final BitmapMarkerManager bitmapMarkerManager;
5254
private final SceneUpdateManager sceneUpdateManager;
5355
private final MapzenManager mapzenManager;
5456
private Locale locale;
@@ -138,19 +140,27 @@ public boolean onRotate(float x, float y, float rotation) {
138140
}
139141
};
140142

143+
MapController.SceneLoadListener internalSceneLoadListener
144+
= new MapController.SceneLoadListener() {
145+
@Override public void onSceneReady(int sceneId, SceneError sceneError) {
146+
bitmapMarkerManager.restoreMarkers();
147+
}
148+
};
149+
141150
/**
142151
* Creates a new map based on the given {@link MapView} and {@link MapController}.
143152
*/
144153
MapzenMap(MapView mapView, MapController mapController, OverlayManager overlayManager,
145154
MapStateManager mapStateManager, LabelPickHandler labelPickHandler,
146-
MarkerManager markerManager, SceneUpdateManager sceneUpdateManager, Locale locale,
155+
BitmapMarkerManager bitmapMarkerManager, SceneUpdateManager sceneUpdateManager, Locale locale,
147156
MapzenManager mapzenManager) {
148157
this.mapView = mapView;
149158
this.mapController = mapController;
159+
this.mapController.setSceneLoadListener(internalSceneLoadListener);
150160
this.overlayManager = overlayManager;
151161
this.mapStateManager = mapStateManager;
152162
this.labelPickHandler = labelPickHandler;
153-
this.markerManager = markerManager;
163+
this.bitmapMarkerManager = bitmapMarkerManager;
154164
this.sceneUpdateManager = sceneUpdateManager;
155165
this.locale = locale;
156166
this.mapzenManager = mapzenManager;
@@ -646,8 +656,8 @@ public void onMarkerPick(final MarkerPickResult markerPickResult, final float po
646656
mapView.post(new Runnable() {
647657
@Override public void run() {
648658
if (markerPickResult != null) {
649-
listener.onMarkerPick(new BitmapMarker(markerManager, markerPickResult.getMarker(),
650-
new StyleStringGenerator()));
659+
listener.onMarkerPick(new BitmapMarker(bitmapMarkerManager,
660+
markerPickResult.getMarker(), new StyleStringGenerator()));
651661
}
652662
}
653663
});
@@ -954,7 +964,18 @@ void onDestroy() {
954964
* @param markerOptions options used to define marker appearance.
955965
* @return a new bitmap marker instance.
956966
*/
967+
@Deprecated
957968
public BitmapMarker addBitmapMarker(MarkerOptions markerOptions) {
958-
return markerManager.addMarker(markerOptions);
969+
return bitmapMarkerManager.addMarker(markerOptions);
970+
}
971+
972+
/**
973+
* Adds a custom bitmap marker to the map.
974+
*
975+
* @param markerOptions options used to define marker appearance.
976+
* @return a new bitmap marker instance.
977+
*/
978+
public BitmapMarker addBitmapMarker(BitmapMarkerOptions markerOptions) {
979+
return bitmapMarkerManager.addMarker(markerOptions);
959980
}
960981
}

core/src/main/java/com/mapzen/android/graphics/internal/StyleStringGenerator.java

+1-32
Original file line numberDiff line numberDiff line change
@@ -7,42 +7,11 @@
77
*/
88
public class StyleStringGenerator {
99

10-
private int width = 50;
11-
private int height = 50;
12-
private boolean interactive = true;
13-
private String colorHex = "#FFFFFF";
14-
15-
/**
16-
* Set the width and height in pixels.
17-
* @param width
18-
* @param height
19-
*/
20-
public void setSize(int width, int height) {
21-
this.width = width;
22-
this.height = height;
23-
}
24-
25-
/**
26-
* Set whether or not the marker can be selected.
27-
* @param interactive
28-
*/
29-
public void setInteractive(boolean interactive) {
30-
this.interactive = interactive;
31-
}
32-
33-
/**
34-
* Sets the hex value for color to be used.
35-
* @param hex
36-
*/
37-
public void setColor(String hex) {
38-
this.colorHex = hex;
39-
}
40-
4110
/**
4211
* Return the style string given the current property configurations.
4312
* @return
4413
*/
45-
public String getStyleString() {
14+
public String getStyleString(int width, int height, boolean interactive, String colorHex) {
4615
return new StringBuilder()
4716
.append("{ style: 'points', color: '")
4817
.append(colorHex)

0 commit comments

Comments
 (0)