diff --git a/libs/routing/routing_tests/turns_sound_test.cpp b/libs/routing/routing_tests/turns_sound_test.cpp index 7c80ad212..12ecfc314 100644 --- a/libs/routing/routing_tests/turns_sound_test.cpp +++ b/libs/routing/routing_tests/turns_sound_test.cpp @@ -487,10 +487,11 @@ UNIT_TEST(TurnsSound_RoundaboutTurnTest) // 620 meters till the 4th turn. vector const turns9 = { {{25 /* idx */, CarDirection::EnterRoundAbout, 4 /* m_exitNum */}, 620. /* m_distMeters */}, - {{30 /* idx */, CarDirection::LeaveRoundAbout, 4 /* m_exitNum */}, 665. /* m_distMeters */}}; + {{30 /* idx */, CarDirection::LeaveRoundAbout, 4 /* m_exitNum */}, 1000. /* m_distMeters */}}; vector const expectedNotification9 = {{"In 600 meters. Enter the roundabout."}, {"Then. Take the fourth exit."}}; - notificationManager.GenerateTurnNotifications(turns9, turnNotifications); + notificationManager.GenerateTurnNotifications(turns9, turnNotifications, + routing::RouteSegment::RoadNameInfo("Main street")); TEST_EQUAL(turnNotifications, expectedNotification9, ()); TEST_EQUAL(notificationManager.GetSecondTurnNotification(), CarDirection::LeaveRoundAbout, ()); } diff --git a/libs/routing/turns_notification_manager.cpp b/libs/routing/turns_notification_manager.cpp index 97a8e7234..a7e785234 100644 --- a/libs/routing/turns_notification_manager.cpp +++ b/libs/routing/turns_notification_manager.cpp @@ -75,15 +75,15 @@ std::string NotificationManager::GenerateTurnText(uint32_t distanceUnits, uint8_ { auto const lengthUnits = m_settings.GetLengthUnits(); - if (turn.m_turn != CarDirection::None && turn.m_turn != CarDirection::EnterRoundAbout) - return m_getTtsText.GetTurnNotification( - {distanceUnits, exitNum, useThenInsteadOfDistance, turn.m_turn, lengthUnits, nextStreetInfo}); - else if (turn.m_turn == CarDirection::EnterRoundAbout) // Don't include roundabout street name in TTS - return m_getTtsText.GetTurnNotification( - {distanceUnits, exitNum, useThenInsteadOfDistance, turn.m_turn, lengthUnits}); + Notification notif{distanceUnits, exitNum, useThenInsteadOfDistance, turn.m_turn, lengthUnits}; + if (turn.m_turn == CarDirection::None) + notif.m_turnDirPedestrian = turn.m_pedestrianTurn; - return m_getTtsText.GetTurnNotification( - {distanceUnits, exitNum, useThenInsteadOfDistance, turn.m_pedestrianTurn, lengthUnits, nextStreetInfo}); + // https://github.com/organicmaps/organicmaps/issues/6146 + if (turn.m_turn != CarDirection::EnterRoundAbout) + notif.m_nextStreetInfo = nextStreetInfo; + + return m_getTtsText.GetTurnNotification(notif); } std::string NotificationManager::GenerateRecalculatingText() const @@ -129,12 +129,14 @@ void NotificationManager::GenerateTurnNotifications(std::vector co double distBetweenTurnsMeters = secondTurn.m_distMeters - firstTurn.m_distMeters; ASSERT_GREATER_OR_EQUAL(distBetweenTurnsMeters, 0, ()); - if (distBetweenTurnsMeters > kSecondTurnThresholdDistM && !IsClassicEntranceToRoundabout(firstTurn, secondTurn)) + bool const isRoundabout = IsClassicEntranceToRoundabout(firstTurn, secondTurn); + if (!isRoundabout && distBetweenTurnsMeters > kSecondTurnThresholdDistM) return; - if ((distBetweenTurnsMeters < kDistanceNotifyThresholdM) || IsClassicEntranceToRoundabout(firstTurn, secondTurn)) + if (distBetweenTurnsMeters < kDistanceNotifyThresholdM || + (isRoundabout && distBetweenTurnsMeters < kSecondTurnThresholdDistM)) { - // distanceUnits is not used because "Then" is used + // Don't pronounce distance because of immediate "Then". distBetweenTurnsMeters = 0; } diff --git a/libs/routing/turns_sound_settings.hpp b/libs/routing/turns_sound_settings.hpp index b08d7ec53..68dbd13ca 100644 --- a/libs/routing/turns_sound_settings.hpp +++ b/libs/routing/turns_sound_settings.hpp @@ -167,26 +167,6 @@ struct Notification , m_lengthUnits(lengthUnits) {} - Notification(uint32_t distanceUnits, uint8_t exitNum, bool useThenInsteadOfDistance, - PedestrianDirection turnDirPedestrian, measurement_utils::Units lengthUnits, - RouteSegment::RoadNameInfo const & nextStreetInfo) - : m_distanceUnits(distanceUnits) - , m_exitNum(exitNum) - , m_useThenInsteadOfDistance(useThenInsteadOfDistance) - , m_turnDirPedestrian(turnDirPedestrian) - , m_lengthUnits(lengthUnits) - , m_nextStreetInfo(nextStreetInfo) - {} - - Notification(uint32_t distanceUnits, uint8_t exitNum, bool useThenInsteadOfDistance, - PedestrianDirection turnDirPedestrian, measurement_utils::Units lengthUnits) - : m_distanceUnits(distanceUnits) - , m_exitNum(exitNum) - , m_useThenInsteadOfDistance(useThenInsteadOfDistance) - , m_turnDirPedestrian(turnDirPedestrian) - , m_lengthUnits(lengthUnits) - {} - bool operator==(Notification const & rhv) const { return m_distanceUnits == rhv.m_distanceUnits && m_exitNum == rhv.m_exitNum &&