Skip to content

Commit 091e262

Browse files
authored
[EGD-3959] Gong sound added (#857)
1 parent 20e045a commit 091e262

File tree

6 files changed

+40
-13
lines changed

6 files changed

+40
-13
lines changed

changelog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
### Added
66

7+
* `[meditation]` Added gong sound on meditation intervals
78
* `[meditation]` Added basic meditation functionalities and settings
89
* `[cellular]` Handling incoming calls and sms in sleep mode
910

module-apps/application-meditation/widgets/MeditationTimer.cpp

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,14 @@ namespace gui
7979
return true;
8080
}
8181

82-
void MeditationTimer::reset(std::chrono::seconds _duration) noexcept
82+
void MeditationTimer::reset(std::chrono::seconds _duration, std::chrono::seconds _intervalPeriod) noexcept
8383
{
8484
assert(_duration != std::chrono::seconds::zero()); // Pre-condition check.
8585

8686
duration = _duration;
8787
elapsed = std::chrono::seconds::zero();
88+
intervalPeriod = _intervalPeriod;
89+
hasInterval = _intervalPeriod != std::chrono::seconds::zero();
8890
onReset();
8991
}
9092

@@ -113,11 +115,13 @@ namespace gui
113115
if (isFinished() && timeoutCallback != nullptr) {
114116
timeoutCallback();
115117
}
116-
117118
return true;
118119
}
119120

120121
++elapsed;
122+
if (intervalReached() || isFinished()) {
123+
onInterval();
124+
}
121125
update();
122126
return true;
123127
}
@@ -131,6 +135,12 @@ namespace gui
131135
{
132136
return !isRunning;
133137
}
138+
139+
auto MeditationTimer::intervalReached() const noexcept -> bool
140+
{
141+
return hasInterval && (elapsed.count() % intervalPeriod.count()) == 0;
142+
}
143+
134144
auto MeditationTimer::calculatePercentageValue() const noexcept -> unsigned int
135145
{
136146
const auto percentage = static_cast<float>(elapsed.count()) / duration.count();
@@ -142,11 +152,21 @@ namespace gui
142152
isRunning = false;
143153
}
144154

145-
void MeditationTimer::setTimerVisible(bool isVisible) noexcept
155+
void MeditationTimer::setCounterVisible(bool isVisible) noexcept
146156
{
147157
timer->setVisible(isVisible);
148158
}
149159

160+
namespace
161+
{
162+
constexpr auto intervalSoundPath = "assets/audio/ringtone.wav";
163+
}
164+
165+
void MeditationTimer::onInterval() const
166+
{
167+
AudioServiceAPI::PlaybackStart(application, audio::PlaybackType::Multimedia, intervalSoundPath);
168+
}
169+
150170
void MeditationTimer::registerTimeoutCallback(const std::function<void()> &cb)
151171
{
152172
timeoutCallback = cb;

module-apps/application-meditation/widgets/MeditationTimer.hpp

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,14 @@ namespace gui
2222
app::ApplicationMeditation *app,
2323
Item *_parent = nullptr);
2424

25-
auto onDimensionChanged(const BoundingBox &oldDim, const BoundingBox &newDim) -> bool override;
25+
[[nodiscard]] auto onDimensionChanged(const BoundingBox &oldDim, const BoundingBox &newDim) -> bool override;
2626

2727
void start();
2828
void stop();
29-
void reset(std::chrono::seconds _duration) noexcept;
30-
auto isStopped() const noexcept -> bool;
31-
void setTimerVisible(bool) noexcept;
29+
void reset(std::chrono::seconds _duration, std::chrono::seconds period = std::chrono::seconds::zero()) noexcept;
30+
[[nodiscard]] auto isStopped() const noexcept -> bool;
31+
void onInterval() const;
32+
void setCounterVisible(bool isVisible) noexcept;
3233
void registerTimeoutCallback(const std::function<void()> &);
3334

3435
private:
@@ -38,13 +39,16 @@ namespace gui
3839
void onReset();
3940

4041
void startTimer();
41-
auto onTimerTimeout(Item &self, Timer &timerTask) -> bool;
42-
auto isFinished() const noexcept -> bool;
43-
auto calculatePercentageValue() const noexcept -> unsigned int;
42+
[[nodiscard]] auto onTimerTimeout(Item &self, Timer &timerTask) -> bool;
43+
[[nodiscard]] auto isFinished() const noexcept -> bool;
44+
[[nodiscard]] auto intervalReached() const noexcept -> bool;
45+
[[nodiscard]] auto calculatePercentageValue() const noexcept -> unsigned int;
4446

4547
std::atomic_bool isRunning{false};
4648
std::chrono::seconds duration{std::chrono::seconds::zero()};
4749
std::chrono::seconds elapsed{std::chrono::seconds::zero()};
50+
std::chrono::seconds intervalPeriod{std::chrono::seconds::zero()};
51+
bool hasInterval = false;
4852

4953
app::ApplicationMeditation *application = nullptr;
5054
CircularProgressBar *progressBar = nullptr;

module-apps/application-meditation/widgets/TimerSetter.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ namespace gui
1818
static constexpr int defaultIncrementValue = 15;
1919

2020
bool resetValueOnNumeric = true;
21-
int timeInMinutes = minimalValue;
21+
int timeInMinutes = defaultIncrementValue;
2222

2323
public:
2424
std::chrono::minutes getTime() const noexcept

module-apps/application-meditation/windows/MeditationTimerWindow.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ void MeditationTimerWindow::onBeforeShow(ShowMode mode, SwitchData *data)
5959
assert(timerData);
6060
setVisiblePreparation();
6161
meditationTime = timerData->getMeditationTime();
62+
meditationIntervalPeriod = timerData->getMeditationIntervals();
6263

6364
auto onPreparation = [&]() -> void {
6465
setVisibleRunning();
@@ -67,13 +68,13 @@ void MeditationTimerWindow::onBeforeShow(ShowMode mode, SwitchData *data)
6768
application->refreshWindow(RefreshModes::GUI_REFRESH_FAST);
6869
};
6970
timer->registerTimeoutCallback(onMeditationEnd);
70-
timer->reset(meditationTime);
71+
timer->reset(meditationTime, meditationIntervalPeriod);
7172
timer->start();
7273
application->refreshWindow(RefreshModes::GUI_REFRESH_FAST);
7374
};
7475

7576
timer->registerTimeoutCallback(onPreparation);
76-
timer->setTimerVisible(timerData->isCounterEnabled());
77+
timer->setCounterVisible(timerData->isCounterEnabled());
7778
timer->reset(timerData->getPreparationTime());
7879
timer->start();
7980
}

module-apps/application-meditation/windows/MeditationTimerWindow.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ namespace gui
1313
Text *meditationInfo = nullptr;
1414
bool finished = false;
1515
std::chrono::seconds meditationTime{0};
16+
std::chrono::seconds meditationIntervalPeriod{0};
1617

1718
void setWidgetVisible(bool topBar, bool bottomBar, bool counter);
1819
void setVisibleRunning();

0 commit comments

Comments
 (0)