M changelog.md => changelog.md +4 -4
@@ 1,12 1,11 @@
# MuditaOS changelog
-### Added
-* `[cellular]` SIM API for change pin, set/reset sim lock, switch sim card
-* `[notes]` MMI/USSD communication window
-
[Current release]
### Added
+
+* `[cellular]` SIM API for change pin, set/reset sim lock, switch sim card
+* `[notes]` MMI/USSD communication window
* `[notes]` Notes application implemented.
* `[notes]` Notes search engine implemented.
@@ 18,6 17,7 @@
### Fixed
+* `[meditation]` Fix of too many time options
* `[meditation]` Fixed default counter settings
* `[notes]` Fixed displaying the special characters in a note title.
M image/assets/lang/English.json => image/assets/lang/English.json +3 -1
@@ 343,7 343,7 @@
"app_phonebook_new_add_to_ice": "Add to ICE",
"app_phonebook_check": "CHECK",
"app_phonebook_uncheck": "UNCHECK",
- "app_meditation_title_main": "Meditation",
+ "app_meditation_title_main": "Meditation timer",
"app_meditation_preparation_time": "Preparation time",
"app_meditation_put_down_phone_and_wait": "<text>Put down the phone and wait for<br>the gong.</text>",
"app_meditation_thank_you_for_session": "<text>Thank you for this<br>meditation session.</text>",
@@ 351,6 351,8 @@
"app_meditation_interval_chime": "Interval Chime",
"app_meditation_interval_none": "None",
"app_meditation_interval_every_x_minutes": "Every %0 minutes",
+ "app_meditation_minute" : "MINUTE",
+ "app_meditation_minutes" : "MINUTES",
"app_music_player_all_songs": "All songs",
"app_music_player_play": "PLAY",
"app_music_player_music_library": "MUSIC LIBRARY",
M module-apps/application-meditation/widgets/TimerSetter.cpp => module-apps/application-meditation/widgets/TimerSetter.cpp +30 -12
@@ 3,6 3,8 @@
#include "TimerSetter.hpp"
#include <application-meditation/data/Style.hpp>
+#include <module-utils/i18n/i18n.hpp>
+#include <module-utils/Utils.hpp>
using namespace gui;
@@ 45,8 47,8 @@ void TimerSetter::build()
timerStyle::setterUnitLabel::Height);
timeUnitLabel->setFont(style::window::font::verysmall);
timeUnitLabel->setAlignment(Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Center));
- timeUnitLabel->setText("MINUTES");
timeUnitLabel->setEdges(RectangleEdge::None);
+ timeUnitLabel->setText(utils::localize.get("app_meditation_minutes"));
}
bool TimerSetter::onFocus(bool isFocused)
@@ 64,8 66,8 @@ bool TimerSetter::onFocus(bool isFocused)
bool TimerSetter::onInput(const InputEvent &inputEvent)
{
+ bool handled = false;
if (inputEvent.isShortPress()) {
- bool handled = false;
if (0 <= gui::toNumeric(inputEvent.keyCode) && gui::toNumeric(inputEvent.keyCode) <= 9) {
state.putNumericValue(gui::toNumeric(inputEvent.keyCode));
handled = true;
@@ 81,12 83,21 @@ bool TimerSetter::onInput(const InputEvent &inputEvent)
else {
state.onFocus();
}
- timeLabel->setText(std::to_string(static_cast<int>(state.getTime().count())));
- if (handled) {
- return true;
- }
+ setMeditationTime();
+ }
+ return handled;
+}
+
+void TimerSetter::setMeditationTime()
+{
+ const auto meditationTime = static_cast<int>(state.getTime().count());
+ timeLabel->setText(utils::to_string(meditationTime));
+ if (meditationTime == 1) {
+ timeUnitLabel->setText(utils::localize.get("app_meditation_minute"));
+ }
+ else {
+ timeUnitLabel->setText(utils::localize.get("app_meditation_minutes"));
}
- return false;
}
std::chrono::seconds TimerSetter::getTime() noexcept
@@ 108,21 119,28 @@ void TimerSetter::State::putNumericValue(int digit) noexcept
resetValueOnNumeric = false;
}
timeInMinutes = 10 * timeInMinutes + digit;
- if (timeInMinutes >= minimalValue) {
+ if (timeInMinutes >= 10 * (counterMaxDigits - 1)) {
resetValueOnNumeric = true;
}
}
void TimerSetter::State::increment() noexcept
{
- timeInMinutes = (timeInMinutes / defaultIncrementValue + 1) * defaultIncrementValue;
+ auto it = std::upper_bound(std::begin(timeArr), std::end(timeArr), timeInMinutes);
+ if (it == std::end(timeArr)) {
+ it--;
+ }
+ timeInMinutes = *it;
resetValueOnNumeric = true;
- checkBounds();
}
void TimerSetter::State::decrement() noexcept
{
- timeInMinutes = ((timeInMinutes - 1) / defaultIncrementValue) * defaultIncrementValue;
+ auto it =
+ std::upper_bound(std::rbegin(timeArr), std::rend(timeArr), timeInMinutes, [](int a, int b) { return a > b; });
+ if (it == std::rend(timeArr)) {
+ it--;
+ }
+ timeInMinutes = *it;
resetValueOnNumeric = true;
- checkBounds();
}
M module-apps/application-meditation/widgets/TimerSetter.hpp => module-apps/application-meditation/widgets/TimerSetter.hpp +8 -5
@@ 16,15 16,17 @@ namespace gui
{
class State
{
- static constexpr int minimalValue = 10;
- static constexpr int maximalValue = 90;
- static constexpr int defaultIncrementValue = 15;
+ static constexpr int counterMaxDigits = 2;
+ static constexpr int minimalValue = 1;
+ static constexpr int maximalValue = 99;
+ static constexpr int defaultMeditationTime = 15;
+ static constexpr std::array<const int, 4> timeArr = {15, 30, 60, 90};
bool resetValueOnNumeric = true;
- int timeInMinutes = defaultIncrementValue;
+ int timeInMinutes = defaultMeditationTime;
public:
- std::chrono::minutes getTime() const noexcept
+ [[nodiscard]] std::chrono::minutes getTime() const noexcept
{
return std::chrono::minutes{timeInMinutes};
}
@@ 44,6 46,7 @@ namespace gui
Label *timeUnitLabel = nullptr;
void build();
+ void setMeditationTime();
public:
TimerSetter(Item *parent, const uint32_t x, const uint32_t y, const uint32_t w, const uint32_t h);
M module-apps/application-meditation/windows/MeditationTimerWindow.cpp => module-apps/application-meditation/windows/MeditationTimerWindow.cpp +2 -5
@@ 91,20 91,17 @@ auto MeditationTimerWindow::onInput(const InputEvent &inputEvent) -> bool
}
if (inputEvent.is(KeyCode::KEY_RF) && bottomBar->isActive(BottomBar::Side::RIGHT)) {
timer->stop();
- finished = true;
setVisibleMeditationEnd();
return true;
}
if (inputEvent.is(KeyCode::KEY_ENTER) && bottomBar->isActive(BottomBar::Side::CENTER)) {
if (timer->isStopped()) {
timer->start();
- bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::pause));
- setWidgetVisible(false, true, true);
+ setVisibleRunning();
}
else {
timer->stop();
- bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::start));
- setWidgetVisible(true, true, true);
+ setVisiblePaused();
}
return true;
}