Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Commit

Permalink
more adjustments on Lukasz feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
langsmith committed Apr 8, 2019
1 parent 2a322ed commit 9a44ddf
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 89 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting;
import android.util.Log;
import android.util.SparseArray;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.BounceInterpolator;
Expand Down Expand Up @@ -36,6 +35,7 @@
import static com.mapbox.mapboxsdk.location.MapboxAnimator.ANIMATOR_LAYER_COMPASS_BEARING;
import static com.mapbox.mapboxsdk.location.MapboxAnimator.ANIMATOR_LAYER_GPS_BEARING;
import static com.mapbox.mapboxsdk.location.MapboxAnimator.ANIMATOR_LAYER_LATLNG;
import static com.mapbox.mapboxsdk.location.MapboxAnimator.ANIMATOR_PULSING_CIRCLE_RADIUS;
import static com.mapbox.mapboxsdk.location.MapboxAnimator.ANIMATOR_TILT;
import static com.mapbox.mapboxsdk.location.MapboxAnimator.ANIMATOR_ZOOM;
import static com.mapbox.mapboxsdk.location.Utils.immediateAnimation;
Expand All @@ -50,6 +50,7 @@ final class LocationAnimatorCoordinator {
private final Projection projection;
private Location previousLocation;
private float previousAccuracyRadius = -1;
private float previousPulsingRadius = -1;
private float previousCompassBearing = -1;
private long locationUpdateTimestamp = -1;
private float durationMultiplier;
Expand All @@ -58,6 +59,7 @@ final class LocationAnimatorCoordinator {
private boolean compassAnimationEnabled;
private boolean accuracyAnimationEnabled;
private PulsingLocationCircleAnimator pulsingLocationCircleAnimator;
private LocationComponentOptions locationComponentOptions;

@VisibleForTesting
int maxAnimationFps = Integer.MAX_VALUE;
Expand All @@ -66,10 +68,12 @@ final class LocationAnimatorCoordinator {
final SparseArray<MapboxAnimator.AnimationsValueChangeListener> listeners = new SparseArray<>();

LocationAnimatorCoordinator(@NonNull Projection projection, @NonNull MapboxAnimatorSetProvider animatorSetProvider,
@NonNull MapboxAnimatorProvider animatorProvider) {
@NonNull MapboxAnimatorProvider animatorProvider,
@NonNull LocationComponentOptions locationComponentOptions) {
this.projection = projection;
this.animatorProvider = animatorProvider;
this.animatorSetProvider = animatorSetProvider;
this.locationComponentOptions = locationComponentOptions;
}

void updateAnimatorListenerHolders(@NonNull Set<AnimatorListenerHolder> listenerHolders) {
Expand Down Expand Up @@ -142,42 +146,53 @@ void feedNewAccuracyRadius(float targetAccuracyRadius, boolean noAnimation) {
this.previousAccuracyRadius = targetAccuracyRadius;
}

void feedNewZoomLevel(double targetZoomLevel, @NonNull CameraPosition currentCameraPosition, long animationDuration,
@Nullable MapboxMap.CancelableCallback callback) {
updateZoomAnimator((float) targetZoomLevel, (float) currentCameraPosition.zoom, callback);
playAnimators(animationDuration, ANIMATOR_ZOOM);
}
void feedNewPulsingRadius(float targetPulsingRadius, MapboxMap mapboxMap) {

void feedNewTilt(double targetTilt, @NonNull CameraPosition currentCameraPosition, long animationDuration,
@Nullable MapboxMap.CancelableCallback callback) {
updateTiltAnimator((float) targetTilt, (float) currentCameraPosition.tilt, callback);
playAnimators(animationDuration, ANIMATOR_TILT);
}
/*if (previousPulsingRadius < 0) {
previousPulsingRadius = targetPulsingRadius;
}
void startLocationCirclePulsing(LocationComponentOptions options, MapboxMap mapboxMap) {
float previousPulsingRadius = getPreviousPulsingRadius();
updateAccuracyAnimators(targetPulsingRadius, previousPulsingRadius);
playAnimators(
noAnimation || !locationComponentOptions.pulseEnabled() ? 0 : ACCURACY_RADIUS_ANIMATION_DURATION,
ANIMATOR_PULSING_CIRCLE_RADIUS);
this.previousPulsingRadius = targetPulsingRadius;*/

if (previousPulsingRadius < 0) {
previousPulsingRadius = targetPulsingRadius;
}

// TODO: Use animator here?
pulsingLocationCircleAnimator = new PulsingLocationCircleAnimator(retrievePulseInterpolator(
options.pulseInterpolator()), mapboxMap, options);
pulsingLocationCircleAnimator.startPulsingAnimation();
}
locationComponentOptions.pulseInterpolator()), mapboxMap, locationComponentOptions);

void stopPulsingAnimation() {
pulsingLocationCircleAnimator.stopPulsingAnimation();
}

void pausePulsingAnimation() {
pulsingLocationCircleAnimator.pausePulsingAnimation();
}
pulsingLocationCircleAnimator.onAnimationUpdate(pulsingLocationCircleAnimator.getValueAnimator());


float previousPulsingRadius = getPreviousPulsingRadius();

updatePulsingAnimators(targetPulsingRadius, previousPulsingRadius);

void resumePulsingAnimation() {
pulsingLocationCircleAnimator.resumePulsingAnimation();
playAnimators(!locationComponentOptions.pulseEnabled() ? 0 : ACCURACY_RADIUS_ANIMATION_DURATION,
ANIMATOR_PULSING_CIRCLE_RADIUS);

this.previousPulsingRadius = targetPulsingRadius;
}

void pulsingAnimationIsRunning() {
pulsingLocationCircleAnimator.pulsingAnimationIsRunning();

void feedNewZoomLevel(double targetZoomLevel, @NonNull CameraPosition currentCameraPosition, long animationDuration,
@Nullable MapboxMap.CancelableCallback callback) {
updateZoomAnimator((float) targetZoomLevel, (float) currentCameraPosition.zoom, callback);
playAnimators(animationDuration, ANIMATOR_ZOOM);
}

boolean pulsingAnimationIsStarted() {
return pulsingLocationCircleAnimator.pulsingAnimationIsStarted();
void feedNewTilt(double targetTilt, @NonNull CameraPosition currentCameraPosition, long animationDuration,
@Nullable MapboxMap.CancelableCallback callback) {
updateTiltAnimator((float) targetTilt, (float) currentCameraPosition.tilt, callback);
playAnimators(animationDuration, ANIMATOR_TILT);
}

private LatLng getPreviousLayerLatLng() {
Expand Down Expand Up @@ -225,6 +240,17 @@ private float getPreviousAccuracyRadius() {
return previousRadius;
}

private float getPreviousPulsingRadius() {
MapboxAnimator animator = animatorArray.get(ANIMATOR_PULSING_CIRCLE_RADIUS);
float previousRadius;
if (animator != null) {
previousRadius = (float) animator.getAnimatedValue();
} else {
previousRadius = previousPulsingRadius;
}
return previousRadius;
}

private void updateLayerAnimators(LatLng previousLatLng, LatLng targetLatLng,
float previousBearing, float targetBearing) {
createNewLatLngAnimator(ANIMATOR_LAYER_LATLNG, previousLatLng, targetLatLng);
Expand Down Expand Up @@ -254,6 +280,11 @@ private void updateAccuracyAnimators(float targetAccuracyRadius, float previousA
createNewFloatAnimator(ANIMATOR_LAYER_ACCURACY, previousAccuracyRadius, targetAccuracyRadius);
}

private void updatePulsingAnimators(float targetPulsingRadius, float previousPulsingRadius) {
createNewFloatAnimator(ANIMATOR_PULSING_CIRCLE_RADIUS, previousPulsingRadius, targetPulsingRadius);
}


private void updateZoomAnimator(float targetZoomLevel, float previousZoomLevel,
@Nullable MapboxMap.CancelableCallback cancelableCallback) {
createNewCameraAdapterAnimator(ANIMATOR_ZOOM, previousZoomLevel, targetZoomLevel, cancelableCallback);
Expand Down Expand Up @@ -422,8 +453,8 @@ void setMaxAnimationFps(int maxAnimationFps){
this.maxAnimationFps = maxAnimationFps;
}

private Interpolator retrievePulseInterpolator(String interpolatorAnimationType) {
switch(interpolatorAnimationType) {
private Interpolator retrievePulseInterpolator(String desiredInterpolatorFromOptions) {
switch(desiredInterpolatorFromOptions) {
case PulseMode.LINEAR:
return new LinearInterpolator();
case PulseMode.ACCELERATE:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -658,7 +658,6 @@ public void applyStyle(@NonNull Context context, @StyleRes int styleRes) {
@SuppressLint("MissingPermission")
public void applyStyle(@NonNull final LocationComponentOptions options) {
checkActivationState();
Logger.d(TAG, "LocationComponent applyStyle()");
LocationComponent.this.options = options;
if (mapboxMap.getStyle() != null) {
locationLayerController.applyStyle(options);
Expand Down Expand Up @@ -1061,7 +1060,6 @@ public void removeOnLocationStaleListener(@NonNull OnLocationStaleListener liste
*/
public void onStart() {
isComponentStarted = true;
Logger.d(TAG, "onStart()");
onLocationLayerStart();
}

Expand Down Expand Up @@ -1090,15 +1088,8 @@ public void onStartLoadingMap() {
* Internal use.
*/
public void onFinishLoadingStyle() {
Logger.d(TAG, "onFinishLoadingStyle");
Logger.d(TAG, "isComponentInitialized = " + isComponentInitialized);

if (isComponentInitialized) {
style = mapboxMap.getStyle();
Logger.d(TAG, "isComponentInitialized == true && options.pulseAlpha() = " + options.pulseAlpha());
Logger.d(TAG, "isComponentInitialized == true && options.pulseSingleDuration() = " + options.pulseSingleDuration());
Logger.d(TAG, "isComponentInitialized == true && options.pulseColor() = " + options.pulseColor());

locationLayerController.initializeComponents(style, options);
locationCameraController.initializeOptions(options);
onLocationLayerStart();
Expand All @@ -1118,13 +1109,6 @@ private void onLocationLayerStart() {
if (options.enableStaleState()) {
staleStateManager.onStart();
}
Logger.d(TAG, "onLocationLayerStart: options.pulseEnabled() = " + options.pulseEnabled());
if (options.pulseEnabled()) {
Logger.d(TAG, "onLocationLayerStart: locationAnimatorCoordinator.startLocationCirclePulsing(options, mapboxMap)");
Logger.d(TAG, "onLocationLayerStart: options.pulseColor() = " + options.pulseColor());
Logger.d(TAG, "onLocationLayerStart: options.pulseSingleDuration() = " + options.pulseSingleDuration());
locationAnimatorCoordinator.startLocationCirclePulsing(options, mapboxMap);
}
}

if (isEnabled) {
Expand Down Expand Up @@ -1158,11 +1142,6 @@ private void onLocationLayerStop() {
if (locationEngine != null) {
locationEngine.removeLocationUpdates(currentLocationEngineListener);
}
if (options.pulseEnabled()) {
Logger.d(TAG, "onLocationLayerStop: options.pulseEnabled()");
Logger.d(TAG, "onLocationLayerStop: locationAnimatorCoordinator.stopPulsingAnimation()");
locationAnimatorCoordinator.stopPulsingAnimation();
}
mapboxMap.removeOnCameraMoveListener(onCameraMoveListener);
mapboxMap.removeOnCameraIdleListener(onCameraIdleListener);
}
Expand Down Expand Up @@ -1195,7 +1174,7 @@ private void initialize(@NonNull final Context context, @NonNull Style style,
locationAnimatorCoordinator = new LocationAnimatorCoordinator(
mapboxMap.getProjection(),
MapboxAnimatorSetProvider.getInstance(),
MapboxAnimatorProvider.getInstance()
MapboxAnimatorProvider.getInstance(), options
);
locationAnimatorCoordinator.setTrackingAnimationDurationMultiplier(options
.trackingAnimationDurationMultiplier());
Expand Down Expand Up @@ -1306,7 +1285,6 @@ private void updateLocation(@Nullable final Location location, boolean fromLastL
}

private void showLocationLayerIfHidden() {
Logger.d(TAG, "showLocationLayerIfHidden()");
boolean isLocationLayerHidden = locationLayerController.isHidden();
if (isEnabled && isComponentStarted && isLocationLayerHidden) {
locationLayerController.show();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1195,8 +1195,6 @@ public LocationComponentOptions build() {
+ locationComponentOptions.elevation() + ". Must be >= 0");
}

// TODO: Finish this logic below

if (locationComponentOptions.pulseEnabled() == null) {

Log.d("LCOptions", "autoBuild: this.pulsingCircleFadeEnabled == null ");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@
import static com.mapbox.mapboxsdk.location.LocationComponentConstants.PROPERTY_GPS_BEARING;
import static com.mapbox.mapboxsdk.location.LocationComponentConstants.PROPERTY_LOCATION_STALE;
import static com.mapbox.mapboxsdk.location.LocationComponentConstants.PROPERTY_PULSING_CIRCLE_LAYER;
import static com.mapbox.mapboxsdk.location.LocationComponentConstants.PROPERTY_PULSING_RADIUS;
import static com.mapbox.mapboxsdk.location.LocationComponentConstants.PROPERTY_SHADOW_ICON_OFFSET;
import static com.mapbox.mapboxsdk.location.LocationComponentConstants.SHADOW_ICON;
import static com.mapbox.mapboxsdk.location.LocationComponentConstants.SHADOW_LAYER;
Expand All @@ -60,6 +59,7 @@
import static com.mapbox.mapboxsdk.style.layers.Property.VISIBLE;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.circleColor;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.circleOpacity;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.circleRadius;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.circleStrokeColor;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconSize;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.visibility;
Expand Down Expand Up @@ -117,7 +117,7 @@ void initializeComponents(Style style, LocationComponentOptions options) {
}

void applyStyle(@NonNull LocationComponentOptions options) {
Logger.d(TAG, "applyStyle()");
this.options = options;
String newLayerBelowOption = options.layerBelow();
if ((layerBelow != null || newLayerBelowOption != null)) {
if (layerBelow == null || !layerBelow.equals(newLayerBelowOption)) {
Expand All @@ -131,9 +131,6 @@ void applyStyle(@NonNull LocationComponentOptions options) {
setRenderMode(renderMode);
}
}

this.options = options;

float elevation = options.elevation();
// Only add icon elevation if the values greater than 0.
if (elevation > 0) {
Expand Down Expand Up @@ -201,16 +198,13 @@ int getRenderMode() {

void show() {
isHidden = false;
Logger.d(TAG, "show()");
// addPulsingCircleLayerToMap();
setRenderMode(renderMode);
}

void hide() {
isHidden = true;
Logger.d(TAG, "hide()");
for (String layerId : layerSet) {
Logger.d(TAG, "layerId = " + layerId);
setLayerVisibility(layerId, false);
}
}
Expand Down Expand Up @@ -254,7 +248,6 @@ private void setLayerVisibility(@NonNull String layerId, boolean visible) {
}

private void addLayers(@NonNull String idBelowLayer) {
Logger.d(TAG, "LocationLayerController ----> addLayers()");
layerBelow = idBelowLayer;
addSymbolLayer(BEARING_LAYER, idBelowLayer);
addSymbolLayer(FOREGROUND_LAYER, BEARING_LAYER);
Expand All @@ -280,10 +273,9 @@ private void addLayerToMap(Layer layer, @NonNull String idBelowLayer) {
}

private void addPulsingCircleLayerToMap() {
Logger.d(TAG, "LocationLayerController ----> addPulsingCircleLayerToMap()");
pulsingCircleIsEnabled = options.pulseEnabled();
Layer pulsingCircleLayer = layerSourceProvider.generatePulsingCircleLayer();
addLayerToMap(pulsingCircleLayer, ACCURACY_LAYER);
pulsingCircleIsEnabled = options.pulseEnabled();
}

private void removeLayers() {
Expand All @@ -304,8 +296,14 @@ private void updateAccuracyRadius(float accuracy) {
}

private void updatePulsingCircleRadius(float radius) {
locationFeature.addNumberProperty(PROPERTY_PULSING_RADIUS, radius);
refreshSource();
Layer pulsingCircleLayer = mapboxMap.getStyle().getLayer(PROPERTY_PULSING_CIRCLE_LAYER);
if (pulsingCircleLayer != null) {
pulsingCircleLayer.setProperties(circleRadius(radius));

// TODO: Finish below to account for fade option usage
/*pulsingCircleLayer.setProperties(circleOpacity(1 - opacityCounter * .01f));
opacityCounter++;*/
}
}

//
Expand Down Expand Up @@ -398,7 +396,6 @@ private void styleScaling(@NonNull LocationComponentOptions options) {
}

private void stylePulsingCircle(LocationComponentOptions options) {
Logger.d(TAG, "stylePulsingCircle() starting && options.pulseEnabled() = " + options.pulseEnabled());
if (mapboxMap.getStyle() != null) {
if (mapboxMap.getStyle().getLayer(PROPERTY_PULSING_CIRCLE_LAYER) != null) {
Logger.d(TAG, "stylePulsingCircle: options.pulseEnabled() = " + options.pulseEnabled());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,32 +61,15 @@ TypeEvaluator provideEvaluator() {
return null;
}

public void startPulsingAnimation() {
createValueAnimator();
startValueAnimator();
}

private void createValueAnimator() {
public ValueAnimator getValueAnimator() {
if (mapboxMap.getStyle().getLayer(PROPERTY_PULSING_CIRCLE_LAYER) != null) {
Logger.d(TAG, "mapboxMap.getStyle().getLayer(PROPERTY_PULSING_CIRCLE_LAYER) != null");
Logger.d(TAG, "locationComponentOptions.pulseSingleDuration() = " + locationComponentOptions.pulseSingleDuration());
pulsingCircleLayer = mapboxMap.getStyle().getLayer(PROPERTY_PULSING_CIRCLE_LAYER);
animator = ValueAnimator.ofFloat(0f, PULSING_CIRCLE_RADIUS);
animator.setDuration((long) locationComponentOptions.pulseSingleDuration());
animator.setRepeatMode(ValueAnimator.RESTART);
animator.setRepeatCount(ValueAnimator.INFINITE);
animator.setInterpolator(interpolatorToUse);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
pulsingCircleLayer.setProperties(circleRadius((Float) valueAnimator.getAnimatedValue()));
if (locationComponentOptions.pulsingCircleFadeEnabled()) {
pulsingCircleLayer.setProperties(circleOpacity(1 - opacityCounter * .01f));
opacityCounter++;
}
}
});
}
return animator;
}

private void startValueAnimator() {
Expand Down Expand Up @@ -121,7 +104,7 @@ public void pausePulsingAnimation() {
public void resumePulsingAnimation() {
if (animator != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
animator.resume();
// createValueAnimator();
// getValueAnimator();
// startValueAnimator();
}
}
Expand Down

0 comments on commit 9a44ddf

Please sign in to comment.