diff --git a/MyTracks/src/com/google/android/apps/mytracks/ChartView.java b/MyTracks/src/com/google/android/apps/mytracks/ChartView.java
index 9e76fd782..d16832308 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/ChartView.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/ChartView.java
@@ -805,7 +805,7 @@ public class ChartView extends View {
String s =
(mode == Mode.BY_DISTANCE)
? (shortFormat ? X_SHORT_FORMAT.format(x) : X_FORMAT.format(x))
- : StringUtils.formatTime((long) x);
+ : StringUtils.formatElapsedTime((long) x);
c.drawText(s,
getX(x),
effectiveHeight + UNIT_BORDER + topBorder,
diff --git a/MyTracks/src/com/google/android/apps/mytracks/SensorStateActivity.java b/MyTracks/src/com/google/android/apps/mytracks/SensorStateActivity.java
index 17813b2c1..c76afc34b 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/SensorStateActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/SensorStateActivity.java
@@ -23,6 +23,7 @@ import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection
import com.google.android.apps.mytracks.services.sensors.SensorManager;
import com.google.android.apps.mytracks.services.sensors.SensorManagerFactory;
import com.google.android.apps.mytracks.services.sensors.SensorUtils;
+import com.google.android.apps.mytracks.util.StringUtils;
import com.google.android.maps.mytracks.R;
import com.google.protobuf.InvalidProtocolBufferException;
@@ -32,8 +33,6 @@ import android.os.RemoteException;
import android.util.Log;
import android.widget.TextView;
-import java.text.DateFormat;
-import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
@@ -44,7 +43,6 @@ import java.util.TimerTask;
*/
public class SensorStateActivity extends Activity {
- private static final DateFormat TIMESTAMP_FORMAT = DateFormat.getTimeInstance(DateFormat.SHORT);
private static final long REFRESH_PERIOD_MS = 250;
private final StatsUtilities utils;
@@ -263,7 +261,7 @@ public class SensorStateActivity extends Activity {
* @param sds sensor data set
*/
private String getLastSensorTime(Sensor.SensorDataSet sds) {
- return TIMESTAMP_FORMAT.format(new Date(sds.getCreationTime()));
+ return StringUtils.formatTime(this, sds.getCreationTime());
}
/**
diff --git a/MyTracks/src/com/google/android/apps/mytracks/StatsUtilities.java b/MyTracks/src/com/google/android/apps/mytracks/StatsUtilities.java
index 68b2e62f9..1d30e267f 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/StatsUtilities.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/StatsUtilities.java
@@ -153,7 +153,7 @@ public class StatsUtilities {
}
public void setTime(int id, long l) {
- setText(id, StringUtils.formatTime(l));
+ setText(id, StringUtils.formatElapsedTime(l));
}
public void setGrade(int id, double d) {
diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackList.java b/MyTracks/src/com/google/android/apps/mytracks/TrackList.java
index bb14f0ef6..191bc359d 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/TrackList.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/TrackList.java
@@ -315,7 +315,7 @@ public class TrackList extends ListActivity
TextView textView = (TextView) view;
if (columnIndex == startTimeIdx) {
long time = cursor.getLong(startTimeIdx);
- textView.setText(StringUtils.formatDateTime(time));
+ textView.setText(StringUtils.formatDateTime(TrackList.this, time));
} else if (columnIndex == totalDistanceIdx) {
double length = cursor.getDouble(totalDistanceIdx);
String lengthUnit = null;
@@ -336,7 +336,7 @@ public class TrackList extends ListActivity
}
}
textView.setText(String.format("%s %.2f %s",
- StringUtils.formatTime(cursor.getLong(totalTimeIdx)),
+ StringUtils.formatElapsedTime(cursor.getLong(totalTimeIdx)),
length,
lengthUnit));
} else {
diff --git a/MyTracks/src/com/google/android/apps/mytracks/WaypointsList.java b/MyTracks/src/com/google/android/apps/mytracks/WaypointsList.java
index 799131d33..9d5513108 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/WaypointsList.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/WaypointsList.java
@@ -269,7 +269,7 @@ public class WaypointsList extends ListActivity
if (time == 0) {
textView.setVisibility(View.GONE);
} else {
- textView.setText(StringUtils.formatDateTime(time));
+ textView.setText(StringUtils.formatDateTime(WaypointsList.this, time));
textView.setVisibility(View.VISIBLE);
}
} else if (columnIndex == typeIdx) {
diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/backup/BackupActivityHelper.java b/MyTracks/src/com/google/android/apps/mytracks/io/backup/BackupActivityHelper.java
index 03d5a71e4..d78d8c96e 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/io/backup/BackupActivityHelper.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/io/backup/BackupActivityHelper.java
@@ -156,7 +156,7 @@ public class BackupActivityHelper {
// Make a user-visible version of the backup filenames
final String backupDateStrs[] = new String[backupDates.length];
for (int i = 0; i < backupDates.length; i++) {
- backupDateStrs[i] = StringUtils.formatDateTime(backupDates[i].getTime());
+ backupDateStrs[i] = StringUtils.formatDateTime(activity, backupDates[i].getTime());
}
// Show a dialog for the user to pick which backup to restore
diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/docs/DocsHelper.java b/MyTracks/src/com/google/android/apps/mytracks/io/docs/DocsHelper.java
index f072dc78c..02202fa76 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/io/docs/DocsHelper.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/io/docs/DocsHelper.java
@@ -288,11 +288,9 @@ public class DocsHelper {
DocsTagBuilder tagBuilder = new DocsTagBuilder(metricUnits)
.append("name", track.getName())
.append("description", track.getDescription())
- .append("date", StringUtils.formatDateTime(stats.getStartTime()))
- .append("totaltime", StringUtils.formatTimeAlwaysShowingHours(
- stats.getTotalTime()))
- .append("movingtime", StringUtils.formatTimeAlwaysShowingHours(
- stats.getMovingTime()))
+ .append("date", StringUtils.formatDateTime(context, stats.getStartTime()))
+ .append("totaltime", StringUtils.formatElapsedTime(stats.getTotalTime()))
+ .append("movingtime", StringUtils.formatElapsedTime(stats.getMovingTime()))
.appendLargeUnits("distance", stats.getTotalDistance() / 1000)
.append("distanceunit", distanceUnit)
.appendLargeUnits("averagespeed", stats.getAverageSpeed() * 3.6)
diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/DefaultTrackNameFactory.java b/MyTracks/src/com/google/android/apps/mytracks/services/DefaultTrackNameFactory.java
index adbb91d2e..224240af6 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/services/DefaultTrackNameFactory.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/services/DefaultTrackNameFactory.java
@@ -44,7 +44,7 @@ class DefaultTrackNameFactory {
*/
String newTrackName(long trackId, long startTime) {
if (useTimestampTrackName()) {
- return StringUtils.formatDateTime(startTime);
+ return StringUtils.formatDateTime(context, startTime);
} else {
return String.format(context.getString(R.string.track_name_format), trackId);
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/StringUtils.java b/MyTracks/src/com/google/android/apps/mytracks/util/StringUtils.java
index 5f6b6819d..81f633f3f 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/util/StringUtils.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/util/StringUtils.java
@@ -24,6 +24,7 @@ import com.google.android.maps.mytracks.R;
import android.content.Context;
import android.content.SharedPreferences;
+import android.text.format.DateUtils;
import java.text.DateFormat;
import java.text.NumberFormat;
@@ -46,35 +47,34 @@ public class StringUtils implements DescriptionGenerator {
private final Context context;
/**
- * Formats the time based on user locale.
- *
- * @param time time
- */
- public static String formatDateTime(long time) {
- DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
- return formatter.format(new Date(time));
- }
-
- /**
- * Formats a number of milliseconds as a string.
+ * Formats the date and time based on user's phone date/time preferences.
*
- * @param time - A period of time in milliseconds.
- * @return A string of the format M:SS, MM:SS or HH:MM:SS
+ * @param context the context
+ * @param time the time in milliseconds
*/
- public static String formatTime(long time) {
- return formatTimeInternal(time, false);
+ public static String formatDateTime(Context context, long time) {
+ DateFormat dateFormatter = android.text.format.DateFormat.getDateFormat(context);
+ return dateFormatter.format(new Date(time)) + " " + formatTime(context, time);
}
/**
- * Formats a number of milliseconds as a string. To be used when we need the
- * hours to be shown even when it is zero, e.g. exporting data to a
- * spreadsheet.
+ * Formats the time based on user's phone date/time preferences.
*
- * @param time - A period of time in milliseconds
- * @return A string of the format HH:MM:SS even if time is less than 1 hour
+ * @param context the context
+ * @param time the time in milliseconds
*/
- public static String formatTimeAlwaysShowingHours(long time) {
- return formatTimeInternal(time, true);
+ public static String formatTime(Context context, long time) {
+ DateFormat timeFormatter = android.text.format.DateFormat.getTimeFormat(context);
+ return timeFormatter.format(new Date(time));
+ }
+
+ /**
+ * Formats the elapsed timed in the form "MM:SS" or "H:MM:SS".
+ *
+ * @param time the time in milliseconds
+ */
+ public static String formatElapsedTime(long time) {
+ return DateUtils.formatElapsedTime(time / 1000);
}
private static final NumberFormat SINGLE_DECIMAL_PLACE_FORMAT = NumberFormat.getNumberInstance();
@@ -182,35 +182,6 @@ public class StringUtils implements DescriptionGenerator {
return time;
}
- /**
- * Formats a number of milliseconds as a string.
- *
- * @param time - A period of time in milliseconds
- * @param alwaysShowHours - Whether to display 00 hours if time is less than 1
- * hour
- * @return A string of the format HH:MM:SS
- */
- private static String formatTimeInternal(long time, boolean alwaysShowHours) {
- int[] parts = getTimeParts(time);
- StringBuilder builder = new StringBuilder();
- if (parts[2] > 0 || alwaysShowHours) {
- builder.append(parts[2]);
- builder.append(':');
- if (parts[1] <= 9) {
- builder.append("0");
- }
- }
-
- builder.append(parts[1]);
- builder.append(':');
- if (parts[0] <= 9) {
- builder.append("0");
- }
- builder.append(parts[0]);
-
- return builder.toString();
- }
-
/**
* Gets the time as an array of parts.
*/
@@ -328,11 +299,11 @@ public class StringUtils implements DescriptionGenerator {
// Line 3
context.getString(R.string.stat_total_time),
- StringUtils.formatTime(trackStats.getTotalTime()),
+ StringUtils.formatElapsedTime(trackStats.getTotalTime()),
// Line 4
context.getString(R.string.stat_moving_time),
- StringUtils.formatTime(trackStats.getMovingTime()),
+ StringUtils.formatElapsedTime(trackStats.getMovingTime()),
// Line 5
averageSpeed, averageMovingSpeed, maxSpeed,
@@ -360,7 +331,7 @@ public class StringUtils implements DescriptionGenerator {
// Line 11
context.getString(R.string.send_google_recorded),
- StringUtils.formatDateTime(trackStats.getStartTime()),
+ StringUtils.formatDateTime(context, trackStats.getStartTime()),
// Line 12
context.getString(R.string.track_detail_activity_type_hint), category,
@@ -470,9 +441,9 @@ public class StringUtils implements DescriptionGenerator {
distanceInKm, context.getString(R.string.unit_kilometer),
distanceInMiles, context.getString(R.string.unit_mile),
context.getString(R.string.stat_total_time),
- StringUtils.formatTime(stats.getTotalTime()),
+ StringUtils.formatElapsedTime(stats.getTotalTime()),
context.getString(R.string.stat_moving_time),
- StringUtils.formatTime(stats.getMovingTime()),
+ StringUtils.formatElapsedTime(stats.getMovingTime()),
context.getString(R.string.stat_average_speed),
averageSpeedInKmh, context.getString(R.string.unit_kilometer_per_hour),
averageSpeedInMph, context.getString(R.string.unit_mile_per_hour),
diff --git a/MyTracks/src/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java b/MyTracks/src/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java
index 65828ce3a..485b5c796 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java
@@ -224,7 +224,7 @@ public class TrackWidgetProvider
StringUtils.formatSingleDecimalPlace(displayDistance) + " " + this.distanceLabel;
// convert ms to minutes
- String time = StringUtils.formatTime(stats.getMovingTime());
+ String time = StringUtils.formatElapsedTime(stats.getMovingTime());
String speed = unknown;
if (!Double.isNaN(stats.getAverageMovingSpeed())) {
// Convert m/s to km/h
@@ -236,7 +236,7 @@ public class TrackWidgetProvider
speed = StringUtils.formatSingleDecimalPlace(displaySpeed) + " " + this.speedLabel;
} else {
long displayPace = (long) (3600000.0 / displaySpeed);
- speed = StringUtils.formatTime(displayPace) + " " + paceLabel;
+ speed = StringUtils.formatElapsedTime(displayPace) + " " + paceLabel;
}
}
diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/io/docs/DocsHelper_AddTrackRowTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/io/docs/DocsHelper_AddTrackRowTest.java
index af9631828..541717330 100644
--- a/MyTracksTest/src/com/google/android/apps/mytracks/io/docs/DocsHelper_AddTrackRowTest.java
+++ b/MyTracksTest/src/com/google/android/apps/mytracks/io/docs/DocsHelper_AddTrackRowTest.java
@@ -19,25 +19,20 @@ import com.google.android.apps.mytracks.content.Track;
import com.google.android.apps.mytracks.io.AuthManager;
import com.google.android.apps.mytracks.stats.TripStatistics;
import com.google.android.apps.mytracks.util.StringUtils;
-import com.google.android.maps.mytracks.R;
import com.google.android.testing.mocking.AndroidMock;
import com.google.android.testing.mocking.UsesMocks;
-import android.content.Context;
-import android.content.res.Resources;
-import android.test.mock.MockContext;
+import android.test.AndroidTestCase;
import android.test.mock.MockResources;
import java.io.IOException;
-import junit.framework.TestCase;
-
/**
* Tests for {@link DocsHelper#addTrackRow}
*
* @author Matthew Simmons
*/
-public class DocsHelper_AddTrackRowTest extends TestCase {
+public class DocsHelper_AddTrackRowTest extends AndroidTestCase {
private static final long TIME = 1288721514000L;
private static class StringWritingDocsHelper extends DocsHelper {
@@ -61,20 +56,20 @@ public class DocsHelper_AddTrackRowTest extends TestCase {
+ "xmlns:gsx='http://schemas.google.com/spreadsheets/2006/extended'>"
+ ""
+ ""
- + ""
- + ""
- + ""
+ + ""
+ + ""
+ + ""
+ ""
- + ""
+ + ""
+ ""
+ ""
+ ""
+ ""
- + ""
+ + ""
+ ""
+ ""
+ ""
- + ""
+ + ""
+ ""
+ ""
+ ""
@@ -97,9 +92,9 @@ public class DocsHelper_AddTrackRowTest extends TestCase {
assertTrue(docsHelper.writtenData.contains(
""));
assertTrue(docsHelper.writtenData.contains(
- ""));
+ ""));
assertTrue(docsHelper.writtenData.contains(
- ""));
+ ""));
assertTrue(docsHelper.writtenData.contains(
""));
@@ -107,34 +102,7 @@ public class DocsHelper_AddTrackRowTest extends TestCase {
/** Adds a row to the spreadsheet, using the provided helper. */
@UsesMocks({AuthManager.class, MockResources.class, Track.class})
- private void addTrackRow(DocsHelper docsHelper, boolean useMetric)
- throws IOException {
- final Resources mockResources = AndroidMock.createMock(MockResources.class);
-
- if (useMetric) {
- AndroidMock.expect(mockResources.getString(R.string.unit_kilometer))
- .andReturn("km");
- AndroidMock.expect(mockResources.getString(R.string.unit_kilometer_per_hour))
- .andReturn("kph");
- AndroidMock.expect(mockResources.getString(R.string.unit_meter))
- .andReturn("meter");
- } else {
- AndroidMock.expect(mockResources.getString(R.string.unit_mile))
- .andReturn("mile");
- AndroidMock.expect(mockResources.getString(R.string.unit_mile_per_hour))
- .andReturn("mph");
- AndroidMock.expect(mockResources.getString(R.string.unit_feet))
- .andReturn("feet");
- }
- AndroidMock.replay(mockResources);
-
- Context mockContext = new MockContext() {
- @Override
- public Resources getResources() {
- return mockResources;
- }
- };
-
+ private void addTrackRow(DocsHelper docsHelper, boolean useMetric) throws IOException {
AuthManager mockAuthManager = AndroidMock.createMock(AuthManager.class);
AndroidMock.replay(mockAuthManager);
@@ -154,7 +122,7 @@ public class DocsHelper_AddTrackRowTest extends TestCase {
track.setMapId("trackMapId");
track.setStatistics(stats);
- docsHelper.addTrackRow(mockContext, mockAuthManager, "ssid", "wsid",
+ docsHelper.addTrackRow(getContext(), mockAuthManager, "ssid", "wsid",
track, useMetric);
}
}
diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/services/DefaultTrackNameFactoryTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/services/DefaultTrackNameFactoryTest.java
index a7bbf41cf..4789f81f0 100644
--- a/MyTracksTest/src/com/google/android/apps/mytracks/services/DefaultTrackNameFactoryTest.java
+++ b/MyTracksTest/src/com/google/android/apps/mytracks/services/DefaultTrackNameFactoryTest.java
@@ -50,8 +50,9 @@ public class DefaultTrackNameFactoryTest extends AndroidTestCase {
public void testTimestampTrackName() {
DefaultTrackNameFactory factory =
new MockDefaultTrackNameFactory(getContext(), true);
-
- assertEquals(StringUtils.formatDateTime(TIMESTAMP), factory.newTrackName(1, TIMESTAMP));
+
+ assertEquals(
+ StringUtils.formatDateTime(getContext(), TIMESTAMP), factory.newTrackName(1, TIMESTAMP));
}
public void testIncrementingTrackName() {