[android] - post resetting invalidation flag to avoid race condition (#8738)

This commit is contained in:
Tobrun
2017-04-18 16:13:15 +02:00
committed by GitHub
parent 8e9eaaabfc
commit 589d71d7ad

View File

@@ -321,7 +321,7 @@ public class MyLocationView extends View {
setCompass(location.getBearing() - bearing);
}
} else if (myBearingTrackingMode == MyBearingTracking.COMPASS
&& compassListener.isSensorAvailable()) {
&& compassListener.isSensorAvailable()) {
setCompass(magneticHeading - bearing);
}
}
@@ -336,7 +336,7 @@ public class MyLocationView extends View {
public void onStart() {
if (myBearingTrackingMode == MyBearingTracking.COMPASS
&& compassListener.isSensorAvailable()) {
&& compassListener.isSensorAvailable()) {
compassListener.onResume();
}
if (isEnabled()) {
@@ -461,7 +461,7 @@ public class MyLocationView extends View {
public void setMyBearingTrackingMode(@MyBearingTracking.Mode int myBearingTrackingMode) {
this.myBearingTrackingMode = myBearingTrackingMode;
if (myBearingTrackingMode == MyBearingTracking.COMPASS
&& compassListener.isSensorAvailable()) {
&& compassListener.isSensorAvailable()) {
compassListener.onResume();
} else {
compassListener.onPause();
@@ -741,7 +741,7 @@ public class MyLocationView extends View {
abstract void invalidate();
}
private class MyLocationTrackingBehavior extends MyLocationBehavior {
private class MyLocationTrackingBehavior extends MyLocationBehavior implements MapboxMap.CancelableCallback {
@Override
void updateLatLng(@NonNull Location location) {
@@ -757,11 +757,11 @@ public class MyLocationView extends View {
locationUpdateTimestamp = SystemClock.elapsedRealtime();
// calculate animation duration
float animationDuration;
int animationDuration;
if (previousUpdateTimeStamp == 0) {
animationDuration = 0;
} else {
animationDuration = (locationUpdateTimestamp - previousUpdateTimeStamp) * 1.1f
animationDuration = (int) ((locationUpdateTimestamp - previousUpdateTimeStamp) * 1.1f)
/*make animation slightly longer*/;
}
@@ -780,20 +780,10 @@ public class MyLocationView extends View {
// accuracy
updateAccuracy(location);
// disable dismiss of tracking settings, enabled in #onFinish
mapboxMap.getTrackingSettings().setDismissTrackingModeForCameraPositionChange(false);
// ease to new camera position with a linear interpolator
mapboxMap.easeCamera(CameraUpdateFactory.newCameraPosition(builder.build()), (int) animationDuration,
false /*linear interpolator*/, new MapboxMap.CancelableCallback() {
@Override
public void onCancel() {
}
@Override
public void onFinish() {
mapboxMap.getTrackingSettings().setDismissTrackingModeForCameraPositionChange(true);
}
});
mapboxMap.easeCamera(CameraUpdateFactory.newCameraPosition(builder.build()), animationDuration, false, this);
}
@Override
@@ -804,6 +794,22 @@ public class MyLocationView extends View {
screenLocation = new PointF(x, y);
MyLocationView.this.invalidate();
}
@Override
public void onCancel() {
//no op
}
@Override
public void onFinish() {
// Posting to end message queue to avoid race condition #8560
post(new Runnable() {
@Override
public void run() {
mapboxMap.getTrackingSettings().setDismissTrackingModeForCameraPositionChange(true);
}
});
}
}
private class MyLocationShowBehavior extends MyLocationBehavior {