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

Location accuracy threshold #9472

Merged
merged 1 commit into from
Jul 17, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ public class MapboxMapOptions implements Parcelable {
private int[] myLocationBackgroundPadding;
private int myLocationAccuracyTintColor;
private int myLocationAccuracyAlpha;
private float myLocationAccuracyThreshold;

private String apiBaseUrl;

Expand Down Expand Up @@ -148,6 +149,7 @@ private MapboxMapOptions(Parcel in) {
myLocationBackgroundPadding = in.createIntArray();
myLocationAccuracyAlpha = in.readInt();
myLocationAccuracyTintColor = in.readInt();
myLocationAccuracyThreshold = in.readFloat();

style = in.readString();
apiBaseUrl = in.readString();
Expand Down Expand Up @@ -291,6 +293,8 @@ public static MapboxMapOptions createFromAttributes(@NonNull Context context, @N
mapboxMapOptions.myLocationAccuracyTint(
typedArray.getColor(R.styleable.mapbox_MapView_mapbox_myLocationAccuracyTintColor,
ColorUtils.getPrimaryColor(context)));
mapboxMapOptions.myLocationAccuracyThreshold(
typedArray.getFloat(R.styleable.mapbox_MapView_mapbox_myLocationAccuracyThreshold, 0));
mapboxMapOptions.textureMode(
typedArray.getBoolean(R.styleable.mapbox_MapView_mapbox_renderTextureMode, false));
} finally {
Expand Down Expand Up @@ -680,6 +684,17 @@ public MapboxMapOptions myLocationAccuracyAlpha(@IntRange(from = 0, to = 255) in
return this;
}

/**
* Set accuracy circle threshold. Circle won't be displayed if accuracy is below set value.
*
* @param myLocationAccuracyThreshold Value of accuracy (in meters), below which circle won't be displayed
* @return This
*/
public MapboxMapOptions myLocationAccuracyThreshold(float myLocationAccuracyThreshold) {
this.myLocationAccuracyThreshold = myLocationAccuracyThreshold;
return this;
}

/**
* Enable TextureView as rendered surface.
* <p>
Expand Down Expand Up @@ -987,6 +1002,15 @@ public int getMyLocationAccuracyAlpha() {
return myLocationAccuracyAlpha;
}

/**
* Returns current accuracy threshold value (in meters).
*
* @return Value of accuracy threshold (in meters), below which circle won't be displayed
*/
public float getMyLocationAccuracyThreshold() {
return myLocationAccuracyThreshold;
}

/**
* Get the current configured debug state for a map view.
*
Expand Down Expand Up @@ -1065,6 +1089,7 @@ public void writeToParcel(Parcel dest, int flags) {
dest.writeIntArray(myLocationBackgroundPadding);
dest.writeInt(myLocationAccuracyAlpha);
dest.writeInt(myLocationAccuracyTintColor);
dest.writeFloat(myLocationAccuracyThreshold);

dest.writeString(style);
dest.writeString(apiBaseUrl);
Expand Down Expand Up @@ -1153,6 +1178,9 @@ public boolean equals(Object o) {
if (myLocationAccuracyAlpha != options.myLocationAccuracyAlpha) {
return false;
}
if (myLocationAccuracyThreshold != options.myLocationAccuracyThreshold) {
return false;
}
if (cameraPosition != null ? !cameraPosition.equals(options.cameraPosition) : options.cameraPosition != null) {
return false;
}
Expand Down Expand Up @@ -1230,6 +1258,8 @@ public int hashCode() {
result = 31 * result + Arrays.hashCode(myLocationBackgroundPadding);
result = 31 * result + myLocationAccuracyTintColor;
result = 31 * result + myLocationAccuracyAlpha;
result = 31 * result + (myLocationAccuracyThreshold != +0.0f
? Float.floatToIntBits(myLocationAccuracyThreshold) : 0);
result = 31 * result + (apiBaseUrl != null ? apiBaseUrl.hashCode() : 0);
result = 31 * result + (textureMode ? 1 : 0);
result = 31 * result + (style != null ? style.hashCode() : 0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ public class MyLocationView extends View {

private float accuracy;
private Paint accuracyPaint;
private float accuracyThreshold;

private ValueAnimator locationChangeAnimator;
private ValueAnimator accuracyAnimator;
Expand Down Expand Up @@ -591,6 +592,16 @@ public void setLocationChangeAnimationEnabled(boolean locationChangeAnimationEna
this.locationChangeAnimationEnabled = locationChangeAnimationEnabled;
}

/**
* Set accuracy circle threshold. Circle won't be displayed if accuracy is below set value.
* For internal use only.
*
* @param accuracyThreshold Value below which circle won't be displayed
*/
public void setAccuracyThreshold(float accuracyThreshold) {
this.accuracyThreshold = accuracyThreshold;
}

/**
* Set the bearing tracking mode, for internal use only.
*
Expand Down Expand Up @@ -928,10 +939,11 @@ void updateAccuracy(@NonNull Location location) {
accuracyAnimator.end();
}

accuracyAnimator = ValueAnimator.ofFloat(accuracy, location.getAccuracy());
float newAccuracy = location.getAccuracy() >= accuracyThreshold ? location.getAccuracy() : 0f;
accuracyAnimator = ValueAnimator.ofFloat(accuracy, newAccuracy);
accuracyAnimator.setDuration(750);
accuracyAnimator.start();
accuracy = location.getAccuracy();
accuracy = newAccuracy;
}

abstract void invalidate();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ public class MyLocationViewSettings {
//

private int accuracyAlpha;
private float accuracyThreshold = 0f;

@ColorInt
private int accuracyTintColor;
Expand Down Expand Up @@ -93,6 +94,7 @@ public void initialise(@NonNull MapboxMapOptions options) {
setBackgroundTintColor(options.getMyLocationBackgroundTintColor());
setAccuracyAlpha(options.getMyLocationAccuracyAlpha());
setAccuracyTintColor(options.getMyLocationAccuracyTintColor());
setAccuracyThreshold(options.getMyLocationAccuracyThreshold());
}

/**
Expand Down Expand Up @@ -293,6 +295,25 @@ public void setAccuracyTintColor(@ColorInt int accuracyTintColor) {
myLocationView.setAccuracyTint(accuracyTintColor);
}

/**
* Returns current accuracy threshold value (in meters).
*
* @return Value of accuracy threshold (in meters), below which circle won't be displayed
*/
public float getAccuracyThreshold() {
return accuracyThreshold;
}

/**
* Set accuracy circle threshold. Circle won't be displayed if accuracy is below set value.
*
* @param accuracyThreshold Value of accuracy (in meters), below which circle won't be displayed
*/
public void setAccuracyThreshold(float accuracyThreshold) {
this.accuracyThreshold = accuracyThreshold;
myLocationView.setAccuracyThreshold(accuracyThreshold);
}

public void setTilt(double tilt) {
myLocationView.setTilt(tilt);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
<attr name="mapbox_myLocationBackgroundMarginBottom" format="dimension"/>
<attr name="mapbox_myLocationAccuracyTintColor" format="color"/>
<attr name="mapbox_myLocationAccuracyAlpha" format="integer"/>
<attr name="mapbox_myLocationAccuracyThreshold" format="float"/>

<!--Compass-->
<attr name="mapbox_uiCompass" format="boolean"/>
Expand Down