From e7e671c1ff61308764d9c4f74755f2a64d503386 Mon Sep 17 00:00:00 2001 From: Jimmy Shih Date: Thu, 11 Jul 2013 14:38:09 -0700 Subject: [PATCH] Check if location speed and accuracy are available. --- .../com/google/android/apps/mytracks/MapOverlay.java | 4 +++- .../apps/mytracks/fragments/MyTracksMapFragment.java | 3 ++- .../android/apps/mytracks/fragments/StatsFragment.java | 3 ++- .../apps/mytracks/services/TrackRecordingService.java | 2 +- .../apps/mytracks/stats/TripStatisticsUpdater.java | 10 ++++++---- 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/MyTracks/src/com/google/android/apps/mytracks/MapOverlay.java b/MyTracks/src/com/google/android/apps/mytracks/MapOverlay.java index 3f3acb07d..9f313acac 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/MapOverlay.java +++ b/MyTracks/src/com/google/android/apps/mytracks/MapOverlay.java @@ -107,7 +107,9 @@ public class MapOverlay { public CachedLocation(Location location) { this.valid = LocationUtils.isValidLocation(location); this.latLng = valid ? new LatLng(location.getLatitude(), location.getLongitude()) : null; - this.speed = (int) Math.floor(location.getSpeed() * UnitConversions.MS_TO_KMH); + this.speed = location.hasSpeed() ? (int) Math.floor( + location.getSpeed() * UnitConversions.MS_TO_KMH) + : -1; } /** diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/MyTracksMapFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/MyTracksMapFragment.java index 8ec968c32..1837e5cad 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/MyTracksMapFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/MyTracksMapFragment.java @@ -714,7 +714,8 @@ public class MyTracksMapFragment extends SupportMapFragment implements TrackData hasGoodFix = false; } else { hasFix = !LocationUtils.isLocationOld(currentLocation); - hasGoodFix = currentLocation.getAccuracy() <= recordingGpsAccuracy; + hasGoodFix = currentLocation.hasAccuracy() + && currentLocation.getAccuracy() < recordingGpsAccuracy; } if (!hasFix) { message = getString(R.string.gps_wait_for_signal); diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/StatsFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/StatsFragment.java index a32dd079f..72576cfab 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/StatsFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/StatsFragment.java @@ -148,7 +148,8 @@ public class StatsFragment extends Fragment implements TrackDataListener { if (lastLocation != null) { boolean hasFix = !LocationUtils.isLocationOld(lastLocation); - boolean hasGoodFix = lastLocation.getAccuracy() <= recordingGpsAccuracy; + boolean hasGoodFix = lastLocation.hasAccuracy() + && lastLocation.getAccuracy() < recordingGpsAccuracy; if (!hasFix || !hasGoodFix) { lastLocation = null; diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java b/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java index 50fc379ec..e4de3e1cf 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java +++ b/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java @@ -888,7 +888,7 @@ public class TrackRecordingService extends Service { return; } - if (location.getAccuracy() > recordingGpsAccuracy) { + if (!location.hasAccuracy() || location.getAccuracy() >= recordingGpsAccuracy) { Log.d(TAG, "Ignore onLocationChangedAsync. Poor accuracy."); return; } diff --git a/MyTracks/src/com/google/android/apps/mytracks/stats/TripStatisticsUpdater.java b/MyTracks/src/com/google/android/apps/mytracks/stats/TripStatisticsUpdater.java index 7a2d20f14..c6c0065d4 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/stats/TripStatisticsUpdater.java +++ b/MyTracks/src/com/google/android/apps/mytracks/stats/TripStatisticsUpdater.java @@ -192,16 +192,18 @@ public class TripStatisticsUpdater { currentSegment.addMovingTime(movingTime); // Update grade - if (lastLocation.hasAltitude() && location.hasAltitude()) { + if (location.hasAltitude() && lastLocation.hasAltitude()) { float run = lastLocation.distanceTo(location); double rise = location.getAltitude() - lastLocation.getAltitude(); updateGrade(run, rise); } // Update max speed - updateSpeed( - location.getTime(), location.getSpeed(), lastLocation.getTime(), lastLocation.getSpeed()); - + if (location.hasSpeed() && lastLocation.hasSpeed()) { + updateSpeed( + location.getTime(), location.getSpeed(), lastLocation.getTime(), lastLocation.getSpeed()); + } + lastLocation = location; lastMovingLocation = location; }