M image/user/db/settings_bell_002.sql => image/user/db/settings_bell_002.sql +1 -1
@@ 40,7 40,7 @@ INSERT OR IGNORE INTO settings_tab (path, value) VALUES
('prewake_up_light_duration','0'),
('alarm_tone','Morning Dew'),
('alarm_light_active','1'),
- ('alarm_duration','10000'),
+ ('alarm_duration','5'),
('bedtime_active','0'),
('bedtime_time','21:00'),
('bedtime_tone','Evening Horizon'),
M products/BellHybrid/alarms/src/actions/PlayAudioActions.cpp => products/BellHybrid/alarms/src/actions/PlayAudioActions.cpp +17 -17
@@ 13,16 13,16 @@ namespace alarms
PlayAudioAction::PlayAudioAction(sys::Service &service,
const std::filesystem::path &tonesDirPath,
std::string_view toneSetting,
- std::string_view durationSetting,
- audio::PlaybackType playbackType)
+ audio::PlaybackType playbackType,
+ std::optional<std::string_view> durationSetting)
: service{service}, soundsRepository{tonesDirPath}, toneSetting{toneSetting}, durationSetting{durationSetting},
playbackType{playbackType}, settings{service::ServiceProxy{service.weak_from_this()}}
{}
- bool PlayAudioAction::play(const std::filesystem::path &path, std::chrono::minutes duration)
+ bool PlayAudioAction::play(const std::filesystem::path &path, std::optional<std::chrono::minutes> duration)
{
- if (duration != InfiniteDuration && duration != NoDuration) {
- spawnTimer(duration);
+ if (duration) {
+ spawnTimer(*duration);
}
return service.bus.sendUnicast(std::make_shared<service::AudioStartPlaybackRequest>(path, playbackType),
service::audioServiceName);
@@ 37,10 37,14 @@ namespace alarms
}
bool PlayAudioAction::execute()
{
- const auto tone = settings.getValue(toneSetting, settings::SettingsScope::Global);
- const auto durationStr = settings.getValue(durationSetting, settings::SettingsScope::Global);
- const auto durationVal = utils::getNumericValue<int>(durationStr);
- return play(soundsRepository.titleToPath(tone).value_or(""), std::chrono::minutes{durationVal});
+ const auto tone = settings.getValue(toneSetting, settings::SettingsScope::Global);
+ std::optional<std::chrono::minutes> duration{};
+ if (durationSetting) {
+ const auto durationStr = settings.getValue(*durationSetting, settings::SettingsScope::Global);
+ duration.emplace(utils::getNumericValue<int>(durationStr));
+ }
+
+ return play(soundsRepository.titleToPath(tone).value_or(""), duration);
}
void PlayAudioAction::detachTimer()
@@ 67,29 71,25 @@ namespace alarms
return std::make_unique<PlayAudioAction>(service,
paths::getPreWakeUpChimesDir(),
bell::settings::PrewakeUp::tone,
- NoPlaybackTimeout,
audio::PlaybackType::PreWakeUp);
}
std::unique_ptr<PlayAudioAction> createSnoozeChimeAction(sys::Service &service)
{
- return std::make_unique<PlayAudioAction>(service,
- paths::getSnoozeChimesDir(),
- bell::settings::Snooze::tone,
- bell::settings::Snooze::length,
- audio::PlaybackType::Snooze);
+ return std::make_unique<PlayAudioAction>(
+ service, paths::getSnoozeChimesDir(), bell::settings::Snooze::tone, audio::PlaybackType::Snooze);
}
std::unique_ptr<PlayAudioAction> createAlarmToneAction(sys::Service &service)
{
+ /// Alarm duration is controlled from the main application's state machine
return std::make_unique<PlayAudioAction>(
- service, paths::getAlarmDir(), bell::settings::Alarm::tone, bell::settings::Alarm::duration);
+ service, paths::getAlarmDir(), bell::settings::Alarm::tone, audio::PlaybackType::Alarm);
}
std::unique_ptr<PlayAudioAction> createBedtimeChimeAction(sys::Service &service)
{
return std::make_unique<PlayAudioAction>(service,
paths::getBedtimeReminderChimesDir(),
bell::settings::Bedtime::tone,
- bell::settings::Bedtime::duration,
audio::PlaybackType::Bedtime);
}
} // namespace factory
M products/BellHybrid/alarms/src/actions/PlayAudioActions.hpp => products/BellHybrid/alarms/src/actions/PlayAudioActions.hpp +4 -8
@@ 23,14 23,11 @@ namespace alarms
explicit PlayAudioAction(sys::Service &service,
const std::filesystem::path &tonesDirPath,
std::string_view toneSetting,
- std::string_view durationSetting,
- audio::PlaybackType = audio::PlaybackType::Alarm);
+ audio::PlaybackType = audio::PlaybackType::Alarm,
+ std::optional<std::string_view> durationSetting = {});
private:
- static constexpr auto InfiniteDuration = std::chrono::minutes::max();
- static constexpr auto NoDuration = std::chrono::minutes::zero();
-
- bool play(const std::filesystem::path &path, std::chrono::minutes duration = InfiniteDuration);
+ bool play(const std::filesystem::path &path, std::optional<std::chrono::minutes> duration = {});
void spawnTimer(std::chrono::minutes timeout);
void detachTimer();
@@ 38,14 35,13 @@ namespace alarms
sys::TimerHandle timer;
SoundsRepository soundsRepository;
const std::string toneSetting;
- const std::string durationSetting;
+ const std::optional<std::string> durationSetting;
const audio::PlaybackType playbackType;
settings::Settings settings;
};
namespace factory
{
- static constexpr auto NoPlaybackTimeout = "0";
std::unique_ptr<PlayAudioAction> createAlarmToneAction(sys::Service &service);
std::unique_ptr<PlayAudioAction> createPreWakeUpChimeAction(sys::Service &service);
std::unique_ptr<PlayAudioAction> createSnoozeChimeAction(sys::Service &service);
M products/BellHybrid/apps/application-bell-main/presenters/HomeScreenPresenter.cpp => products/BellHybrid/apps/application-bell-main/presenters/HomeScreenPresenter.cpp +1 -1
@@ 162,7 162,7 @@ namespace app::home_screen
void HomeScreenPresenter::stopSnoozeTimer()
{
- snoozeTimer->start();
+ snoozeTimer->stop();
}
void HomeScreenPresenter::restartSnoozeTimer(std::chrono::seconds snoozeDuration)