Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Grechuhin <i.grechuhin@gmail.com>2016-07-06 13:49:16 +0300
committerIlya Grechuhin <i.grechuhin@gmail.com>2016-07-07 14:23:14 +0300
commitf7aafa00e27d85f4d0f2b4c504d9063d392b41f8 (patch)
tree42a642688dfef0e8dea4d9fc8ebacd185dc75993
parentaae90b0081d9b38fe2d0d58ee63445a8e58f6462 (diff)
[omim] Refactored measurement_utils.
-rw-r--r--android/jni/com/mapswithme/maps/Framework.cpp12
-rw-r--r--android/jni/com/mapswithme/maps/bookmarks/data/BookmarkCategory.cpp2
-rw-r--r--android/jni/com/mapswithme/maps/settings/UnitLocale.cpp9
-rw-r--r--drape_frontend/gui/ruler_helper.cpp8
-rw-r--r--generator/osm2meta.cpp4
-rw-r--r--indexer/map_object.cpp2
-rw-r--r--iphone/Maps/Bookmarks/BookmarksVC.mm2
-rw-r--r--iphone/Maps/Classes/CustomViews/MapViewControls/Search/TableView/MWMSearchCommonCell.mm2
-rw-r--r--iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardEntity.mm5
-rw-r--r--iphone/Maps/Classes/Location/MWMLocationHelpers.h8
-rw-r--r--iphone/Maps/Classes/MWMPlacePageEntity.mm5
-rw-r--r--iphone/Maps/Classes/MWMPlacePageViewManager.mm4
-rw-r--r--iphone/Maps/Settings/Preferences.mm8
-rw-r--r--iphone/Maps/Settings/SettingsViewController.mm14
-rw-r--r--map/framework.cpp6
-rw-r--r--platform/measurement_utils.cpp67
-rw-r--r--platform/measurement_utils.hpp28
-rw-r--r--platform/platform_android.cpp11
-rw-r--r--platform/platform_ios.mm9
-rw-r--r--platform/platform_qt.cpp10
-rw-r--r--platform/platform_tests/measurement_tests.cpp46
-rw-r--r--platform/settings.cpp19
-rw-r--r--platform/settings.hpp5
-rw-r--r--qt/preferences_dialog.cpp17
-rw-r--r--routing/routing_session.cpp4
-rw-r--r--routing/routing_session.hpp3
-rw-r--r--routing/routing_tests/turns_sound_test.cpp18
-rw-r--r--routing/routing_tests/turns_tts_text_tests.cpp71
-rw-r--r--routing/turns_notification_manager.cpp12
-rw-r--r--routing/turns_notification_manager.hpp7
-rw-r--r--routing/turns_sound_settings.cpp25
-rw-r--r--routing/turns_sound_settings.hpp29
-rw-r--r--routing/turns_tts_text.cpp12
-rw-r--r--search/intermediate_result.cpp3
-rw-r--r--xcode/routing/routing.xcodeproj/project.pbxproj6
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<settings::Units>(units);
+ measurement_utils::Units const u = static_cast<measurement_utils::Units>(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<jint>(
+ 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<double, char const *> 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<DPairT>(string const & s, DPairT & v)
}
template <>
-string ToString<Units>(Units const & v)
+string ToString<measurement_utils::Units>(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<Units>(string const & s, Units & v)
+bool FromString<measurement_utils::Units>(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 <QtGui/QIcon>
@@ -26,6 +27,8 @@
#include <QtWidgets/QRadioButton>
#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<int>(Units::Metric));
p = new QRadioButton("Imperial (foot)");
pLayout->addWidget(p);
- m_pUnits->addButton(p, Foot);
+ m_pUnits->addButton(p, static_cast<int>(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<int>(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<string> & 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<uint32_t> 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<uint32_t> 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<uint32_t> 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<uint32_t> const & soundedDistancesUnits, ::settings::Units lengthUnits);
+ vector<uint32_t> 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 = "<group>"; };
6742ACB41C68A0B1009CB89E /* routing_session_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = routing_session_test.cpp; sourceTree = "<group>"; };
6742ACB51C68A0B1009CB89E /* turns_generator_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = turns_generator_test.cpp; sourceTree = "<group>"; };
- 6742ACB61C68A0B1009CB89E /* turns_sound_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = turns_sound_test.cpp; sourceTree = "<group>"; };
- 6742ACB71C68A0B1009CB89E /* turns_tts_text_tests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = turns_tts_text_tests.cpp; sourceTree = "<group>"; };
+ 6742ACB61C68A0B1009CB89E /* turns_sound_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = turns_sound_test.cpp; sourceTree = "<group>"; 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 = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
6742ACB81C68A0B1009CB89E /* vehicle_model_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vehicle_model_test.cpp; sourceTree = "<group>"; };
6742ACDE1C68A13F009CB89E /* testingmain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testingmain.cpp; path = ../../testing/testingmain.cpp; sourceTree = "<group>"; };
6742ACE21C68A203009CB89E /* libbase.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libbase.a; path = "../../../omim-xcode-build/Debug/libbase.a"; sourceTree = "<group>"; };
@@ -323,7 +323,7 @@
67C7D4221B4EB48F00FE41AA /* car_model.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = car_model.hpp; sourceTree = "<group>"; };
67C7D4231B4EB48F00FE41AA /* pedestrian_model.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pedestrian_model.cpp; sourceTree = "<group>"; };
67C7D4241B4EB48F00FE41AA /* pedestrian_model.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = pedestrian_model.hpp; sourceTree = "<group>"; };
- 67C7D4251B4EB48F00FE41AA /* turns_sound_settings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = turns_sound_settings.cpp; sourceTree = "<group>"; };
+ 67C7D4251B4EB48F00FE41AA /* turns_sound_settings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = turns_sound_settings.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
67C7D4261B4EB48F00FE41AA /* turns_sound_settings.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = turns_sound_settings.hpp; sourceTree = "<group>"; };
A120B3411B4A7BE5002F3808 /* cross_mwm_road_graph.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cross_mwm_road_graph.cpp; sourceTree = "<group>"; };
A120B3421B4A7BE5002F3808 /* cross_mwm_road_graph.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cross_mwm_road_graph.hpp; sourceTree = "<group>"; };