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)