From f7aafa00e27d85f4d0f2b4c504d9063d392b41f8 Mon Sep 17 00:00:00 2001 From: Ilya Grechuhin Date: Wed, 6 Jul 2016 13:49:16 +0300 Subject: [omim] Refactored measurement_utils. --- android/jni/com/mapswithme/maps/Framework.cpp | 12 ++-- .../maps/bookmarks/data/BookmarkCategory.cpp | 2 +- .../com/mapswithme/maps/settings/UnitLocale.cpp | 9 +-- drape_frontend/gui/ruler_helper.cpp | 8 +-- generator/osm2meta.cpp | 4 +- indexer/map_object.cpp | 2 +- iphone/Maps/Bookmarks/BookmarksVC.mm | 2 +- .../Search/TableView/MWMSearchCommonCell.mm | 2 +- .../MWMNavigationDashboardEntity.mm | 5 +- iphone/Maps/Classes/Location/MWMLocationHelpers.h | 8 ++- iphone/Maps/Classes/MWMPlacePageEntity.mm | 5 +- iphone/Maps/Classes/MWMPlacePageViewManager.mm | 4 +- iphone/Maps/Settings/Preferences.mm | 8 +-- iphone/Maps/Settings/SettingsViewController.mm | 14 +++-- map/framework.cpp | 6 +- platform/measurement_utils.cpp | 67 +++++++++++--------- platform/measurement_utils.hpp | 28 +++++++-- platform/platform_android.cpp | 11 ++-- platform/platform_ios.mm | 9 +-- platform/platform_qt.cpp | 10 +-- platform/platform_tests/measurement_tests.cpp | 46 +++++++++++--- platform/settings.cpp | 19 +++--- platform/settings.hpp | 5 -- qt/preferences_dialog.cpp | 17 +++--- routing/routing_session.cpp | 4 +- routing/routing_session.hpp | 3 +- routing/routing_tests/turns_sound_test.cpp | 18 +++--- routing/routing_tests/turns_tts_text_tests.cpp | 71 ++++++++++++++-------- routing/turns_notification_manager.cpp | 12 ++-- routing/turns_notification_manager.hpp | 7 ++- routing/turns_sound_settings.cpp | 25 ++++---- routing/turns_sound_settings.hpp | 29 ++++----- routing/turns_tts_text.cpp | 12 ++-- search/intermediate_result.cpp | 3 +- xcode/routing/routing.xcodeproj/project.pbxproj | 6 +- 35 files changed, 290 insertions(+), 203 deletions(-) diff --git a/android/jni/com/mapswithme/maps/Framework.cpp b/android/jni/com/mapswithme/maps/Framework.cpp index a748bafa03..5eaf5ce5dd 100644 --- a/android/jni/com/mapswithme/maps/Framework.cpp +++ b/android/jni/com/mapswithme/maps/Framework.cpp @@ -608,8 +608,8 @@ Java_com_mapswithme_maps_Framework_nativeGetDistanceAndAzimuthFromLatLon( JNIEXPORT jobject JNICALL Java_com_mapswithme_maps_Framework_nativeFormatLatLon(JNIEnv * env, jclass, jdouble lat, jdouble lon, jboolean useDMSFormat) { - return jni::ToJavaString(env, (useDMSFormat ? MeasurementUtils::FormatLatLonAsDMS(lat, lon, 2) - : MeasurementUtils::FormatLatLon(lat, lon, 6))); + return jni::ToJavaString(env, (useDMSFormat ? measurement_utils::FormatLatLonAsDMS(lat, lon, 2) + : measurement_utils::FormatLatLon(lat, lon, 6))); } JNIEXPORT jobjectArray JNICALL @@ -617,9 +617,9 @@ Java_com_mapswithme_maps_Framework_nativeFormatLatLonToArr(JNIEnv * env, jclass, { string slat, slon; if (useDMSFormat) - MeasurementUtils::FormatLatLonAsDMS(lat, lon, slat, slon, 2); + measurement_utils::FormatLatLonAsDMS(lat, lon, slat, slon, 2); else - MeasurementUtils::FormatLatLon(lat, lon, slat, slon, 6); + measurement_utils::FormatLatLon(lat, lon, slat, slon, 6); static jclass const klass = jni::GetGlobalClassRef(env, "java/lang/String"); jobjectArray arr = env->NewObjectArray(2, klass, 0); @@ -633,13 +633,13 @@ Java_com_mapswithme_maps_Framework_nativeFormatLatLonToArr(JNIEnv * env, jclass, JNIEXPORT jobject JNICALL Java_com_mapswithme_maps_Framework_nativeFormatAltitude(JNIEnv * env, jclass, jdouble alt) { - return jni::ToJavaString(env, MeasurementUtils::FormatAltitude(alt)); + return jni::ToJavaString(env, measurement_utils::FormatAltitude(alt)); } JNIEXPORT jobject JNICALL Java_com_mapswithme_maps_Framework_nativeFormatSpeed(JNIEnv * env, jclass, jdouble speed) { - return jni::ToJavaString(env, MeasurementUtils::FormatSpeed(speed)); + return jni::ToJavaString(env, measurement_utils::FormatSpeedWithDeviceUnits(speed)); } JNIEXPORT jobject JNICALL diff --git a/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkCategory.cpp b/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkCategory.cpp index 2dd767dc82..0aee2f1d02 100644 --- a/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkCategory.cpp +++ b/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkCategory.cpp @@ -106,7 +106,7 @@ Java_com_mapswithme_maps_bookmarks_data_BookmarkCategory_nativeGetTrack( ASSERT(nTrack, ("Track must not be null with index:)", bmkId)); string formattedLength; - MeasurementUtils::FormatDistance(nTrack->GetLengthMeters(), formattedLength); + measurement_utils::FormatDistance(nTrack->GetLengthMeters(), formattedLength); dp::Color nColor = nTrack->GetColor(0); diff --git a/android/jni/com/mapswithme/maps/settings/UnitLocale.cpp b/android/jni/com/mapswithme/maps/settings/UnitLocale.cpp index 5aec8dd7cf..ad129e09ac 100644 --- a/android/jni/com/mapswithme/maps/settings/UnitLocale.cpp +++ b/android/jni/com/mapswithme/maps/settings/UnitLocale.cpp @@ -1,14 +1,14 @@ #include "../Framework.hpp" +#include "platform/measurement_utils.hpp" #include "platform/settings.hpp" - extern "C" { JNIEXPORT void JNICALL Java_com_mapswithme_maps_settings_UnitLocale_setCurrentUnits(JNIEnv * env, jobject thiz, jint units) { - settings::Units const u = static_cast(units); + measurement_utils::Units const u = static_cast(units); settings::Set(settings::kMeasurementUnits, u); g_framework->SetupMeasurementSystem(); } @@ -16,7 +16,8 @@ extern "C" JNIEXPORT jint JNICALL Java_com_mapswithme_maps_settings_UnitLocale_getCurrentUnits(JNIEnv * env, jobject thiz) { - settings::Units u; - return (settings::Get(settings::kMeasurementUnits, u) ? u : -1); + measurement_utils::Units u; + return static_cast( + settings::Get(settings::kMeasurementUnits, u) ? u : measurement_utils::Units::Metric); } } diff --git a/drape_frontend/gui/ruler_helper.cpp b/drape_frontend/gui/ruler_helper.cpp index 5fb830f14a..e3bdbe0b54 100644 --- a/drape_frontend/gui/ruler_helper.cpp +++ b/drape_frontend/gui/ruler_helper.cpp @@ -229,14 +229,14 @@ double RulerHelper::CalcMetresDiff(double value) typedef double (*ConversionFn)(double); ConversionFn conversionFn = &identity; - settings::Units units = settings::Metric; - settings::Get(settings::kMeasurementUnits, units); + auto units = measurement_utils::Units::Metric; + UNUSED_VALUE(settings::Get(settings::kMeasurementUnits, units)); - if (units == settings::Foot) + if (units == measurement_utils::Units::Imperial) { arrU = g_arrFeets; count = ARRAY_SIZE(g_arrFeets); - conversionFn = &MeasurementUtils::MetersToFeet; + conversionFn = &measurement_utils::MetersToFeet; } int prevUnitRange = m_rangeIndex; diff --git a/generator/osm2meta.cpp b/generator/osm2meta.cpp index eae1b8d3a5..4815130e5a 100644 --- a/generator/osm2meta.cpp +++ b/generator/osm2meta.cpp @@ -125,7 +125,7 @@ string MetadataTagProcessorImpl::ValidateAndFormat_opening_hours(string const & string MetadataTagProcessorImpl::ValidateAndFormat_ele(string const & v) const { - return MeasurementUtils::OSMDistanceToMetersString(v); + return measurement_utils::OSMDistanceToMetersString(v); } string MetadataTagProcessorImpl::ValidateAndFormat_turn_lanes(string const & v) const @@ -169,7 +169,7 @@ string MetadataTagProcessorImpl::ValidateAndFormat_internet(string v) const string MetadataTagProcessorImpl::ValidateAndFormat_height(string const & v) const { - return MeasurementUtils::OSMDistanceToMetersString(v, false /*supportZeroAndNegativeValues*/, 1); + return measurement_utils::OSMDistanceToMetersString(v, false /*supportZeroAndNegativeValues*/, 1); } string MetadataTagProcessorImpl::ValidateAndFormat_building_levels(string v) const diff --git a/indexer/map_object.cpp b/indexer/map_object.cpp index 54902ced19..5f75841144 100644 --- a/indexer/map_object.cpp +++ b/indexer/map_object.cpp @@ -166,7 +166,7 @@ string MapObject::GetElevationFormatted() const { double value; if (strings::to_double(m_metadata.Get(feature::Metadata::FMD_ELE), value)) - return MeasurementUtils::FormatAltitude(value); + return measurement_utils::FormatAltitude(value); else LOG(LWARNING, ("Invalid metadata for elevation:", m_metadata.Get(feature::Metadata::FMD_ELE))); diff --git a/iphone/Maps/Bookmarks/BookmarksVC.mm b/iphone/Maps/Bookmarks/BookmarksVC.mm index d265489d09..b08c08a68e 100644 --- a/iphone/Maps/Bookmarks/BookmarksVC.mm +++ b/iphone/Maps/Bookmarks/BookmarksVC.mm @@ -138,7 +138,7 @@ extern NSString * const kBookmarksChangedNotification = @"BookmarksChangedNotifi Track const * tr = cat->GetTrack(indexPath.row); cell.textLabel.text = @(tr->GetName().c_str()); string dist; - if (MeasurementUtils::FormatDistance(tr->GetLengthMeters(), dist)) + if (measurement_utils::FormatDistance(tr->GetLengthMeters(), dist)) //Change Length before release!!! cell.detailTextLabel.text = [NSString stringWithFormat:@"%@ %@", L(@"length"), [NSString stringWithUTF8String:dist.c_str()]]; else diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/Search/TableView/MWMSearchCommonCell.mm b/iphone/Maps/Classes/CustomViews/MapViewControls/Search/TableView/MWMSearchCommonCell.mm index fbf0ffc296..890e811655 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/Search/TableView/MWMSearchCommonCell.mm +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/Search/TableView/MWMSearchCommonCell.mm @@ -61,7 +61,7 @@ if (lastLocation) { double const dist = MercatorBounds::DistanceOnEarth(lastLocation.mercator, result.GetFeatureCenter()); - MeasurementUtils::FormatDistance(dist, distanceStr); + measurement_utils::FormatDistance(dist, distanceStr); } self.distanceLabel.text = @(distanceStr.c_str()); } diff --git a/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardEntity.mm b/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardEntity.mm index 3d2aa71e09..a6547288cf 100644 --- a/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardEntity.mm +++ b/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardEntity.mm @@ -31,8 +31,9 @@ using namespace routing::turns; CLLocationCoordinate2D const & coordinate = lastLocation.coordinate; ms::LatLon const & directionPos = info.m_pedestrianDirectionPos; //TODO: Not the best solution, but this solution is temporary and will be replaced in future - MeasurementUtils::FormatDistance(ms::DistanceOnEarth(coordinate.latitude, coordinate.longitude, - directionPos.lat, directionPos.lon), distance); + measurement_utils::FormatDistance(ms::DistanceOnEarth(coordinate.latitude, coordinate.longitude, + directionPos.lat, directionPos.lon), + distance); istringstream is (distance); string dist; string units; diff --git a/iphone/Maps/Classes/Location/MWMLocationHelpers.h b/iphone/Maps/Classes/Location/MWMLocationHelpers.h index affd273486..1120fb5024 100644 --- a/iphone/Maps/Classes/Location/MWMLocationHelpers.h +++ b/iphone/Maps/Classes/Location/MWMLocationHelpers.h @@ -2,6 +2,7 @@ #include "platform/location.hpp" #include "platform/measurement_utils.hpp" +#include "platform/settings.hpp" #include "geometry/mercator.hpp" @@ -51,13 +52,14 @@ static inline NSString * formattedSpeedAndAltitude(CLLocation * location) string result; if (location.altitude) result = "\xE2\x96\xB2 " /* this is simple mountain symbol */ + - MeasurementUtils::FormatAltitude(location.altitude); + measurement_utils::FormatAltitude(location.altitude); // Speed is actual only for just received location if (location.speed > 0. && [location.timestamp timeIntervalSinceNow] >= -2.0) { if (!result.empty()) result += " "; - result += getSpeedSymbol(location.speed) + MeasurementUtils::FormatSpeed(location.speed); + result += getSpeedSymbol(location.speed) + + measurement_utils::FormatSpeedWithDeviceUnits(location.speed); } return result.empty() ? nil : @(result.c_str()); } @@ -68,7 +70,7 @@ static inline NSString * formattedDistance(double const & meters) return nil; string s; - MeasurementUtils::FormatDistance(meters, s); + measurement_utils::FormatDistance(meters, s); return @(s.c_str()); } diff --git a/iphone/Maps/Classes/MWMPlacePageEntity.mm b/iphone/Maps/Classes/MWMPlacePageEntity.mm index 1423c2a549..71ce55ecf2 100644 --- a/iphone/Maps/Classes/MWMPlacePageEntity.mm +++ b/iphone/Maps/Classes/MWMPlacePageEntity.mm @@ -285,8 +285,9 @@ void initFieldsMap() BOOL const useDMSFormat = [[NSUserDefaults standardUserDefaults] boolForKey:kUserDefaultsLatLonAsDMSKey]; ms::LatLon const latlon = self.latlon; - return @((useDMSFormat ? MeasurementUtils::FormatLatLon(latlon.lat, latlon.lon) - : MeasurementUtils::FormatLatLonAsDMS(latlon.lat, latlon.lon, 2)).c_str()); + return @((useDMSFormat ? measurement_utils::FormatLatLon(latlon.lat, latlon.lon) + : measurement_utils::FormatLatLonAsDMS(latlon.lat, latlon.lon, 2)) + .c_str()); } #pragma mark - Bookmark editing diff --git a/iphone/Maps/Classes/MWMPlacePageViewManager.mm b/iphone/Maps/Classes/MWMPlacePageViewManager.mm index f79229484a..682f97eb1b 100644 --- a/iphone/Maps/Classes/MWMPlacePageViewManager.mm +++ b/iphone/Maps/Classes/MWMPlacePageViewManager.mm @@ -364,8 +364,8 @@ extern NSString * const kBookmarksChangedNotification; string distance; CLLocationCoordinate2D const coord = lastLocation.coordinate; ms::LatLon const target = self.entity.latlon; - MeasurementUtils::FormatDistance(ms::DistanceOnEarth(coord.latitude, coord.longitude, - target.lat, target.lon), distance); + measurement_utils::FormatDistance( + ms::DistanceOnEarth(coord.latitude, coord.longitude, target.lat, target.lon), distance); return @(distance.c_str()); } diff --git a/iphone/Maps/Settings/Preferences.mm b/iphone/Maps/Settings/Preferences.mm index 01b0f56507..93dacb65da 100644 --- a/iphone/Maps/Settings/Preferences.mm +++ b/iphone/Maps/Settings/Preferences.mm @@ -10,13 +10,13 @@ + (void)setup { - settings::Units u; - if (!settings::Get(settings::kMeasurementUnits, u)) + auto units = measurement_utils::Units::Metric; + if (!settings::Get(settings::kMeasurementUnits, units)) { // get system locale preferences BOOL const isMetric = [[[NSLocale autoupdatingCurrentLocale] objectForKey:NSLocaleUsesMetricSystem] boolValue]; - u = isMetric ? settings::Metric : settings::Foot; - settings::Set(settings::kMeasurementUnits, u); + units = isMetric ? measurement_utils::Units::Metric : measurement_utils::Units::Imperial; + settings::Set(settings::kMeasurementUnits, units); } GetFramework().SetupMeasurementSystem(); } diff --git a/iphone/Maps/Settings/SettingsViewController.mm b/iphone/Maps/Settings/SettingsViewController.mm index cc756001fc..0edaddefc2 100644 --- a/iphone/Maps/Settings/SettingsViewController.mm +++ b/iphone/Maps/Settings/SettingsViewController.mm @@ -88,8 +88,8 @@ typedef NS_ENUM(NSUInteger, Section) case SectionMetrics: { cell = [tableView dequeueReusableCellWithIdentifier:[SelectableCell className]]; - settings::Units units = settings::Metric; - (void)settings::Get(settings::kMeasurementUnits, units); + auto units = measurement_utils::Units::Metric; + UNUSED_VALUE(settings::Get(settings::kMeasurementUnits, units)); BOOL const selected = units == unitsForIndex(indexPath.row); SelectableCell * customCell = (SelectableCell *)cell; customCell.accessoryType = selected ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone; @@ -330,9 +330,9 @@ typedef NS_ENUM(NSUInteger, Section) } } -settings::Units unitsForIndex(NSInteger index) +measurement_utils::Units unitsForIndex(NSInteger index) { - return index == 0 ? settings::Metric : settings::Foot; + return index == 0 ? measurement_utils::Units::Metric : measurement_utils::Units::Imperial; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath @@ -341,9 +341,11 @@ settings::Units unitsForIndex(NSInteger index) { case SectionMetrics: { - settings::Units units = unitsForIndex(indexPath.row); + auto const units = unitsForIndex(indexPath.row); [Statistics logEvent:kStatEventName(kStatSettings, kStatChangeMeasureUnits) - withParameters:@{kStatValue : (units == settings::Units::Metric ? kStatKilometers : kStatMiles)}]; + withParameters:@{ + kStatValue : (units == measurement_utils::Units::Metric ? kStatKilometers : kStatMiles) + }]; settings::Set(settings::kMeasurementUnits, units); [tableView reloadSections:[NSIndexSet indexSetWithIndex:SectionMetrics] withRowAnimation:UITableViewRowAnimationFade]; GetFramework().SetupMeasurementSystem(); diff --git a/map/framework.cpp b/map/framework.cpp index 2f5fdf7978..5c776d9916 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -1496,7 +1496,7 @@ bool Framework::GetDistanceAndAzimut(m2::PointD const & point, MercatorBounds::XToLon(point.x)); // Distance may be less than 1.0 - (void) MeasurementUtils::FormatDistance(d, distance); + UNUSED_VALUE(measurement_utils::FormatDistance(d, distance)); if (north >= 0.0) { @@ -1701,8 +1701,8 @@ void Framework::SetupMeasurementSystem() { GetPlatform().SetupMeasurementSystem(); - settings::Units units = settings::Metric; - settings::Get(settings::kMeasurementUnits, units); + auto units = measurement_utils::Units::Metric; + UNUSED_VALUE(settings::Get(settings::kMeasurementUnits, units)); m_routingSession.SetTurnNotificationsUnits(units); } diff --git a/platform/measurement_utils.cpp b/platform/measurement_utils.cpp index 71d1cbd200..dab1349b6c 100644 --- a/platform/measurement_utils.cpp +++ b/platform/measurement_utils.cpp @@ -16,7 +16,7 @@ using namespace settings; using namespace strings; -namespace MeasurementUtils +namespace measurement_utils { string ToStringPrecision(double d, int pr) @@ -51,14 +51,14 @@ bool FormatDistanceImpl(double m, string & res, bool FormatDistance(double m, string & res) { - Units u = Metric; - (void)Get(settings::kMeasurementUnits, u); + auto units = Units::Metric; + UNUSED_VALUE(Get(settings::kMeasurementUnits, units)); /// @todo Put string units resources. - switch (u) + switch (units) { - case Foot: return FormatDistanceImpl(m, res, " mi", " ft", 1609.344, 0.3048); - default: return FormatDistanceImpl(m, res, " km", " m", 1000.0, 1.0); + case Units::Imperial: return FormatDistanceImpl(m, res, " mi", " ft", 1609.344, 0.3048); + case Units::Metric: return FormatDistanceImpl(m, res, " km", " m", 1000.0, 1.0); } } @@ -154,42 +154,53 @@ void FormatMercator(m2::PointD const & mercator, string & lat, string & lon, int string FormatAltitude(double altitudeInMeters) { - Units u = Metric; - (void)Get(settings::kMeasurementUnits, u); + Units units = Units::Metric; + UNUSED_VALUE(Get(settings::kMeasurementUnits, units)); ostringstream ss; ss << fixed << setprecision(0); /// @todo Put string units resources. - switch (u) + switch (units) { - case Foot: ss << MetersToFeet(altitudeInMeters) << "ft"; break; - default: ss << altitudeInMeters << "m"; break; + case Units::Imperial: ss << MetersToFeet(altitudeInMeters) << "ft"; break; + case Units::Metric: ss << altitudeInMeters << "m"; break; } return ss.str(); } -string FormatSpeed(double metersPerSecond) +string FormatSpeedWithDeviceUnits(double metersPerSecond) { - Units u = Metric; - (void)Get(settings::kMeasurementUnits, u); + auto units = Units::Metric; + UNUSED_VALUE(Get(settings::kMeasurementUnits, units)); + return FormatSpeedWithUnits(metersPerSecond, units); +} - double perHour; - string res; +string FormatSpeedWithUnits(double metersPerSecond, Units units) +{ + return FormatSpeed(metersPerSecond, units) + FormatSpeedUnits(units); +} - /// @todo Put string units resources. - switch (u) +string FormatSpeed(double metersPerSecond, Units units) +{ + double constexpr kSecondsPerHour = 3600; + double constexpr metersPerKilometer = 1000; + double unitsPerHour; + switch (units) { - case Foot: - perHour = metersPerSecond * 3600. / 1609.344; - res = ToStringPrecision(perHour, perHour >= 10.0 ? 0 : 1) + "mph"; - break; - default: - perHour = metersPerSecond * 3600. / 1000.; - res = ToStringPrecision(perHour, perHour >= 10.0 ? 0 : 1) + "km/h"; - break; + case Units::Imperial: unitsPerHour = MetersToMiles(metersPerSecond) * kSecondsPerHour; break; + case Units::Metric: unitsPerHour = metersPerSecond * kSecondsPerHour / metersPerKilometer; break; + } + return ToStringPrecision(unitsPerHour, unitsPerHour >= 10.0 ? 0 : 1); +} + +string FormatSpeedUnits(Units units) +{ + switch (units) + { + case Units::Imperial: return "mph"; + case Units::Metric: return "km/h"; } - return res; } bool OSMDistanceToMeters(string const & osmRawValue, double & outMeters) @@ -275,4 +286,4 @@ string OSMDistanceToMetersString(string const & osmRawValue, return {}; } -} // namespace MeasurementUtils +} // namespace measurement_utils diff --git a/platform/measurement_utils.hpp b/platform/measurement_utils.hpp index 1da8145ec7..6a023bbb03 100644 --- a/platform/measurement_utils.hpp +++ b/platform/measurement_utils.hpp @@ -4,13 +4,27 @@ #include "std/string.hpp" -namespace MeasurementUtils +namespace measurement_utils { +enum class Units +{ + Metric = 0, + Imperial = 1 +}; + +inline string DebugPrint(Units units) +{ + switch (units) + { + case Units::Imperial: return "Units::Imperial"; + case Units::Metric: return "Units::Metric"; + } +} inline double MetersToMiles(double m) { return m * 0.000621371192; } inline double MilesToMeters(double mi) { return mi * 1609.344; } inline double MetersToFeet(double m) { return m * 3.2808399; } -inline double FeetToMeters(double ft) { return ft * 0.3048; } +inline double FeetToMeters(double ft) { return ft * 0.3048; } inline double FeetToMiles(double ft) { return ft * 5280; } inline double InchesToMeters(double in) { return in / 39.370; } inline double NauticalMilesToMeters(double nmi) { return nmi * 1852; } @@ -23,8 +37,11 @@ bool FormatDistance(double m, string & res); /// We always use meters and feet/yards for altitude string FormatAltitude(double altitudeInMeters); -/// km/h or mph -string FormatSpeed(double metersPerSecond); +// Return value is measured in km/h for Metric and in mph for Imperial. +string FormatSpeedWithDeviceUnits(double metersPerSecond); +string FormatSpeedWithUnits(double metersPerSecond, Units units); +string FormatSpeed(double metersPerSecond, Units units); +string FormatSpeedUnits(Units units); /// @param[in] dac Digits after comma in seconds. /// Use dac == 3 for our common conversions to DMS. @@ -47,5 +64,4 @@ bool OSMDistanceToMeters(string const & osmRawValue, double & outMeters); string OSMDistanceToMetersString(string const & osmRawValue, bool supportZeroAndNegativeValues = true, int digitsAfterComma = 2); - -} +} // namespace measurement_utils diff --git a/platform/platform_android.cpp b/platform/platform_android.cpp index f65c174037..758cfc1d7f 100644 --- a/platform/platform_android.cpp +++ b/platform/platform_android.cpp @@ -1,6 +1,7 @@ +#include "platform/constants.hpp" +#include "platform/measurement_utils.hpp" #include "platform/platform.hpp" #include "platform/platform_unix_impl.hpp" -#include "platform/constants.hpp" #include "platform/settings.hpp" #include "coding/zip_reader.hpp" @@ -251,12 +252,12 @@ Platform::EError Platform::MkDir(string const & dirName) const void Platform::SetupMeasurementSystem() const { - settings::Units u; - if (settings::Get(settings::kMeasurementUnits, u)) + auto units = measurement_utils::Units::Metric; + if (settings::Get(settings::kMeasurementUnits, units)) return; // @TODO Add correct implementation - u = settings::Metric; - settings::Set(settings::kMeasurementUnits, u); + units = measurement_utils::Units::Metric; + settings::Set(settings::kMeasurementUnits, units); } namespace diff --git a/platform/platform_ios.mm b/platform/platform_ios.mm index bbcabd8003..24505604b1 100644 --- a/platform/platform_ios.mm +++ b/platform/platform_ios.mm @@ -1,4 +1,5 @@ #include "platform/constants.hpp" +#include "platform/measurement_utils.hpp" #include "platform/platform.hpp" #include "platform/platform_unix_impl.hpp" #include "platform/settings.hpp" @@ -262,12 +263,12 @@ Platform::EConnectionType Platform::ConnectionStatus() void Platform::SetupMeasurementSystem() const { - settings::Units u; - if (settings::Get(settings::kMeasurementUnits, u)) + auto units = measurement_utils::Units::Metric; + if (settings::Get(settings::kMeasurementUnits, units)) return; BOOL const isMetric = [[[NSLocale autoupdatingCurrentLocale] objectForKey:NSLocaleUsesMetricSystem] boolValue]; - u = isMetric ? settings::Metric : settings::Foot; - settings::Set(settings::kMeasurementUnits, u); + units = isMetric ? measurement_utils::Units::Metric : measurement_utils::Units::Imperial; + settings::Set(settings::kMeasurementUnits, units); } //////////////////////////////////////////////////////////////////////// diff --git a/platform/platform_qt.cpp b/platform/platform_qt.cpp index a79d8de8d9..dd78b7c4d4 100644 --- a/platform/platform_qt.cpp +++ b/platform/platform_qt.cpp @@ -1,5 +1,5 @@ - #include "platform/constants.hpp" +#include "platform/measurement_utils.hpp" #include "platform/platform.hpp" #include "platform/settings.hpp" @@ -74,12 +74,12 @@ Platform::EError Platform::MkDir(string const & dirName) const void Platform::SetupMeasurementSystem() const { - settings::Units u; - if (settings::Get(settings::kMeasurementUnits, u)) + auto units = measurement_utils::Units::Metric; + if (settings::Get(settings::kMeasurementUnits, units)) return; bool const isMetric = QLocale::system().measurementSystem() == QLocale::MetricSystem; - u = isMetric ? settings::Metric : settings::Foot; - settings::Set(settings::kMeasurementUnits, u); + units = isMetric ? measurement_utils::Units::Metric : measurement_utils::Units::Imperial; + settings::Set(settings::kMeasurementUnits, units); } #if defined(OMIM_OS_LINUX) diff --git a/platform/platform_tests/measurement_tests.cpp b/platform/platform_tests/measurement_tests.cpp index 158e016d21..8f5f793e87 100644 --- a/platform/platform_tests/measurement_tests.cpp +++ b/platform/platform_tests/measurement_tests.cpp @@ -3,7 +3,7 @@ #include "platform/measurement_utils.hpp" #include "platform/settings.hpp" -using namespace MeasurementUtils; +using namespace measurement_utils; using namespace settings; struct ScopedSettings @@ -30,7 +30,7 @@ struct ScopedSettings UNIT_TEST(Measurement_Smoke) { - ScopedSettings guard(settings::Metric); + ScopedSettings guard(Units::Metric); typedef pair PairT; @@ -89,17 +89,49 @@ UNIT_TEST(LatLonToDMS_NoRounding) UNIT_TEST(FormatAltitude) { ScopedSettings guard; - settings::Set(settings::kMeasurementUnits, settings::Foot); + settings::Set(settings::kMeasurementUnits, Units::Imperial); TEST_EQUAL(FormatAltitude(10000), "32808ft", ()); - settings::Set(settings::kMeasurementUnits, settings::Metric); + settings::Set(settings::kMeasurementUnits, Units::Metric); TEST_EQUAL(FormatAltitude(5), "5m", ()); } +UNIT_TEST(FormatSpeedWithDeviceUnits) +{ + { + ScopedSettings guard(Units::Metric); + TEST_EQUAL(FormatSpeedWithDeviceUnits(10), "36km/h", ()); + TEST_EQUAL(FormatSpeedWithDeviceUnits(1), "3.6km/h", ()); + } + + { + ScopedSettings guard(Units::Imperial); + TEST_EQUAL(FormatSpeedWithDeviceUnits(10), "22mph", ()); + TEST_EQUAL(FormatSpeedWithDeviceUnits(1), "2.2mph", ()); + } +} + +UNIT_TEST(FormatSpeedWithUnits) +{ + TEST_EQUAL(FormatSpeedWithUnits(10, Units::Metric), "36km/h", ()); + TEST_EQUAL(FormatSpeedWithUnits(1, Units::Metric), "3.6km/h", ()); + + TEST_EQUAL(FormatSpeedWithUnits(10, Units::Imperial), "22mph", ()); + TEST_EQUAL(FormatSpeedWithUnits(1, Units::Imperial), "2.2mph", ()); +} + UNIT_TEST(FormatSpeed) { - ScopedSettings guard(settings::Metric); - TEST_EQUAL(FormatSpeed(10), "36km/h", ()); - TEST_EQUAL(FormatSpeed(1), "3.6km/h", ()); + TEST_EQUAL(FormatSpeed(10, Units::Metric), "36", ()); + TEST_EQUAL(FormatSpeed(1, Units::Metric), "3.6", ()); + + TEST_EQUAL(FormatSpeed(10, Units::Imperial), "22", ()); + TEST_EQUAL(FormatSpeed(1, Units::Imperial), "2.2", ()); +} + +UNIT_TEST(FormatSpeedUnits) +{ + TEST_EQUAL(FormatSpeedUnits(Units::Metric), "km/h", ()); + TEST_EQUAL(FormatSpeedUnits(Units::Imperial), "mph", ()); } UNIT_TEST(OSMDistanceToMetersString) diff --git a/platform/settings.cpp b/platform/settings.cpp index 9feff99bc1..cbeccacf11 100644 --- a/platform/settings.cpp +++ b/platform/settings.cpp @@ -1,8 +1,8 @@ -#include "settings.hpp" -#include "platform.hpp" +#include "platform/settings.hpp" +#include "platform/location.hpp" +#include "platform/platform.hpp" #include "defines.hpp" -#include "location.hpp" #include "coding/reader_streambuf.hpp" #include "coding/file_writer.hpp" @@ -365,22 +365,23 @@ bool FromString(string const & s, DPairT & v) } template <> -string ToString(Units const & v) +string ToString(measurement_utils::Units const & v) { switch (v) { - case Foot: return "Foot"; - default: return "Metric"; + // The value "Foot" is left here for compatibility with old settings.ini files. + case measurement_utils::Units::Imperial: return "Foot"; + case measurement_utils::Units::Metric: return "Metric"; } } template <> -bool FromString(string const & s, Units & v) +bool FromString(string const & s, measurement_utils::Units & v) { if (s == "Metric") - v = Metric; + v = measurement_utils::Units::Metric; else if (s == "Foot") - v = Foot; + v = measurement_utils::Units::Imperial; else return false; diff --git a/platform/settings.hpp b/platform/settings.hpp index 290cc8b896..8edb1e9307 100644 --- a/platform/settings.hpp +++ b/platform/settings.hpp @@ -52,11 +52,6 @@ void Set(string const & key, ValueT const & value) inline void Delete(string const & key) { StringStorage::Instance().DeleteKeyAndValue(key); } inline void Clear() { StringStorage::Instance().Clear(); } -enum Units -{ - Metric = 0, - Foot -}; /// Use this function for running some stuff once according to date. /// @param[in] date Current date in format yymmdd. diff --git a/qt/preferences_dialog.cpp b/qt/preferences_dialog.cpp index d7c3d84a5a..7606ce0a0b 100644 --- a/qt/preferences_dialog.cpp +++ b/qt/preferences_dialog.cpp @@ -1,5 +1,6 @@ #include "qt/preferences_dialog.hpp" +#include "platform/measurement_utils.hpp" #include "platform/settings.hpp" #include @@ -26,6 +27,8 @@ #include #endif +using namespace measurement_utils; + namespace qt { PreferencesDialog::PreferencesDialog(QWidget * parent) @@ -40,15 +43,13 @@ namespace qt { QHBoxLayout * pLayout = new QHBoxLayout(); - using namespace settings; - QRadioButton * p = new QRadioButton("Metric"); pLayout->addWidget(p); - m_pUnits->addButton(p, Metric); + m_pUnits->addButton(p, static_cast(Units::Metric)); p = new QRadioButton("Imperial (foot)"); pLayout->addWidget(p); - m_pUnits->addButton(p, Foot); + m_pUnits->addButton(p, static_cast(Units::Imperial)); radioBox->setLayout(pLayout); @@ -57,9 +58,9 @@ namespace qt { // set default measurement from system locale if (QLocale::system().measurementSystem() == QLocale::MetricSystem) - u = Metric; + u = Units::Metric; else - u = Foot; + u = Units::Imperial; } m_pUnits->button(static_cast(u))->setChecked(true); @@ -97,8 +98,8 @@ namespace qt Units u; switch (i) { - case 0: u = Metric; break; - case 1: u = Foot; break; + case 0: u = Units::Metric; break; + case 1: u = Units::Imperial; break; } settings::Set(kMeasurementUnits, u); diff --git a/routing/routing_session.cpp b/routing/routing_session.cpp index 177caf38eb..720f22996d 100644 --- a/routing/routing_session.cpp +++ b/routing/routing_session.cpp @@ -247,7 +247,7 @@ void RoutingSession::GetRouteFollowingInfo(FollowingInfo & info) const auto formatDistFn = [](double dist, string & value, string & suffix) { /// @todo Make better formatting of distance and units. - MeasurementUtils::FormatDistance(dist, value); + UNUSED_VALUE(measurement_utils::FormatDistance(dist, value)); size_t const delim = value.find(' '); ASSERT(delim != string::npos, ()); @@ -457,7 +457,7 @@ bool RoutingSession::AreTurnNotificationsEnabled() const return m_turnNotificationsMgr.IsEnabled(); } -void RoutingSession::SetTurnNotificationsUnits(settings::Units const units) +void RoutingSession::SetTurnNotificationsUnits(measurement_utils::Units const units) { threads::MutexGuard guard(m_routeSessionMutex); UNUSED_VALUE(guard); diff --git a/routing/routing_session.hpp b/routing/routing_session.hpp index ecc3cb3e39..478d4c9f98 100644 --- a/routing/routing_session.hpp +++ b/routing/routing_session.hpp @@ -7,6 +7,7 @@ #include "routing/turns_notification_manager.hpp" #include "platform/location.hpp" +#include "platform/measurement_utils.hpp" #include "geometry/point2d.hpp" #include "geometry/polyline2d.hpp" @@ -130,7 +131,7 @@ public: // Sound notifications for turn instructions. void EnableTurnNotifications(bool enable); bool AreTurnNotificationsEnabled() const; - void SetTurnNotificationsUnits(settings::Units const units); + void SetTurnNotificationsUnits(measurement_utils::Units const units); void SetTurnNotificationsLocale(string const & locale); string GetTurnNotificationsLocale() const; void GenerateTurnNotifications(vector & turnNotifications); diff --git a/routing/routing_tests/turns_sound_test.cpp b/routing/routing_tests/turns_sound_test.cpp index f362c9e5cf..b0f7519095 100644 --- a/routing/routing_tests/turns_sound_test.cpp +++ b/routing/routing_tests/turns_sound_test.cpp @@ -26,7 +26,7 @@ UNIT_TEST(TurnNotificationSettingsMetersTest) 25 /* m_minStartBeforeMeters */, 150 /* m_maxStartBeforeMeters */, 170 /* m_minDistToSayNotificationMeters */, {100, 200, 300, 400, 500, 600, 700} /* soundedDistancesUnits */, - ::settings::Metric /* lengthUnits */); + measurement_utils::Units::Metric /* lengthUnits */); TEST(settings.IsValid(), ()); TEST(my::AlmostEqualAbs( @@ -57,7 +57,7 @@ UNIT_TEST(TurnNotificationSettingsFeetTest) 25 /* m_minStartBeforeMeters */, 150 /* m_maxStartBeforeMeters */, 170 /* m_minDistToSayNotificationMeters */, {200, 400, 600, 800, 1000, 1500, 2000} /* soundedDistancesUnits */, - ::settings::Foot /* lengthUnits */); + measurement_utils::Units::Imperial /* lengthUnits */); TEST(settings.IsValid(), ()); TEST(my::AlmostEqualAbs( @@ -76,7 +76,7 @@ UNIT_TEST(TurnNotificationSettingsNotValidTest) 25 /* m_minStartBeforeMeters */, 150 /* m_maxStartBeforeMeters */, 170 /* m_minDistToSayNotificationMeters */, {200, 400, 800, 600, 1000, 1500, 2000} /* soundedDistancesUnits */, - ::settings::Foot /* lengthUnits */); + measurement_utils::Units::Imperial /* lengthUnits */); TEST(!settings1.IsValid(), ()); Settings settings2(20 /* notificationTimeSeconds */, 5000 /* minNotificationDistanceUnits */, @@ -84,7 +84,7 @@ UNIT_TEST(TurnNotificationSettingsNotValidTest) 25 /* m_minStartBeforeMeters */, 150 /* m_maxStartBeforeMeters */, 170 /* m_minDistToSayNotificationMeters */, {200, 400, 600, 800, 1000, 1500, 2000} /* soundedDistancesUnits */, - ::settings::Metric /* lengthUnits */); + measurement_utils::Units::Metric /* lengthUnits */); TEST(!settings2.IsValid(), ()); } @@ -94,7 +94,7 @@ UNIT_TEST(TurnsSoundMetersTest) 100 /* maxStartBeforeMeters */, 100 /* minDistToSayNotificationMeters */); notificationManager.Enable(true); - notificationManager.SetLengthUnits(::settings::Metric); + notificationManager.SetLengthUnits(measurement_utils::Units::Metric); string const engShortJson = "\ {\ @@ -192,7 +192,7 @@ UNIT_TEST(TurnsSoundMetersTwoTurnsTest) 100 /* maxStartBeforeMeters */, 100 /* minDistToSayNotificationMeters */); notificationManager.Enable(true); - notificationManager.SetLengthUnits(::settings::Metric); + notificationManager.SetLengthUnits(measurement_utils::Units::Metric); string const engShortJson = "\ {\ @@ -269,7 +269,7 @@ UNIT_TEST(TurnsSoundFeetTest) 100 /* maxStartBeforeMeters */, 100 /* minDistToSayNotificationMeters */); notificationManager.Enable(true); - notificationManager.SetLengthUnits(::settings::Foot); + notificationManager.SetLengthUnits(measurement_utils::Units::Imperial); string const engShortJson = "\ {\ @@ -352,7 +352,7 @@ UNIT_TEST(TurnsSoundComposedTurnTest) 100 /* maxStartBeforeMeters */, 100 /* minDistToSayNotificationMeters */); notificationManager.Enable(true); - notificationManager.SetLengthUnits(::settings::Metric); + notificationManager.SetLengthUnits(measurement_utils::Units::Metric); string const engShortJson = "\ {\ @@ -429,7 +429,7 @@ UNIT_TEST(TurnsSoundRoundaboutTurnTest) 100 /* maxStartBeforeMeters */, 100 /* minDistToSayNotificationMeters */); notificationManager.Enable(true); - notificationManager.SetLengthUnits(::settings::Metric); + notificationManager.SetLengthUnits(measurement_utils::Units::Metric); string const engShortJson = "\ {\ diff --git a/routing/routing_tests/turns_tts_text_tests.cpp b/routing/routing_tests/turns_tts_text_tests.cpp index a2fbb7d113..dc2d968d6d 100644 --- a/routing/routing_tests/turns_tts_text_tests.cpp +++ b/routing/routing_tests/turns_tts_text_tests.cpp @@ -20,13 +20,17 @@ UNIT_TEST(GetDistanceTextIdMetersTest) { // Notification(uint32_t distanceUnits, uint8_t exitNum, bool useThenInsteadOfDistance, // TurnDirection turnDir, ::Settings::Units lengthUnits) - Notification const notification1(500, 0, false, TurnDirection::TurnRight, ::settings::Metric); + Notification const notification1(500, 0, false, TurnDirection::TurnRight, + measurement_utils::Units::Metric); TEST_EQUAL(GetDistanceTextId(notification1), "in_500_meters", ()); - Notification const notification2(500, 0, true, TurnDirection::TurnRight, ::settings::Metric); + Notification const notification2(500, 0, true, TurnDirection::TurnRight, + measurement_utils::Units::Metric); TEST_EQUAL(GetDistanceTextId(notification2), "then", ()); - Notification const notification3(200, 0, false, TurnDirection::TurnRight, ::settings::Metric); + Notification const notification3(200, 0, false, TurnDirection::TurnRight, + measurement_utils::Units::Metric); TEST_EQUAL(GetDistanceTextId(notification3), "in_200_meters", ()); - Notification const notification4(2000, 0, false, TurnDirection::TurnRight, ::settings::Metric); + Notification const notification4(2000, 0, false, TurnDirection::TurnRight, + measurement_utils::Units::Metric); TEST_EQUAL(GetDistanceTextId(notification4), "in_2_kilometers", ()); } @@ -34,13 +38,17 @@ UNIT_TEST(GetDistanceTextIdFeetTest) { // Notification(uint32_t distanceUnits, uint8_t exitNum, bool useThenInsteadOfDistance, // TurnDirection turnDir, ::Settings::Units lengthUnits) - Notification const notification1(500, 0, false, TurnDirection::TurnRight, ::settings::Foot); + Notification const notification1(500, 0, false, TurnDirection::TurnRight, + measurement_utils::Units::Imperial); TEST_EQUAL(GetDistanceTextId(notification1), "in_500_feet", ()); - Notification const notification2(500, 0, true, TurnDirection::TurnRight, ::settings::Foot); + Notification const notification2(500, 0, true, TurnDirection::TurnRight, + measurement_utils::Units::Imperial); TEST_EQUAL(GetDistanceTextId(notification2), "then", ()); - Notification const notification3(800, 0, false, TurnDirection::TurnRight, ::settings::Foot); + Notification const notification3(800, 0, false, TurnDirection::TurnRight, + measurement_utils::Units::Imperial); TEST_EQUAL(GetDistanceTextId(notification3), "in_800_feet", ()); - Notification const notification4(5000, 0, false, TurnDirection::TurnRight, ::settings::Foot); + Notification const notification4(5000, 0, false, TurnDirection::TurnRight, + measurement_utils::Units::Imperial); TEST_EQUAL(GetDistanceTextId(notification4), "in_5000_feet", ()); } @@ -48,13 +56,17 @@ UNIT_TEST(GetRoundaboutTextIdTest) { // Notification(uint32_t distanceUnits, uint8_t exitNum, bool useThenInsteadOfDistance, // TurnDirection turnDir, ::Settings::Units lengthUnits) - Notification const notification1(500, 0, false, TurnDirection::LeaveRoundAbout, ::settings::Foot); + Notification const notification1(500, 0, false, TurnDirection::LeaveRoundAbout, + measurement_utils::Units::Imperial); TEST_EQUAL(GetRoundaboutTextId(notification1), "leave_the_roundabout", ()); - Notification const notification2(0, 3, true, TurnDirection::LeaveRoundAbout, ::settings::Foot); + Notification const notification2(0, 3, true, TurnDirection::LeaveRoundAbout, + measurement_utils::Units::Imperial); TEST_EQUAL(GetRoundaboutTextId(notification2), "take_the_3_exit", ()); - Notification const notification3(0, 7, true, TurnDirection::LeaveRoundAbout, ::settings::Metric); + Notification const notification3(0, 7, true, TurnDirection::LeaveRoundAbout, + measurement_utils::Units::Metric); TEST_EQUAL(GetRoundaboutTextId(notification3), "take_the_7_exit", ()); - Notification const notification4(0, 15, true, TurnDirection::LeaveRoundAbout, ::settings::Metric); + Notification const notification4(0, 15, true, TurnDirection::LeaveRoundAbout, + measurement_utils::Units::Metric); TEST_EQUAL(GetRoundaboutTextId(notification4), "leave_the_roundabout", ()); } @@ -62,11 +74,14 @@ UNIT_TEST(GetYouArriveTextIdTest) { // Notification(uint32_t distanceUnits, uint8_t exitNum, bool useThenInsteadOfDistance, // TurnDirection turnDir, ::Settings::Units lengthUnits) - Notification const notification1(500, 0, false, TurnDirection::ReachedYourDestination, ::settings::Foot); + Notification const notification1(500, 0, false, TurnDirection::ReachedYourDestination, + measurement_utils::Units::Imperial); TEST_EQUAL(GetYouArriveTextId(notification1), "destination", ()); - Notification const notification2(0, 0, false, TurnDirection::ReachedYourDestination, ::settings::Metric); + Notification const notification2(0, 0, false, TurnDirection::ReachedYourDestination, + measurement_utils::Units::Metric); TEST_EQUAL(GetYouArriveTextId(notification2), "you_have_reached_the_destination", ()); - Notification const notification3(0, 0, true, TurnDirection::ReachedYourDestination, ::settings::Metric); + Notification const notification3(0, 0, true, TurnDirection::ReachedYourDestination, + measurement_utils::Units::Metric); TEST_EQUAL(GetYouArriveTextId(notification3), "destination", ()); } @@ -74,15 +89,20 @@ UNIT_TEST(GetDirectionTextIdTest) { // Notification(uint32_t distanceUnits, uint8_t exitNum, bool useThenInsteadOfDistance, // TurnDirection turnDir, ::Settings::Units lengthUnits) - Notification const notification1(500, 0, false, TurnDirection::TurnRight, ::settings::Foot); + Notification const notification1(500, 0, false, TurnDirection::TurnRight, + measurement_utils::Units::Imperial); TEST_EQUAL(GetDirectionTextId(notification1), "make_a_right_turn", ()); - Notification const notification2(1000, 0, false, TurnDirection::GoStraight, ::settings::Metric); + Notification const notification2(1000, 0, false, TurnDirection::GoStraight, + measurement_utils::Units::Metric); TEST_EQUAL(GetDirectionTextId(notification2), "go_straight", ()); - Notification const notification3(700, 0, false, TurnDirection::UTurnLeft, ::settings::Metric); + Notification const notification3(700, 0, false, TurnDirection::UTurnLeft, + measurement_utils::Units::Metric); TEST_EQUAL(GetDirectionTextId(notification3), "make_a_u_turn", ()); - Notification const notification4(200, 0, false, TurnDirection::ReachedYourDestination, ::settings::Metric); + Notification const notification4(200, 0, false, TurnDirection::ReachedYourDestination, + measurement_utils::Units::Metric); TEST_EQUAL(GetDirectionTextId(notification4), "destination", ()); - Notification const notification5(0, 0, false, TurnDirection::ReachedYourDestination, ::settings::Metric); + Notification const notification5(0, 0, false, TurnDirection::ReachedYourDestination, + measurement_utils::Units::Metric); TEST_EQUAL(GetDirectionTextId(notification5), "you_have_reached_the_destination", ()); } @@ -113,11 +133,14 @@ UNIT_TEST(GetTtsTextTest) GetTtsText getTtsText; // Notification(uint32_t distanceUnits, uint8_t exitNum, bool useThenInsteadOfDistance, // TurnDirection turnDir, Settings::Units lengthUnits) - Notification const notification1(500, 0, false, TurnDirection::TurnRight, ::settings::Metric); - Notification const notification2(300, 0, false, TurnDirection::TurnLeft, ::settings::Metric); + Notification const notification1(500, 0, false, TurnDirection::TurnRight, + measurement_utils::Units::Metric); + Notification const notification2(300, 0, false, TurnDirection::TurnLeft, + measurement_utils::Units::Metric); Notification const notification3(0, 0, false, TurnDirection::ReachedYourDestination, - ::settings::Metric); - Notification const notification4(0, 0, true, TurnDirection::TurnLeft, ::settings::Metric); + measurement_utils::Units::Metric); + Notification const notification4(0, 0, true, TurnDirection::TurnLeft, + measurement_utils::Units::Metric); getTtsText.ForTestingSetLocaleWithJson(engShortJson, "en"); TEST_EQUAL(getTtsText(notification1), "In 500 meters. Make a right turn.", ()); diff --git a/routing/turns_notification_manager.cpp b/routing/turns_notification_manager.cpp index fd4b01632c..2377fcd5c1 100644 --- a/routing/turns_notification_manager.cpp +++ b/routing/turns_notification_manager.cpp @@ -30,7 +30,7 @@ namespace sound { string NotificationManager::GenerateTurnText(uint32_t distanceUnits, uint8_t exitNum, bool useThenInsteadOfDistance, TurnDirection turnDir, - ::settings::Units lengthUnits) const + measurement_utils::Units lengthUnits) const { Notification const notification(distanceUnits, exitNum, useThenInsteadOfDistance, turnDir, lengthUnits); @@ -151,22 +151,22 @@ void NotificationManager::Enable(bool enable) m_enabled = enable; } -void NotificationManager::SetLengthUnits(::settings::Units units) +void NotificationManager::SetLengthUnits(measurement_utils::Units units) { m_settings.SetLengthUnits(units); switch (units) { - case ::settings::Metric: + case measurement_utils::Units::Metric: m_settings.SetState(30 /* notificationTimeSeconds */, 200 /* minNotificationDistanceUnits */, 2000 /* maxNotificationDistanceUnits */, GetSoundedDistMeters() /* soundedDistancesUnits */, - ::settings::Metric /* lengthUnits */); + measurement_utils::Units::Metric /* lengthUnits */); return; - case ::settings::Foot: + case measurement_utils::Units::Imperial: m_settings.SetState(30 /* notificationTimeSeconds */, 500 /* minNotificationDistanceUnits */, 5000 /* maxNotificationDistanceUnits */, GetSoundedDistFeet() /* soundedDistancesUnits */, - ::settings::Foot /* lengthUnits */); + measurement_utils::Units::Imperial /* lengthUnits */); return; } } diff --git a/routing/turns_notification_manager.hpp b/routing/turns_notification_manager.hpp index 95f7d83ead..5822d1fa34 100644 --- a/routing/turns_notification_manager.hpp +++ b/routing/turns_notification_manager.hpp @@ -3,6 +3,7 @@ #include "routing/turns_sound_settings.hpp" #include "routing/turns_tts_text.hpp" +#include "platform/measurement_utils.hpp" #include "platform/settings.hpp" #include "std/string.hpp" @@ -100,7 +101,7 @@ class NotificationManager uint32_t m_secondTurnNotificationIndex; string GenerateTurnText(uint32_t distanceUnits, uint8_t exitNum, bool useThenInsteadOfDistance, - TurnDirection turnDir, ::settings::Units lengthUnits) const; + TurnDirection turnDir, measurement_utils::Units lengthUnits) const; /// Generates turn sound notification for the nearest to the current position turn. string GenerateFirstTurnSound(TurnItem const & turn, double distanceToTurnMeters); /// Changes the state of the class to emulate that first turn notification is pronouned @@ -130,8 +131,8 @@ public: bool IsEnabled() const { return m_enabled; } void Enable(bool enable); - void SetLengthUnits(::settings::Units units); - inline ::settings::Units GetLengthUnits() const { return m_settings.GetLengthUnits(); } + void SetLengthUnits(measurement_utils::Units units); + inline measurement_utils::Units GetLengthUnits() const { return m_settings.GetLengthUnits(); } inline void SetLocale(string const & locale) { m_getTtsText.SetLocale(locale); } inline string GetLocale() const { return m_getTtsText.GetLocale(); } void SetSpeedMetersPerSecond(double speed); diff --git a/routing/turns_sound_settings.cpp b/routing/turns_sound_settings.cpp index 91481c08b7..1c24102a80 100644 --- a/routing/turns_sound_settings.cpp +++ b/routing/turns_sound_settings.cpp @@ -6,6 +6,8 @@ #include "std/algorithm.hpp" +using namespace measurement_utils; + namespace routing { namespace turns @@ -15,7 +17,7 @@ namespace sound void Settings::SetState(uint32_t notificationTimeSeconds, uint32_t minNotificationDistanceUnits, uint32_t maxNotificationDistanceUnits, vector const & soundedDistancesUnits, - ::settings::Units lengthUnits) + measurement_utils::Units lengthUnits) { m_timeSeconds = notificationTimeSeconds; m_minDistanceUnits = minNotificationDistanceUnits; @@ -64,10 +66,8 @@ double Settings::ConvertMetersPerSecondToUnitsPerSecond(double speedInMetersPerS { switch (m_lengthUnits) { - case ::settings::Metric: - return speedInMetersPerSecond; - case ::settings::Foot: - return MeasurementUtils::MetersToFeet(speedInMetersPerSecond); + case Units::Metric: return speedInMetersPerSecond; + case Units::Imperial: return MetersToFeet(speedInMetersPerSecond); } ASSERT(false, ("m_lengthUnits is equal to unknown value.")); @@ -78,10 +78,8 @@ double Settings::ConvertUnitsToMeters(double distanceInUnits) const { switch (m_lengthUnits) { - case ::settings::Metric: - return distanceInUnits; - case ::settings::Foot: - return MeasurementUtils::FeetToMeters(distanceInUnits); + case Units::Metric: return distanceInUnits; + case Units::Imperial: return FeetToMeters(distanceInUnits); } ASSERT(false, ()); @@ -92,10 +90,8 @@ double Settings::ConvertMetersToUnits(double distanceInMeters) const { switch (m_lengthUnits) { - case ::settings::Metric: - return distanceInMeters; - case ::settings::Foot: - return MeasurementUtils::MetersToFeet(distanceInMeters); + case Units::Metric: return distanceInMeters; + case Units::Imperial: return MetersToFeet(distanceInMeters); } ASSERT(false, ()); @@ -112,12 +108,13 @@ uint32_t Settings::ComputeDistToPronounceDistM(double speedMetersPerSecond) cons string DebugPrint(Notification const & notification) { + string units; stringstream out; out << "Notification [ m_distanceUnits == " << notification.m_distanceUnits << ", m_exitNum == " << notification.m_exitNum << ", m_useThenInsteadOfDistance == " << notification.m_useThenInsteadOfDistance << ", m_turnDir == " << DebugPrint(notification.m_turnDir) - << ", m_lengthUnits == " << notification.m_lengthUnits << " ]" << endl; + << ", m_lengthUnits == " << DebugPrint(notification.m_lengthUnits) << " ]" << endl; return out.str(); } diff --git a/routing/turns_sound_settings.hpp b/routing/turns_sound_settings.hpp index bf205a76e3..d533708563 100644 --- a/routing/turns_sound_settings.hpp +++ b/routing/turns_sound_settings.hpp @@ -2,7 +2,7 @@ #include "routing/turns.hpp" -#include "platform/settings.hpp" +#include "platform/measurement_utils.hpp" #include "std/vector.hpp" @@ -47,14 +47,14 @@ class Settings /// \brief m_distancesToPronounce is a list of distances in m_lengthUnits /// which are ready to be pronounced. vector m_soundedDistancesUnits; - ::settings::Units m_lengthUnits; + measurement_utils::Units m_lengthUnits; // This constructor is for testing only. Settings(uint32_t notificationTimeSeconds, uint32_t minNotificationDistanceUnits, uint32_t maxNotificationDistanceUnits, uint32_t startBeforeSeconds, uint32_t minStartBeforeMeters, uint32_t maxStartBeforeMeters, uint32_t minDistToSayNotificationMeters, vector const & soundedDistancesUnits, - ::settings::Units lengthUnits) + measurement_utils::Units lengthUnits) : m_timeSeconds(notificationTimeSeconds) , m_minDistanceUnits(minNotificationDistanceUnits) , m_maxDistanceUnits(maxNotificationDistanceUnits) @@ -78,13 +78,14 @@ public: , m_minStartBeforeMeters(minStartBeforeMeters) , m_maxStartBeforeMeters(maxStartBeforeMeters) , m_minDistToSayNotificationMeters(minDistToSayNotificationMeters) - , m_lengthUnits(::settings::Metric) + , m_lengthUnits(measurement_utils::Units::Metric) { } void SetState(uint32_t notificationTimeSeconds, uint32_t minNotificationDistanceUnits, uint32_t maxNotificationDistanceUnits, - vector const & soundedDistancesUnits, ::settings::Units lengthUnits); + vector const & soundedDistancesUnits, + measurement_utils::Units lengthUnits); /// \brief IsValid checks if Settings data is consistent. /// \warning The complexity is up to linear in size of m_soundedDistancesUnits. @@ -112,8 +113,8 @@ public: /// The result will be one of the m_soundedDistancesUnits values. uint32_t RoundByPresetSoundedDistancesUnits(uint32_t turnNotificationUnits) const; - inline ::settings::Units GetLengthUnits() const { return m_lengthUnits; } - inline void SetLengthUnits(::settings::Units units) { m_lengthUnits = units; } + inline measurement_utils::Units GetLengthUnits() const { return m_lengthUnits; } + inline void SetLengthUnits(measurement_utils::Units units) { m_lengthUnits = units; } double ConvertMetersPerSecondToUnitsPerSecond(double speedInMetersPerSecond) const; double ConvertUnitsToMeters(double distanceInUnits) const; double ConvertMetersToUnits(double distanceInMeters) const; @@ -133,15 +134,15 @@ struct Notification /// The word "Then" shall be pronounced intead of the distance. bool m_useThenInsteadOfDistance; TurnDirection m_turnDir; - ::settings::Units m_lengthUnits; + measurement_utils::Units m_lengthUnits; Notification(uint32_t distanceUnits, uint8_t exitNum, bool useThenInsteadOfDistance, - TurnDirection turnDir, ::settings::Units lengthUnits) - : m_distanceUnits(distanceUnits), - m_exitNum(exitNum), - m_useThenInsteadOfDistance(useThenInsteadOfDistance), - m_turnDir(turnDir), - m_lengthUnits(lengthUnits) + TurnDirection turnDir, measurement_utils::Units lengthUnits) + : m_distanceUnits(distanceUnits) + , m_exitNum(exitNum) + , m_useThenInsteadOfDistance(useThenInsteadOfDistance) + , m_turnDir(turnDir) + , m_lengthUnits(lengthUnits) { } bool operator==(Notification const & rhv) const diff --git a/routing/turns_tts_text.cpp b/routing/turns_tts_text.cpp index b30a3b6268..60175a8134 100644 --- a/routing/turns_tts_text.cpp +++ b/routing/turns_tts_text.cpp @@ -88,12 +88,12 @@ string GetDistanceTextId(Notification const & notification) switch (notification.m_lengthUnits) { - case ::settings::Metric: - return DistToTextId(GetAllSoundedDistMeters().cbegin(), GetAllSoundedDistMeters().cend(), - notification.m_distanceUnits); - case ::settings::Foot: - return DistToTextId(GetAllSoundedDistFeet().cbegin(), GetAllSoundedDistFeet().cend(), - notification.m_distanceUnits); + case measurement_utils::Units::Metric: + return DistToTextId(GetAllSoundedDistMeters().cbegin(), GetAllSoundedDistMeters().cend(), + notification.m_distanceUnits); + case measurement_utils::Units::Imperial: + return DistToTextId(GetAllSoundedDistFeet().cbegin(), GetAllSoundedDistFeet().cend(), + notification.m_distanceUnits); } ASSERT(false, ()); return string(); diff --git a/search/intermediate_result.cpp b/search/intermediate_result.cpp index dc17072036..fb313a8be5 100644 --- a/search/intermediate_result.cpp +++ b/search/intermediate_result.cpp @@ -100,8 +100,7 @@ PreResult2::PreResult2(FeatureType const & f, PreResult1 const * p, m2::PointD c } PreResult2::PreResult2(double lat, double lon) - : m_str("(" + MeasurementUtils::FormatLatLon(lat, lon) + ")"), - m_resultType(RESULT_LATLON) + : m_str("(" + measurement_utils::FormatLatLon(lat, lon) + ")"), m_resultType(RESULT_LATLON) { m_region.SetParams(string(), MercatorBounds::FromLatLon(lat, lon)); } diff --git a/xcode/routing/routing.xcodeproj/project.pbxproj b/xcode/routing/routing.xcodeproj/project.pbxproj index 559f042f71..dc9d567f0a 100644 --- a/xcode/routing/routing.xcodeproj/project.pbxproj +++ b/xcode/routing/routing.xcodeproj/project.pbxproj @@ -232,8 +232,8 @@ 6742ACB31C68A0B1009CB89E /* routing_mapping_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = routing_mapping_test.cpp; sourceTree = ""; }; 6742ACB41C68A0B1009CB89E /* routing_session_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = routing_session_test.cpp; sourceTree = ""; }; 6742ACB51C68A0B1009CB89E /* turns_generator_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = turns_generator_test.cpp; sourceTree = ""; }; - 6742ACB61C68A0B1009CB89E /* turns_sound_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = turns_sound_test.cpp; sourceTree = ""; }; - 6742ACB71C68A0B1009CB89E /* turns_tts_text_tests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = turns_tts_text_tests.cpp; sourceTree = ""; }; + 6742ACB61C68A0B1009CB89E /* turns_sound_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = turns_sound_test.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + 6742ACB71C68A0B1009CB89E /* turns_tts_text_tests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = turns_tts_text_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; 6742ACB81C68A0B1009CB89E /* vehicle_model_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vehicle_model_test.cpp; sourceTree = ""; }; 6742ACDE1C68A13F009CB89E /* testingmain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testingmain.cpp; path = ../../testing/testingmain.cpp; sourceTree = ""; }; 6742ACE21C68A203009CB89E /* libbase.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libbase.a; path = "../../../omim-xcode-build/Debug/libbase.a"; sourceTree = ""; }; @@ -323,7 +323,7 @@ 67C7D4221B4EB48F00FE41AA /* car_model.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = car_model.hpp; sourceTree = ""; }; 67C7D4231B4EB48F00FE41AA /* pedestrian_model.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pedestrian_model.cpp; sourceTree = ""; }; 67C7D4241B4EB48F00FE41AA /* pedestrian_model.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = pedestrian_model.hpp; sourceTree = ""; }; - 67C7D4251B4EB48F00FE41AA /* turns_sound_settings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = turns_sound_settings.cpp; sourceTree = ""; }; + 67C7D4251B4EB48F00FE41AA /* turns_sound_settings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = turns_sound_settings.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; 67C7D4261B4EB48F00FE41AA /* turns_sound_settings.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = turns_sound_settings.hpp; sourceTree = ""; }; A120B3411B4A7BE5002F3808 /* cross_mwm_road_graph.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cross_mwm_road_graph.cpp; sourceTree = ""; }; A120B3421B4A7BE5002F3808 /* cross_mwm_road_graph.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cross_mwm_road_graph.hpp; sourceTree = ""; }; -- cgit v1.2.3