expose LocationIndicatorLayer and an alternative rendering mode based on it

This commit is contained in:
Łukasz Paczos
2020-04-08 15:07:47 +02:00
parent d7161fca1f
commit 6bb456882a
39 changed files with 2479 additions and 635 deletions

View File

@@ -16,6 +16,7 @@ import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import java.util.HashSet;
import java.util.Set;
import static com.mapbox.mapboxsdk.location.LocationComponentConstants.ACCURACY_LAYER;
@@ -68,7 +69,7 @@ public class LocationLayerControllerTest {
LocationComponentOptions options = mock(LocationComponentOptions.class);
new LocationLayerController(mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(options),
bitmapProvider, options, internalRenderModeChangedListener);
bitmapProvider, options, internalRenderModeChangedListener, false);
verify(style).addSource(locationSource);
}
@@ -85,7 +86,7 @@ public class LocationLayerControllerTest {
LocationComponentOptions options = mock(LocationComponentOptions.class);
new LocationLayerController(mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(options),
bitmapProvider, options, internalRenderModeChangedListener);
bitmapProvider, options, internalRenderModeChangedListener, false);
verify(style).addLayerBelow(shadowLayer, BACKGROUND_LAYER);
}
@@ -102,7 +103,7 @@ public class LocationLayerControllerTest {
LocationComponentOptions options = mock(LocationComponentOptions.class);
new LocationLayerController(mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(options),
bitmapProvider, options, internalRenderModeChangedListener);
bitmapProvider, options, internalRenderModeChangedListener, false);
verify(style).addLayerBelow(backgroundLayer, FOREGROUND_LAYER);
}
@@ -119,7 +120,7 @@ public class LocationLayerControllerTest {
LocationComponentOptions options = mock(LocationComponentOptions.class);
new LocationLayerController(mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(options),
bitmapProvider, options, internalRenderModeChangedListener);
bitmapProvider, options, internalRenderModeChangedListener, false);
verify(style).addLayerBelow(foregroundLayer, BEARING_LAYER);
}
@@ -138,7 +139,7 @@ public class LocationLayerControllerTest {
when(options.layerBelow()).thenReturn(layerBelow);
new LocationLayerController(mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(options),
bitmapProvider, options, internalRenderModeChangedListener);
bitmapProvider, options, internalRenderModeChangedListener, false);
verify(style).addLayerBelow(bearingLayer, layerBelow);
}
@@ -155,7 +156,7 @@ public class LocationLayerControllerTest {
LocationComponentOptions options = mock(LocationComponentOptions.class);
new LocationLayerController(mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(options),
bitmapProvider, options, internalRenderModeChangedListener);
bitmapProvider, options, internalRenderModeChangedListener, false);
verify(style).addLayerBelow(accuracyLayer, BACKGROUND_LAYER);
}
@@ -166,16 +167,18 @@ public class LocationLayerControllerTest {
LayerSourceProvider sourceProvider = buildLayerProvider();
GeoJsonSource locationSource = mock(GeoJsonSource.class);
when(sourceProvider.generateSource(any(Feature.class))).thenReturn(locationSource);
Set<String> layerSet = new HashSet<>();
when(sourceProvider.getEmptyLayerSet()).thenReturn(layerSet);
LayerBitmapProvider bitmapProvider = mock(LayerBitmapProvider.class);
LocationComponentOptions options = mock(LocationComponentOptions.class);
LocationLayerController controller =
new LocationLayerController(mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(options),
bitmapProvider, options, internalRenderModeChangedListener);
bitmapProvider, options, internalRenderModeChangedListener, false);
controller.initializeComponents(mapboxMap.getStyle(), options);
assertEquals(5, controller.layerSet.size());
assertEquals(5, layerSet.size());
}
@Test
@@ -191,7 +194,7 @@ public class LocationLayerControllerTest {
// Style is applied on initialization
new LocationLayerController(mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(options),
bitmapProvider, options, internalRenderModeChangedListener);
bitmapProvider, options, internalRenderModeChangedListener, false);
verify(style).addImage(SHADOW_ICON, bitmap);
}
@@ -208,7 +211,7 @@ public class LocationLayerControllerTest {
when(options.elevation()).thenReturn(0f);
new LocationLayerController(mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(options),
bitmapProvider, options, internalRenderModeChangedListener);
bitmapProvider, options, internalRenderModeChangedListener, false);
verify(style, times(0)).addImage(SHADOW_ICON, bitmap);
}
@@ -228,7 +231,7 @@ public class LocationLayerControllerTest {
when(bitmapProvider.generateBitmap(drawableResId, tintColor)).thenReturn(bitmap);
new LocationLayerController(mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(options),
bitmapProvider, options, internalRenderModeChangedListener);
bitmapProvider, options, internalRenderModeChangedListener, false);
verify(style).addImage(FOREGROUND_ICON, bitmap);
}
@@ -248,7 +251,7 @@ public class LocationLayerControllerTest {
when(bitmapProvider.generateBitmap(drawableResId, tintColor)).thenReturn(bitmap);
new LocationLayerController(mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(options),
bitmapProvider, options, internalRenderModeChangedListener);
bitmapProvider, options, internalRenderModeChangedListener, false);
verify(style).addImage(FOREGROUND_STALE_ICON, bitmap);
}
@@ -268,7 +271,7 @@ public class LocationLayerControllerTest {
when(bitmapProvider.generateBitmap(drawableResId, tintColor)).thenReturn(bitmap);
new LocationLayerController(mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(options),
bitmapProvider, options, internalRenderModeChangedListener);
bitmapProvider, options, internalRenderModeChangedListener, false);
verify(style).addImage(BACKGROUND_ICON, bitmap);
}
@@ -288,7 +291,7 @@ public class LocationLayerControllerTest {
when(bitmapProvider.generateBitmap(drawableResId, tintColor)).thenReturn(bitmap);
new LocationLayerController(mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(options),
bitmapProvider, options, internalRenderModeChangedListener);
bitmapProvider, options, internalRenderModeChangedListener, false);
verify(style).addImage(BACKGROUND_STALE_ICON, bitmap);
}
@@ -308,7 +311,7 @@ public class LocationLayerControllerTest {
when(bitmapProvider.generateBitmap(drawableResId, tintColor)).thenReturn(bitmap);
new LocationLayerController(mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(options),
bitmapProvider, options, internalRenderModeChangedListener);
bitmapProvider, options, internalRenderModeChangedListener, false);
verify(style).addImage(BEARING_ICON, bitmap);
}
@@ -326,7 +329,7 @@ public class LocationLayerControllerTest {
LocationLayerController layerController =
new LocationLayerController(mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(options),
bitmapProvider, options, internalRenderModeChangedListener);
bitmapProvider, options, internalRenderModeChangedListener, false);
Layer bearingLayer2 = mock(Layer.class);
when(sourceProvider.generateLayer(BEARING_LAYER)).thenReturn(bearingLayer2);
@@ -371,7 +374,7 @@ public class LocationLayerControllerTest {
LocationLayerController layerController =
new LocationLayerController(mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(options),
bitmapProvider, options, internalRenderModeChangedListener);
bitmapProvider, options, internalRenderModeChangedListener, false);
options = mock(LocationComponentOptions.class);
layerBelow = "layer-below";
@@ -394,7 +397,7 @@ public class LocationLayerControllerTest {
LocationLayerController layerController =
new LocationLayerController(mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(options),
bitmapProvider, options, internalRenderModeChangedListener);
bitmapProvider, options, internalRenderModeChangedListener, false);
options = mock(LocationComponentOptions.class);
layerController.applyStyle(options);
@@ -415,10 +418,9 @@ public class LocationLayerControllerTest {
Feature locationFeature = mock(Feature.class);
LocationLayerController layer = new LocationLayerController(
mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(locationFeature, options),
bitmapProvider, options, internalRenderModeChangedListener
);
bitmapProvider, options, internalRenderModeChangedListener, false);
layer.updateForegroundOffset(2d);
layer.cameraTiltUpdated(2d);
verify(locationFeature).addProperty(eq(PROPERTY_FOREGROUND_ICON_OFFSET), any(JsonElement.class));
}
@@ -434,9 +436,8 @@ public class LocationLayerControllerTest {
Feature locationFeature = mock(Feature.class);
LocationLayerController layer = new LocationLayerController(
mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(locationFeature, options),
bitmapProvider, options, internalRenderModeChangedListener
);
layer.updateForegroundOffset(2d);
bitmapProvider, options, internalRenderModeChangedListener, false);
layer.cameraTiltUpdated(2d);
verify(locationFeature).addProperty(eq(PROPERTY_SHADOW_ICON_OFFSET), any(JsonElement.class));
}
@@ -453,8 +454,7 @@ public class LocationLayerControllerTest {
Feature locationFeature = mock(Feature.class);
LocationLayerController layer = new LocationLayerController(
mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(locationFeature, options),
bitmapProvider, options, internalRenderModeChangedListener
);
bitmapProvider, options, internalRenderModeChangedListener, false);
getAnimationListener(ANIMATOR_LAYER_LATLNG, layer.getAnimationListeners()).onNewAnimationValue(new LatLng());
@@ -474,8 +474,7 @@ public class LocationLayerControllerTest {
Feature locationFeature = mock(Feature.class);
LocationLayerController layer = new LocationLayerController(
mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(locationFeature, options),
bitmapProvider, options, internalRenderModeChangedListener
);
bitmapProvider, options, internalRenderModeChangedListener, false);
layer.setRenderMode(RenderMode.GPS);
float gpsBearing = 2f;
@@ -496,8 +495,7 @@ public class LocationLayerControllerTest {
Feature locationFeature = mock(Feature.class);
LocationLayerController layer = new LocationLayerController(
mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(locationFeature, options),
bitmapProvider, options, internalRenderModeChangedListener
);
bitmapProvider, options, internalRenderModeChangedListener, false);
layer.setRenderMode(RenderMode.COMPASS);
float gpsBearing = 2f;
@@ -517,8 +515,7 @@ public class LocationLayerControllerTest {
Feature locationFeature = mock(Feature.class);
LocationLayerController layer = new LocationLayerController(
mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(locationFeature, options),
bitmapProvider, options, internalRenderModeChangedListener
);
bitmapProvider, options, internalRenderModeChangedListener, false);
layer.setRenderMode(RenderMode.COMPASS);
float compassBearing = 2f;
@@ -540,8 +537,7 @@ public class LocationLayerControllerTest {
Feature locationFeature = mock(Feature.class);
LocationLayerController layer = new LocationLayerController(
mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(locationFeature, options),
bitmapProvider, options, internalRenderModeChangedListener
);
bitmapProvider, options, internalRenderModeChangedListener, false);
layer.setRenderMode(RenderMode.GPS);
float compassBearing = 2f;
@@ -561,8 +557,7 @@ public class LocationLayerControllerTest {
Feature locationFeature = mock(Feature.class);
LocationLayerController layer = new LocationLayerController(
mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(locationFeature, options),
bitmapProvider, options, internalRenderModeChangedListener
);
bitmapProvider, options, internalRenderModeChangedListener, false);
layer.setRenderMode(RenderMode.NORMAL);
float accuracyRadiusValue = 2f;
@@ -584,8 +579,7 @@ public class LocationLayerControllerTest {
Feature locationFeature = mock(Feature.class);
LocationLayerController layer = new LocationLayerController(
mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(locationFeature, options),
bitmapProvider, options, internalRenderModeChangedListener
);
bitmapProvider, options, internalRenderModeChangedListener, false);
layer.setRenderMode(RenderMode.GPS);
float accuracyRadiusValue = 2f;
@@ -605,7 +599,7 @@ public class LocationLayerControllerTest {
LocationLayerController controller =
new LocationLayerController(mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(options),
bitmapProvider, options, internalRenderModeChangedListener);
bitmapProvider, options, internalRenderModeChangedListener, false);
controller.setRenderMode(RenderMode.NORMAL);
controller.setRenderMode(RenderMode.NORMAL);
@@ -624,7 +618,7 @@ public class LocationLayerControllerTest {
LocationLayerController controller =
new LocationLayerController(mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(options),
bitmapProvider, options, internalRenderModeChangedListener);
bitmapProvider, options, internalRenderModeChangedListener, false);
controller.setRenderMode(RenderMode.GPS);
controller.setRenderMode(RenderMode.GPS);
@@ -648,7 +642,7 @@ public class LocationLayerControllerTest {
LocationLayerController controller =
new LocationLayerController(mapboxMap, mapboxMap.getStyle(), sourceProvider, buildFeatureProvider(options),
bitmapProvider, options, internalRenderModeChangedListener);
bitmapProvider, options, internalRenderModeChangedListener, false);
verify(style).addImage(FOREGROUND_ICON, bitmap);
@@ -669,13 +663,13 @@ public class LocationLayerControllerTest {
private LayerFeatureProvider buildFeatureProvider(@NonNull LocationComponentOptions options) {
LayerFeatureProvider provider = mock(LayerFeatureProvider.class);
when(provider.generateLocationFeature(null, options)).thenReturn(mock(Feature.class));
when(provider.generateLocationFeature(null, options.enableStaleState())).thenReturn(mock(Feature.class));
return provider;
}
private LayerFeatureProvider buildFeatureProvider(Feature feature, @NonNull LocationComponentOptions options) {
LayerFeatureProvider provider = mock(LayerFeatureProvider.class);
when(provider.generateLocationFeature(null, options)).thenReturn(feature);
when(provider.generateLocationFeature(null, options.enableStaleState())).thenReturn(feature);
return provider;
}