diff options
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationLayerController.java')
-rw-r--r-- | platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationLayerController.java | 80 |
1 files changed, 56 insertions, 24 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationLayerController.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationLayerController.java index f5d92ae810..c726caacfb 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationLayerController.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationLayerController.java @@ -19,7 +19,9 @@ import com.mapbox.mapboxsdk.style.layers.SymbolLayer; import com.mapbox.mapboxsdk.style.sources.GeoJsonSource; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import static com.mapbox.mapboxsdk.location.LocationComponentConstants.ACCURACY_LAYER; import static com.mapbox.mapboxsdk.location.LocationComponentConstants.BACKGROUND_ICON; @@ -56,7 +58,7 @@ import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconSize; import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.visibility; import static com.mapbox.mapboxsdk.utils.ColorUtils.colorToRgbaString; -final class LocationLayerController implements MapboxAnimator.OnLayerAnimationsValuesChangeListener { +final class LocationLayerController { @RenderMode.Mode private int renderMode; @@ -66,6 +68,7 @@ final class LocationLayerController implements MapboxAnimator.OnLayerAnimationsV private final LayerSourceProvider layerSourceProvider; private final LayerBitmapProvider bitmapProvider; private LocationComponentOptions options; + private final OnRenderModeChangedListener internalRenderModeChangedListener; private final List<String> layerMap = new ArrayList<>(); private Feature locationFeature; @@ -78,14 +81,15 @@ final class LocationLayerController implements MapboxAnimator.OnLayerAnimationsV LocationLayerController(MapboxMap mapboxMap, Style style, LayerSourceProvider layerSourceProvider, LayerFeatureProvider featureProvider, LayerBitmapProvider bitmapProvider, - @NonNull LocationComponentOptions options) { + @NonNull LocationComponentOptions options, + @NonNull OnRenderModeChangedListener internalRenderModeChangedListener) { this.mapboxMap = mapboxMap; this.style = style; this.layerSourceProvider = layerSourceProvider; this.bitmapProvider = bitmapProvider; this.locationFeature = featureProvider.generateLocationFeature(locationFeature, options); + this.internalRenderModeChangedListener = internalRenderModeChangedListener; initializeComponents(style, options); - setRenderMode(RenderMode.NORMAL); } void initializeComponents(Style style, LocationComponentOptions options) { @@ -127,6 +131,7 @@ final class LocationLayerController implements MapboxAnimator.OnLayerAnimationsV } void setRenderMode(@RenderMode.Mode int renderMode) { + int previousMode = this.renderMode; this.renderMode = renderMode; if (!isHidden) { @@ -162,6 +167,10 @@ final class LocationLayerController implements MapboxAnimator.OnLayerAnimationsV determineIconsSource(options); } + + if (previousMode != renderMode) { + internalRenderModeChangedListener.onRenderModeChanged(renderMode); + } } int getRenderMode() { @@ -259,10 +268,8 @@ final class LocationLayerController implements MapboxAnimator.OnLayerAnimationsV } private void updateAccuracyRadius(float accuracy) { - if (renderMode == RenderMode.COMPASS || renderMode == RenderMode.NORMAL) { - locationFeature.addNumberProperty(PROPERTY_ACCURACY_RADIUS, accuracy); - refreshSource(); - } + locationFeature.addNumberProperty(PROPERTY_ACCURACY_RADIUS, accuracy); + refreshSource(); } // @@ -400,28 +407,53 @@ final class LocationLayerController implements MapboxAnimator.OnLayerAnimationsV return !features.isEmpty(); } - @Override - public void onNewLatLngValue(LatLng latLng) { - Point point = Point.fromLngLat(latLng.getLongitude(), latLng.getLatitude()); - setLocationPoint(point); - } + private final MapboxAnimator.AnimationsValueChangeListener<LatLng> latLngValueListener = + new MapboxAnimator.AnimationsValueChangeListener<LatLng>() { + @Override + public void onNewAnimationValue(LatLng value) { + Point point = Point.fromLngLat(value.getLongitude(), value.getLatitude()); + setLocationPoint(point); + } + }; + + private final MapboxAnimator.AnimationsValueChangeListener<Float> gpsBearingValueListener = + new MapboxAnimator.AnimationsValueChangeListener<Float>() { + @Override + public void onNewAnimationValue(Float value) { + setBearingProperty(PROPERTY_GPS_BEARING, value); + } + }; + + private final MapboxAnimator.AnimationsValueChangeListener<Float> compassBearingValueListener = + new MapboxAnimator.AnimationsValueChangeListener<Float>() { + @Override + public void onNewAnimationValue(Float value) { + setBearingProperty(PROPERTY_COMPASS_BEARING, value); + } + }; + + private final MapboxAnimator.AnimationsValueChangeListener<Float> accuracyValueListener = + new MapboxAnimator.AnimationsValueChangeListener<Float>() { + @Override + public void onNewAnimationValue(Float value) { + updateAccuracyRadius(value); + } + }; + + Set<AnimatorListenerHolder> getAnimationListeners() { + Set<AnimatorListenerHolder> holders = new HashSet<>(); + holders.add(new AnimatorListenerHolder(MapboxAnimator.ANIMATOR_LAYER_LATLNG, latLngValueListener)); - @Override - public void onNewGpsBearingValue(float gpsBearing) { if (renderMode == RenderMode.GPS) { - setBearingProperty(PROPERTY_GPS_BEARING, gpsBearing); + holders.add(new AnimatorListenerHolder(MapboxAnimator.ANIMATOR_LAYER_GPS_BEARING, gpsBearingValueListener)); + } else if (renderMode == RenderMode.COMPASS) { + holders.add(new AnimatorListenerHolder(MapboxAnimator.ANIMATOR_LAYER_COMPASS_BEARING, compassBearingValueListener)); } - } - @Override - public void onNewCompassBearingValue(float compassBearing) { - if (renderMode == RenderMode.COMPASS) { - setBearingProperty(PROPERTY_COMPASS_BEARING, compassBearing); + if (renderMode == RenderMode.COMPASS || renderMode == RenderMode.NORMAL) { + holders.add(new AnimatorListenerHolder(MapboxAnimator.ANIMATOR_LAYER_ACCURACY, accuracyValueListener)); } - } - @Override - public void onNewAccuracyRadiusValue(float accuracyRadiusValue) { - updateAccuracyRadius(accuracyRadiusValue); + return holders; } }
\ No newline at end of file |