summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationLayerController.java
diff options
context:
space:
mode:
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.java80
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