Files
MuditaOS/module-apps/application-settings/windows/system/ChangeDateAndTimeWindow.cpp
Lefucjusz 321f56e774 [MOS-1032] Fix misleading 'Save' button behavior when setting time
Fix of the issue that pressing 'Save' when setting
time would set the time indeed, but the UI would
not return to previous window, what might look
as if saving failed.
2023-09-07 13:13:01 +02:00

72 lines
2.6 KiB
C++

// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include "ChangeDateAndTimeWindow.hpp"
#include <InputEvent.hpp>
#include <ListView.hpp>
#include <service-time/ServiceTimeName.hpp>
#include <service-time/service-time/TimeMessage.hpp>
#include <widgets/DateAndTimeStyle.hpp>
namespace gui
{
ChangeDateAndTimeWindow::ChangeDateAndTimeWindow(app::ApplicationCommon *app, std::string name)
: AppWindow(app, std::move(name)), dateAndTimeModel{std::make_shared<DateAndTimeModel>(this->application)}
{
buildInterface();
}
void ChangeDateAndTimeWindow::buildInterface()
{
AppWindow::buildInterface();
setTitle(utils::translate("app_settings_date_and_time"));
navBar->setActive(gui::nav_bar::Side::Right, true);
navBar->setActive(gui::nav_bar::Side::Center, true);
navBar->setText(gui::nav_bar::Side::Right, utils::translate(style::strings::common::back));
navBar->setText(gui::nav_bar::Side::Center, utils::translate(style::strings::common::save));
list = new gui::ListView(this,
style::window::date_and_time::listView_x,
style::window::date_and_time::listView_y,
style::window::date_and_time::listView_w,
style::window::date_and_time::listView_h,
dateAndTimeModel,
gui::listview::ScrollBarType::PreRendered);
setFocusItem(list);
fromTillDate = std::make_shared<utils::time::FromTillDate>();
fromTillDate->from = TimePointNow();
dateAndTimeModel->loadData(fromTillDate);
}
bool ChangeDateAndTimeWindow::onInput(const gui::InputEvent &inputEvent)
{
if (AppWindow::onInput(inputEvent)) {
return true;
}
if (inputEvent.isShortRelease(gui::KeyCode::KEY_ENTER)) {
dateAndTimeModel->saveData(fromTillDate);
sendRtcUpdateTimeMessage();
application->returnToPreviousWindow();
return true;
}
return false;
}
void ChangeDateAndTimeWindow::rebuild()
{
erase();
buildInterface();
}
void ChangeDateAndTimeWindow::sendRtcUpdateTimeMessage()
{
auto msg = std::make_shared<stm::message::TimeChangeRequestMessage>(TimePointToTimeT(fromTillDate->from));
application->bus.sendUnicast(std::move(msg), service::name::service_time);
}
} /* namespace gui */