~aleteoryx/muditaos

49f4e466092d79231ab1b07986f9e18524161d58 — rrandomsky 1 year, 10 months ago 721fbbb
[BH-1912] Change snooze chime list to vertical

Snooze chime list in settings has been changed to a vertical list.
M products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp => products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp +13 -12
@@ 201,13 201,10 @@ namespace app
        windowsFactory.attach(
            gui::BellSettingsAlarmSettingsSnoozeWindow::name,
            [this](ApplicationCommon *app, [[maybe_unused]] const std::string &name) {
                auto soundsRepository =
                    std::make_unique<SimpleSoundsRepository>(paths::audio::proprietary() / paths::audio::snooze());
                auto snoozeOnOffModel         = std::make_unique<bell_settings::SnoozeOnOffModel>(this);
                auto snoozeLengthModel        = std::make_unique<bell_settings::SnoozeLengthModel>(this);
                auto snoozeChimeIntervalModel = std::make_unique<bell_settings::SnoozeChimeIntervalModel>(this);
                auto snoozeChimeToneModel =
                    std::make_unique<bell_settings::SnoozeChimeToneModel>(this, *soundsRepository);
                auto snoozeChimeToneModel     = std::make_unique<bell_settings::SnoozeChimeToneModel>(this);
                auto snoozeChimeVolumeModel   = std::make_unique<bell_settings::SnoozeChimeVolumeModel>(*audioModel);
                auto snoozeSettingsModel =
                    std::make_unique<bell_settings::SnoozeSettingsModel>(std::move(snoozeOnOffModel),


@@ 216,10 213,16 @@ namespace app
                                                                         std::move(snoozeChimeToneModel),
                                                                         std::move(snoozeChimeVolumeModel));

                auto provider = std::make_shared<bell_settings::SnoozeListItemProvider>(
                    *snoozeSettingsModel, soundsRepository->getSongTitles());
                const auto &pathSorting =
                    SoundsRepository::PathSorting{paths::audio::proprietary() / paths::audio::snooze(),
                                                  SoundsRepository::SortingBy::TrackIdAscending};
                auto soundsRepository = std::make_unique<SoundsRepository>(this, pathSorting);
                auto songsModel       = std::make_unique<SongsModel>(this, std::move(soundsRepository));
                auto provider         = std::make_unique<bell_settings::SnoozeListItemProvider>(*snoozeSettingsModel,
                                                                                        std::move(songsModel));

                auto presenter = std::make_unique<bell_settings::SnoozePresenter>(
                    provider, std::move(snoozeSettingsModel), *audioModel, std::move(soundsRepository));
                    std::move(provider), std::move(snoozeSettingsModel), *audioModel);
                return std::make_unique<gui::BellSettingsAlarmSettingsSnoozeWindow>(app, std::move(presenter));
            });
        windowsFactory.attach(


@@ 248,13 251,11 @@ namespace app
                                                                        std::move(alarmLightOnOffModel),
                                                                        std::move(alarmFrontlightModel));

                auto frontlightModel  = std::make_unique<bell_settings::FrontlightModel>(app);
                auto frontlightModel = std::make_unique<bell_settings::FrontlightModel>(app);
                auto provider  = std::make_unique<bell_settings::AlarmSettingsListItemProvider>(*alarmSettingsModel,
                                                                                               std::move(songsModel));
                auto presenter = std::make_unique<bell_settings::AlarmSettingsPresenter>(std::move(provider),
                                                                                         std::move(alarmSettingsModel),
                                                                                         *audioModel,
                                                                                         std::move(frontlightModel));
                auto presenter = std::make_unique<bell_settings::AlarmSettingsPresenter>(
                    std::move(provider), std::move(alarmSettingsModel), *audioModel, std::move(frontlightModel));
                return std::make_unique<gui::BellSettingsAlarmSettingsWindow>(app, std::move(presenter));
            });


M products/BellHybrid/apps/application-bell-settings/models/alarm_settings/SnoozeListItemProvider.cpp => products/BellHybrid/apps/application-bell-settings/models/alarm_settings/SnoozeListItemProvider.cpp +29 -21
@@ 6,11 6,10 @@
#include <common/widgets/list_items/NumberWithSuffix.hpp>
#include <common/widgets/list_items/Numeric.hpp>
#include <common/widgets/list_items/NumericWithBar.hpp>
#include <common/widgets/list_items/Text.hpp>
#include <common/widgets/ListItems.hpp>
#include <common/LanguageUtils.hpp>
#include <SongsListViewItem.hpp>

#include <apps-common/ApplicationCommon.hpp>
#include <utility>

namespace app::bell_settings


@@ 48,20 47,20 @@ namespace app::bell_settings
        return chimeInterval;
    }

    SnoozeListItemProvider::SnoozeListItemProvider(AbstractSnoozeSettingsModel &model,
                                                   std::vector<UTF8> chimeTonesRange)
        : model{model}
    SnoozeListItemProvider::SnoozeListItemProvider(AbstractSnoozeSettingsModel &settingsModel,
                                                   std::shared_ptr<SongsModel> songsModel)
        : settingsModel{settingsModel}, songsModel{std::move(songsModel)}
    {
        buildListItems(std::move(chimeTonesRange));
        buildListItems();
    }

    void SnoozeListItemProvider::buildListItems(std::vector<UTF8> chimeTonesRange)
    void SnoozeListItemProvider::buildListItems()
    {
        constexpr auto itemCount = 5U;
        internalData.reserve(itemCount);

        auto onOff =
            new OnOffListItem(model.getSnoozeOnOff(), utils::translate("app_bell_settings_alarm_settings_snooze"));
        auto onOff = new OnOffListItem(settingsModel.getSnoozeOnOff(),
                                       utils::translate("app_bell_settings_alarm_settings_snooze"));

        internalData.emplace_back(onOff);
        constexpr auto snoozeLengthStep = 1U;


@@ 69,10 68,10 @@ namespace app::bell_settings
        constexpr auto snoozeLengthMax  = 30U;

        auto chimeLengthBottomDescription =
            utils::language::getCorrectMinutesNumeralForm(model.getSnoozeLength().getValue());
            utils::language::getCorrectMinutesNumeralForm(settingsModel.getSnoozeLength().getValue());
        auto chimeLength = new list_items::Numeric(
            list_items::Numeric::spinner_type::range{snoozeLengthMin, snoozeLengthMax, snoozeLengthStep},
            model.getSnoozeLength(),
            settingsModel.getSnoozeLength(),
            utils::translate("app_bell_settings_alarm_settings_snooze_length"),
            chimeLengthBottomDescription);



@@ 90,7 89,7 @@ namespace app::bell_settings

        auto chimeInterval = new list_items::NumberWithSuffix(
            getDefaultChimeIntervalRange(),
            model.getSnoozeChimeInterval(),
            settingsModel.getSnoozeChimeInterval(),
            utils::translate("app_bell_settings_alarm_settings_snooze_chime_interval"),
            utils::translate("app_bell_settings_alarm_settings_snooze_chime_interval_bot_desc"));
        chimeLength->setValue();


@@ 116,27 115,36 @@ namespace app::bell_settings
            return false;
        };

        chimeInterval->onProceed = [chimeInterval, this]() {
            if (chimeInterval->value() == 0) {
                this->onExit();
                return true;
            }
            return false;
        };

        auto snoozeChimeTone =
            new list_items::Text(std::move(chimeTonesRange),
                                 model.getSnoozeChimeTone(),
                                 utils::translate("app_bell_settings_alarm_settings_snooze_chime_tone"));
        snoozeChimeTone->set_on_value_change_cb([this](const auto &val) {
            new SongsListViewItem(utils::translate("app_bell_settings_alarm_settings_snooze_chime_tone"),
                                  settingsModel.getSnoozeChimeTone(),
                                  songsModel);
        snoozeChimeTone->set_on_value_change_cb([chimeInterval, this](const auto &val) {
            currentSoundPath = val;
            if (onToneChange) {
                onToneChange(val);
            }
        });
        snoozeChimeTone->onEnter = [this, snoozeChimeTone, chimeInterval]() {
        snoozeChimeTone->onEnter = [this, chimeInterval]() {
            if (chimeInterval->value() == 0) {
                this->onExit();
                return;
            }
            if (onToneEnter) {
                onToneEnter(snoozeChimeTone->value());
                onToneEnter(currentSoundPath);
            }
        };
        snoozeChimeTone->onExit = [this, snoozeChimeTone]() {
        snoozeChimeTone->onExit = [this]() {
            if (onToneExit) {
                onToneExit(snoozeChimeTone->value());
                onToneExit(currentSoundPath);
            }
        };
        internalData.emplace_back(snoozeChimeTone);


@@ 146,7 154,7 @@ namespace app::bell_settings
        constexpr auto volumeMax  = AbstractAudioModel::maxVolume;
        snoozeChimeVolume         = new list_items::NumericWithBar(
            list_items::NumericWithBar::spinner_type::range{volumeMin, volumeMax, volumeStep},
            model.getSnoozeChimeVolume(),
            settingsModel.getSnoozeChimeVolume(),
            volumeMax,
            utils::translate("app_bell_settings_alarm_settings_snooze_chime_volume"));
        snoozeChimeVolume->set_on_value_change_cb([this](const auto &val) {

M products/BellHybrid/apps/application-bell-settings/models/alarm_settings/SnoozeListItemProvider.hpp => products/BellHybrid/apps/application-bell-settings/models/alarm_settings/SnoozeListItemProvider.hpp +6 -3
@@ 5,6 5,7 @@

#include "SettingsListItemProvider.hpp"
#include "AbstractSnoozeSettingsModel.hpp"
#include <common/models/SongsModel.hpp>

namespace app::list_items
{


@@ 16,14 17,16 @@ namespace app::bell_settings
    class SnoozeListItemProvider : public SettingsListItemProvider
    {
      public:
        SnoozeListItemProvider(AbstractSnoozeSettingsModel &model, std::vector<UTF8> chimeTonesRange);
        SnoozeListItemProvider(AbstractSnoozeSettingsModel &settingsModel, std::shared_ptr<SongsModel> songsModel);

        auto getCurrentVolume() -> std::uint8_t;

      private:
        void buildListItems(std::vector<UTF8> chimeTonesRange);
        void buildListItems();

        AbstractSnoozeSettingsModel &model;
        AbstractSnoozeSettingsModel &settingsModel;
        app::list_items::NumericWithBar *snoozeChimeVolume{nullptr};
        std::shared_ptr<SongsModel> songsModel;
        UTF8 currentSoundPath;
    };
} // namespace app::bell_settings

M products/BellHybrid/apps/application-bell-settings/models/alarm_settings/SnoozeSettingsModel.cpp => products/BellHybrid/apps/application-bell-settings/models/alarm_settings/SnoozeSettingsModel.cpp +2 -8
@@ 42,20 42,14 @@ namespace app::bell_settings
            settings.getValue(bell::settings::Snooze::interval, settings::SettingsScope::Global));
    }

    SnoozeChimeToneModel::SnoozeChimeToneModel(sys::Service *app, SimpleSoundsRepository &soundsRepository)
        : gui::SettingsModel<UTF8>{app}, soundsRepository{soundsRepository}
    {}

    auto SnoozeChimeToneModel::setValue(UTF8 value) -> void
    {
        const auto &path = soundsRepository.titleToPath(value).value_or("");
        settings.setValue(bell::settings::Snooze::tonePath, path, settings::SettingsScope::Global);
        settings.setValue(bell::settings::Snooze::tonePath, value, settings::SettingsScope::Global);
    }

    auto SnoozeChimeToneModel::getValue() const -> UTF8
    {
        const auto &path = settings.getValue(bell::settings::Snooze::tonePath, settings::SettingsScope::Global);
        return soundsRepository.pathToTitle(path).value_or("");
        return settings.getValue(bell::settings::Snooze::tonePath, settings::SettingsScope::Global);
    }

    auto SnoozeChimeVolumeModel::setValue(std::uint8_t value) -> void

M products/BellHybrid/apps/application-bell-settings/models/alarm_settings/SnoozeSettingsModel.hpp => products/BellHybrid/apps/application-bell-settings/models/alarm_settings/SnoozeSettingsModel.hpp +1 -4
@@ 40,13 40,10 @@ namespace app::bell_settings
    class SnoozeChimeToneModel : public gui::SettingsModel<UTF8>
    {
      public:
        SnoozeChimeToneModel(sys::Service *app, SimpleSoundsRepository &soundsRepository);
        using SettingsModel::SettingsModel;

        auto setValue(UTF8 value) -> void override;
        auto getValue() const -> UTF8 override;

      private:
        SimpleSoundsRepository &soundsRepository;
    };

    class SnoozeChimeVolumeModel : public gui::AbstractSettingsModel<std::uint8_t>

M products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/SnoozePresenter.cpp => products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/SnoozePresenter.cpp +5 -9
@@ 6,19 6,15 @@

namespace app::bell_settings
{
    SnoozePresenter::SnoozePresenter(std::shared_ptr<SnoozeListItemProvider> provider,
                                     std::unique_ptr<AbstractSnoozeSettingsModel> snoozeSettingsModel,
                                     AbstractAudioModel &audioModel,
                                     std::unique_ptr<AbstractSimpleSoundsRepository> soundsRepository)
        : provider{provider}, snoozeSettingsModel{std::move(snoozeSettingsModel)}, audioModel{audioModel},
          soundsRepository{std::move(soundsRepository)}
    SnoozePresenter::SnoozePresenter(std::unique_ptr<SnoozeListItemProvider> &&provider,
                                     std::unique_ptr<AbstractSnoozeSettingsModel> &&snoozeSettingsModel,
                                     AbstractAudioModel &audioModel)
        : provider{std::move(provider)}, snoozeSettingsModel{std::move(snoozeSettingsModel)}, audioModel{audioModel}
    {
        auto playSound = [this](const UTF8 &val) {
            currentSoundPath = val;
            this->audioModel.setVolume(this->provider->getCurrentVolume(), AbstractAudioModel::PlaybackType::Snooze);
            this->audioModel.play(this->soundsRepository->titleToPath(currentSoundPath).value_or(""),
                                  AbstractAudioModel::PlaybackType::Snooze,
                                  {});
            this->audioModel.play(currentSoundPath, AbstractAudioModel::PlaybackType::Snooze, {});
        };

        this->provider->onExit = [this]() { getView()->exit(); };

M products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/SnoozePresenter.hpp => products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/SnoozePresenter.hpp +3 -5
@@ 39,10 39,9 @@ namespace app::bell_settings
    class SnoozePresenter : public AbstractSnoozePresenter
    {
      public:
        SnoozePresenter(std::shared_ptr<SnoozeListItemProvider> provider,
                        std::unique_ptr<AbstractSnoozeSettingsModel> snoozeSettingsModel,
                        AbstractAudioModel &audioModel,
                        std::unique_ptr<AbstractSimpleSoundsRepository> soundsRepository);
        SnoozePresenter(std::unique_ptr<SnoozeListItemProvider> &&provider,
                        std::unique_ptr<AbstractSnoozeSettingsModel> &&snoozeSettingsModel,
                        AbstractAudioModel &audioModel);
        auto getPagesProvider() const -> std::shared_ptr<gui::ListItemProvider> override;
        void saveData() override;
        void loadData() override;


@@ 55,7 54,6 @@ namespace app::bell_settings
        std::shared_ptr<SnoozeListItemProvider> provider;
        std::unique_ptr<AbstractSnoozeSettingsModel> snoozeSettingsModel;
        AbstractAudioModel &audioModel;
        std::unique_ptr<AbstractSimpleSoundsRepository> soundsRepository;
        UTF8 currentSoundPath;
    };
} // namespace app::bell_settings