~aleteoryx/muditaos

c2cdfb35b9b2e8797037370743331486d320eb64 — Maciej-Mudita 2 years ago f7980fe
[MOS-202] Add meditation parameters to non-volatile memory

The meditation time entered from the keyboard will be remembered.
M module-apps/application-meditation/data/Constants.hpp => module-apps/application-meditation/data/Constants.hpp +3 -2
@@ 16,8 16,9 @@ namespace Constants
        constexpr std::array<minutes, 6> chimeIntervals{
            minutes{2}, minutes{5}, minutes{10}, minutes{15}, minutes{30}, minutes{0}};

        constexpr int defaultMeditationDuration                = 15;
        constexpr std::array<const int, 4> meditationDurations = {15, 30, 60, 90};
        constexpr int defaultMeditationDuration = 15;
        constexpr int minimalMeditationDuration = 1;
        constexpr int maximalMeditationDuration = 99;

        using namespace std::chrono_literals;
        constexpr auto defaultPreparationTime{5s};

M module-apps/application-meditation/widgets/TimerProperty.cpp => module-apps/application-meditation/widgets/TimerProperty.cpp +13 -21
@@ 136,19 136,15 @@ void TimerProperty::setOnChangeCallback(OnChangeCallback callback)

bool TimerProperty::State::setTime(int value)
{
    const auto it = std::find(
        std::begin(Constants::Params::meditationDurations), std::end(Constants::Params::meditationDurations), value);
    if (it != std::end(Constants::Params::meditationDurations)) {
        timeInMinutes = *it;
        return true;
    }
    timeInMinutes = Constants::Params::defaultMeditationDuration;
    return false;
    timeInMinutes =
        std::clamp(value, Constants::Params::minimalMeditationDuration, Constants::Params::maximalMeditationDuration);
    return true;
}

void TimerProperty::State::checkBounds() noexcept
{
    timeInMinutes       = std::clamp(timeInMinutes, minimalValue, maximalValue);
    timeInMinutes = std::clamp(
        timeInMinutes, Constants::Params::minimalMeditationDuration, Constants::Params::maximalMeditationDuration);
    resetValueOnNumeric = true;
}



@@ 159,7 155,7 @@ void TimerProperty::State::putNumericValue(int digit) noexcept
        resetValueOnNumeric = false;
    }
    if (timeInMinutes == 0 && digit == 0) {
        digit = minimalValue;
        digit = Constants::Params::minimalMeditationDuration;
    }
    timeInMinutes = 10 * timeInMinutes + digit;
    if (timeInMinutes >= 10 * (counterMaxDigits - 1)) {


@@ 169,8 165,8 @@ void TimerProperty::State::putNumericValue(int digit) noexcept
void TimerProperty::State::delNumericValue() noexcept
{
    timeInMinutes = timeInMinutes / 10;
    if (timeInMinutes < minimalValue) {
        timeInMinutes       = minimalValue;
    if (timeInMinutes < Constants::Params::minimalMeditationDuration) {
        timeInMinutes       = Constants::Params::minimalMeditationDuration;
        resetValueOnNumeric = true;
    }
    else {


@@ 180,10 176,8 @@ void TimerProperty::State::delNumericValue() noexcept

void TimerProperty::State::increment() noexcept
{
    auto it = std::upper_bound(std::begin(Constants::Params::meditationDurations),
                               std::end(Constants::Params::meditationDurations),
                               timeInMinutes);
    if (it == std::end(Constants::Params::meditationDurations)) {
    auto it = std::upper_bound(std::begin(timeArray), std::end(timeArray), timeInMinutes);
    if (it == std::end(timeArray)) {
        it--;
    }
    timeInMinutes       = *it;


@@ 192,11 186,9 @@ void TimerProperty::State::increment() noexcept

void TimerProperty::State::decrement() noexcept
{
    auto it = std::upper_bound(std::rbegin(Constants::Params::meditationDurations),
                               std::rend(Constants::Params::meditationDurations),
                               timeInMinutes,
                               [](int a, int b) { return a > b; });
    if (it == std::rend(Constants::Params::meditationDurations)) {
    auto it = std::upper_bound(
        std::rbegin(timeArray), std::rend(timeArray), timeInMinutes, [](int a, int b) { return a > b; });
    if (it == std::rend(timeArray)) {
        it--;
    }
    timeInMinutes       = *it;

M module-apps/application-meditation/widgets/TimerProperty.hpp => module-apps/application-meditation/widgets/TimerProperty.hpp +2 -3
@@ 16,9 16,8 @@ namespace gui
    {
        class State
        {
            static constexpr int counterMaxDigits             = 2;
            static constexpr int minimalValue                 = 1;
            static constexpr int maximalValue                 = 99;
            static constexpr int counterMaxDigits               = 2;
            static constexpr std::array<const int, 4> timeArray = {15, 30, 60, 90};

            bool resetValueOnNumeric = true;
            int timeInMinutes;