From bb38d274fbd3ecd7b014ea317db6a5704e3a0581 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Sat, 13 Feb 2021 14:27:54 +0100 Subject: [PATCH] Voice announcements: cleanup. --- .../util/AnnouncementUtilsTest.java | 30 +++++-------------- .../opentracks/util/AnnouncementUtils.java | 25 ++-------------- 2 files changed, 10 insertions(+), 45 deletions(-) diff --git a/src/androidTest/java/de/dennisguse/opentracks/util/AnnouncementUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/util/AnnouncementUtilsTest.java index f301775a9..684a1119a 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/util/AnnouncementUtilsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/util/AnnouncementUtilsTest.java @@ -26,7 +26,9 @@ public class AnnouncementUtilsTest { private final Context context = ApplicationProvider.getApplicationContext(); @Test - public void getAnnouncement() { + public void getAnnouncement_metric() { + PreferencesUtils.setString(context, R.string.stats_units_key, context.getString(R.string.stats_units_metric)); + TrackStatistics stats = new TrackStatistics(); stats.setTotalDistance(20000); stats.setTotalTime(Duration.ofMillis(600000)); @@ -42,7 +44,9 @@ public class AnnouncementUtilsTest { } @Test - public void getAnnouncement_withInterval() { + public void getAnnouncement_withInterval_metric() { + PreferencesUtils.setString(context, R.string.stats_units_key, context.getString(R.string.stats_units_metric)); + TrackStatistics stats = new TrackStatistics(); stats.setTotalDistance(20000); stats.setTotalTime(Duration.ofMillis(600000)); @@ -54,30 +58,12 @@ public class AnnouncementUtilsTest { IntervalStatistics intervalStatistics = new IntervalStatistics(trackPoints, 1000); IntervalStatistics.Interval lastInterval = intervalStatistics.getIntervalList().get(intervalStatistics.getIntervalList().size() - 1); - int speedId = R.plurals.voiceSpeedKilometersPerHour; - double kmPerHour = lastInterval.getSpeed_ms() * UnitConversions.MPS_TO_KMH; - - String firstPartMsg = "OpenTracks total distance 20.00 kilometers in 5 minutes 0 seconds at 240.0 kilometers per hour"; - String rateMsg = " Lap speed of " + context.getResources().getQuantityString(speedId, getQuantityCount(kmPerHour), kmPerHour); - String msg = firstPartMsg + rateMsg; + String expected = "OpenTracks total distance 20.00 kilometers in 5 minutes 0 seconds at 240.0 kilometers per hour Lap speed of 51.2 kilometers per hour"; // when String announcement = AnnouncementUtils.getAnnouncement(context, stats, "airplane", lastInterval); // then - assertEquals(msg, announcement); - } - - private int getQuantityCount(double d) { - if (d == 0) { - return 0; - } else if (d == 1) { - return 1; - } else if (d == 2) { - return 2; - } else { - int count = (int) d; - return Math.max(count, 3); - } + assertEquals(expected, announcement); } } \ No newline at end of file diff --git a/src/main/java/de/dennisguse/opentracks/util/AnnouncementUtils.java b/src/main/java/de/dennisguse/opentracks/util/AnnouncementUtils.java index ee5dff3af..7f0c19527 100644 --- a/src/main/java/de/dennisguse/opentracks/util/AnnouncementUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/AnnouncementUtils.java @@ -82,29 +82,8 @@ public class AnnouncementUtils { return result + minutesText + " " + secondsText; } - /** - * Gets the plural count to be used by getQuantityString. - * getQuantityString only supports integer quantities, not a double quantity like "2.2". - *

- * As a temporary workaround, we convert a double quantity to an integer quantity. - * If the double quantity is exactly 0, 1, or 2, then we can return these integer quantities. - * Otherwise, we cast the double quantity to an integer quantity. - * However, we need to make sure that if the casted value is 0, 1, or 2, we don't return those, instead, return the next biggest integer 3. - * - * @param d the double value - */ - private static int getQuantityCount(double d) { - if (d == 0) { - return 0; - } else if (d == 1) { - return 1; - } else if (d == 2) { - return 2; - } else { - //TODO This seems weird; why not use Math.round(d) or Math.ceil()? - int count = (int) d; - return Math.max(count, 3); - } + static int getQuantityCount(double d) { + return (int) d; } }