~aleteoryx/muditaos

9c3640768177932fa175901bde91bc104b65cb80 — Michał Kamoń 5 years ago a261a13
[EGD-4376] Meditation: fixed to many options for time set (#1105)

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;
        }