showing a preliminary location if recording started with an old / imprecise location fix)
This commit is contained in:
parent
b448bb7f2d
commit
b44e39667a
8 changed files with 46 additions and 20 deletions
|
@ -209,7 +209,7 @@ public class MainActivityMapFragment extends Fragment implements TrackbookKeys {
|
|||
|
||||
// mark user's location on map
|
||||
if (mCurrentBestLocation != null && !mTrackerServiceRunning) {
|
||||
mMyLocationOverlay = MapHelper.createMyLocationOverlay(mActivity, mCurrentBestLocation, LocationHelper.isCurrent(mCurrentBestLocation));
|
||||
mMyLocationOverlay = MapHelper.createMyLocationOverlay(mActivity, mCurrentBestLocation, LocationHelper.isCurrent(mCurrentBestLocation), false);
|
||||
mMapView.getOverlays().add(mMyLocationOverlay);
|
||||
}
|
||||
|
||||
|
@ -510,7 +510,7 @@ public class MainActivityMapFragment extends Fragment implements TrackbookKeys {
|
|||
mMapView.getOverlays().remove(mMyLocationOverlay);
|
||||
// only update while not tracking
|
||||
if (!mTrackerServiceRunning) {
|
||||
mMyLocationOverlay = MapHelper.createMyLocationOverlay(mActivity, mCurrentBestLocation, LocationHelper.isCurrent(mCurrentBestLocation));
|
||||
mMyLocationOverlay = MapHelper.createMyLocationOverlay(mActivity, mCurrentBestLocation, LocationHelper.isCurrent(mCurrentBestLocation), false);
|
||||
mMapView.getOverlays().add(mMyLocationOverlay);
|
||||
}
|
||||
}
|
||||
|
@ -520,11 +520,16 @@ public class MainActivityMapFragment extends Fragment implements TrackbookKeys {
|
|||
private void drawTrackOverlay(Track track) {
|
||||
mMapView.getOverlays().remove(mTrackOverlay);
|
||||
mTrackOverlay = null;
|
||||
if (track != null) {
|
||||
if (track == null || track.getSize() == 0) {
|
||||
LogHelper.i(LOG_TAG, "Waiting for a track. Showing preliminary location.");
|
||||
mTrackOverlay = MapHelper.createMyLocationOverlay(mActivity, mCurrentBestLocation, false, mTrackerServiceRunning);
|
||||
Toast.makeText(mActivity, mActivity.getString(R.string.toast_message_acquiring_location), Toast.LENGTH_LONG).show();
|
||||
} else {
|
||||
LogHelper.v(LOG_TAG, "Drawing track overlay.");
|
||||
mTrackOverlay = MapHelper.createTrackOverlay(mActivity, track, mTrackerServiceRunning);
|
||||
mMapView.getOverlays().add(mTrackOverlay);
|
||||
}
|
||||
mMapView.getOverlays().add(mTrackOverlay);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -402,6 +402,9 @@ public class TrackerService extends Service implements TrackbookKeys, SensorEven
|
|||
if (LocationHelper.isAccurate(mCurrentBestLocation) && LocationHelper.isCurrent(mCurrentBestLocation)) {
|
||||
// add first location to track
|
||||
success = mTrack.addWayPoint(previousLocation, mCurrentBestLocation);
|
||||
} else {
|
||||
// just send a broadcast indicating that current location fix not not suited
|
||||
broadcastTrackUpdate();
|
||||
}
|
||||
} else {
|
||||
// get location of previous WayPoint
|
||||
|
|
|
@ -276,7 +276,12 @@ public class Track implements TrackbookKeys, Parcelable {
|
|||
|
||||
/* Getter recorded distance */
|
||||
public Double getTrackDistance() {
|
||||
return (double) mWayPoints.get(mWayPoints.size()-1).getDistanceToStartingPoint();
|
||||
int size = mWayPoints.size();
|
||||
if (size > 0) {
|
||||
return (double)mWayPoints.get(size - 1).getDistanceToStartingPoint();
|
||||
} else {
|
||||
return (double)0f;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -94,8 +94,8 @@ public final class LocationHelper implements TrackbookKeys {
|
|||
|
||||
// check whether the new location fix is newer or older
|
||||
long timeDelta = location.getElapsedRealtimeNanos() - currentBestLocation.getElapsedRealtimeNanos();
|
||||
boolean isSignificantlyNewer = timeDelta > TWO_MINUTES_IN_NANOSECONDS;
|
||||
boolean isSignificantlyOlder = timeDelta < -TWO_MINUTES_IN_NANOSECONDS;
|
||||
boolean isSignificantlyNewer = timeDelta > ONE_MINUTE_IN_NANOSECONDS;
|
||||
boolean isSignificantlyOlder = timeDelta < -ONE_MINUTE_IN_NANOSECONDS;
|
||||
boolean isNewer = timeDelta > 0;
|
||||
|
||||
// if it's been more than two minutes since the current location, use the new location because the user has likely moved
|
||||
|
@ -138,7 +138,7 @@ public final class LocationHelper implements TrackbookKeys {
|
|||
return false;
|
||||
} else {
|
||||
long locationAge = SystemClock.elapsedRealtimeNanos() - location.getElapsedRealtimeNanos();
|
||||
return locationAge < TWO_MINUTES_IN_NANOSECONDS;
|
||||
return locationAge < ONE_MINUTE_IN_NANOSECONDS;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -45,17 +45,20 @@ public final class MapHelper {
|
|||
|
||||
|
||||
/* Creates icon overlay for current position (used in MainActivity Fragment) */
|
||||
public static ItemizedIconOverlay createMyLocationOverlay(final Context context, Location currentBestLocation, boolean locationIsNew) {
|
||||
public static ItemizedIconOverlay createMyLocationOverlay(final Context context, Location currentBestLocation, boolean locationIsNew, boolean trackingActive) {
|
||||
|
||||
final ArrayList<OverlayItem> overlayItems = new ArrayList<>();
|
||||
|
||||
// create marker
|
||||
Drawable newMarker;
|
||||
if (locationIsNew) {
|
||||
if (locationIsNew && !trackingActive) {
|
||||
newMarker = ContextCompat.getDrawable(context, R.drawable.ic_my_location_dot_blue_24dp);
|
||||
} else if (!locationIsNew && trackingActive) {
|
||||
newMarker = ContextCompat.getDrawable(context, R.drawable.ic_my_location_dot_red_grey_24dp);
|
||||
} else {
|
||||
newMarker = ContextCompat.getDrawable(context, R.drawable.ic_my_location_dot_grey_24dp);
|
||||
newMarker = ContextCompat.getDrawable(context, R.drawable.ic_my_location_dot_blue_grey_24dp);
|
||||
}
|
||||
|
||||
OverlayItem overlayItem = createOverlayItem(context, currentBestLocation);
|
||||
overlayItem.setMarker(newMarker);
|
||||
|
||||
|
@ -84,13 +87,14 @@ public final class MapHelper {
|
|||
/* Creates icon overlay for track */
|
||||
public static ItemizedIconOverlay createTrackOverlay(final Context context, Track track, boolean trackingActive){
|
||||
|
||||
WayPoint wayPoint;
|
||||
final ArrayList<OverlayItem> overlayItems = new ArrayList<>();
|
||||
boolean currentPosition;
|
||||
final int trackSize = track.getSize();
|
||||
final List<WayPoint> wayPoints = track.getWayPoints();
|
||||
final ArrayList<OverlayItem> overlayItems = new ArrayList<>();
|
||||
WayPoint wayPoint;
|
||||
|
||||
for (int i = 0; i < track.getSize(); i++) {
|
||||
|
||||
for (int i = 0 ; i < track.getSize() ; i++) {
|
||||
// get WayPoint and check if it is current position
|
||||
wayPoint = wayPoints.get(i);
|
||||
currentPosition = i == trackSize - 1;
|
||||
|
@ -113,7 +117,7 @@ public final class MapHelper {
|
|||
else if (trackingActive && currentPosition) {
|
||||
if (wayPoint.getIsStopOver()) {
|
||||
// stop over marker
|
||||
newMarker = ContextCompat.getDrawable(context, R.drawable.ic_my_location_dot_grey_24dp);
|
||||
newMarker = ContextCompat.getDrawable(context, R.drawable.ic_my_location_dot_blue_grey_24dp);
|
||||
} else {
|
||||
// default marker for this case
|
||||
newMarker = ContextCompat.getDrawable(context, R.drawable.ic_my_location_dot_red_24dp);
|
||||
|
|
|
@ -75,10 +75,6 @@ public interface TrackbookKeys {
|
|||
int FRAGMENT_ID_MAP = 0;
|
||||
int FRAGMENT_ID_TRACKS = 1;
|
||||
|
||||
String FRAGMENT_TAG_MAP = "fragmentTagMap";
|
||||
String FRAGMENT_TAG_TRACKS = "fragmentTagTracks";
|
||||
|
||||
|
||||
/* RESULTS */
|
||||
int RESULT_SAVE_DIALOG = 1;
|
||||
int RESULT_CLEAR_DIALOG = 2;
|
||||
|
@ -90,7 +86,7 @@ public interface TrackbookKeys {
|
|||
long EIGHT_HOURS_IN_MILLISECONDS = 43200000; // maximum tracking duration
|
||||
long FIFTEEN_SECONDS_IN_MILLISECONDS = 15000; // timer interval for tracking
|
||||
long FIVE_MINUTES_IN_NANOSECONDS = 5L * 60000000000L; // determines a stop over
|
||||
long TWO_MINUTES_IN_NANOSECONDS = 2L * 60000000000L; // defines an old location
|
||||
long ONE_MINUTE_IN_NANOSECONDS = 1L * 60000000000L; // defines an old location
|
||||
int MAXIMUM_TRACK_FILES = 25;
|
||||
int FIFTY_METER_RADIUS = 50;
|
||||
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:height="24dp"
|
||||
android:viewportHeight="96.0"
|
||||
android:viewportWidth="96.0"
|
||||
android:width="24dp">
|
||||
<path
|
||||
android:fillAlpha="0.33"
|
||||
android:fillColor="@color/trackbook_red"
|
||||
android:pathData="M48,48m-48,0a48,48 0,1 1,96 0a48,48 0,1 1,-96 0"/>
|
||||
<path
|
||||
android:fillColor="@color/trackbook_grey_light"
|
||||
android:pathData="M48,48m-24,0a24,24 0,1 1,48 0a24,24 0,1 1,-48 0"/>
|
||||
</vector>
|
Loading…
Reference in a new issue