From 9b9c14588f57649750e85d71d359116d3f933079 Mon Sep 17 00:00:00 2001 From: Maciej Gibowicz Date: Wed, 24 Jul 2024 11:55:33 +0200 Subject: [PATCH] [BH-2033] Fix timer settings for fade in and fade out The newly set duration for the timer will never be zero. --- .../common/include/common/models/AbstractAudioModel.hpp | 2 +- .../common/include/common/models/RelaxationFadeModel.hpp | 8 +++----- products/BellHybrid/services/audio/VolumeFade.cpp | 8 +++----- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/products/BellHybrid/apps/common/include/common/models/AbstractAudioModel.hpp b/products/BellHybrid/apps/common/include/common/models/AbstractAudioModel.hpp index 03b5827608dd69f1991f9b8f874d1e94d90d6ad2..a4ae009f7d26471050d001d3b68396101c8d19a7 100644 --- a/products/BellHybrid/apps/common/include/common/models/AbstractAudioModel.hpp +++ b/products/BellHybrid/apps/common/include/common/models/AbstractAudioModel.hpp @@ -49,7 +49,7 @@ namespace app virtual void play(const std::string &filePath, PlaybackType type, OnStateChangeCallback &&callback, - std::optional fadeParams = std::nullopt) = 0; + std::optional fadeParams = std::nullopt) = 0; virtual void stopAny(OnStateChangeCallback &&callback) = 0; virtual void stopPlayedByThis(OnStateChangeCallback &&callback) = 0; virtual void pause(OnStateChangeCallback &&callback) = 0; diff --git a/products/BellHybrid/apps/common/include/common/models/RelaxationFadeModel.hpp b/products/BellHybrid/apps/common/include/common/models/RelaxationFadeModel.hpp index f2ac6b18a522d8e6133a4d6626ab56286f29349c..2b439133a290185c5032061ea4edad20597aaff6 100644 --- a/products/BellHybrid/apps/common/include/common/models/RelaxationFadeModel.hpp +++ b/products/BellHybrid/apps/common/include/common/models/RelaxationFadeModel.hpp @@ -23,12 +23,10 @@ namespace app public: RelaxationFadeModel() = delete; - RelaxationFadeModel(ApplicationCommon *app) - { - fade = std::make_unique(app); - } + explicit RelaxationFadeModel(ApplicationCommon *app) : fade{std::make_unique(app)} + {} - gui::AbstractSettingsModel &getFade() override + auto getFade() -> gui::AbstractSettingsModel & override { return *fade; } diff --git a/products/BellHybrid/services/audio/VolumeFade.cpp b/products/BellHybrid/services/audio/VolumeFade.cpp index ecf4ad6eb249636300418d58623ff5dbb8d66257..1a38b6021babd454b7359cc4ef90bb8c6cd40ef4 100644 --- a/products/BellHybrid/services/audio/VolumeFade.cpp +++ b/products/BellHybrid/services/audio/VolumeFade.cpp @@ -21,14 +21,13 @@ namespace audio const auto timeRequired = floatToMs(currentVolume / fadeStep) * fadeInterval.count(); const auto calculatedTime = std::chrono::duration_cast(duration - elapsed - timeRequired); - return calculatedTime > std::chrono::milliseconds::zero() ? calculatedTime - : std::chrono::milliseconds::zero(); + return std::max(calculatedTime, fadeInterval); } } // namespace VolumeFade::VolumeFade(sys::Service *parent, SetCallback callback) : setVolumeCallback(std::move(callback)) { - timerHandle = sys::TimerFactory::createSingleShotTimer( + timerHandle = sys::TimerFactory::createPeriodicTimer( parent, timerName, fadeInterval, [this]([[maybe_unused]] sys::Timer &timer) { PerformNextFadeStep(); }); } @@ -123,7 +122,6 @@ namespace audio case Phase::FadeIn: if (currentVolume < targetVolume) { TurnUpVolume(); - timerHandle.restart(fadeInterval); } else if (fadeParams.mode == audio::Fade::InOut && fadeParams.playbackDuration.has_value()) { phase = Phase::Wait; @@ -135,11 +133,11 @@ namespace audio break; case Phase::Wait: phase = Phase::FadeOut; + timerHandle.restart(fadeInterval); [[fallthrough]]; case Phase::FadeOut: if (currentVolume > 0.0f) { TurnDownVolume(); - timerHandle.restart(fadeInterval); } else { Stop();