From aafe93b723b30a1f110c8d312bcae9d97d42b4ee Mon Sep 17 00:00:00 2001 From: Jimmy Shih Date: Wed, 29 May 2013 11:06:23 -0700 Subject: [PATCH] Code refactor. Remove DynamicSpeedTrackPathDescriptor's dependency on selected_track_id_key. --- .../android/apps/mytracks/MapOverlay.java | 7 +++++-- .../fragments/MyTracksMapFragment.java | 15 ++++++++------- .../maps/DynamicSpeedTrackPathDescriptor.java | 18 +----------------- .../maps/FixedSpeedTrackPathDescriptor.java | 3 ++- .../mytracks/maps/MultiColorTrackPath.java | 5 +++-- .../mytracks/maps/SingleColorTrackPath.java | 3 ++- .../android/apps/mytracks/maps/TrackPath.java | 9 ++++++++- .../mytracks/maps/TrackPathDescriptor.java | 9 +++++++-- .../DynamicSpeedTrackPathDescriptorTest.java | 12 ------------ 9 files changed, 36 insertions(+), 45 deletions(-) diff --git a/MyTracks/src/com/google/android/apps/mytracks/MapOverlay.java b/MyTracks/src/com/google/android/apps/mytracks/MapOverlay.java index 49e84d6b7..81c134c86 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/MapOverlay.java +++ b/MyTracks/src/com/google/android/apps/mytracks/MapOverlay.java @@ -22,6 +22,7 @@ import com.google.android.apps.mytracks.content.Waypoint; import com.google.android.apps.mytracks.content.Waypoint.WaypointType; import com.google.android.apps.mytracks.maps.TrackPath; import com.google.android.apps.mytracks.maps.TrackPathFactory; +import com.google.android.apps.mytracks.stats.TripStatistics; import com.google.android.apps.mytracks.util.LocationUtils; import com.google.android.apps.mytracks.util.PreferencesUtils; import com.google.android.apps.mytracks.util.UnitConversions; @@ -209,17 +210,19 @@ public class MapOverlay { * * @param googleMap the google map * @param paths the paths + * @param tripStatistics the trip statistics * @param reload true to reload all points * @return true if has the start marker */ - public boolean update(GoogleMap googleMap, ArrayList paths, boolean reload) { + public boolean update(GoogleMap googleMap, ArrayList paths, + TripStatistics tripStatistics, boolean reload) { synchronized (locations) { boolean hasStartMarker = false; // Merge pendingLocations with locations int newLocations = pendingLocations.drainTo(locations); // Call updateState first because we want to update its state each time // (for dynamic coloring) - if (trackPath.updateState() || reload) { + if (trackPath.updateState(tripStatistics) || reload) { googleMap.clear(); paths.clear(); trackPath.updatePath(googleMap, paths, 0, locations); 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 1d43fc2e0..0b6b62e21 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/MyTracksMapFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/MyTracksMapFragment.java @@ -426,9 +426,10 @@ public class MyTracksMapFragment extends SupportMapFragment implements TrackData if (isResumed()) { getActivity().runOnUiThread(new Runnable() { public void run() { - if (isResumed() && googleMap != null) { - boolean hasStartMarker = mapOverlay.update(googleMap, paths, reloadPaths); - + if (isResumed() && googleMap != null && currentTrack != null) { + boolean hasStartMarker = mapOverlay.update( + googleMap, paths, currentTrack.getTripStatistics(), reloadPaths); + /* * If has the start marker, then don't need to reload the paths each * time @@ -436,11 +437,11 @@ public class MyTracksMapFragment extends SupportMapFragment implements TrackData if (hasStartMarker) { reloadPaths = false; } - + if (lastTrackPoint != null && isSelectedTrackRecording()) { boolean firstLocation = setCurrentLocation(lastTrackPoint); if (firstLocation) { - keepCurrentLocationVisible = true; + keepCurrentLocationVisible = true; } updateCurrentLocation(firstLocation); setWarningMessage(true); @@ -470,8 +471,8 @@ public class MyTracksMapFragment extends SupportMapFragment implements TrackData if (isResumed()) { getActivity().runOnUiThread(new Runnable() { public void run() { - if (isResumed() && googleMap != null) { - mapOverlay.update(googleMap, paths, true); + if (isResumed() && googleMap != null && currentTrack != null) { + mapOverlay.update(googleMap, paths, currentTrack.getTripStatistics(), true); } } }); diff --git a/MyTracks/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptor.java b/MyTracks/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptor.java index 4f39583c0..c73855ad6 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptor.java +++ b/MyTracks/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptor.java @@ -16,11 +16,7 @@ package com.google.android.apps.mytracks.maps; -import static com.google.android.apps.mytracks.Constants.TAG; - import com.google.android.apps.mytracks.Constants; -import com.google.android.apps.mytracks.content.MyTracksProviderUtils; -import com.google.android.apps.mytracks.content.Track; import com.google.android.apps.mytracks.stats.TripStatistics; import com.google.android.apps.mytracks.util.PreferencesUtils; import com.google.android.apps.mytracks.util.UnitConversions; @@ -30,7 +26,6 @@ import com.google.common.annotations.VisibleForTesting; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; -import android.util.Log; /** * A dynamic speed path descriptor. @@ -79,18 +74,7 @@ public class DynamicSpeedTrackPathDescriptor implements TrackPathDescriptor { } @Override - public boolean updateState() { - long selectedTrackId = PreferencesUtils.getLong(context, R.string.selected_track_id_key); - if (selectedTrackId == PreferencesUtils.SELECTED_TRACK_ID_DEFAULT) { - Log.d(TAG, "No selected track id."); - return false; - } - Track track = MyTracksProviderUtils.Factory.get(context).getTrack(selectedTrackId); - if (track == null) { - Log.d(TAG, "No track for " + selectedTrackId); - return false; - } - TripStatistics tripStatistics = track.getTripStatistics(); + public boolean updateState(TripStatistics tripStatistics) { double newAverageMovingSpeed = (int) Math.floor( tripStatistics.getAverageMovingSpeed() * UnitConversions.MS_TO_KMH); diff --git a/MyTracks/src/com/google/android/apps/mytracks/maps/FixedSpeedTrackPathDescriptor.java b/MyTracks/src/com/google/android/apps/mytracks/maps/FixedSpeedTrackPathDescriptor.java index 733195d8a..ecfd0bf81 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/maps/FixedSpeedTrackPathDescriptor.java +++ b/MyTracks/src/com/google/android/apps/mytracks/maps/FixedSpeedTrackPathDescriptor.java @@ -17,6 +17,7 @@ package com.google.android.apps.mytracks.maps; import com.google.android.apps.mytracks.Constants; +import com.google.android.apps.mytracks.stats.TripStatistics; import com.google.android.apps.mytracks.util.PreferencesUtils; import com.google.android.maps.mytracks.R; @@ -71,7 +72,7 @@ public class FixedSpeedTrackPathDescriptor implements TrackPathDescriptor { } @Override - public boolean updateState() { + public boolean updateState(TripStatistics tripStatistics) { return false; } } \ No newline at end of file diff --git a/MyTracks/src/com/google/android/apps/mytracks/maps/MultiColorTrackPath.java b/MyTracks/src/com/google/android/apps/mytracks/maps/MultiColorTrackPath.java index 9f837c33e..73bf7679b 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/maps/MultiColorTrackPath.java +++ b/MyTracks/src/com/google/android/apps/mytracks/maps/MultiColorTrackPath.java @@ -16,6 +16,7 @@ package com.google.android.apps.mytracks.maps; import com.google.android.apps.mytracks.MapOverlay.CachedLocation; +import com.google.android.apps.mytracks.stats.TripStatistics; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.Polyline; @@ -47,8 +48,8 @@ public class MultiColorTrackPath implements TrackPath { } @Override - public boolean updateState() { - return trackPathDescriptor.updateState(); + public boolean updateState(TripStatistics tripStatistics) { + return trackPathDescriptor.updateState(tripStatistics); } @Override diff --git a/MyTracks/src/com/google/android/apps/mytracks/maps/SingleColorTrackPath.java b/MyTracks/src/com/google/android/apps/mytracks/maps/SingleColorTrackPath.java index 2fc287d9f..928ed5759 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/maps/SingleColorTrackPath.java +++ b/MyTracks/src/com/google/android/apps/mytracks/maps/SingleColorTrackPath.java @@ -16,6 +16,7 @@ package com.google.android.apps.mytracks.maps; import com.google.android.apps.mytracks.MapOverlay.CachedLocation; +import com.google.android.apps.mytracks.stats.TripStatistics; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.Polyline; @@ -40,7 +41,7 @@ public class SingleColorTrackPath implements TrackPath { } @Override - public boolean updateState() { + public boolean updateState(TripStatistics tripStatistics) { return false; } diff --git a/MyTracks/src/com/google/android/apps/mytracks/maps/TrackPath.java b/MyTracks/src/com/google/android/apps/mytracks/maps/TrackPath.java index 050a1f705..f79e15798 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/maps/TrackPath.java +++ b/MyTracks/src/com/google/android/apps/mytracks/maps/TrackPath.java @@ -17,6 +17,7 @@ package com.google.android.apps.mytracks.maps; import com.google.android.apps.mytracks.MapOverlay.CachedLocation; +import com.google.android.apps.mytracks.stats.TripStatistics; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.model.Polyline; @@ -30,7 +31,13 @@ import java.util.List; */ public interface TrackPath { - public boolean updateState(); + /** + * Updates state. + * + * @param tripstatistics the trip statistics + * @return true if the state is updated. + */ + public boolean updateState(TripStatistics tripStatistrics); /** * Updates the path. diff --git a/MyTracks/src/com/google/android/apps/mytracks/maps/TrackPathDescriptor.java b/MyTracks/src/com/google/android/apps/mytracks/maps/TrackPathDescriptor.java index d214e53e8..e3864776a 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/maps/TrackPathDescriptor.java +++ b/MyTracks/src/com/google/android/apps/mytracks/maps/TrackPathDescriptor.java @@ -16,6 +16,8 @@ package com.google.android.apps.mytracks.maps; +import com.google.android.apps.mytracks.stats.TripStatistics; + /** * An interface for classes which describe how to draw a track path. * @@ -34,7 +36,10 @@ public interface TrackPathDescriptor { public int getNormalSpeed(); /** - * Updates state. Returns true if the state is updated. + * Updates state. + * + * @param tripstatistics the trip statistics + * @return true if the state is updated. */ - public boolean updateState(); + public boolean updateState(TripStatistics tripstatistics); } \ No newline at end of file diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptorTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptorTest.java index 3d4f2ab62..79ef9dfa0 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptorTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptorTest.java @@ -77,18 +77,6 @@ public class DynamicSpeedTrackPathDescriptorTest extends AndroidTestCase { assertEquals(55, dynamicSpeedTrackPathDescriptor.getNormalSpeed()); } - /** - * Tests {@link DynamicSpeedTrackPathDescriptor#updateState()} by wrong track - * id. - */ - public void testNeedsRedraw_WrongTrackId() { - PreferencesUtils.setLong(context, R.string.selected_track_id_key, - PreferencesUtils.SELECTED_TRACK_ID_DEFAULT); - DynamicSpeedTrackPathDescriptor dynamicSpeedTrackPathDescriptor = new DynamicSpeedTrackPathDescriptor( - context); - assertEquals(false, dynamicSpeedTrackPathDescriptor.updateState()); - } - /** * Tests {@link DynamicSpeedTrackPathDescriptor#updateState()} by different * averageMovingSpeed.