"
+ "%s: %.2f %s (%.1f %s)
"
+ "%s: %s
"
+ "%s: %s
"
+ "%s %s %s"
+ "%s: %d %s (%d %s)
"
+ "%s: %d %s (%d %s)
"
+ "%s: %d %s (%d %s)
"
+ "%s: %d %%
"
+ "%s: %d %%
"
+ "%s: %s
"
+ "%s: %s
"
+ "",
// Line 1
getCreatedByMyTracks(context, true),
// Line 2
context.getString(R.string.stat_total_distance),
distanceInKm, context.getString(R.string.unit_kilometer),
distanceInMiles, context.getString(R.string.unit_mile),
// Line 3
context.getString(R.string.stat_total_time),
StringUtils.formatElapsedTime(trackStats.getTotalTime()),
// Line 4
context.getString(R.string.stat_moving_time),
StringUtils.formatElapsedTime(trackStats.getMovingTime()),
// Line 5
averageSpeed, averageMovingSpeed, maxSpeed,
// Line 6
context.getString(R.string.stat_min_elevation),
minElevationInMeters, context.getString(R.string.unit_meter),
minElevationInFeet, context.getString(R.string.unit_feet),
// Line 7
context.getString(R.string.stat_max_elevation),
maxElevationInMeters, context.getString(R.string.unit_meter),
maxElevationInFeet, context.getString(R.string.unit_feet),
// Line 8
context.getString(R.string.stat_elevation_gain),
elevationGainInMeters, context.getString(R.string.unit_meter),
elevationGainInFeet, context.getString(R.string.unit_feet),
// Line 9
context.getString(R.string.stat_max_grade), maxGrade,
// Line 10
context.getString(R.string.stat_min_grade), minGrade,
// Line 11
context.getString(R.string.send_google_recorded),
StringUtils.formatDateTime(context, trackStats.getStartTime()),
// Line 12
context.getString(R.string.track_detail_activity_type_hint), category,
// Line 13
ChartURLGenerator.getChartUrl(distances, elevations, track, context));
}
/**
* Returns the 'Created by My Tracks on Android' string.
*
* @param context the context
* @param addLink true to add a link to the My Tracks web site
*/
public static String getCreatedByMyTracks(Context context, boolean addLink) {
String format = context.getString(R.string.send_google_by_my_tracks);
if (addLink) {
String url = context.getString(R.string.my_tracks_web_url);
return String.format(format, "", "");
} else {
return String.format(format, "", "");
}
}
private String getSpeedString(double speed, int speedLabel, int paceLabel,
boolean displaySpeed) {
double speedInKph = speed * 3.6;
double speedInMph = speedInKph * UnitConversions.KMH_TO_MPH;
if (displaySpeed) {
return String.format("%s: %.2f %s (%.1f %s)
",
context.getString(speedLabel),
speedInKph, context.getString(R.string.unit_kilometer_per_hour),
speedInMph, context.getString(R.string.unit_mile_per_hour));
} else {
double paceInKm;
double paceInMi;
if (speed == 0) {
paceInKm = 0.0;
paceInMi = 0.0;
} else {
paceInKm = 60.0 / speedInKph;
paceInMi = 60.0 / speedInMph;
}
return String.format("%s: %.2f %s (%.1f %s)
",
context.getString(paceLabel),
paceInKm, context.getString(R.string.unit_minute_per_kilometer),
paceInMi, context.getString(R.string.unit_minute_per_mile));
}
}
/**
* Generates a description for a waypoint (with information about the
* statistics).
*
* @return a track description
*/
public String generateWaypointDescription(Waypoint waypoint) {
TripStatistics stats = waypoint.getStatistics();
final double distanceInKm = stats.getTotalDistance() / 1000;
final double distanceInMiles = distanceInKm * UnitConversions.KM_TO_MI;
final double averageSpeedInKmh = stats.getAverageSpeed() * 3.6;
final double averageSpeedInMph =
averageSpeedInKmh * UnitConversions.KMH_TO_MPH;
final double movingSpeedInKmh = stats.getAverageMovingSpeed() * 3.6;
final double movingSpeedInMph =
movingSpeedInKmh * UnitConversions.KMH_TO_MPH;
final double maxSpeedInKmh = stats.getMaxSpeed() * 3.6;
final double maxSpeedInMph = maxSpeedInKmh * UnitConversions.KMH_TO_MPH;
final long minElevationInMeters = Math.round(stats.getMinElevation());
final long minElevationInFeet =
Math.round(stats.getMinElevation() * UnitConversions.M_TO_FT);
final long maxElevationInMeters = Math.round(stats.getMaxElevation());
final long maxElevationInFeet =
Math.round(stats.getMaxElevation() * UnitConversions.M_TO_FT);
final long elevationGainInMeters =
Math.round(stats.getTotalElevationGain());
final long elevationGainInFeet = Math.round(
stats.getTotalElevationGain() * UnitConversions.M_TO_FT);
long theMinGrade = 0;
long theMaxGrade = 0;
double maxGrade = stats.getMaxGrade();
double minGrade = stats.getMinGrade();
if (!Double.isNaN(maxGrade) &&
!Double.isInfinite(maxGrade)) {
theMaxGrade = Math.round(maxGrade * 100);
}
if (!Double.isNaN(minGrade) &&
!Double.isInfinite(minGrade)) {
theMinGrade = Math.round(minGrade * 100);
}
final String percent = "%";
return String.format(
"%s: %.2f %s (%.1f %s)\n"
+ "%s: %s\n"
+ "%s: %s\n"
+ "%s: %.2f %s (%.1f %s)\n"
+ "%s: %.2f %s (%.1f %s)\n"
+ "%s: %.2f %s (%.1f %s)\n"
+ "%s: %d %s (%d %s)\n"
+ "%s: %d %s (%d %s)\n"
+ "%s: %d %s (%d %s)\n"
+ "%s: %d %s\n"
+ "%s: %d %s\n",
context.getString(R.string.stat_total_distance),
distanceInKm, context.getString(R.string.unit_kilometer),
distanceInMiles, context.getString(R.string.unit_mile),
context.getString(R.string.stat_total_time),
StringUtils.formatElapsedTime(stats.getTotalTime()),
context.getString(R.string.stat_moving_time),
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),
context.getString(R.string.stat_average_moving_speed),
movingSpeedInKmh, context.getString(R.string.unit_kilometer_per_hour),
movingSpeedInMph, context.getString(R.string.unit_mile_per_hour),
context.getString(R.string.stat_max_speed),
maxSpeedInKmh, context.getString(R.string.unit_kilometer_per_hour),
maxSpeedInMph, context.getString(R.string.unit_mile_per_hour),
context.getString(R.string.stat_min_elevation),
minElevationInMeters, context.getString(R.string.unit_meter),
minElevationInFeet, context.getString(R.string.unit_feet),
context.getString(R.string.stat_max_elevation),
maxElevationInMeters, context.getString(R.string.unit_meter),
maxElevationInFeet, context.getString(R.string.unit_feet),
context.getString(R.string.stat_elevation_gain),
elevationGainInMeters, context.getString(R.string.unit_meter),
elevationGainInFeet, context.getString(R.string.unit_feet),
context.getString(R.string.stat_max_grade),
theMaxGrade, percent,
context.getString(R.string.stat_min_grade),
theMinGrade, percent);
}
}