From a3d5648c8d6c1f55755b6413960699944f7d9c59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Mon, 16 Apr 2018 18:16:20 +0200 Subject: [PATCH] [LLP] - manually set first location update --- .../locationlayer/LocationLayerAnimator.java | 22 ++++++++++++++----- .../locationlayer/LocationLayerPlugin.java | 11 ++++++++-- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/plugin-locationlayer/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerAnimator.java b/plugin-locationlayer/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerAnimator.java index eb68c97fb..7fc7c870d 100644 --- a/plugin-locationlayer/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerAnimator.java +++ b/plugin-locationlayer/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerAnimator.java @@ -53,15 +53,19 @@ void removeCameraListener(OnCameraAnimationsValuesChangeListener listener) { cameraListeners.remove(listener); } - void feedNewLocation(@NonNull Location newLocation, @NonNull CameraPosition currentCameraPosition, - boolean isGpsNorth) { + /** + * Returns whether location has to be updated manually. + */ + boolean feedNewLocation(@NonNull Location newLocation, @NonNull CameraPosition currentCameraPosition, + boolean isGpsNorth) { if (previousLocation == null) { previousLocation = newLocation; locationUpdateTimestamp = SystemClock.elapsedRealtime(); + return true; } if (invalidUpdateInterval()) { - return; + return false; } LatLng previousLayerLatLng = getPreviousLayerLatLng(); @@ -80,11 +84,17 @@ void feedNewLocation(@NonNull Location newLocation, @NonNull CameraPosition curr playAllLocationAnimators(getAnimationDuration()); previousLocation = newLocation; + + return false; } - void feedNewCompassBearing(float targetCompassBearing, @NonNull CameraPosition currentCameraPosition) { + /** + * Returns whether compass bearing has to be updated manually. + */ + boolean feedNewCompassBearing(float targetCompassBearing, @NonNull CameraPosition currentCameraPosition) { if (previousCompassBearing < 0) { previousCompassBearing = targetCompassBearing; + return true; } float previousLayerBearing = getPreviousLayerCompassBearing(); @@ -94,6 +104,8 @@ void feedNewCompassBearing(float targetCompassBearing, @NonNull CameraPosition c playCompassAnimators(COMPASS_UPDATE_RATE_MS); previousCompassBearing = targetCompassBearing; + + return false; } private final ValueAnimator.AnimatorUpdateListener layerLatLngUpdateListener = @@ -251,7 +263,7 @@ private long getAnimationDuration() { animationDuration = 0; } else { animationDuration = (int) ((locationUpdateTimestamp - previousUpdateTimeStamp) * 1.1f) - /*make animation slightly longer*/; + /*make animation slightly longer*/; } return animationDuration; } diff --git a/plugin-locationlayer/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerPlugin.java b/plugin-locationlayer/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerPlugin.java index 912949f48..a11791ef9 100644 --- a/plugin-locationlayer/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerPlugin.java +++ b/plugin-locationlayer/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerPlugin.java @@ -505,12 +505,19 @@ private void updateLocation(final Location location) { staleStateManager.updateLatestLocationTime(); CameraPosition currentCameraPosition = mapboxMap.getCameraPosition(); boolean isGpsNorth = getCameraMode() == CameraMode.TRACKING_GPS_NORTH; - locationLayerAnimator.feedNewLocation(location, currentCameraPosition, isGpsNorth); + boolean forceLocationUpdate = locationLayerAnimator.feedNewLocation(location, currentCameraPosition, isGpsNorth); + if (forceLocationUpdate) { + locationLayer.onNewLatLngValue(new LatLng(location.getLatitude(), location.getLongitude())); + locationLayer.onNewGpsBearingValue(location.getBearing()); + } locationLayer.updateAccuracyRadius(location); } private void updateCompassHeading(float heading) { - locationLayerAnimator.feedNewCompassBearing(heading, mapboxMap.getCameraPosition()); + boolean forceCompassUpdate = locationLayerAnimator.feedNewCompassBearing(heading, mapboxMap.getCameraPosition()); + if (forceCompassUpdate) { + locationLayer.onNewCompassBearingValue(heading); + } } /**