~aleteoryx/muditaos

9b9c14588f57649750e85d71d359116d3f933079 — Maciej Gibowicz 1 year, 4 months ago 0d63700
[BH-2033] Fix timer settings for fade in and fade out

The newly set duration for the timer will never be zero.
M products/BellHybrid/apps/common/include/common/models/AbstractAudioModel.hpp => products/BellHybrid/apps/common/include/common/models/AbstractAudioModel.hpp +1 -1
@@ 49,7 49,7 @@ namespace app
        virtual void play(const std::string &filePath,
                          PlaybackType type,
                          OnStateChangeCallback &&callback,
                          std::optional<audio::FadeParams> fadeParams = std::nullopt)      = 0;
                          std::optional<audio::FadeParams> fadeParams = std::nullopt)    = 0;
        virtual void stopAny(OnStateChangeCallback &&callback)                           = 0;
        virtual void stopPlayedByThis(OnStateChangeCallback &&callback)                  = 0;
        virtual void pause(OnStateChangeCallback &&callback)                             = 0;

M products/BellHybrid/apps/common/include/common/models/RelaxationFadeModel.hpp => products/BellHybrid/apps/common/include/common/models/RelaxationFadeModel.hpp +3 -5
@@ 23,12 23,10 @@ namespace app
      public:
        RelaxationFadeModel() = delete;

        RelaxationFadeModel(ApplicationCommon *app)
        {
            fade = std::make_unique<RelaxationFadeSettings>(app);
        }
        explicit RelaxationFadeModel(ApplicationCommon *app) : fade{std::make_unique<RelaxationFadeSettings>(app)}
        {}

        gui::AbstractSettingsModel<bool> &getFade() override
        auto getFade() -> gui::AbstractSettingsModel<bool> & override
        {
            return *fade;
        }

M products/BellHybrid/services/audio/VolumeFade.cpp => products/BellHybrid/services/audio/VolumeFade.cpp +3 -5
@@ 21,14 21,13 @@ namespace audio
            const auto timeRequired = floatToMs(currentVolume / fadeStep) * fadeInterval.count();
            const auto calculatedTime =
                std::chrono::duration_cast<std::chrono::milliseconds>(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();