Skip to content

Commit

Permalink
Restore Markers (#433)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
sarahsnow1 authored and tallytalwar committed Aug 28, 2017
1 parent b2c37f0 commit e8948c9
Show file tree
Hide file tree
Showing 25 changed files with 1,168 additions and 280 deletions.
3 changes: 3 additions & 0 deletions config/checkstyle/checkstyle-suppressions.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,7 @@
<suppress checks="ConstantName" files="R.java" />
<suppress checks="ParameterNumberCheck" files="src/main/java/com/mapzen/android/graphics/MapzenMap.java"/>
<suppress checks="[a-zA-Z0-9]*" files="src/main/java/com/mapzen/android/graphics/TmpHttpHandler.java"/>
<suppress checks="ParameterNumberCheck" files="src/main/java/com/mapzen/android/graphics/MapReadyInitializer.java"/>
<suppress checks="ParameterNumberCheck" files="src/main/java/com/mapzen/android/graphics/model/MarkerManager.java"/>
<suppress checks="ParameterNumberCheck" files="src/main/java/com/mapzen/android/graphics/model/BitmapMarkerManager.java"/>
</suppressions>
29 changes: 29 additions & 0 deletions core/src/main/java/com/mapzen/android/graphics/GraphicsModule.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package com.mapzen.android.graphics;

import com.mapzen.android.graphics.internal.StyleStringGenerator;
import com.mapzen.android.graphics.model.BitmapMarkerFactory;
import com.mapzen.android.graphics.model.BitmapMarkerManager;

import javax.inject.Singleton;

import dagger.Module;
Expand Down Expand Up @@ -34,4 +38,29 @@
@Provides @Singleton public SceneUpdateManager providesSceneUpdateManager() {
return new SceneUpdateManager();
}

/**
* Returns the object used create {@link com.mapzen.android.graphics.model.BitmapMarker}s.
* @return
*/
@Provides @Singleton public BitmapMarkerFactory providesBitmapMarkerFactory() {
return new BitmapMarkerFactory();
}

/**
* Returns the object used to generate a style string for a Tangram
* {@link com.mapzen.tangram.Marker}.
*/
@Provides @Singleton public StyleStringGenerator providesStyleStringGenerator() {
return new StyleStringGenerator();
}

/**
* Returns the object used to manager markers.
* {@link com.mapzen.tangram.Marker}.
*/
@Provides @Singleton public BitmapMarkerManager providesBitmapMarkerManager(
BitmapMarkerFactory bitmapMarkerFactory, StyleStringGenerator styleStringGenerator) {
return new BitmapMarkerManager(bitmapMarkerFactory, styleStringGenerator);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.mapzen.android.core.MapzenManager;
import com.mapzen.android.graphics.model.BubbleWrapStyle;
import com.mapzen.android.graphics.model.MapStyle;
import com.mapzen.android.graphics.model.BitmapMarkerManager;
import com.mapzen.tangram.MapController;
import com.mapzen.tangram.SceneError;
import com.mapzen.tangram.SceneUpdate;
Expand Down Expand Up @@ -33,18 +34,21 @@ public class MapInitializer {

MapReadyInitializer mapReadyInitializer;

private BitmapMarkerManager bitmapMarkerManager;

/**
* Creates a new instance.
*/
@Inject MapInitializer(Context context, MapzenMapHttpHandler mapzenMapHttpHandler,
MapDataManager mapDataManager, MapStateManager mapStateManager,
SceneUpdateManager sceneUpdateManager) {
SceneUpdateManager sceneUpdateManager, BitmapMarkerManager bitmapMarkerManager) {
this.context = context;
this.mapzenMapHttpHandler = mapzenMapHttpHandler;
this.mapDataManager = mapDataManager;
this.mapStateManager = mapStateManager;
this.sceneUpdateManager = sceneUpdateManager;
mapReadyInitializer = new MapReadyInitializer();
this.bitmapMarkerManager = bitmapMarkerManager;
}

/**
Expand Down Expand Up @@ -93,7 +97,7 @@ private void loadMap(final MapView mapView, String sceneFile, final OnMapReadyCa
new MapController.SceneLoadListener() {
@Override public void onSceneReady(int sceneId, SceneError sceneError) {
mapReadyInitializer.onMapReady(mapView, mapzenMapHttpHandler, callback, mapDataManager,
mapStateManager, sceneUpdateManager, locale);
mapStateManager, sceneUpdateManager, locale, bitmapMarkerManager);
}
});
controller.loadSceneFileAsync(sceneFile, sceneUpdates);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.mapzen.android.graphics;

import com.mapzen.android.core.MapzenManager;
import com.mapzen.android.graphics.model.MarkerManager;
import com.mapzen.android.graphics.model.BitmapMarkerManager;
import com.mapzen.tangram.MapController;

import java.util.Locale;
Expand All @@ -24,14 +24,16 @@ class MapReadyInitializer {
*/
void onMapReady(MapView mapView, MapzenMapHttpHandler mapzenMapHttpHandler,
OnMapReadyCallback callback, MapDataManager mapDataManager, MapStateManager mapStateManager,
SceneUpdateManager sceneUpdateManager, Locale locale) {
SceneUpdateManager sceneUpdateManager, Locale locale,
BitmapMarkerManager bitmapMarkerManager) {
MapController mapController = mapView.getTangramMapView().getMap(null);
mapController.setSceneLoadListener(null);
mapController.setHttpHandler(mapzenMapHttpHandler.httpHandler());
MapzenManager mapzenManager = MapzenManager.instance(mapView.getContext());
bitmapMarkerManager.setMapController(mapController);
callback.onMapReady(
new MapzenMap(mapView, mapController, new OverlayManager(mapView, mapController,
mapDataManager, mapStateManager), mapStateManager, new LabelPickHandler(mapView),
new MarkerManager(mapController), sceneUpdateManager, locale, mapzenManager));
bitmapMarkerManager, sceneUpdateManager, locale, mapzenManager));
}
}
35 changes: 28 additions & 7 deletions core/src/main/java/com/mapzen/android/graphics/MapzenMap.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,20 @@
import com.mapzen.android.core.MapzenManager;
import com.mapzen.android.graphics.internal.StyleStringGenerator;
import com.mapzen.android.graphics.model.BitmapMarker;
import com.mapzen.android.graphics.model.BitmapMarkerManager;
import com.mapzen.android.graphics.model.BitmapMarkerOptions;
import com.mapzen.android.graphics.model.CameraType;
import com.mapzen.android.graphics.model.EaseType;
import com.mapzen.android.graphics.model.MapStyle;
import com.mapzen.android.graphics.model.Marker;
import com.mapzen.android.graphics.model.MarkerManager;
import com.mapzen.android.graphics.model.MarkerOptions;
import com.mapzen.android.graphics.model.Polygon;
import com.mapzen.android.graphics.model.Polyline;
import com.mapzen.tangram.LngLat;
import com.mapzen.tangram.MapController;
import com.mapzen.tangram.MapData;
import com.mapzen.tangram.MarkerPickResult;
import com.mapzen.tangram.SceneError;
import com.mapzen.tangram.SceneUpdate;
import com.mapzen.tangram.TouchInput;

Expand Down Expand Up @@ -48,7 +50,7 @@ public class MapzenMap {
private final OverlayManager overlayManager;
private final MapStateManager mapStateManager;
private final LabelPickHandler labelPickHandler;
private final MarkerManager markerManager;
private final BitmapMarkerManager bitmapMarkerManager;
private final SceneUpdateManager sceneUpdateManager;
private final MapzenManager mapzenManager;
private Locale locale;
Expand Down Expand Up @@ -138,19 +140,27 @@ public boolean onRotate(float x, float y, float rotation) {
}
};

MapController.SceneLoadListener internalSceneLoadListener
= new MapController.SceneLoadListener() {
@Override public void onSceneReady(int sceneId, SceneError sceneError) {
bitmapMarkerManager.restoreMarkers();
}
};

/**
* Creates a new map based on the given {@link MapView} and {@link MapController}.
*/
MapzenMap(MapView mapView, MapController mapController, OverlayManager overlayManager,
MapStateManager mapStateManager, LabelPickHandler labelPickHandler,
MarkerManager markerManager, SceneUpdateManager sceneUpdateManager, Locale locale,
BitmapMarkerManager bitmapMarkerManager, SceneUpdateManager sceneUpdateManager, Locale locale,
MapzenManager mapzenManager) {
this.mapView = mapView;
this.mapController = mapController;
this.mapController.setSceneLoadListener(internalSceneLoadListener);
this.overlayManager = overlayManager;
this.mapStateManager = mapStateManager;
this.labelPickHandler = labelPickHandler;
this.markerManager = markerManager;
this.bitmapMarkerManager = bitmapMarkerManager;
this.sceneUpdateManager = sceneUpdateManager;
this.locale = locale;
this.mapzenManager = mapzenManager;
Expand Down Expand Up @@ -646,8 +656,8 @@ public void onMarkerPick(final MarkerPickResult markerPickResult, final float po
mapView.post(new Runnable() {
@Override public void run() {
if (markerPickResult != null) {
listener.onMarkerPick(new BitmapMarker(markerManager, markerPickResult.getMarker(),
new StyleStringGenerator()));
listener.onMarkerPick(new BitmapMarker(bitmapMarkerManager,
markerPickResult.getMarker(), new StyleStringGenerator()));
}
}
});
Expand Down Expand Up @@ -954,7 +964,18 @@ void onDestroy() {
* @param markerOptions options used to define marker appearance.
* @return a new bitmap marker instance.
*/
@Deprecated
public BitmapMarker addBitmapMarker(MarkerOptions markerOptions) {
return markerManager.addMarker(markerOptions);
return bitmapMarkerManager.addMarker(markerOptions);
}

/**
* Adds a custom bitmap marker to the map.
*
* @param markerOptions options used to define marker appearance.
* @return a new bitmap marker instance.
*/
public BitmapMarker addBitmapMarker(BitmapMarkerOptions markerOptions) {
return bitmapMarkerManager.addMarker(markerOptions);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,42 +7,11 @@
*/
public class StyleStringGenerator {

private int width = 50;
private int height = 50;
private boolean interactive = true;
private String colorHex = "#FFFFFF";

/**
* Set the width and height in pixels.
* @param width
* @param height
*/
public void setSize(int width, int height) {
this.width = width;
this.height = height;
}

/**
* Set whether or not the marker can be selected.
* @param interactive
*/
public void setInteractive(boolean interactive) {
this.interactive = interactive;
}

/**
* Sets the hex value for color to be used.
* @param hex
*/
public void setColor(String hex) {
this.colorHex = hex;
}

/**
* Return the style string given the current property configurations.
* @return
*/
public String getStyleString() {
public String getStyleString(int width, int height, boolean interactive, String colorHex) {
return new StringBuilder()
.append("{ style: 'points', color: '")
.append(colorHex)
Expand Down

0 comments on commit e8948c9

Please sign in to comment.