~aleteoryx/muditaos

45c27c2f4888200c5bc03e1fac6c41478cc23e74 — Przemyslaw Brudny 4 years ago 1e8082e
[EGD-7156] Fix alarm time set

Fixed alarm time set.
M module-apps/application-alarm-clock/ApplicationAlarmClock.cpp => module-apps/application-alarm-clock/ApplicationAlarmClock.cpp +1 -1
@@ 75,7 75,7 @@ namespace app
                              [rRulePresenter](ApplicationCommon *app, const std::string &name) {
                                  auto alarmsRepository = std::make_unique<alarmClock::AlarmsDBRepository>(app);
                                  auto alarmsProvider   = std::make_shared<alarmClock::NewEditAlarmModel>(
                                      app, rRulePresenter, std::move(alarmsRepository), !stm::api::isTimeFormat12h());
                                      app, rRulePresenter, std::move(alarmsRepository));
                                  auto presenter =
                                      std::make_unique<alarmClock::AlarmClockEditWindowPresenter>(alarmsProvider);
                                  return std::make_unique<alarmClock::NewEditAlarmWindow>(app, std::move(presenter));

M module-apps/application-alarm-clock/models/NewEditAlarmModel.cpp => module-apps/application-alarm-clock/models/NewEditAlarmModel.cpp +2 -5
@@ 16,10 16,8 @@ namespace app::alarmClock
{
    NewEditAlarmModel::NewEditAlarmModel(app::ApplicationCommon *app,
                                         std::shared_ptr<alarmClock::AlarmRRulePresenter> rRulePresenter,
                                         std::shared_ptr<AbstractAlarmsRepository> alarmsRepository,
                                         bool mode24H)
        : application(app), alarmsRepository{std::move(alarmsRepository)}, rRulePresenter(rRulePresenter),
          mode24H(mode24H)
                                         std::shared_ptr<AbstractAlarmsRepository> alarmsRepository)
        : application(app), alarmsRepository{std::move(alarmsRepository)}, rRulePresenter(rRulePresenter)
    {}

    unsigned int NewEditAlarmModel::requestRecordsCount()


@@ 49,7 47,6 @@ namespace app::alarmClock
        assert(app != nullptr);

        internalData.push_back(new gui::AlarmTimeItem(
            mode24H,
            [app](const UTF8 &text) { app->getCurrentWindow()->bottomBarTemporaryMode(text, false); },
            [app]() { app->getCurrentWindow()->bottomBarRestoreFromTemporaryMode(); }));


M module-apps/application-alarm-clock/models/NewEditAlarmModel.hpp => module-apps/application-alarm-clock/models/NewEditAlarmModel.hpp +1 -3
@@ 32,13 32,11 @@ namespace app::alarmClock
        std::shared_ptr<AbstractAlarmsRepository> alarmsRepository;
        std::shared_ptr<alarmClock::AlarmRRulePresenter> rRulePresenter;
        gui::AlarmInternalListItem *repeatOption = nullptr;
        bool mode24H = false;

      public:
        NewEditAlarmModel(app::ApplicationCommon *app,
                          std::shared_ptr<alarmClock::AlarmRRulePresenter> rRulePresenter,
                          std::shared_ptr<AbstractAlarmsRepository> alarmsRepository,
                          bool mode24H = false);
                          std::shared_ptr<AbstractAlarmsRepository> alarmsRepository);

        void loadData(std::shared_ptr<AlarmEventRecord> record) override;
        void saveData(std::shared_ptr<AlarmEventRecord> alarm, AlarmAction action) override;

M module-apps/application-alarm-clock/widgets/AlarmTimeItem.cpp => module-apps/application-alarm-clock/widgets/AlarmTimeItem.cpp +16 -9
@@ 12,10 12,9 @@ namespace gui
{
    namespace timeItem = style::alarmClock::window::item::time;

    AlarmTimeItem::AlarmTimeItem(bool mode24H,
                                 std::function<void(const UTF8 &text)> bottomBarTemporaryMode,
    AlarmTimeItem::AlarmTimeItem(std::function<void(const UTF8 &text)> bottomBarTemporaryMode,
                                 std::function<void()> bottomBarRestoreFromTemporaryMode)
        : mode24H{mode24H}, bottomBarTemporaryMode(std::move(bottomBarTemporaryMode)),
        : mode24H(!stm::api::isTimeFormat12h()), bottomBarTemporaryMode(std::move(bottomBarTemporaryMode)),
          bottomBarRestoreFromTemporaryMode(std::move(bottomBarRestoreFromTemporaryMode))
    {
        setMinimumSize(timeItem::width, timeItem::height);


@@ 113,13 112,22 @@ namespace gui
        };

        onSaveCallback = [&](std::shared_ptr<AlarmEventRecord> record) {
            using namespace utils::time;
            validateHour();
            auto hours   = std::chrono::hours(std::stoi(hourInput->getText().c_str()));
            auto minutes = std::chrono::minutes(std::stoi(minuteInput->getText().c_str()));
            if (!mode24H) {
                hours = date::make24(hours, isPm(mode12hInput->getText()));
            const auto now     = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
            const auto newTime = std::localtime(&now);

            if (mode24H) {
                newTime->tm_hour = utils::toNumeric(hourInput->getText());
            }
            else {
                newTime->tm_hour = date::make24(std::chrono::hours{utils::toNumeric(hourInput->getText())},
                                                isPm(mode12hInput->getText()))
                                       .count();
            }
            record->startDate = TimePointFromYearMonthDay(TimePointToYearMonthDay(TimePointNow())) + hours + minutes;
            newTime->tm_min = utils::toNumeric(minuteInput->getText());

            record->startDate = TimePointFloorMinutes(std::chrono::system_clock::from_time_t(std::mktime(newTime)));
            record->endDate   = record->startDate;
        };



@@ 224,5 232,4 @@ namespace gui
            minuteInput->setText("00");
        }
    }

} /* namespace gui */

M module-apps/application-alarm-clock/widgets/AlarmTimeItem.hpp => module-apps/application-alarm-clock/widgets/AlarmTimeItem.hpp +3 -4
@@ 1,4 1,4 @@
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 24,12 24,11 @@ namespace gui
        void applyInputCallbacks();
        void onInputCallback(gui::Text &textItem);
        void prepareForTimeMode();
        bool isPm(const std::string &text) const;
        [[nodiscard]] bool isPm(const std::string &text) const;
        void validateHour();

      public:
        AlarmTimeItem(bool mode24H,
                      std::function<void(const UTF8 &text)> bottomBarTemporaryMode = nullptr,
        AlarmTimeItem(std::function<void(const UTF8 &text)> bottomBarTemporaryMode = nullptr,
                      std::function<void()> bottomBarRestoreFromTemporaryMode      = nullptr);
    };


M module-utils/Utils.hpp => module-utils/Utils.hpp +11 -0
@@ 170,6 170,17 @@ namespace utils
        return true;
    }

    static inline int toNumeric(const std::string &text)
    {
        try {
            return std::stoi(text);
        }
        catch (const std::exception &e) {
            LOG_ERROR("toNumeric exception %s", e.what());
            return 0;
        }
    }

    static inline void findAndReplaceAll(std::string &data,
                                         const std::vector<std::pair<std::string, std::optional<std::string>>> &values,
                                         std::function<std::string(int)> getReplaceString = nullptr)