Fix comments on 4d928853455e

This commit is contained in:
Jimmy Shih
2012-02-22 16:19:10 -08:00
parent 719b7c2414
commit 8fc43ff3fb
3 changed files with 304 additions and 66 deletions
@@ -21,6 +21,7 @@ import com.google.android.apps.mytracks.util.ChartURLGenerator;
import com.google.android.apps.mytracks.util.StringUtils;
import com.google.android.apps.mytracks.util.UnitConversions;
import com.google.android.maps.mytracks.R;
import com.google.common.annotations.VisibleForTesting;
import android.content.Context;
import android.util.Pair;
@@ -46,29 +47,30 @@ public class DescriptionGeneratorImpl implements DescriptionGenerator {
@Override
public String generateTrackDescription(
Track track, Vector<Double> distances, Vector<Double> elevations) {
StringBuffer buffer = new StringBuffer();
StringBuilder builder = new StringBuilder();
// Created by
String url = context.getString(R.string.my_tracks_web_url);
buffer.append(context.getString(
builder.append(context.getString(
R.string.send_google_by_my_tracks, "<a href='http://" + url + "'>", "</a>"));
buffer.append("<p>");
builder.append("<p>");
buffer.append(generateTripStatisticsDescription(track.getStatistics(), true));
builder.append(generateTripStatisticsDescription(track.getStatistics(), true));
// Activity type
String trackCategory = track.getCategory();
String category = trackCategory != null && trackCategory.length() > 0 ? trackCategory
: context.getString(R.string.value_unknown);
buffer.append(context.getString(R.string.description_activity_type, category));
buffer.append(HTML_LINE_BREAK);
builder.append(context.getString(R.string.description_activity_type, category));
builder.append(HTML_LINE_BREAK);
// Elevation chart
if (distances != null && elevations != null) {
buffer.append("<img border=\"0\" src=\""
builder.append("<img border=\"0\" src=\""
+ ChartURLGenerator.getChartUrl(distances, elevations, track, context) + "\"/>");
builder.append(HTML_LINE_BREAK);
}
return buffer.toString();
return builder.toString();
}
@Override
@@ -80,117 +82,115 @@ public class DescriptionGeneratorImpl implements DescriptionGenerator {
* Generates a description for a {@link TripStatistics}.
*
* @param stats the trip statistics
* @param html true to use <br> for line break instead of \n
* @param html true to use "<br>" for line break instead of "\n"
*/
private String generateTripStatisticsDescription(TripStatistics stats, boolean html) {
String lineBreak = html ? HTML_LINE_BREAK : TEXT_LINE_BREAK;
StringBuffer buffer = new StringBuffer();
StringBuilder builder = new StringBuilder();
// Total distance
writeDistance(stats.getTotalDistance(), buffer, R.string.description_total_distance);
buffer.append(lineBreak);
writeDistance(
stats.getTotalDistance(), builder, R.string.description_total_distance, lineBreak);
// Total time
writeTime(stats.getTotalTime(), buffer, R.string.description_total_time);
buffer.append(lineBreak);
writeTime(stats.getTotalTime(), builder, R.string.description_total_time, lineBreak);
// Moving time
writeTime(stats.getMovingTime(), buffer, R.string.description_moving_time);
buffer.append(lineBreak);
writeTime(stats.getMovingTime(), builder, R.string.description_moving_time, lineBreak);
// Average speed
Pair<Double, Double> averageSpeed = writeSpeed(
stats.getAverageSpeed(), buffer, R.string.description_average_speed);
buffer.append(lineBreak);
stats.getAverageSpeed(), builder, R.string.description_average_speed, lineBreak);
// Average moving speed
Pair<Double, Double> averageMovingSpeed = writeSpeed(
stats.getAverageMovingSpeed(), buffer, R.string.description_average_moving_speed);
buffer.append(lineBreak);
Pair<Double, Double> averageMovingSpeed = writeSpeed(stats.getAverageMovingSpeed(), builder,
R.string.description_average_moving_speed, lineBreak);
// Max speed
Pair<Double, Double> maxSpeed = writeSpeed(
stats.getMaxSpeed(), buffer, R.string.description_max_speed);
buffer.append(lineBreak);
stats.getMaxSpeed(), builder, R.string.description_max_speed, lineBreak);
// Average pace
writePace(averageSpeed, buffer, R.string.description_average_pace);
buffer.append(lineBreak);
writePace(averageSpeed, builder, R.string.description_average_pace, lineBreak);
// Average moving pace
writePace(averageMovingSpeed, buffer, R.string.description_average_moving_pace);
buffer.append(lineBreak);
writePace(averageMovingSpeed, builder, R.string.description_average_moving_pace, lineBreak);
// Min pace
writePace(maxSpeed, buffer, R.string.description_min_pace);
buffer.append(lineBreak);
writePace(maxSpeed, builder, R.string.description_min_pace, lineBreak);
// Max elevation
writeElevation(stats.getMaxElevation(), buffer, R.string.description_max_elevation);
buffer.append(lineBreak);
writeElevation(stats.getMaxElevation(), builder, R.string.description_max_elevation, lineBreak);
// Min elevation
writeElevation(stats.getMinElevation(), buffer, R.string.description_min_elevation);
buffer.append(lineBreak);
writeElevation(stats.getMinElevation(), builder, R.string.description_min_elevation, lineBreak);
// Elevation gain
writeElevation(stats.getTotalElevationGain(), buffer, R.string.description_elevation_gain);
buffer.append(lineBreak);
writeElevation(
stats.getTotalElevationGain(), builder, R.string.description_elevation_gain, lineBreak);
// Max grade
writeGrade(stats.getMaxGrade(), buffer, R.string.description_max_grade);
buffer.append(lineBreak);
writeGrade(stats.getMaxGrade(), builder, R.string.description_max_grade, lineBreak);
// Min grade
writeGrade(stats.getMinGrade(), buffer, R.string.description_min_grade);
buffer.append(lineBreak);
writeGrade(stats.getMinGrade(), builder, R.string.description_min_grade, lineBreak);
// Recorded time
buffer.append(
builder.append(
context.getString(R.string.description_recorded_time,
StringUtils.formatDateTime(context, stats.getStartTime())));
buffer.append(lineBreak);
builder.append(lineBreak);
return buffer.toString();
return builder.toString();
}
/**
* Writes distance.
*
* @param distance distance in meters
* @param buffer buffer to write distance
* @param builder StringBuilder to append distance
* @param resId resource id of distance string
* @param lineBreak line break string
*/
private void writeDistance(double distance, StringBuffer buffer, int resId) {
@VisibleForTesting
void writeDistance(double distance, StringBuilder builder, int resId, String lineBreak) {
double distanceInKm = distance * UnitConversions.M_TO_KM;
double distanceInMi = distanceInKm * UnitConversions.KM_TO_MI;
buffer.append(context.getString(resId, distanceInKm, distanceInMi));
builder.append(context.getString(resId, distanceInKm, distanceInMi));
builder.append(lineBreak);
}
/**
* Writes time.
*
* @param time time in milliseconds.
* @param buffer buffer to write time
* @param builder StringBuilder to append time
* @param resId resource id of time string
* @param lineBreak line break string
*/
private void writeTime(long time, StringBuffer buffer, int resId) {
buffer.append(context.getString(resId, StringUtils.formatElapsedTime(time)));
@VisibleForTesting
void writeTime(long time, StringBuilder builder, int resId, String lineBreak) {
builder.append(context.getString(resId, StringUtils.formatElapsedTime(time)));
builder.append(lineBreak);
}
/**
* Writes speed.
*
* @param speed speed in meters per second
* @param buffer buffer to write speed
* @param builder StringBuilder to append speed
* @param resId resource id of speed string
*@return a pair of speed, first in kilometers per hour, second in miles per
* @param lineBreak line break string
* @return a pair of speed, first in kilometers per hour, second in miles per
* hour.
*/
private Pair<Double, Double> writeSpeed(double speed, StringBuffer buffer, int resId) {
@VisibleForTesting
Pair<Double, Double> writeSpeed(
double speed, StringBuilder builder, int resId, String lineBreak) {
double speedInKmHr = speed * UnitConversions.MS_TO_KMH;
double speedInMiHr = speedInKmHr * UnitConversions.KM_TO_MI;
buffer.append(context.getString(resId, speedInKmHr, speedInMiHr));
builder.append(context.getString(resId, speedInKmHr, speedInMiHr));
builder.append(lineBreak);
return Pair.create(speedInKmHr, speedInMiHr);
}
@@ -199,39 +199,50 @@ public class DescriptionGeneratorImpl implements DescriptionGenerator {
*
* @param speed a pair of speed, first in kilometers per hour, second in miles
* per hour
* @param buffer buffer to write pace
* @param builder StringBuilder to append pace
* @param resId resource id of pace string
* @param lineBreak line break string
*/
private void writePace(Pair<Double, Double> speed, StringBuffer buffer, int resId) {
@VisibleForTesting
void writePace(
Pair<Double, Double> speed, StringBuilder builder, int resId, String lineBreak) {
double paceInMinKm = getPace(speed.first);
double paceInMinMi = getPace(speed.second);
buffer.append(context.getString(resId, paceInMinKm, paceInMinMi));
builder.append(context.getString(resId, paceInMinKm, paceInMinMi));
builder.append(lineBreak);
}
/**
* Writes elevation.
*
* @param elevation elevation in meters
* @param buffer buffer to write elevation
* @param builder StringBuilder to append elevation
* @param resId resource id of elevation string
* @param lineBreak line break string
*/
private void writeElevation(double elevation, StringBuffer buffer, int resId) {
@VisibleForTesting
void writeElevation(
double elevation, StringBuilder builder, int resId, String lineBreak) {
long elevationInM = Math.round(elevation);
long elevationInFt = Math.round(elevation * UnitConversions.M_TO_FT);
buffer.append(context.getString(resId, elevationInM, elevationInFt));
builder.append(context.getString(resId, elevationInM, elevationInFt));
builder.append(lineBreak);
}
/**
* Writes grade.
*
* @param grade grade in fraction
* @param buffer buffer to write grade
* @param builder StringBuilder to append grade
* @param resId resource id grade string
* @param lineBreak line break string
*/
private void writeGrade(double grade, StringBuffer buffer, int resId) {
long gradeInPercent = Double.isNaN(grade) || Double.isInfinite(grade)
? 0L : Math.round(grade * 100);
buffer.append(context.getString(resId, gradeInPercent));
@VisibleForTesting
void writeGrade(double grade, StringBuilder builder, int resId, String lineBreak) {
long gradeInPercent = Double.isNaN(grade) || Double.isInfinite(grade) ? 0L
: Math.round(grade * 100);
builder.append(context.getString(resId, gradeInPercent));
builder.append(lineBreak);
}
/**
@@ -239,7 +250,8 @@ public class DescriptionGeneratorImpl implements DescriptionGenerator {
*
* @param speed speed in hours
*/
private double getPace(double speed) {
@VisibleForTesting
double getPace(double speed) {
return speed == 0 ? 0.0 : 60.0 / speed; // convert from hours to minutes
}
}