From 1fa76301e23bf709402c19838efea597e7e38ca7 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Mon, 20 Oct 2025 09:12:48 +0200 Subject: [PATCH] Cleanup: TrackShareSummaryGenerator (was DescriptionGenerator) now only produces plaintext (HTML was not used anymore). --- ...va => TrackShareSummaryGeneratorTest.java} | 111 ++++---------- .../opentracks/share/ShareUtils.java | 2 +- ...r.java => TrackShareSummaryGenerator.java} | 135 +++++------------- 3 files changed, 67 insertions(+), 181 deletions(-) rename src/androidTest/java/de/dennisguse/opentracks/share/{DescriptionGeneratorTest.java => TrackShareSummaryGeneratorTest.java} (51%) rename src/main/java/de/dennisguse/opentracks/share/{DescriptionGenerator.java => TrackShareSummaryGenerator.java} (60%) diff --git a/src/androidTest/java/de/dennisguse/opentracks/share/DescriptionGeneratorTest.java b/src/androidTest/java/de/dennisguse/opentracks/share/TrackShareSummaryGeneratorTest.java similarity index 51% rename from src/androidTest/java/de/dennisguse/opentracks/share/DescriptionGeneratorTest.java rename to src/androidTest/java/de/dennisguse/opentracks/share/TrackShareSummaryGeneratorTest.java index 14d2dcc5f..b1fcd62da 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/share/DescriptionGeneratorTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/share/TrackShareSummaryGeneratorTest.java @@ -43,29 +43,26 @@ import de.dennisguse.opentracks.stats.TrackStatistics; import de.dennisguse.opentracks.util.StringUtils; /** - * Tests for {@link DescriptionGenerator}. + * Tests for {@link TrackShareSummaryGenerator}. * * @author Jimmy Shih */ @RunWith(AndroidJUnit4.class) -public class DescriptionGeneratorTest { +public class TrackShareSummaryGeneratorTest { @Rule public final LocaleRule mLocaleRule = new LocaleRule(Locale.ENGLISH); private static final Instant START_TIME = Instant.ofEpochMilli(1288721514000L); - private DescriptionGenerator descriptionGenerator; + private TrackShareSummaryGenerator descriptionGenerator; private final Context context = ApplicationProvider.getApplicationContext(); @Before public void setUp() { - descriptionGenerator = new DescriptionGenerator(ApplicationProvider.getApplicationContext()); + descriptionGenerator = new TrackShareSummaryGenerator(ApplicationProvider.getApplicationContext()); } - /** - * Tests {@link DescriptionGenerator#generateTrackDescription(Track, boolean)}. - */ @Test public void testGenerateTrackDescription() { Track track = new Track(); @@ -82,112 +79,60 @@ public class DescriptionGeneratorTest { track.setTrackStatistics(stats); track.setActivityTypeLocalized("hiking"); String expected = //"Created by" - "OpenTracks (Debug)

" - + "Name: -
" - + "Activity type: hiking
" - + "Description: -
" - + "Total distance: 20.00 km (12.4 mi)
" - + "Total time: 10:00
" - + "Moving time: 05:00
" - + "Average speed: 120.00 km/h (74.6 mi/h)
" - + "Average moving speed: 240.00 km/h (149.1 mi/h)
" - + "Max speed: 360.00 km/h (223.7 mi/h)
" - + "Average pace: 0:30 min/km (0:48 min/mi)
" - + "Average moving pace: 0:15 min/km (0:24 min/mi)
" - + "Fastest pace: 0:10 min/km (0:16 min/mi)
" - + "Max elevation: 550 m (1804 ft)
" - + "Min elevation: -500 m (-1640 ft)
" - + "Elevation gain: 6000 m (19685 ft)
" - + "Elevation loss: 6000 m (19685 ft)
" - + "Recorded: " + StringUtils.formatDateTimeWithOffset(OffsetDateTime.ofInstant(START_TIME, ZoneId.systemDefault())) + "
"; + "OpenTracks (Debug)\n\n" + + "Name: -\n" + + "Activity type: hiking\n" + + "Description: -\n" + + "Total distance: 20.00 km (12.4 mi)\n" + + "Total time: 10:00\n" + + "Moving time: 05:00\n" + + "Average speed: 120.00 km/h (74.6 mi/h)\n" + + "Average moving speed: 240.00 km/h (149.1 mi/h)\n" + + "Max speed: 360.00 km/h (223.7 mi/h)\n" + + "Average pace: 0:30 min/km (0:48 min/mi)\n" + + "Average moving pace: 0:15 min/km (0:24 min/mi)\n" + + "Fastest pace: 0:10 min/km (0:16 min/mi)\n" + + "Max elevation: 550 m (1804 ft)\n" + + "Min elevation: -500 m (-1640 ft)\n" + + "Elevation gain: 6000 m (19685 ft)\n" + + "Elevation loss: 6000 m (19685 ft)\n" + + "Recorded: " + StringUtils.formatDateTimeWithOffset(OffsetDateTime.ofInstant(START_TIME, ZoneId.systemDefault())) + "\n"; - assertEquals(expected, descriptionGenerator.generateTrackDescription(track, true)); + assertEquals(expected, descriptionGenerator.generateTrackDescription(track)); } - @Test - public void testGenerateTrackDescriptionWithoutMaxMinAltitude() { - Track track = new Track(); - TrackStatistics stats = new TrackStatistics(); - stats.setTotalDistance(Distance.of(20000)); - stats.setTotalTime(Duration.ofMillis(600000)); - stats.setMovingTime(Duration.ofMillis(300000)); - stats.setMaxSpeed(Speed.of(100)); - stats.setMaxAltitude(Double.POSITIVE_INFINITY); - stats.setMinAltitude(Double.NEGATIVE_INFINITY); - stats.setTotalAltitudeGain(6000f); - stats.setTotalAltitudeLoss(6000f); - stats.setStartTime(START_TIME); - track.setTrackStatistics(stats); - track.setActivityTypeLocalized("hiking"); - String expected = //"Created by" - "OpenTracks (Debug)

" - + "Name: -
" - + "Activity type: hiking
" - + "Description: -
" - + "Total distance: 20.00 km (12.4 mi)
" - + "Total time: 10:00
" - + "Moving time: 05:00
" - + "Average speed: 120.00 km/h (74.6 mi/h)
" - + "Average moving speed: 240.00 km/h (149.1 mi/h)
" - + "Max speed: 360.00 km/h (223.7 mi/h)
" - + "Average pace: 0:30 min/km (0:48 min/mi)
" - + "Average moving pace: 0:15 min/km (0:24 min/mi)
" - + "Fastest pace: 0:10 min/km (0:16 min/mi)
" - + "Elevation gain: 6000 m (19685 ft)
" - + "Elevation loss: 6000 m (19685 ft)
" - + "Recorded: " + StringUtils.formatDateTimeWithOffset(OffsetDateTime.ofInstant(START_TIME, ZoneId.systemDefault())) + "
"; - - assertEquals(expected, descriptionGenerator.generateTrackDescription(track, true)); - } - - - /** - * Tests {@link DescriptionGenerator#writeDistance(Distance, StringBuilder, int, String)}. - */ @Test public void testWriteDistance() { StringBuilder builder = new StringBuilder(); - descriptionGenerator.writeDistance(Distance.of(1100), builder, R.string.description_total_distance, "
"); + descriptionGenerator.writeDistance(Distance.of(1100), builder, R.string.description_total_distance); assertEquals("Total distance: 1.10 km (0.7 mi)
", builder.toString()); } - /** - * Tests {@link DescriptionGenerator#writeTime(Duration, StringBuilder, int, String)}. - */ @Test public void testWriteTime() { StringBuilder builder = new StringBuilder(); - descriptionGenerator.writeTime(Duration.ofMillis(1000), builder, R.string.description_total_time, "
"); + descriptionGenerator.writeTime(Duration.ofMillis(1000), builder, R.string.description_total_time); assertEquals("Total time: 00:01
", builder.toString()); } - /** - * Tests {@link DescriptionGenerator#writeSpeed(Speed, StringBuilder, int, String)}. - */ @Test public void testWriteSpeed() { StringBuilder builder = new StringBuilder(); - descriptionGenerator.writeSpeed(Speed.of(1.1), builder, R.string.description_average_speed, "\n"); + descriptionGenerator.writeSpeed(Speed.of(1.1), builder, R.string.description_average_speed); assertEquals("Average speed: 3.96 km/h (2.5 mi/h)\n", builder.toString()); } - /** - * Tests {@link DescriptionGenerator#writeAltitude(double, StringBuilder, int, String)}. - */ @Test public void testWriteAltitude() { StringBuilder builder = new StringBuilder(); - descriptionGenerator.writeAltitude(4.2, builder, R.string.description_min_altitude, "
"); + descriptionGenerator.writeAltitude(4.2, builder, R.string.description_min_altitude); assertEquals("Min elevation: 4 m (14 ft)
", builder.toString()); } - /** - * Tests {@link DescriptionGenerator#writePace(Speed, StringBuilder, int, String)}. - */ @Test public void testWritePace() { StringBuilder builder = new StringBuilder(); - descriptionGenerator.writePace(Speed.of(1.1), builder, R.string.description_average_pace_in_minute, "\n"); + descriptionGenerator.writePace(Speed.of(1.1), builder, R.string.description_average_pace_in_minute); assertEquals("Average pace: 15:09 min/km (24:23 min/mi)\n", builder.toString()); } } diff --git a/src/main/java/de/dennisguse/opentracks/share/ShareUtils.java b/src/main/java/de/dennisguse/opentracks/share/ShareUtils.java index df803a18e..a386028ec 100644 --- a/src/main/java/de/dennisguse/opentracks/share/ShareUtils.java +++ b/src/main/java/de/dennisguse/opentracks/share/ShareUtils.java @@ -42,7 +42,7 @@ public class ShareUtils { String trackDescription = ""; if (trackIds.length == 1) { Track track = contentProviderUtils.getTrack(trackIds[0]); - trackDescription = track == null ? "" : new DescriptionGenerator(context).generateTrackDescription(track, false); + trackDescription = track == null ? "" : new TrackShareSummaryGenerator(context).generateTrackDescription(track); } String mime = ""; diff --git a/src/main/java/de/dennisguse/opentracks/share/DescriptionGenerator.java b/src/main/java/de/dennisguse/opentracks/share/TrackShareSummaryGenerator.java similarity index 60% rename from src/main/java/de/dennisguse/opentracks/share/DescriptionGenerator.java rename to src/main/java/de/dennisguse/opentracks/share/TrackShareSummaryGenerator.java index 55faa63cb..1a1039162 100644 --- a/src/main/java/de/dennisguse/opentracks/share/DescriptionGenerator.java +++ b/src/main/java/de/dennisguse/opentracks/share/TrackShareSummaryGenerator.java @@ -35,20 +35,17 @@ import de.dennisguse.opentracks.stats.TrackStatistics; import de.dennisguse.opentracks.util.StringUtils; /** - * Generates descriptions for tracks and markers. + * Generates descriptions for tracks. * * @author Jimmy Shih */ -public class DescriptionGenerator { +public class TrackShareSummaryGenerator { - private static final String HTML_LINE_BREAK = "
"; - private static final String HTML_PARAGRAPH_SEPARATOR = "

"; private static final String TEXT_LINE_BREAK = "\n"; - private static final String TEXT_PARAGRAPH_SEPARATOR = "\n\n"; private final Context context; - public DescriptionGenerator(Context context) { + public TrackShareSummaryGenerator(Context context) { this.context = context; } @@ -56,156 +53,106 @@ public class DescriptionGenerator { * Generates a track description. * * @param track the track - * @param html true to output html, false to output plain text */ - public String generateTrackDescription(Track track, boolean html) { - String paragraphSeparator = html ? HTML_PARAGRAPH_SEPARATOR : TEXT_PARAGRAPH_SEPARATOR; - String lineBreak = html ? HTML_LINE_BREAK : TEXT_LINE_BREAK; + public String generateTrackDescription(Track track) { StringBuilder builder = new StringBuilder(); // Created by - String creator = html - ? "" + context.getString(R.string.app_name) + "" - : context.getString(R.string.app_name); - builder.append(creator); + builder.append(context.getString(R.string.app_name)); + builder.append(TEXT_LINE_BREAK); + builder.append(TEXT_LINE_BREAK); - builder.append(paragraphSeparator); - - writeString(track.getName(), builder, R.string.generic_name_line, lineBreak); - writeString(track.getActivityTypeLocalized(), builder, R.string.description_activity_type, lineBreak); - writeString(track.getDescription(), builder, R.string.generic_description_line, lineBreak); - builder.append(generateTrackStatisticsDescription(track.getTrackStatistics(), html)); + writeString(track.getName(), builder, R.string.generic_name_line); + writeString(track.getActivityTypeLocalized(), builder, R.string.description_activity_type); + writeString(track.getDescription(), builder, R.string.generic_description_line); + builder.append(generateTrackStatisticsDescription(track.getTrackStatistics())); return builder.toString(); } - /** - * Writes a string to a string builder. - * - * @param text the string - * @param builder the string builder - * @param resId the resource id containing one string placeholder - * @param lineBreak the line break - */ - private void writeString(String text, StringBuilder builder, int resId, String lineBreak) { + private void writeString(String text, StringBuilder builder, int resId) { if (text == null || text.isEmpty()) { text = context.getString(R.string.value_unknown); } builder.append(context.getString(resId, text)); - builder.append(lineBreak); + builder.append(TrackShareSummaryGenerator.TEXT_LINE_BREAK); } - /** - * Generates a description for a {@link TrackStatistics}. - * - * @param stats the track statistics - * @param html true to use "
" for line break instead of "\n" - */ - private String generateTrackStatisticsDescription(TrackStatistics stats, boolean html) { - String lineBreak = html ? HTML_LINE_BREAK : TEXT_LINE_BREAK; + private String generateTrackStatisticsDescription(TrackStatistics stats) { StringBuilder builder = new StringBuilder(); // Total distance - writeDistance(stats.getTotalDistance(), builder, R.string.description_total_distance, lineBreak); + writeDistance(stats.getTotalDistance(), builder, R.string.description_total_distance); // Total time - writeTime(stats.getTotalTime(), builder, R.string.description_total_time, lineBreak); + writeTime(stats.getTotalTime(), builder, R.string.description_total_time); // Moving time - writeTime(stats.getMovingTime(), builder, R.string.description_moving_time, lineBreak); + writeTime(stats.getMovingTime(), builder, R.string.description_moving_time); // Average speed - writeSpeed(stats.getAverageSpeed(), builder, R.string.description_average_speed, lineBreak); + writeSpeed(stats.getAverageSpeed(), builder, R.string.description_average_speed); // Average moving speed - writeSpeed(stats.getAverageMovingSpeed(), builder, R.string.description_average_moving_speed, lineBreak); + writeSpeed(stats.getAverageMovingSpeed(), builder, R.string.description_average_moving_speed); // Max speed - writeSpeed(stats.getMaxSpeed(), builder, R.string.description_max_speed, lineBreak); + writeSpeed(stats.getMaxSpeed(), builder, R.string.description_max_speed); // Average pace - writePace(stats.getAverageSpeed(), builder, R.string.description_average_pace_in_minute, lineBreak); + writePace(stats.getAverageSpeed(), builder, R.string.description_average_pace_in_minute); // Average moving pace - writePace(stats.getAverageMovingSpeed(), builder, R.string.description_average_moving_pace_in_minute, lineBreak); + writePace(stats.getAverageMovingSpeed(), builder, R.string.description_average_moving_pace_in_minute); // Fastest pace - writePace(stats.getMaxSpeed(), builder, R.string.description_fastest_pace_in_minute, lineBreak); + writePace(stats.getMaxSpeed(), builder, R.string.description_fastest_pace_in_minute); // Min and Max altitude if (stats.hasAltitudeExtremities()) { - writeAltitude(stats.getMaxAltitude(), builder, R.string.description_max_altitude, lineBreak); - writeAltitude(stats.getMinAltitude(), builder, R.string.description_min_altitude, lineBreak); + writeAltitude(stats.getMaxAltitude(), builder, R.string.description_max_altitude); + writeAltitude(stats.getMinAltitude(), builder, R.string.description_min_altitude); } // Altitude gain if (stats.hasTotalAltitudeGain()) { - writeAltitude(stats.getTotalAltitudeGain(), builder, R.string.description_altitude_gain, lineBreak); + writeAltitude(stats.getTotalAltitudeGain(), builder, R.string.description_altitude_gain); } // Altitude loss if (stats.hasTotalAltitudeLoss()) { - writeAltitude(stats.getTotalAltitudeLoss(), builder, R.string.description_altitude_loss, lineBreak); + writeAltitude(stats.getTotalAltitudeLoss(), builder, R.string.description_altitude_loss); } // Recorded time builder.append(context.getString(R.string.description_recorded_time, StringUtils.formatDateTimeWithOffset(OffsetDateTime.ofInstant(stats.getStartTime(), ZoneId.systemDefault())))); - builder.append(lineBreak); + builder.append(TEXT_LINE_BREAK); return builder.toString(); } - /** - * Writes distance. - * - * @param distance distance in meters - * @param builder StringBuilder to append distance - * @param resId resource id of distance string - * @param lineBreak line break string - */ @VisibleForTesting - void writeDistance(Distance distance, StringBuilder builder, int resId, String lineBreak) { + void writeDistance(Distance distance, StringBuilder builder, int resId) { double distanceInKm = distance.toKM(); double distanceInMi = distance.toMI(); builder.append(context.getString(resId, distanceInKm, distanceInMi)); - builder.append(lineBreak); + builder.append(TEXT_LINE_BREAK); } - /** - * Writes time. - * - * @param time time in milliseconds. - * @param builder StringBuilder to append time - * @param resId resource id of time string - * @param lineBreak line break string - */ @VisibleForTesting - void writeTime(Duration time, StringBuilder builder, int resId, String lineBreak) { + void writeTime(Duration time, StringBuilder builder, int resId) { builder.append(context.getString(resId, StringUtils.formatElapsedTime(time))); - builder.append(lineBreak); + builder.append(TEXT_LINE_BREAK); } - /** - * Writes speed. - * - * @param speed speed in meters per second - * @param builder StringBuilder to append speed - * @param resId resource id of speed string - * @param lineBreak line break string - */ @VisibleForTesting - void writeSpeed(Speed speed, StringBuilder builder, int resId, String lineBreak) { + void writeSpeed(Speed speed, StringBuilder builder, int resId) { builder.append(context.getString(resId, speed.toKMH(), speed.toMPH())); - builder.append(lineBreak); + builder.append(TEXT_LINE_BREAK); } - /** - * @param builder StringBuilder to append pace - * @param resId resource id of pace string - * @param lineBreak line break string - */ @VisibleForTesting - void writePace(Speed speed, StringBuilder builder, int resId, String lineBreak) { + void writePace(Speed speed, StringBuilder builder, int resId) { Pair paceInMetrics = SpeedFormatter.Builder().setUnit(UnitSystem.METRIC).setReportSpeedOrPace(false).build(context).getSpeedParts(speed); Pair paceInImperial = SpeedFormatter.Builder().setUnit(UnitSystem.IMPERIAL_FEET).setReportSpeedOrPace(false).build(context).getSpeedParts(speed); @@ -213,20 +160,14 @@ public class DescriptionGenerator { String formattedPaceImperial = paceInImperial.first != null ? paceInImperial.first : context.getString(R.string.value_unknown); builder.append(context.getString(resId, formattedPaceMetrics, formattedPaceImperial)); - builder.append(lineBreak); + builder.append(TEXT_LINE_BREAK); } - /** - * @param altitude_m altitude_m in meters - * @param builder StringBuilder to append - * @param resId resource id of altitude string - * @param lineBreak line break string - */ @VisibleForTesting - void writeAltitude(double altitude_m, StringBuilder builder, int resId, String lineBreak) { + void writeAltitude(double altitude_m, StringBuilder builder, int resId) { long altitudeInM = Math.round(altitude_m); long altitudeInFt = Math.round(Distance.of(altitude_m).toFT()); builder.append(context.getString(resId, altitudeInM, altitudeInFt)); - builder.append(lineBreak); + builder.append(TEXT_LINE_BREAK); } }