|
|
|
@@ -24,78 +24,87 @@ import android.location.Location;
|
|
|
|
|
import android.view.View;
|
|
|
|
|
import android.widget.TextView;
|
|
|
|
|
|
|
|
|
|
import java.util.Locale;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Utilities for updating the statistics UI labels and values.
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @author Jimmy Shih
|
|
|
|
|
*/
|
|
|
|
|
public class StatsUtils {
|
|
|
|
|
|
|
|
|
|
private static final String COORDINATE_DEGREE = "\u00B0";
|
|
|
|
|
private static final String GRADE_PERCENTAGE = "%";
|
|
|
|
|
|
|
|
|
|
private static final String ELEVATION_FORMAT = "%1$.2f";
|
|
|
|
|
private static final String GRADE_FORMAT = "%1$d";
|
|
|
|
|
|
|
|
|
|
private StatsUtils() {}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Sets the location values.
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @param activity the activity
|
|
|
|
|
* @param location the location
|
|
|
|
|
* @param showAll true to show all the fields, false to show only the
|
|
|
|
|
* elevation field
|
|
|
|
|
* @param isRecording true if recording
|
|
|
|
|
*/
|
|
|
|
|
public static void setLocationValues(Activity activity, Location location, boolean showAll) {
|
|
|
|
|
public static void setLocationValues(Activity activity, Location location, boolean isRecording) {
|
|
|
|
|
boolean metricUnits = PreferencesUtils.getBoolean(
|
|
|
|
|
activity, R.string.metric_units_key, PreferencesUtils.METRIC_UNITS_DEFAULT);
|
|
|
|
|
boolean reportSpeed = PreferencesUtils.getBoolean(
|
|
|
|
|
activity, R.string.report_speed_key, PreferencesUtils.REPORT_SPEED_DEFAULT);
|
|
|
|
|
|
|
|
|
|
// Set elevation
|
|
|
|
|
boolean showElevation = PreferencesUtils.getBoolean(
|
|
|
|
|
activity, R.string.stats_show_elevation_key, PreferencesUtils.STATS_SHOW_ELEVATION_DEFAULT);
|
|
|
|
|
if (showElevation) {
|
|
|
|
|
double altitude = location == null ? Double.NaN : location.getAltitude();
|
|
|
|
|
setElevationValue(activity, R.id.stats_elevation_value, altitude, metricUnits);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!showAll) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Set speed/pace
|
|
|
|
|
setSpeedLabel(
|
|
|
|
|
activity, R.id.stats_speed_label, R.string.stats_speed, R.string.stats_pace, reportSpeed);
|
|
|
|
|
double speed = location == null ? Double.NaN : location.getSpeed();
|
|
|
|
|
setSpeedValue(activity, R.id.stats_speed_value, speed, metricUnits, reportSpeed);
|
|
|
|
|
double speed = !isRecording || location == null ? Double.NaN : location.getSpeed();
|
|
|
|
|
setSpeed(activity, R.id.stats_speed, R.string.stats_speed, R.string.stats_pace, speed,
|
|
|
|
|
metricUnits, reportSpeed);
|
|
|
|
|
|
|
|
|
|
// Set elevation
|
|
|
|
|
boolean showGradeElevation = PreferencesUtils.getBoolean(activity,
|
|
|
|
|
R.string.stats_show_grade_elevation_key,
|
|
|
|
|
PreferencesUtils.STATS_SHOW_GRADE_ELEVATION_DEFAULT);
|
|
|
|
|
View elevation = activity.findViewById(R.id.stats_elevation);
|
|
|
|
|
|
|
|
|
|
if (showGradeElevation && isRecording) {
|
|
|
|
|
double altitude = location == null ? Double.NaN : location.getAltitude();
|
|
|
|
|
elevation.setVisibility(View.VISIBLE);
|
|
|
|
|
setElevationValue(activity, R.id.stats_elevation, -1, altitude, metricUnits);
|
|
|
|
|
} else {
|
|
|
|
|
elevation.setVisibility(View.GONE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Set coordinate
|
|
|
|
|
boolean showCoordinate = PreferencesUtils.getBoolean(activity,
|
|
|
|
|
R.string.stats_show_coordinate_key, PreferencesUtils.STATS_SHOW_COORDINATE_DEFAULT);
|
|
|
|
|
View coordinateLabelTableRow = activity.findViewById(R.id.stats_coordinate_label_table_row);
|
|
|
|
|
View coordinateValueTableRow = activity.findViewById(R.id.stats_coordinate_value_table_row);
|
|
|
|
|
if (coordinateLabelTableRow == null || coordinateValueTableRow == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
coordinateLabelTableRow.setVisibility(showCoordinate ? View.VISIBLE : View.GONE);
|
|
|
|
|
coordinateValueTableRow.setVisibility(showCoordinate ? View.VISIBLE : View.GONE);
|
|
|
|
|
if (showCoordinate) {
|
|
|
|
|
View coordinateHorizontalLine = activity.findViewById(R.id.stats_coordinate_horizontal_line);
|
|
|
|
|
View coordinateContainer = activity.findViewById(R.id.stats_coordinate_container);
|
|
|
|
|
|
|
|
|
|
if (showCoordinate && isRecording) {
|
|
|
|
|
double latitude = location == null ? Double.NaN : location.getLatitude();
|
|
|
|
|
double longitude = location == null ? Double.NaN : location.getLongitude();
|
|
|
|
|
setCoordinateValue(activity, R.id.stats_latitude_value, latitude);
|
|
|
|
|
setCoordinateValue(activity, R.id.stats_longitude_value, longitude);
|
|
|
|
|
coordinateHorizontalLine.setVisibility(View.VISIBLE);
|
|
|
|
|
coordinateContainer.setVisibility(View.VISIBLE);
|
|
|
|
|
setCoordinateValue(activity, R.id.stats_latitude, R.string.stats_latitude, latitude);
|
|
|
|
|
setCoordinateValue(activity, R.id.stats_longitude, R.string.stats_longitude, longitude);
|
|
|
|
|
} else {
|
|
|
|
|
coordinateHorizontalLine.setVisibility(View.GONE);
|
|
|
|
|
coordinateContainer.setVisibility(View.GONE);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Sets the total time value.
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @param activity the activity
|
|
|
|
|
* @param totalTime the total time
|
|
|
|
|
*/
|
|
|
|
|
public static void setTotalTimeValue(Activity activity, long totalTime) {
|
|
|
|
|
setTimeValue(activity, R.id.stats_total_time_value, totalTime);
|
|
|
|
|
setTimeValue(activity, R.id.stats_total_time, R.string.stats_total_time, totalTime);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Sets the trip statistics values.
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @param activity the activity
|
|
|
|
|
* @param tripStatistics the trip statistics
|
|
|
|
|
*/
|
|
|
|
@@ -104,249 +113,206 @@ public class StatsUtils {
|
|
|
|
|
activity, R.string.metric_units_key, PreferencesUtils.METRIC_UNITS_DEFAULT);
|
|
|
|
|
boolean reportSpeed = PreferencesUtils.getBoolean(
|
|
|
|
|
activity, R.string.report_speed_key, PreferencesUtils.REPORT_SPEED_DEFAULT);
|
|
|
|
|
boolean showMovingTime = PreferencesUtils.getBoolean(activity,
|
|
|
|
|
R.string.stats_show_moving_time_key, PreferencesUtils.STATS_SHOW_MOVING_TIME_DEFAULT);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Set total distance
|
|
|
|
|
double totalDistance = tripStatistics == null ? Double.NaN : tripStatistics.getTotalDistance();
|
|
|
|
|
setDistanceValue(activity, R.id.stats_distance_value, totalDistance, metricUnits);
|
|
|
|
|
|
|
|
|
|
setDistanceValue(activity, totalDistance, metricUnits);
|
|
|
|
|
|
|
|
|
|
// Set total time
|
|
|
|
|
setTimeValue(activity, R.id.stats_total_time_value,
|
|
|
|
|
setTimeValue(activity, R.id.stats_total_time, R.string.stats_total_time,
|
|
|
|
|
tripStatistics != null ? tripStatistics.getTotalTime() : -1L);
|
|
|
|
|
|
|
|
|
|
// Set moving time
|
|
|
|
|
setItemVisibility(activity, R.id.stats_moving_time_label, R.id.stats_moving_time_spacer,
|
|
|
|
|
R.id.stats_moving_time_value, showMovingTime);
|
|
|
|
|
if (showMovingTime) {
|
|
|
|
|
setTimeValue(activity, R.id.stats_moving_time_value,
|
|
|
|
|
tripStatistics != null ? tripStatistics.getMovingTime() : -1L);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Set average speed
|
|
|
|
|
setSpeedLabel(activity, R.id.stats_average_speed_label, R.string.stats_average_speed,
|
|
|
|
|
R.string.stats_average_pace, reportSpeed);
|
|
|
|
|
// Set average speed/pace
|
|
|
|
|
double averageSpeed = tripStatistics != null ? tripStatistics.getAverageSpeed() : Double.NaN;
|
|
|
|
|
setSpeedValue(activity, R.id.stats_average_speed_value, averageSpeed, metricUnits, reportSpeed);
|
|
|
|
|
|
|
|
|
|
// Set average moving speed
|
|
|
|
|
setItemVisibility(activity, R.id.stats_average_moving_speed_label,
|
|
|
|
|
R.id.stats_average_moving_speed_spacer, R.id.stats_average_moving_speed_value,
|
|
|
|
|
showMovingTime);
|
|
|
|
|
if (showMovingTime) {
|
|
|
|
|
setSpeedLabel(activity, R.id.stats_average_moving_speed_label,
|
|
|
|
|
R.string.stats_average_moving_speed, R.string.stats_average_moving_pace, reportSpeed);
|
|
|
|
|
double averageMovingSpeed = tripStatistics != null ? tripStatistics.getAverageMovingSpeed()
|
|
|
|
|
: Double.NaN;
|
|
|
|
|
setSpeedValue(activity, R.id.stats_average_moving_speed_value, averageMovingSpeed,
|
|
|
|
|
metricUnits, reportSpeed);
|
|
|
|
|
}
|
|
|
|
|
setSpeed(activity, R.id.stats_average_speed, R.string.stats_average_speed,
|
|
|
|
|
R.string.stats_average_pace, averageSpeed, metricUnits, reportSpeed);
|
|
|
|
|
|
|
|
|
|
// Set max speed
|
|
|
|
|
setSpeedLabel(activity, R.id.stats_max_speed_label, R.string.stats_max_speed,
|
|
|
|
|
R.string.stats_fastest_pace, reportSpeed);
|
|
|
|
|
// Set moving time
|
|
|
|
|
setTimeValue(activity, R.id.stats_moving_time, R.string.stats_moving_time,
|
|
|
|
|
tripStatistics != null ? tripStatistics.getMovingTime() : -1L);
|
|
|
|
|
|
|
|
|
|
// Set average moving speed/pace
|
|
|
|
|
double averageMovingSpeed = tripStatistics != null ? tripStatistics.getAverageMovingSpeed()
|
|
|
|
|
: Double.NaN;
|
|
|
|
|
setSpeed(activity, R.id.stats_average_moving_time, R.string.stats_average_moving_speed,
|
|
|
|
|
R.string.stats_average_moving_pace, averageMovingSpeed, metricUnits, reportSpeed);
|
|
|
|
|
|
|
|
|
|
// Set max speed/pace
|
|
|
|
|
double maxSpeed = tripStatistics == null ? Double.NaN : tripStatistics.getMaxSpeed();
|
|
|
|
|
setSpeedValue(activity, R.id.stats_max_speed_value, maxSpeed, metricUnits, reportSpeed);
|
|
|
|
|
|
|
|
|
|
// Set elevation
|
|
|
|
|
boolean showElevation = PreferencesUtils.getBoolean(
|
|
|
|
|
activity, R.string.stats_show_elevation_key, PreferencesUtils.STATS_SHOW_ELEVATION_DEFAULT);
|
|
|
|
|
View elevationLabelTableRow1 = activity.findViewById(R.id.stats_elevation_label_table_row1);
|
|
|
|
|
View elevationValueTableRow1 = activity.findViewById(R.id.stats_elevation_value_table_row1);
|
|
|
|
|
View elevationLabelTableRow2 = activity.findViewById(R.id.stats_elevation_label_table_row2);
|
|
|
|
|
View elevationValueTableRow2 = activity.findViewById(R.id.stats_elevation_value_table_row2);
|
|
|
|
|
if (elevationLabelTableRow1 == null
|
|
|
|
|
|| elevationValueTableRow1 == null
|
|
|
|
|
|| elevationLabelTableRow2 == null
|
|
|
|
|
|| elevationValueTableRow2 == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
elevationLabelTableRow1.setVisibility(showElevation ? View.VISIBLE : View.GONE);
|
|
|
|
|
elevationValueTableRow1.setVisibility(showElevation ? View.VISIBLE : View.GONE);
|
|
|
|
|
elevationLabelTableRow2.setVisibility(showElevation ? View.VISIBLE : View.GONE);
|
|
|
|
|
elevationValueTableRow2.setVisibility(showElevation ? View.VISIBLE : View.GONE);
|
|
|
|
|
if (showElevation) {
|
|
|
|
|
setSpeed(activity, R.id.stats_max_speed, R.string.stats_max_speed, R.string.stats_fastest_pace,
|
|
|
|
|
maxSpeed, metricUnits, reportSpeed);
|
|
|
|
|
|
|
|
|
|
// Set grade/elevation
|
|
|
|
|
boolean showGradeElevation = PreferencesUtils.getBoolean(activity,
|
|
|
|
|
R.string.stats_show_grade_elevation_key,
|
|
|
|
|
PreferencesUtils.STATS_SHOW_GRADE_ELEVATION_DEFAULT);
|
|
|
|
|
View gradeElevationHorizontalLine = activity.findViewById(
|
|
|
|
|
R.id.stats_grade_elevation_horizontal_line);
|
|
|
|
|
View gradeElevationContainer = activity.findViewById(R.id.stats_grade_elevation_container);
|
|
|
|
|
|
|
|
|
|
if (showGradeElevation) {
|
|
|
|
|
gradeElevationHorizontalLine.setVisibility(View.VISIBLE);
|
|
|
|
|
gradeElevationContainer.setVisibility(View.VISIBLE);
|
|
|
|
|
// Set grade
|
|
|
|
|
double minGrade = tripStatistics == null ? Double.NaN : tripStatistics.getMinGrade();
|
|
|
|
|
double maxGrade = tripStatistics == null ? Double.NaN : tripStatistics.getMaxGrade();
|
|
|
|
|
setGradeValue(activity, R.id.stats_grade_min, R.string.stats_min, minGrade);
|
|
|
|
|
setGradeValue(activity, R.id.stats_grade_max, R.string.stats_max, maxGrade);
|
|
|
|
|
|
|
|
|
|
// Set elevation
|
|
|
|
|
double elevationGain = tripStatistics == null ? Double.NaN
|
|
|
|
|
: tripStatistics.getTotalElevationGain();
|
|
|
|
|
double minElevation = tripStatistics == null ? Double.NaN : tripStatistics.getMinElevation();
|
|
|
|
|
double maxElevation = tripStatistics == null ? Double.NaN : tripStatistics.getMaxElevation();
|
|
|
|
|
setElevationValue(activity, R.id.stats_elevation_gain_value, elevationGain, metricUnits);
|
|
|
|
|
setElevationValue(activity, R.id.stats_min_elevation_value, minElevation, metricUnits);
|
|
|
|
|
setElevationValue(activity, R.id.stats_max_elevation_value, maxElevation, metricUnits);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Set grade
|
|
|
|
|
boolean showGrade = PreferencesUtils.getBoolean(
|
|
|
|
|
activity, R.string.stats_show_grade_key, PreferencesUtils.STATS_SHOW_GRADE_DEFAULT);
|
|
|
|
|
View gradeLabelTableRow = activity.findViewById(R.id.stats_grade_label_table_row);
|
|
|
|
|
View gradeValueTableRow = activity.findViewById(R.id.stats_grade_value_table_row);
|
|
|
|
|
if (gradeLabelTableRow == null || gradeValueTableRow == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
gradeLabelTableRow.setVisibility(showGrade ? View.VISIBLE : View.GONE);
|
|
|
|
|
gradeValueTableRow.setVisibility(showGrade ? View.VISIBLE : View.GONE);
|
|
|
|
|
if (showGrade) {
|
|
|
|
|
double minGrade = tripStatistics == null ? Double.NaN : tripStatistics.getMinGrade();
|
|
|
|
|
double maxGrade = tripStatistics == null ? Double.NaN : tripStatistics.getMaxGrade();
|
|
|
|
|
setGradeValue(activity, R.id.stats_min_grade_value, minGrade);
|
|
|
|
|
setGradeValue(activity, R.id.stats_max_grade_value, maxGrade);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void setItemVisibility(
|
|
|
|
|
Activity activity, int labelId, int spacerId, int valueId, boolean show) {
|
|
|
|
|
View label = activity.findViewById(labelId);
|
|
|
|
|
View spacer = activity.findViewById(spacerId);
|
|
|
|
|
View value = activity.findViewById(valueId);
|
|
|
|
|
if (label != null) {
|
|
|
|
|
label.setVisibility(show ? View.VISIBLE : View.GONE);
|
|
|
|
|
}
|
|
|
|
|
if (spacer != null) {
|
|
|
|
|
spacer.setVisibility(show ? View.VISIBLE : View.GONE);
|
|
|
|
|
}
|
|
|
|
|
if (value != null) {
|
|
|
|
|
value.setVisibility(show ? View.VISIBLE : View.GONE);
|
|
|
|
|
setElevationValue(
|
|
|
|
|
activity, R.id.stats_elevation_gain, R.string.stats_gain, elevationGain, metricUnits);
|
|
|
|
|
setElevationValue(
|
|
|
|
|
activity, R.id.stats_elevation_min, R.string.stats_min, minElevation, metricUnits);
|
|
|
|
|
setElevationValue(
|
|
|
|
|
activity, R.id.stats_elevation_max, R.string.stats_max, maxElevation, metricUnits);
|
|
|
|
|
} else {
|
|
|
|
|
gradeElevationHorizontalLine.setVisibility(View.GONE);
|
|
|
|
|
gradeElevationContainer.setVisibility(View.GONE);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Sets a speed label.
|
|
|
|
|
*
|
|
|
|
|
* Sets speed.
|
|
|
|
|
*
|
|
|
|
|
* @param activity the activity
|
|
|
|
|
* @param id the speed label resource id
|
|
|
|
|
* @param speedId the speed string id
|
|
|
|
|
* @param paceId the pace string id
|
|
|
|
|
* @param reportSpeed true to report speed
|
|
|
|
|
*/
|
|
|
|
|
private static void setSpeedLabel(
|
|
|
|
|
Activity activity, int id, int speedId, int paceId, boolean reportSpeed) {
|
|
|
|
|
TextView textView = (TextView) activity.findViewById(id);
|
|
|
|
|
if (textView == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
textView.setText(reportSpeed ? speedId : paceId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Sets a speed value.
|
|
|
|
|
*
|
|
|
|
|
* @param activity the activity
|
|
|
|
|
* @param id the speed value resource id
|
|
|
|
|
* @param itemId the item id
|
|
|
|
|
* @param speedLabelId the speed label id
|
|
|
|
|
* @param paceLabelId the pace label id
|
|
|
|
|
* @param speed the speed in meters per second
|
|
|
|
|
* @param metricUnits true to display in metric units
|
|
|
|
|
* @param reportSpeed true to report speed
|
|
|
|
|
* @param metricUnits true if metric units
|
|
|
|
|
* @param reportSpeed true if report speed
|
|
|
|
|
*/
|
|
|
|
|
private static void setSpeedValue(
|
|
|
|
|
Activity activity, int id, double speed, boolean metricUnits, boolean reportSpeed) {
|
|
|
|
|
TextView textView = (TextView) activity.findViewById(id);
|
|
|
|
|
if (textView == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
textView.setText(StringUtils.formatSpeed(activity, speed, metricUnits, reportSpeed));
|
|
|
|
|
private static void setSpeed(Activity activity, int itemId, int speedLabelId, int paceLabelId,
|
|
|
|
|
double speed, boolean metricUnits, boolean reportSpeed) {
|
|
|
|
|
String parts[] = StringUtils.getSpeedParts(activity, speed, metricUnits, reportSpeed);
|
|
|
|
|
setItem(activity, itemId, reportSpeed ? speedLabelId : paceLabelId, parts[0], parts[1]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Sets a distance value.
|
|
|
|
|
*
|
|
|
|
|
* Sets distance value.
|
|
|
|
|
*
|
|
|
|
|
* @param activity the activity
|
|
|
|
|
* @param id the distance value resource id
|
|
|
|
|
* @param distance the distance in meters
|
|
|
|
|
* @param metricUnits true to display in metric units
|
|
|
|
|
* @param metricUnits true if metric units
|
|
|
|
|
*/
|
|
|
|
|
private static void setDistanceValue(
|
|
|
|
|
Activity activity, int id, double distance, boolean metricUnits) {
|
|
|
|
|
TextView textView = (TextView) activity.findViewById(id);
|
|
|
|
|
if (textView == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
textView.setText(StringUtils.formatDistance(activity, distance, metricUnits));
|
|
|
|
|
private static void setDistanceValue(Activity activity, double distance, boolean metricUnits) {
|
|
|
|
|
String parts[] = StringUtils.getDistanceParts(activity, distance, metricUnits);
|
|
|
|
|
setItem(activity, R.id.stats_distance, R.string.stats_distance, parts[0], parts[1]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Sets a time value.
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @param activity the activity
|
|
|
|
|
* @param id the time value resource id
|
|
|
|
|
* @param itemId the item id
|
|
|
|
|
* @param labelId the label id
|
|
|
|
|
* @param time the time
|
|
|
|
|
*/
|
|
|
|
|
private static void setTimeValue(Activity activity, int id, long time) {
|
|
|
|
|
TextView textView = (TextView) activity.findViewById(id);
|
|
|
|
|
if (textView == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
private static void setTimeValue(Activity activity, int itemId, int labelId, long time) {
|
|
|
|
|
String value = time == -1L ? activity.getString(R.string.value_unknown)
|
|
|
|
|
: StringUtils.formatElapsedTime(time);
|
|
|
|
|
textView.setText(value);
|
|
|
|
|
setItem(activity, itemId, labelId, value, null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Sets an elevation value.
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @param activity the activity
|
|
|
|
|
* @param id the elevation value resource id
|
|
|
|
|
* @param itemId the item id
|
|
|
|
|
* @param labelId the label id
|
|
|
|
|
* @param elevation the elevation in meters
|
|
|
|
|
* @param metricUnits true to display in metric units
|
|
|
|
|
* @param metricUnits true if metric units
|
|
|
|
|
*/
|
|
|
|
|
private static void setElevationValue(
|
|
|
|
|
Activity activity, int id, double elevation, boolean metricUnits) {
|
|
|
|
|
TextView textView = (TextView) activity.findViewById(id);
|
|
|
|
|
if (textView == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Activity activity, int itemId, int labelId, double elevation, boolean metricUnits) {
|
|
|
|
|
String value;
|
|
|
|
|
String unit;
|
|
|
|
|
if (Double.isNaN(elevation) || Double.isInfinite(elevation)) {
|
|
|
|
|
value = activity.getString(R.string.value_unknown);
|
|
|
|
|
value = null;
|
|
|
|
|
unit = null;
|
|
|
|
|
} else {
|
|
|
|
|
if (metricUnits) {
|
|
|
|
|
value = activity.getString(R.string.value_float_meter, elevation);
|
|
|
|
|
value = String.format(Locale.getDefault(), ELEVATION_FORMAT, elevation);
|
|
|
|
|
unit = activity.getString(R.string.unit_meter);
|
|
|
|
|
} else {
|
|
|
|
|
elevation *= UnitConversions.M_TO_FT;
|
|
|
|
|
value = activity.getString(R.string.value_float_feet, elevation);
|
|
|
|
|
value = String.format(Locale.getDefault(), ELEVATION_FORMAT, elevation);
|
|
|
|
|
unit = activity.getString(R.string.unit_feet);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
textView.setText(value);
|
|
|
|
|
setItem(activity, itemId, labelId, value, unit);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Sets a grade value.
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @param activity the activity
|
|
|
|
|
* @param id the grade value resource id
|
|
|
|
|
* @param itemId the item id
|
|
|
|
|
* @param labelId the label id
|
|
|
|
|
* @param grade the grade in fraction between 0 and 1
|
|
|
|
|
*/
|
|
|
|
|
private static void setGradeValue(Activity activity, int id, double grade) {
|
|
|
|
|
TextView textView = (TextView) activity.findViewById(id);
|
|
|
|
|
if (textView == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
String value;
|
|
|
|
|
if (Double.isNaN(grade) || Double.isInfinite(grade)) {
|
|
|
|
|
value = activity.getString(R.string.value_unknown);
|
|
|
|
|
} else {
|
|
|
|
|
value = activity.getString(R.string.value_integer_percent, Math.round(grade * 100));
|
|
|
|
|
}
|
|
|
|
|
textView.setText(value);
|
|
|
|
|
private static void setGradeValue(Activity activity, int itemId, int labelId, double grade) {
|
|
|
|
|
String value = Double.isNaN(grade) || Double.isInfinite(grade) ? null
|
|
|
|
|
: String.format(Locale.getDefault(), GRADE_FORMAT, Math.round(grade * 100));
|
|
|
|
|
setItem(activity, itemId, labelId, value, GRADE_PERCENTAGE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Sets a coordinate value.
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @param activity the activity
|
|
|
|
|
* @param id the coordinate value resource id
|
|
|
|
|
* @param itemId the item id
|
|
|
|
|
* @param labelId the label id
|
|
|
|
|
* @param coordinate the coordinate in degrees
|
|
|
|
|
*/
|
|
|
|
|
private static void setCoordinateValue(Activity activity, int id, double coordinate) {
|
|
|
|
|
TextView textView = (TextView) activity.findViewById(id);
|
|
|
|
|
if (textView == null) {
|
|
|
|
|
private static void setCoordinateValue(
|
|
|
|
|
Activity activity, int itemId, int labelId, double coordinate) {
|
|
|
|
|
String value = Double.isNaN(coordinate) || Double.isInfinite(coordinate) ? null
|
|
|
|
|
: Location.convert(coordinate, Location.FORMAT_DEGREES);
|
|
|
|
|
setItem(activity, itemId, labelId, value, COORDINATE_DEGREE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Sets an item.
|
|
|
|
|
*
|
|
|
|
|
* @param activity the activity
|
|
|
|
|
* @param itemId the item id
|
|
|
|
|
* @param labelId the label id. -1 to hide the label
|
|
|
|
|
* @param value the value, can be null
|
|
|
|
|
* @param unit the unit. Null to hide the unit
|
|
|
|
|
*/
|
|
|
|
|
private static void setItem(
|
|
|
|
|
Activity activity, int itemId, int labelId, String value, String unit) {
|
|
|
|
|
View view = activity.findViewById(itemId);
|
|
|
|
|
TextView labelTextView = (TextView) view.findViewById(R.id.stats_label);
|
|
|
|
|
TextView valueTextView = (TextView) view.findViewById(R.id.stats_value);
|
|
|
|
|
TextView unitTextView = (TextView) view.findViewById(R.id.stats_unit);
|
|
|
|
|
if (labelTextView == null || valueTextView == null || unitTextView == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
String value;
|
|
|
|
|
if (Double.isNaN(coordinate) || Double.isInfinite(coordinate)) {
|
|
|
|
|
value = activity.getString(R.string.value_unknown);
|
|
|
|
|
if (labelId == -1) {
|
|
|
|
|
labelTextView.setVisibility(View.GONE);
|
|
|
|
|
} else {
|
|
|
|
|
value = activity.getString(
|
|
|
|
|
R.string.value_coordinate_degree, Location.convert(coordinate, Location.FORMAT_DEGREES));
|
|
|
|
|
labelTextView.setVisibility(View.VISIBLE);
|
|
|
|
|
labelTextView.setText(labelId);
|
|
|
|
|
}
|
|
|
|
|
textView.setText(value);
|
|
|
|
|
|
|
|
|
|
if (value == null) {
|
|
|
|
|
value = activity.getString(R.string.value_unknown);
|
|
|
|
|
unitTextView.setVisibility(View.GONE);
|
|
|
|
|
} else {
|
|
|
|
|
if (unit == null) {
|
|
|
|
|
unitTextView.setVisibility(View.GONE);
|
|
|
|
|
} else {
|
|
|
|
|
unitTextView.setVisibility(View.VISIBLE);
|
|
|
|
|
unitTextView.setText(unit);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
valueTextView.setText(value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|