M module-apps/CMakeLists.txt => module-apps/CMakeLists.txt +0 -3
@@ 15,9 15,6 @@ option(ENABLE_APP_ANTENNA "Enable application antenna" OFF)
set(APPLICATIONS
alarm-clock
antenna
- bell-alarm
- bell-main
- bell-settings
calculator
calendar
call
D module-apps/application-bell-main/models/TemperatureModel.cpp => module-apps/application-bell-main/models/TemperatureModel.cpp +0 -16
@@ 1,16 0,0 @@
-// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
-// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
-
-#include "TemperatureModel.hpp"
-
-namespace app::home_screen
-{
-
- home_screen::TemperatureModel::TemperatureModel(app::Application *)
- {}
- gui::temperature::Temperature TemperatureModel::getTemperature() const
- {
- // This is just a placeholder for missing functionality
- return {gui::temperature::Temperature::Unit::Celsius, 25};
- }
-} // namespace app::home_screen
M module-apps/application-bell-settings/models/TemperatureUnitModel.cpp => module-apps/application-bell-settings/models/TemperatureUnitModel.cpp +9 -5
@@ 19,16 19,20 @@ namespace app::bell_settings
settings.init(service::ServiceProxy{app->weak_from_this()});
}
- gui::temperature::Temperature::Unit TemperatureUnitModel::get() const
+ utils::temperature::Temperature::Unit TemperatureUnitModel::get() const
{
const auto value = settings.getValue(temperatureUnit, settings::SettingsScope::Global);
- return value == gui::temperature::celsiusSymbol ? gui::temperature::Temperature::Unit::Celsius
- : gui::temperature::Temperature::Unit::Fahrenheit;
+ if (auto unit = utils::temperature::strToUnit(value); unit) {
+ return *unit;
+ }
+ else {
+ return utils::temperature::Temperature::Unit::Celsius;
+ }
}
- void TemperatureUnitModel::set(gui::temperature::Temperature::Unit unit)
+ void TemperatureUnitModel::set(utils::temperature::Temperature::Unit unit)
{
- settings.setValue(gui::temperature::toStr(unit), temperatureUnit, settings::SettingsScope::Global);
+ settings.setValue(temperatureUnit, utils::temperature::unitToStr(unit), settings::SettingsScope::Global);
}
} // namespace app::bell_settings
M module-apps/application-bell-settings/models/TemperatureUnitModel.hpp => module-apps/application-bell-settings/models/TemperatureUnitModel.hpp +5 -5
@@ 3,7 3,7 @@
#pragma once
-#include <apps-common/Temperature.hpp>
+#include <module-utils/Temperature.hpp>
#include <service-db/Settings.hpp>
#include <memory>
@@ 20,9 20,9 @@ namespace app::bell_settings
public:
virtual ~AbstractTemperatureUnitModel() = default;
- virtual gui::temperature::Temperature::Unit get() const = 0;
+ virtual utils::temperature::Temperature::Unit get() const = 0;
- virtual void set(gui::temperature::Temperature::Unit unit) = 0;
+ virtual void set(utils::temperature::Temperature::Unit unit) = 0;
};
class TemperatureUnitModel : public AbstractTemperatureUnitModel
@@ 30,9 30,9 @@ namespace app::bell_settings
public:
explicit TemperatureUnitModel(Application *app);
- gui::temperature::Temperature::Unit get() const override;
+ utils::temperature::Temperature::Unit get() const override;
- void set(gui::temperature::Temperature::Unit unit) override;
+ void set(utils::temperature::Temperature::Unit unit) override;
private:
mutable settings::Settings settings;
M module-apps/application-bell-settings/models/TimeUnitsModel.cpp => module-apps/application-bell-settings/models/TimeUnitsModel.cpp +2 -2
@@ 119,8 119,8 @@ namespace app::bell_settings
application->bus.sendUnicast(std::move(msg), service::name::service_time);
}
- auto TimeUnitsModel::getTemperatureUnit() -> gui::temperature::Temperature::Unit
+ auto TimeUnitsModel::getTemperatureUnit() -> utils::temperature::Temperature::Unit
{
- return *gui::temperature::strToUnit(temperatureUnitListItem->getUnitAsStr());
+ return *utils::temperature::strToUnit(temperatureUnitListItem->getUnitAsStr());
}
} // namespace app::bell_settings
M module-apps/application-bell-settings/models/TimeUnitsModel.hpp => module-apps/application-bell-settings/models/TimeUnitsModel.hpp +2 -2
@@ 5,7 5,7 @@
#include <apps-common/Application.hpp>
#include <apps-common/InternalModel.hpp>
-#include <apps-common/Temperature.hpp>
+#include <module-utils/Temperature.hpp>
#include <time/time_locale.hpp>
namespace gui
@@ 42,7 42,7 @@ namespace app::bell_settings
[[nodiscard]] auto getMinimalItemSpaceRequired() const -> unsigned int override;
- [[nodiscard]] auto getTemperatureUnit() -> gui::temperature::Temperature::Unit;
+ [[nodiscard]] auto getTemperatureUnit() -> utils::temperature::Temperature::Unit;
private:
app::Application *application{};
M module-apps/application-bell-settings/presenter/TimeUnitsPresenter.hpp => module-apps/application-bell-settings/presenter/TimeUnitsPresenter.hpp +0 -1
@@ 6,7 6,6 @@
#include "TimeUnitsModel.hpp"
#include <apps-common/BasePresenter.hpp>
-#include <apps-common/Temperature.hpp>
namespace app::bell_settings
{
M module-apps/application-bell-settings/widgets/TemperatureUnitListItem.cpp => module-apps/application-bell-settings/widgets/TemperatureUnitListItem.cpp +4 -3
@@ 4,8 4,8 @@
#include "BellSettingsStyle.hpp"
#include "TemperatureUnitListItem.hpp"
-#include <apps-common/Temperature.hpp>
#include <gui/widgets/TextSpinner.hpp>
+#include <module-utils/Temperature.hpp>
namespace gui
{
@@ 16,8 16,9 @@ namespace gui
setEdges(RectangleEdge::None);
setFocusItem(body);
- temperatureUnit = new TextSpinner({temperature::celsiusDegreeSymbol, temperature::fahrenheitDegreeSymbol},
- Boundaries::Continuous);
+ temperatureUnit =
+ new TextSpinner({utils::temperature::celsiusDegreeSymbol, utils::temperature::fahrenheitDegreeSymbol},
+ Boundaries::Continuous);
temperatureUnit->setMaximumSize(style::bell_base_layout::w, style::bell_base_layout::h);
temperatureUnit->setFont(bell_settings_style::time_fmt_set_list_item::font);
temperatureUnit->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Center));
R module-apps/apps-common/Temperature.hpp => module-utils/Temperature.hpp +29 -9
@@ 4,10 4,11 @@
#pragma once
#include <cstdint>
+#include <iomanip>
#include <optional>
#include <string>
-namespace gui::temperature
+namespace utils::temperature
{
inline constexpr auto celsiusSymbol = "C";
inline constexpr auto fahrenheitSymbol = "F";
@@ 17,29 18,48 @@ namespace gui::temperature
struct Temperature
{
+ using Value = float;
enum class Unit
{
Celsius,
Fahrenheit
};
Unit unit;
- std::int32_t value;
+ Value value;
};
- inline std::string toStr(Temperature::Unit unit)
+ inline float celsiusToFahrenheit(float value)
+ {
+ return (value * 1.8) + 32;
+ }
+
+ inline std::string unitToStr(Temperature::Unit unit)
{
return unit == Temperature::Unit::Celsius ? celsiusSymbol : fahrenheitSymbol;
}
inline std::optional<Temperature::Unit> strToUnit(std::string_view str)
{
- if ((str == gui::temperature::celsiusDegreeSymbol) || (str == celsiusSymbol)) {
- return gui::temperature::Temperature::Unit::Celsius;
+ if ((str == celsiusDegreeSymbol) || (str == celsiusSymbol)) {
+ return Temperature::Unit::Celsius;
}
- else if ((str == gui::temperature::fahrenheitDegreeSymbol) || (str == fahrenheitSymbol)) {
- return gui::temperature::Temperature::Unit::Fahrenheit;
+ else if ((str == fahrenheitDegreeSymbol) || (str == fahrenheitSymbol)) {
+ return Temperature::Unit::Fahrenheit;
}
-
return {};
}
-} // namespace gui::temperature
+
+ inline std::string tempToStrFloat(Temperature temperature, const int precision = 1)
+ {
+ std::ostringstream stream;
+ stream << std::fixed << std::setprecision(precision);
+ stream << temperature.value << degree << utils::temperature::unitToStr(temperature.unit);
+ return stream.str();
+ }
+
+ inline std::string tempToStrDec(Temperature temperature)
+ {
+ return std::to_string(static_cast<std::int32_t>(temperature.value)) + degree +
+ utils::temperature::unitToStr(temperature.unit);
+ }
+} // namespace utils::temperature
M products/BellHybrid/CMakeLists.txt => products/BellHybrid/CMakeLists.txt +1 -0
@@ 89,3 89,4 @@ add_update_package(BellHybrid)
add_subdirectory(services)
add_subdirectory(alarms)
add_subdirectory(sys)
+add_subdirectory(apps)
A products/BellHybrid/apps/CMakeLists.txt => products/BellHybrid/apps/CMakeLists.txt +3 -0
@@ 0,0 1,3 @@
+add_subdirectory(application-bell-main)
+add_subdirectory(application-bell-alarm)
+add_subdirectory(application-bell-settings)
A products/BellHybrid/apps/application-bell-alarm/ApplicationBellAlarm.cpp => products/BellHybrid/apps/application-bell-alarm/ApplicationBellAlarm.cpp +45 -0
@@ 0,0 1,45 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include <application-bell-alarm/ApplicationBellAlarm.hpp>
+#include <application-bell-alarm/presenter/BellAlarmWindowPresenter.hpp>
+#include <application-bell-alarm/windows/BellAlarmWindow.hpp>
+
+namespace app
+{
+ ApplicationBellAlarm::ApplicationBellAlarm(std::string name,
+ std::string parent,
+ sys::phone_modes::PhoneMode mode,
+ StartInBackground startInBackground)
+ : Application(std::move(name), std::move(parent), mode, startInBackground)
+ {}
+
+ sys::ReturnCodes ApplicationBellAlarm::InitHandler()
+ {
+ auto ret = Application::InitHandler();
+ if (ret != sys::ReturnCodes::Success) {
+ return ret;
+ }
+
+ createUserInterface();
+
+ return sys::ReturnCodes::Success;
+ }
+
+ void ApplicationBellAlarm::createUserInterface()
+ {
+ windowsFactory.attach(gui::name::window::main_window, [](Application *app, const std::string &name) {
+ auto presenter = std::make_unique<bell_alarm::BellAlarmWindowPresenter>();
+ return std::make_unique<gui::BellAlarmWindow>(app, std::move(presenter));
+ });
+ }
+
+ sys::MessagePointer ApplicationBellAlarm::DataReceivedHandler(sys::DataMessage *msgl, sys::ResponseMessage *resp)
+ {
+ auto retMsg = Application::DataReceivedHandler(msgl);
+ if (dynamic_cast<sys::ResponseMessage *>(retMsg.get())->retCode == sys::ReturnCodes::Success) {
+ return retMsg;
+ }
+ return std::make_shared<sys::ResponseMessage>();
+ }
+} // namespace app
A products/BellHybrid/apps/application-bell-alarm/CMakeLists.txt => products/BellHybrid/apps/application-bell-alarm/CMakeLists.txt +27 -0
@@ 0,0 1,27 @@
+add_library(application-bell-alarm)
+
+target_sources(application-bell-alarm
+ PRIVATE
+ ApplicationBellAlarm.cpp
+ presenter/BellAlarmWindowPresenter.cpp
+ windows/BellAlarmWindow.cpp
+ PRIVATE
+ data/BellAlarmStyle.hpp
+ presenter/BellAlarmWindowPresenter.hpp
+ windows/BellAlarmWindow.hpp
+ PUBLIC
+ include/application-bell-alarm/ApplicationBellAlarm.hpp
+)
+
+target_include_directories(application-bell-alarm
+ PRIVATE
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+ PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+)
+
+target_link_libraries(application-bell-alarm
+ PRIVATE
+ apps-common
+ module-gui
+)
A products/BellHybrid/apps/application-bell-alarm/data/BellAlarmStyle.hpp => products/BellHybrid/apps/application-bell-alarm/data/BellAlarmStyle.hpp +15 -0
@@ 0,0 1,15 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#pragma once
+
+namespace gui
+{
+ namespace bell_alarm_style
+ {
+ namespace time_set_fmt_spinner
+ {
+ inline constexpr auto font = "gt_pressura_regular_90";
+ } // namespace time_set_fmt_spinner
+ } // namespace bell_alarm_style
+} // namespace gui
A products/BellHybrid/apps/application-bell-alarm/include/application-bell-alarm/ApplicationBellAlarm.hpp => products/BellHybrid/apps/application-bell-alarm/include/application-bell-alarm/ApplicationBellAlarm.hpp +46 -0
@@ 0,0 1,46 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#pragma once
+
+#include <apps-common/Application.hpp>
+
+namespace gui::window::name
+{
+ inline constexpr auto bellAlarm = "BellAlarm";
+} // namespace gui::window::name
+
+namespace app
+{
+ inline constexpr auto applicationBellAlarmName = "ApplicationBellAlarm";
+
+ class ApplicationBellAlarm : public Application
+ {
+ public:
+ explicit ApplicationBellAlarm(std::string name = applicationBellAlarmName,
+ std::string parent = "",
+ sys::phone_modes::PhoneMode mode = sys::phone_modes::PhoneMode::Offline,
+ StartInBackground startInBackground = {false});
+
+ sys::ReturnCodes InitHandler() override;
+
+ void createUserInterface() override;
+ void destroyUserInterface() override
+ {}
+
+ sys::MessagePointer DataReceivedHandler(sys::DataMessage *msgl, sys::ResponseMessage *resp) override;
+
+ sys::ReturnCodes SwitchPowerModeHandler(const sys::ServicePowerMode mode) override final
+ {
+ return sys::ReturnCodes::Success;
+ }
+ };
+
+ template <> struct ManifestTraits<ApplicationBellAlarm>
+ {
+ static auto GetManifest() -> manager::ApplicationManifest
+ {
+ return {{manager::actions::Launch}};
+ }
+ };
+} // namespace app
A products/BellHybrid/apps/application-bell-alarm/presenter/BellAlarmWindowPresenter.cpp => products/BellHybrid/apps/application-bell-alarm/presenter/BellAlarmWindowPresenter.cpp +12 -0
@@ 0,0 1,12 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include "BellAlarmWindowPresenter.hpp"
+
+namespace app::bell_alarm
+{
+ auto BellAlarmWindowPresenter::saveData() -> void
+ {
+ // TODO
+ }
+} // namespace app::bell_alarm
A products/BellHybrid/apps/application-bell-alarm/presenter/BellAlarmWindowPresenter.hpp => products/BellHybrid/apps/application-bell-alarm/presenter/BellAlarmWindowPresenter.hpp +33 -0
@@ 0,0 1,33 @@
+
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#pragma once
+
+#include <apps-common/BasePresenter.hpp>
+
+namespace app::bell_alarm
+{
+ class BellAlarmWindowContract
+ {
+ public:
+ class View
+ {
+ public:
+ virtual ~View() noexcept = default;
+ };
+
+ class Presenter : public BasePresenter<BellAlarmWindowContract::View>
+ {
+ public:
+ virtual ~Presenter() noexcept = default;
+ virtual auto saveData() -> void = 0;
+ };
+ };
+
+ class BellAlarmWindowPresenter : public BellAlarmWindowContract::Presenter
+ {
+ public:
+ auto saveData() -> void override;
+ };
+} // namespace app::bell_alarm
A products/BellHybrid/apps/application-bell-alarm/windows/BellAlarmWindow.cpp => products/BellHybrid/apps/application-bell-alarm/windows/BellAlarmWindow.cpp +56 -0
@@ 0,0 1,56 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include "BellAlarmWindow.hpp"
+
+#include <apps-common/widgets/BellBaseLayout.hpp>
+#include <apps-common/widgets/TimeSetFmtSpinner.hpp>
+#include <data/BellAlarmStyle.hpp>
+#include <module-gui/gui/input/InputEvent.hpp>
+
+namespace gui
+{
+ BellAlarmWindow::BellAlarmWindow(
+ app::Application *app,
+ std::unique_ptr<app::bell_alarm::BellAlarmWindowContract::Presenter> &&windowPresenter,
+ std::string name)
+ : AppWindow(app, std::move(name)), presenter{std::move(windowPresenter)}
+ {
+ presenter->attach(this);
+ buildInterface();
+ }
+
+ void BellAlarmWindow::buildInterface()
+ {
+ AppWindow::buildInterface();
+
+ statusBar->setVisible(false);
+ header->setTitleVisibility(true);
+ bottomBar->setVisible(false);
+
+ body = new BellBaseLayout(this, 0, 0, style::window_width, style::window_height);
+ timeSetFmtSpinner = new TimeSetFmtSpinner(body->centerBox);
+ timeSetFmtSpinner->setFont(bell_alarm_style::time_set_fmt_spinner::font);
+
+ setFocusItem(body);
+ }
+
+ bool BellAlarmWindow::onInput(const InputEvent &inputEvent)
+ {
+ if (body->onInput(inputEvent)) {
+ return true;
+ }
+ if (inputEvent.isShortRelease(KeyCode::KEY_ENTER)) {
+ presenter->saveData();
+ application->returnToPreviousWindow();
+ return true;
+ }
+ return AppWindow::onInput(inputEvent);
+ }
+
+ void BellAlarmWindow::rebuild()
+ {
+ erase();
+ buildInterface();
+ }
+} /* namespace gui */
A products/BellHybrid/apps/application-bell-alarm/windows/BellAlarmWindow.hpp => products/BellHybrid/apps/application-bell-alarm/windows/BellAlarmWindow.hpp +31 -0
@@ 0,0 1,31 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#pragma once
+
+#include <application-bell-alarm/ApplicationBellAlarm.hpp>
+#include <application-bell-alarm/presenter/BellAlarmWindowPresenter.hpp>
+
+#include <apps-common/windows/AppWindow.hpp>
+
+namespace gui
+{
+ class BellBaseLayout;
+ class TimeSetFmtSpinner;
+ class BellAlarmWindow : public AppWindow, public app::bell_alarm::BellAlarmWindowContract::View
+ {
+ public:
+ explicit BellAlarmWindow(app::Application *app,
+ std::unique_ptr<app::bell_alarm::BellAlarmWindowContract::Presenter> &&windowPresenter,
+ std::string name = window::name::bellAlarm);
+
+ void buildInterface() override;
+ bool onInput(const InputEvent &inputEvent) override;
+ void rebuild() override;
+
+ private:
+ BellBaseLayout *body{nullptr};
+ TimeSetFmtSpinner *timeSetFmtSpinner{nullptr};
+ std::unique_ptr<app::bell_alarm::BellAlarmWindowContract::Presenter> presenter;
+ };
+} /* namespace gui */
R module-apps/application-bell-main/ApplicationBellMain.cpp => products/BellHybrid/apps/application-bell-main/ApplicationBellMain.cpp +0 -0
R module-apps/application-bell-main/CMakeLists.txt => products/BellHybrid/apps/application-bell-main/CMakeLists.txt +1 -0
@@ 43,5 43,6 @@ target_link_libraries(application-bell-main
module-gui
service-gui
time
+ bell::evtmgr
${TARGET_LIBRARIES}
)
R module-apps/application-bell-main/data/BellMainStyle.hpp => products/BellHybrid/apps/application-bell-main/data/BellMainStyle.hpp +12 -6
@@ 9,20 9,26 @@ namespace bellMainStyle
{
namespace mainWindow
{
- namespace timeLabel
+ namespace time
{
- inline constexpr auto font = "gt_pressura_light_90";
- } // namespace timeLabel
+ inline constexpr auto font = style::window::font::huge;
+ inline constexpr auto width = 504U;
+ inline constexpr auto height = 198U;
+ } // namespace time
namespace alarmSetSpinner
{
- inline constexpr auto font = style::window::font::largelight;
+ inline constexpr auto font = style::window::font::largelight;
+ inline constexpr auto width = 380U;
+ inline constexpr auto height = 102U;
} // namespace alarmSetSpinner
- namespace temperatureLabel
+ namespace bottomDescription
{
inline constexpr auto font = style::window::font::largelight;
- } // namespace temperatureLabel
+ inline constexpr auto width = 380U;
+ inline constexpr auto height = 102U;
+ } // namespace bottomDescription
} // namespace mainWindow
namespace mainMenuWindow
R module-apps/application-bell-main/include/application-bell-main/ApplicationBellMain.hpp => products/BellHybrid/apps/application-bell-main/include/application-bell-main/ApplicationBellMain.hpp +0 -0
R module-apps/application-bell-main/models/AlarmModel.cpp => products/BellHybrid/apps/application-bell-main/models/AlarmModel.cpp +0 -0
R module-apps/application-bell-main/models/AlarmModel.hpp => products/BellHybrid/apps/application-bell-main/models/AlarmModel.hpp +0 -0
A products/BellHybrid/apps/application-bell-main/models/TemperatureModel.cpp => products/BellHybrid/apps/application-bell-main/models/TemperatureModel.cpp +28 -0
@@ 0,0 1,28 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include "TemperatureModel.hpp"
+
+#include <apps-common/Application.hpp>
+#include <service-db/Settings.hpp>
+#include <service-db/agents/settings/SystemSettings.hpp>
+#include <evtmgr/api/TemperatureApi.hpp>
+
+namespace app::home_screen
+{
+ TemperatureModel::TemperatureModel(app::Application *app)
+ {
+ settings.init(service::ServiceProxy{app->weak_from_this()});
+ }
+ utils::temperature::Temperature TemperatureModel::getTemperature() const
+ {
+ const auto unitStr = settings.getValue(settings::Temperature::unit, settings::SettingsScope::Global);
+ const auto unit = *utils::temperature::strToUnit(unitStr);
+ auto temperature = evtmgr::api::getCurrentTemperature();
+
+ if (unit == utils::temperature::Temperature::Unit::Fahrenheit) {
+ temperature = utils::temperature::celsiusToFahrenheit(temperature);
+ }
+ return {unit, temperature};
+ }
+} // namespace app::home_screen
R module-apps/application-bell-main/models/TemperatureModel.hpp => products/BellHybrid/apps/application-bell-main/models/TemperatureModel.hpp +7 -5
@@ 3,7 3,8 @@
#pragma once
-#include <apps-common/Temperature.hpp>
+#include <module-utils/Temperature.hpp>
+#include <service-db/Settings.hpp>
#include <cstdint>
#include <functional>
@@ 19,17 20,18 @@ namespace app::home_screen
class AbstractTemperatureModel
{
public:
- std::function<void(gui::temperature::Temperature)> onTemperatureUpdate;
-
virtual ~AbstractTemperatureModel() noexcept = default;
- virtual gui::temperature::Temperature getTemperature() const = 0;
+ virtual utils::temperature::Temperature getTemperature() const = 0;
};
class TemperatureModel : public AbstractTemperatureModel
{
public:
explicit TemperatureModel(app::Application *app);
- gui::temperature::Temperature getTemperature() const override;
+ utils::temperature::Temperature getTemperature() const override;
+
+ private:
+ mutable settings::Settings settings;
};
} // namespace app::home_screen
R module-apps/application-bell-main/models/TimeModel.cpp => products/BellHybrid/apps/application-bell-main/models/TimeModel.cpp +0 -0
R module-apps/application-bell-main/models/TimeModel.hpp => products/BellHybrid/apps/application-bell-main/models/TimeModel.hpp +0 -0
R module-apps/application-bell-main/presenters/HomeScreenPresenter.cpp => products/BellHybrid/apps/application-bell-main/presenters/HomeScreenPresenter.cpp +2 -0
@@ 31,6 31,7 @@ namespace app::home_screen
void HomeScreenPresenter::handleUpdateTimeEvent()
{
getView()->setTime(timeModel->getCurrentTime());
+ stateController->handleTimeUpdateEvent();
}
bool HomeScreenPresenter::handleInputEvent(const gui::InputEvent &inputEvent)
{
@@ 61,6 62,7 @@ namespace app::home_screen
getView()->setTimeFormat(timeModel->getTimeFormat());
getView()->setTime(timeModel->getCurrentTime());
getView()->setAlarmTimeFormat(timeModel->getTimeFormat());
+ getView()->setTemperature(temperatureModel->getTemperature());
}
void HomeScreenPresenter::setDefaultAlarmTime()
{
R module-apps/application-bell-main/presenters/HomeScreenPresenter.hpp => products/BellHybrid/apps/application-bell-main/presenters/HomeScreenPresenter.hpp +3 -3
@@ 6,9 6,9 @@
#include "models/TemperatureModel.hpp"
#include <apps-common/BasePresenter.hpp>
-#include <apps-common/Temperature.hpp>
#include <gui/input/InputEvent.hpp>
#include <module-sys/Timers/TimerHandle.hpp>
+#include <module-utils/Temperature.hpp>
#include <time/time_locale.hpp>
#include <utf8/UTF8.hpp>
@@ 50,8 50,8 @@ namespace app::home_screen
virtual void setTimeFormat(utils::time::Locale::TimeFormat fmt) = 0;
/// Bottom box related API(description or time)
- virtual void setTemperature(gui::temperature::Temperature newTemp) = 0;
- virtual void setBottomDescription(const UTF8 &desc) = 0;
+ virtual void setTemperature(utils::temperature::Temperature newTemp) = 0;
+ virtual void setBottomDescription(const UTF8 &desc) = 0;
/// Various
virtual void switchToMenu() = 0;
R module-apps/application-bell-main/presenters/KeyMap.hpp => products/BellHybrid/apps/application-bell-main/presenters/KeyMap.hpp +0 -0
R module-apps/application-bell-main/presenters/StateController.cpp => products/BellHybrid/apps/application-bell-main/presenters/StateController.cpp +14 -1
@@ 23,6 23,9 @@ namespace app::home_screen
auto switchToMenu = [](AbstractView &view) { view.switchToMenu(); };
auto makeAlarmEditable = [](AbstractView &view) { view.setAlarmEdit(true); };
auto makeAlarmNonEditable = [](AbstractView &view) { view.setAlarmEdit(false); };
+ auto updateTemperature = [](AbstractView &view, AbstractTemperatureModel &temperatureModel) {
+ view.setTemperature(temperatureModel.getTemperature());
+ };
auto calculateTimeDifference = [](AbstractView &view, AbstractTimeModel &timeModel) {
const auto now = timeModel.getCurrentTime();
@@ 51,9 54,10 @@ namespace app::home_screen
{};
struct AlarmInput
{};
-
struct Timer
{};
+ struct TimeUpdate
+ {};
} // namespace Events
namespace Deactivated
@@ 130,9 134,11 @@ namespace app::home_screen
return make_transition_table(*"Deactivated"_s + event<Events::LightPress>/ Helpers::switchToMenu = "Deactivated"_s,
"Deactivated"_s + sml::on_entry<_> / Deactivated::entry,
"Deactivated"_s + event<Events::RotateRightPress> / Helpers::makeAlarmEditable = "DeactivatedEdit"_s,
+ "Deactivated"_s + event<Events::TimeUpdate> / Helpers::updateTemperature,
"DeactivatedEdit"_s + sml::on_entry<_> / AlarmEdit::entry,
"DeactivatedEdit"_s + sml::on_exit<_> / AlarmEdit::exit,
+ "DeactivatedEdit"_s + event<Events::TimeUpdate> / Helpers::updateTemperature,
"DeactivatedEdit"_s + event<Events::RotateLeftPress> / AlarmEdit::processRotateLeft,
"DeactivatedEdit"_s + event<Events::RotateRightPress> / AlarmEdit::processRotateRight,
"DeactivatedEdit"_s + event<Events::DeepUpPress> / Helpers::detachTimer = "ActivatedWait"_s,
@@ 151,9 157,11 @@ namespace app::home_screen
"Activated"_s + sml::on_entry<_> / Activated::entry,
"Activated"_s + event<Events::LightPress>/ Helpers::switchToMenu = "Activated"_s,
"Activated"_s + event<Events::RotateRightPress> / Helpers::makeAlarmEditable = "ActivatedEdit"_s,
+ "Activated"_s + event<Events::TimeUpdate> / Helpers::updateTemperature,
"ActivatedEdit"_s + sml::on_entry<_> / AlarmEdit::entry,
"ActivatedEdit"_s + sml::on_exit<_> / AlarmEdit::exit,
+ "ActivatedEdit"_s + event<Events::TimeUpdate> / Helpers::updateTemperature,
"ActivatedEdit"_s + event<Events::RotateLeftPress> / AlarmEdit::processRotateLeft,
"ActivatedEdit"_s + event<Events::RotateRightPress> / AlarmEdit::processRotateRight,
"ActivatedEdit"_s + event<Events::Timer> = "ActivatedWait"_s,
@@ 219,4 227,9 @@ namespace app::home_screen
presenter.refreshWindow();
return true;
}
+ bool StateController::handleTimeUpdateEvent()
+ {
+ pimpl->sm.process_event(Events::TimeUpdate{});
+ return true;
+ }
} // namespace app::home_screen
R module-apps/application-bell-main/presenters/StateController.hpp => products/BellHybrid/apps/application-bell-main/presenters/StateController.hpp +2 -0
@@ 20,6 20,7 @@ namespace app::home_screen
virtual bool handleInputEvent(const gui::InputEvent &inputEvent) = 0;
virtual bool handleTimerEvent() = 0;
+ virtual bool handleTimeUpdateEvent() = 0;
};
class StateController : public AbstractController
@@ 33,6 34,7 @@ namespace app::home_screen
~StateController();
bool handleInputEvent(const gui::InputEvent &inputEvent) override;
bool handleTimerEvent() override;
+ bool handleTimeUpdateEvent() override;
private:
class Impl;
R module-apps/application-bell-main/windows/BellHomeScreenWindow.cpp => products/BellHybrid/apps/application-bell-main/windows/BellHomeScreenWindow.cpp +10 -9
@@ 8,6 8,7 @@
#include <apps-common/widgets/BellBaseLayout.hpp>
#include <gui/input/InputEvent.hpp>
#include <gui/widgets/TextFixedSize.hpp>
+#include <gui/widgets/Style.hpp>
#include <i18n/i18n.hpp>
#include <service-time/api/TimeSettingsApi.hpp>
#include <time/time_constants.hpp>
@@ 76,7 77,7 @@ namespace gui
void BellHomeScreenWindow::buildInterface()
{
- using namespace bellMainStyle::mainWindow;
+ using namespace bellMainStyle;
AppWindow::buildInterface();
statusBar->setVisible(false);
@@ 86,21 87,22 @@ namespace gui
body = new BellBaseLayout(this, 0, 0, style::window_width, style::window_height);
alarm = new AlarmSetSpinner(body->firstBox);
- alarm->setMinimumSize(style::bell_base_layout::w, style::bell_base_layout::outer_layouts_h);
- alarm->setFont(alarmSetSpinner::font);
+ alarm->setMinimumSize(mainWindow::alarmSetSpinner::width, mainWindow::alarmSetSpinner::height);
+ alarm->setFont(mainWindow::alarmSetSpinner::font);
alarm->setEditMode(EditMode::Browse);
alarm->setAlarmStatus(AlarmSetSpinner::Status::DEACTIVATED);
alarm->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Center));
time = new TimeSetFmtSpinner(body->centerBox);
- time->setMaximumSize(style::bell_base_layout::w, style::bell_base_layout::h);
+ time->setMaximumSize(mainWindow::time::width, mainWindow::time::height);
time->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Center));
time->setEditMode(EditMode::Browse);
+ time->setFont(mainWindow::time::font);
time->activeItem = false;
bottomText = new TextFixedSize(body->lastBox, 0, 0, 0, 0);
- bottomText->setMinimumSize(style::bell_base_layout::w, style::bell_base_layout::outer_layouts_h);
- bottomText->setFont(temperatureLabel::font);
+ bottomText->setMinimumSize(mainWindow::bottomDescription::width, mainWindow::bottomDescription::height);
+ bottomText->setFont(mainWindow::bottomDescription::font);
bottomText->setEdges(RectangleEdge::None);
bottomText->activeItem = false;
bottomText->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Center));
@@ 126,10 128,9 @@ namespace gui
}
}
- void BellHomeScreenWindow::setTemperature(gui::temperature::Temperature newTemp)
+ void BellHomeScreenWindow::setTemperature(utils::temperature::Temperature newTemp)
{
- constexpr auto degreeSign{gui::temperature::degree};
- bottomText->setText(std::to_string(newTemp.value) + degreeSign + gui::temperature::toStr(newTemp.unit));
+ bottomText->setText(utils::temperature::tempToStrDec(newTemp));
}
void BellHomeScreenWindow::setBottomDescription(const UTF8 &desc)
{
R module-apps/application-bell-main/windows/BellHomeScreenWindow.hpp => products/BellHybrid/apps/application-bell-main/windows/BellHomeScreenWindow.hpp +1 -1
@@ 35,7 35,7 @@ namespace gui
void incAlarmMinute() override;
void decAlarmMinute() override;
- void setTemperature(gui::temperature::Temperature newTemp) override;
+ void setTemperature(utils::temperature::Temperature newTemp) override;
void setBottomDescription(const UTF8 &desc) override;
void setTime(std::time_t newTime) override;
void setTimeFormat(utils::time::Locale::TimeFormat fmt) override;
R module-apps/application-bell-main/windows/BellMainMenuWindow.cpp => products/BellHybrid/apps/application-bell-main/windows/BellMainMenuWindow.cpp +0 -0
R module-apps/application-bell-main/windows/BellMainMenuWindow.hpp => products/BellHybrid/apps/application-bell-main/windows/BellMainMenuWindow.hpp +0 -0
R module-apps/application-bell-main/windows/BellMainSetHour.cpp => products/BellHybrid/apps/application-bell-main/windows/BellMainSetHour.cpp +0 -0
R module-apps/application-bell-main/windows/BellMainSetHour.hpp => products/BellHybrid/apps/application-bell-main/windows/BellMainSetHour.hpp +0 -0
A products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp => products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp +64 -0
@@ 0,0 1,64 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include "ApplicationBellSettings.hpp"
+#include "TimeUnitsPresenter.hpp"
+#include "models/TemperatureUnitModel.hpp"
+#include "windows/BellSettingsAdvancedWindow.hpp"
+#include "windows/BellSettingsFinishedWindow.hpp"
+#include "windows/BellSettingsTimeUnitsWindow.hpp"
+#include "windows/BellSettingsWindow.hpp"
+
+#include <apps-common/windows/Dialog.hpp>
+
+namespace app
+{
+ ApplicationBellSettings::ApplicationBellSettings(std::string name,
+ std::string parent,
+ sys::phone_modes::PhoneMode mode,
+ StartInBackground startInBackground)
+ : Application(std::move(name), std::move(parent), mode, startInBackground)
+ {}
+
+ sys::ReturnCodes ApplicationBellSettings::InitHandler()
+ {
+ auto ret = Application::InitHandler();
+ if (ret != sys::ReturnCodes::Success) {
+ return ret;
+ }
+ createUserInterface();
+ return sys::ReturnCodes::Success;
+ }
+
+ void ApplicationBellSettings::createUserInterface()
+ {
+ windowsFactory.attach(gui::name::window::main_window, [](Application *app, const std::string &name) {
+ return std::make_unique<gui::BellSettingsWindow>(app);
+ });
+
+ windowsFactory.attach(gui::window::name::bellSettingsAdvanced, [](Application *app, const std::string &name) {
+ return std::make_unique<gui::BellSettingsAdvancedWindow>(app);
+ });
+
+ windowsFactory.attach(gui::window::name::bellSettingsTimeUnits, [](Application *app, const std::string &name) {
+ auto temperatureUnitModel = std::make_unique<bell_settings::TemperatureUnitModel>(app);
+ auto timeUnitsProvider = std::make_shared<bell_settings::TimeUnitsModel>(app);
+ auto presenter = std::make_unique<bell_settings::TimeUnitsWindowPresenter>(timeUnitsProvider,
+ std::move(temperatureUnitModel));
+ return std::make_unique<gui::BellSettingsTimeUnitsWindow>(app, std::move(presenter));
+ });
+
+ windowsFactory.attach(gui::window::name::bellSettingsFinished, [](Application *app, const std::string &name) {
+ return std::make_unique<gui::BellSettingsFinishedWindow>(app);
+ });
+ }
+
+ sys::MessagePointer ApplicationBellSettings::DataReceivedHandler(sys::DataMessage *msgl, sys::ResponseMessage *resp)
+ {
+ auto retMsg = Application::DataReceivedHandler(msgl);
+ if (dynamic_cast<sys::ResponseMessage *>(retMsg.get())->retCode == sys::ReturnCodes::Success) {
+ return retMsg;
+ }
+ return std::make_shared<sys::ResponseMessage>();
+ }
+} // namespace app
A products/BellHybrid/apps/application-bell-settings/CMakeLists.txt => products/BellHybrid/apps/application-bell-settings/CMakeLists.txt +59 -0
@@ 0,0 1,59 @@
+# Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+# For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+add_library(application-bell-settings STATIC)
+
+target_include_directories(application-bell-settings
+ PRIVATE
+ $<BUILD_INTERFACE:
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ data
+ include/application-bell-settings
+ models
+ presenter
+ widgets
+ windows
+ >
+ PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+)
+
+target_sources(application-bell-settings
+ PRIVATE
+ ApplicationBellSettings.cpp
+ models/TimeUnitsModel.cpp
+ models/TemperatureUnitModel.cpp
+ presenter/TimeUnitsPresenter.cpp
+ widgets/TimeSetListItem.cpp
+ widgets/TimeFormatSetListItem.cpp
+ widgets/TemperatureUnitListItem.cpp
+ windows/BellSettingsWindow.cpp
+ windows/BellSettingsAdvancedWindow.cpp
+ windows/BellSettingsTimeUnitsWindow.cpp
+ windows/BellSettingsFinishedWindow.cpp
+
+ models/TimeUnitsModel.hpp
+ models/TemperatureUnitModel.hpp
+ presenter/TimeUnitsPresenter.hpp
+ widgets/TimeSetListItem.hpp
+ widgets/TimeFormatSetListItem.hpp
+ widgets/TemperatureUnitListItem.hpp
+ windows/BellSettingsWindow.hpp
+ windows/BellSettingsAdvancedWindow.hpp
+ windows/BellSettingsTimeUnitsWindow.hpp
+
+ PRIVATE
+ windows/BellSettingsFinishedWindow.hpp
+
+ PUBLIC
+ include/application-bell-settings/ApplicationBellSettings.hpp
+)
+
+target_link_libraries(application-bell-settings
+ PRIVATE
+ bellgui
+ service-appmgr
+ PUBLIC
+ apps-common
+ module-gui
+)
A products/BellHybrid/apps/application-bell-settings/data/BellSettingsStyle.hpp => products/BellHybrid/apps/application-bell-settings/data/BellSettingsStyle.hpp +25 -0
@@ 0,0 1,25 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#pragma once
+
+#include <gui/Common.hpp>
+#include <Style.hpp>
+
+namespace gui
+{
+ namespace bell_settings_style
+ {
+ namespace settings_window
+ {
+ inline constexpr auto options_list_margin_x = 40;
+ inline constexpr auto options_list_margin_y = 85;
+ inline constexpr auto default_body_width = 400;
+ } // namespace settings_window
+
+ namespace time_fmt_set_list_item
+ {
+ inline constexpr auto font = style::window::font::supersizemelight;
+ } // namespace time_fmt_set_list_item
+ } // namespace bell_settings_style
+} // namespace gui
A products/BellHybrid/apps/application-bell-settings/include/application-bell-settings/ApplicationBellSettings.hpp => products/BellHybrid/apps/application-bell-settings/include/application-bell-settings/ApplicationBellSettings.hpp +51 -0
@@ 0,0 1,51 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#pragma once
+
+#include <apps-common/Application.hpp>
+
+namespace gui::window::name
+{
+ inline constexpr auto bellSettings = "BellSettings";
+ inline constexpr auto bellSettingsAdvanced = "BellSettingsAdvanced";
+ inline constexpr auto bellSettingsTimeUnits = "BellSettingsTimeUnits";
+ inline constexpr auto bellSettingsDialog = "BellSettingsDialog";
+ inline constexpr auto bellSettingsFinished = "BellSettingsFinished";
+
+} // namespace gui::window::name
+
+namespace app
+{
+ inline constexpr auto applicationBellSettingsName = "ApplicationBellSettings";
+
+ class ApplicationBellSettings : public Application
+ {
+ public:
+ ApplicationBellSettings(std::string name = applicationBellSettingsName,
+ std::string parent = "",
+ sys::phone_modes::PhoneMode mode = sys::phone_modes::PhoneMode::Offline,
+ StartInBackground startInBackground = {false});
+
+ sys::ReturnCodes InitHandler() override;
+
+ void createUserInterface() override;
+ void destroyUserInterface() override
+ {}
+
+ sys::MessagePointer DataReceivedHandler(sys::DataMessage *msgl, sys::ResponseMessage *resp) override;
+
+ sys::ReturnCodes SwitchPowerModeHandler(const sys::ServicePowerMode mode) override final
+ {
+ return sys::ReturnCodes::Success;
+ }
+ };
+
+ template <> struct ManifestTraits<ApplicationBellSettings>
+ {
+ static auto GetManifest() -> manager::ApplicationManifest
+ {
+ return {{manager::actions::Launch}};
+ }
+ };
+} // namespace app
A products/BellHybrid/apps/application-bell-settings/models/TemperatureUnitModel.cpp => products/BellHybrid/apps/application-bell-settings/models/TemperatureUnitModel.cpp +38 -0
@@ 0,0 1,38 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include "TemperatureUnitModel.hpp"
+
+#include <apps-common/Application.hpp>
+#include <service-db/Settings.hpp>
+#include <service-db/agents/settings/SystemSettings.hpp>
+
+namespace
+{
+ constexpr auto temperatureUnit = settings::Temperature::unit;
+} // namespace
+
+namespace app::bell_settings
+{
+ TemperatureUnitModel::TemperatureUnitModel(app::Application *app)
+ {
+ settings.init(service::ServiceProxy{app->weak_from_this()});
+ }
+
+ utils::temperature::Temperature::Unit TemperatureUnitModel::get() const
+ {
+ const auto value = settings.getValue(temperatureUnit, settings::SettingsScope::Global);
+ if (auto unit = utils::temperature::strToUnit(value); unit) {
+ return *unit;
+ }
+ else {
+ return utils::temperature::Temperature::Unit::Celsius;
+ }
+ }
+
+ void TemperatureUnitModel::set(utils::temperature::Temperature::Unit unit)
+ {
+ settings.setValue(temperatureUnit, utils::temperature::unitToStr(unit), settings::SettingsScope::Global);
+ }
+
+} // namespace app::bell_settings
A products/BellHybrid/apps/application-bell-settings/models/TemperatureUnitModel.hpp => products/BellHybrid/apps/application-bell-settings/models/TemperatureUnitModel.hpp +40 -0
@@ 0,0 1,40 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#pragma once
+
+#include <module-utils/Temperature.hpp>
+#include <service-db/Settings.hpp>
+
+#include <memory>
+
+namespace app
+{
+ class Application;
+}
+
+namespace app::bell_settings
+{
+ class AbstractTemperatureUnitModel
+ {
+ public:
+ virtual ~AbstractTemperatureUnitModel() = default;
+
+ virtual utils::temperature::Temperature::Unit get() const = 0;
+
+ virtual void set(utils::temperature::Temperature::Unit unit) = 0;
+ };
+
+ class TemperatureUnitModel : public AbstractTemperatureUnitModel
+ {
+ public:
+ explicit TemperatureUnitModel(Application *app);
+
+ utils::temperature::Temperature::Unit get() const override;
+
+ void set(utils::temperature::Temperature::Unit unit) override;
+
+ private:
+ mutable settings::Settings settings;
+ };
+} // namespace app::bell_settings
A products/BellHybrid/apps/application-bell-settings/models/TimeUnitsModel.cpp => products/BellHybrid/apps/application-bell-settings/models/TimeUnitsModel.cpp +126 -0
@@ 0,0 1,126 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include "TimeUnitsModel.hpp"
+#include "widgets/TimeFormatSetListItem.hpp"
+#include "widgets/TimeSetListItem.hpp"
+#include "widgets/TemperatureUnitListItem.hpp"
+
+#include <gui/widgets/ListViewEngine.hpp>
+#include <gui/widgets/Style.hpp>
+#include <gui/widgets/Text.hpp>
+#include <service-time/Constants.hpp>
+#include <service-time/api/TimeSettingsApi.hpp>
+#include <service-time/service-time/TimeMessage.hpp>
+#include <widgets/TimeSetFmtSpinner.hpp>
+
+#include <ctime>
+
+namespace app::bell_settings
+{
+ TimeUnitsModel::TimeUnitsModel(app::Application *app) : application(app)
+ {}
+
+ TimeUnitsModel::~TimeUnitsModel()
+ {
+ clearData();
+ }
+
+ auto TimeUnitsModel::requestRecordsCount() -> unsigned int
+ {
+ return internalData.size();
+ }
+
+ auto TimeUnitsModel::getMinimalItemSpaceRequired() const -> unsigned int
+ {
+ return style::sidelistview::list_item::w;
+ }
+
+ auto TimeUnitsModel::getItem(gui::Order order) -> gui::ListItem *
+ {
+ return getRecord(order);
+ }
+
+ void TimeUnitsModel::createData()
+ {
+
+ timeFmtSetListItem =
+ new gui::TimeFormatSetListItem(0,
+ 0,
+ 0,
+ 0,
+ utils::translate("app_bell_settings_time_units_time_fmt_top_message"),
+ utils::translate("app_bell_settings_time_units_time_fmt_bottom_message"));
+ internalData.push_back(timeFmtSetListItem);
+
+ timeSetListItem =
+ new gui::TimeSetListItem(0U, 0U, 0, 0, utils::translate("app_bell_settings_time_units_time_message"));
+ internalData.push_back(timeSetListItem);
+
+ timeFmtSetListItem->onNextCallback = [this](gui::Item &) {
+ timeSetListItem->timeSetFmtSpinner->setTimeFormat(timeFmtSetListItem->getTimeFmt());
+ };
+
+ temperatureUnitListItem =
+ new gui::TemperatureUnitListItem(utils::translate("app_bell_settings_advanced_temp_scale"));
+ internalData.push_back(temperatureUnitListItem);
+
+ for (auto item : internalData) {
+ item->deleteByList = false;
+ }
+ }
+
+ void TimeUnitsModel::clearData()
+ {
+ eraseInternalData();
+ }
+
+ void TimeUnitsModel::saveData()
+ {
+ const auto now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
+ const auto newTime = std::localtime(&now);
+ newTime->tm_hour = timeSetListItem->timeSetFmtSpinner->getHour();
+ newTime->tm_min = timeSetListItem->timeSetFmtSpinner->getMinute();
+ const auto newFmt = timeFmtSetListItem->getTimeFmt();
+ LOG_INFO("Setting new time: %d:%d fmt: %s",
+ newTime->tm_hour,
+ newTime->tm_min,
+ utils::time::Locale::format(newFmt).c_str());
+ sendRtcUpdateTimeMessage(std::mktime(newTime));
+ sendTimeFmtUpdateMessage(newFmt);
+ }
+
+ void TimeUnitsModel::loadData()
+ {
+ const auto now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
+ const auto time = std::localtime(&now);
+ const auto timeFormat = stm::api::timeFormat();
+ timeSetListItem->timeSetFmtSpinner->setHour(time->tm_hour);
+ timeSetListItem->timeSetFmtSpinner->setMinute(time->tm_min);
+ timeSetListItem->timeSetFmtSpinner->setTimeFormat(timeFormat);
+ timeFmtSetListItem->setTimeFmt(timeFormat);
+ }
+
+ auto TimeUnitsModel::requestRecords(uint32_t offset, uint32_t limit) -> void
+ {
+ setupModel(offset, limit);
+ list->onProviderDataUpdate();
+ }
+
+ void TimeUnitsModel::sendRtcUpdateTimeMessage(time_t newTime)
+ {
+ auto msg = std::make_shared<stm::message::TimeChangeRequestMessage>(newTime);
+ application->bus.sendUnicast(std::move(msg), service::name::service_time);
+ }
+
+ void TimeUnitsModel::sendTimeFmtUpdateMessage(utils::time::Locale::TimeFormat newFmt)
+ {
+ auto msg = std::make_shared<stm::message::SetTimeFormatRequest>(newFmt);
+ application->bus.sendUnicast(std::move(msg), service::name::service_time);
+ }
+
+ auto TimeUnitsModel::getTemperatureUnit() -> utils::temperature::Temperature::Unit
+ {
+ return *utils::temperature::strToUnit(temperatureUnitListItem->getUnitAsStr());
+ }
+} // namespace app::bell_settings
A products/BellHybrid/apps/application-bell-settings/models/TimeUnitsModel.hpp => products/BellHybrid/apps/application-bell-settings/models/TimeUnitsModel.hpp +57 -0
@@ 0,0 1,57 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#pragma once
+
+#include <apps-common/Application.hpp>
+#include <apps-common/InternalModel.hpp>
+#include <module-utils/Temperature.hpp>
+#include <time/time_locale.hpp>
+
+namespace gui
+{
+ class TimeSetListItem;
+
+ class TimeFormatSetListItem;
+
+ class TemperatureUnitListItem;
+} // namespace gui
+
+namespace app::bell_settings
+{
+ class TimeUnitsModel : public app::InternalModel<gui::ListItem *>, public gui::ListItemProvider
+ {
+ public:
+ explicit TimeUnitsModel(app::Application *app);
+
+ ~TimeUnitsModel();
+
+ auto clearData() -> void;
+
+ auto saveData() -> void;
+
+ auto loadData() -> void;
+
+ auto createData() -> void;
+
+ auto requestRecords(uint32_t offset, uint32_t limit) -> void;
+
+ [[nodiscard]] auto getItem(gui::Order order) -> gui::ListItem * override;
+
+ [[nodiscard]] auto requestRecordsCount() -> unsigned int override;
+
+ [[nodiscard]] auto getMinimalItemSpaceRequired() const -> unsigned int override;
+
+ [[nodiscard]] auto getTemperatureUnit() -> utils::temperature::Temperature::Unit;
+
+ private:
+ app::Application *application{};
+ gui::TimeSetListItem *timeSetListItem{};
+ gui::TimeFormatSetListItem *timeFmtSetListItem{};
+ gui::TemperatureUnitListItem *temperatureUnitListItem{};
+
+ void sendRtcUpdateTimeMessage(time_t newTime);
+
+ void sendTimeFmtUpdateMessage(utils::time::Locale::TimeFormat newFmt);
+ };
+} // namespace app::bell_settings
A products/BellHybrid/apps/application-bell-settings/presenter/TimeUnitsPresenter.cpp => products/BellHybrid/apps/application-bell-settings/presenter/TimeUnitsPresenter.cpp +40 -0
@@ 0,0 1,40 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include "TemperatureUnitModel.hpp"
+#include "TimeUnitsPresenter.hpp"
+
+namespace app::bell_settings
+{
+ TimeUnitsWindowPresenter::TimeUnitsWindowPresenter(
+ std::shared_ptr<TimeUnitsModel> pagesProvider,
+ std::unique_ptr<AbstractTemperatureUnitModel> temperatureUnitModel)
+ : pagesProvider(std::move(pagesProvider)), temperatureUnitModel{std::move(temperatureUnitModel)}
+ {}
+
+ auto TimeUnitsWindowPresenter::getPagesProvider() const -> std::shared_ptr<gui::ListItemProvider>
+ {
+ return pagesProvider;
+ }
+
+ auto TimeUnitsWindowPresenter::clearData() -> void
+ {
+ pagesProvider->clearData();
+ }
+
+ auto TimeUnitsWindowPresenter::saveData() -> void
+ {
+ pagesProvider->saveData();
+ temperatureUnitModel->set(pagesProvider->getTemperatureUnit());
+ }
+
+ auto TimeUnitsWindowPresenter::loadData() -> void
+ {
+ pagesProvider->loadData();
+ }
+
+ auto TimeUnitsWindowPresenter::createData() -> void
+ {
+ pagesProvider->createData();
+ }
+} // namespace app::bell_settings
A products/BellHybrid/apps/application-bell-settings/presenter/TimeUnitsPresenter.hpp => products/BellHybrid/apps/application-bell-settings/presenter/TimeUnitsPresenter.hpp +51 -0
@@ 0,0 1,51 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#pragma once
+
+#include "TimeUnitsModel.hpp"
+
+#include <apps-common/BasePresenter.hpp>
+
+namespace app::bell_settings
+{
+ class AbstractTemperatureUnitModel;
+
+ class TimeUnitsWindowContract
+ {
+ public:
+ class View
+ {
+ public:
+ virtual ~View() noexcept = default;
+ };
+
+ class Presenter : public BasePresenter<TimeUnitsWindowContract::View>
+ {
+ public:
+ virtual ~Presenter() noexcept = default;
+ virtual auto getPagesProvider() const -> std::shared_ptr<gui::ListItemProvider> = 0;
+ virtual auto clearData() -> void = 0;
+ virtual auto saveData() -> void = 0;
+ virtual auto loadData() -> void = 0;
+ virtual auto createData() -> void = 0;
+ };
+ };
+
+ class TimeUnitsWindowPresenter : public TimeUnitsWindowContract::Presenter
+ {
+ public:
+ explicit TimeUnitsWindowPresenter(std::shared_ptr<TimeUnitsModel> pagesProvider,
+ std::unique_ptr<AbstractTemperatureUnitModel> temperatureUnitModel);
+
+ auto getPagesProvider() const -> std::shared_ptr<gui::ListItemProvider> override;
+ auto clearData() -> void;
+ auto saveData() -> void;
+ auto loadData() -> void;
+ auto createData() -> void;
+
+ private:
+ std::shared_ptr<TimeUnitsModel> pagesProvider;
+ std::unique_ptr<AbstractTemperatureUnitModel> temperatureUnitModel;
+ };
+} // namespace app::bell_settings
A products/BellHybrid/apps/application-bell-settings/widgets/TemperatureUnitListItem.cpp => products/BellHybrid/apps/application-bell-settings/widgets/TemperatureUnitListItem.cpp +44 -0
@@ 0,0 1,44 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include "BellSettingsStyle.hpp"
+#include "TemperatureUnitListItem.hpp"
+
+#include <gui/widgets/TextSpinner.hpp>
+#include <module-utils/Temperature.hpp>
+
+namespace gui
+{
+ TemperatureUnitListItem::TemperatureUnitListItem(const UTF8 &topDesc, Length x, Length y, Length w, Length h)
+ : BellSideListItem(topDesc)
+ {
+ setMinimumSize(style::sidelistview::list_item::w, style::sidelistview::list_item::h);
+ setEdges(RectangleEdge::None);
+ setFocusItem(body);
+
+ temperatureUnit =
+ new TextSpinner({utils::temperature::celsiusDegreeSymbol, utils::temperature::fahrenheitDegreeSymbol},
+ Boundaries::Continuous);
+ temperatureUnit->setMaximumSize(style::bell_base_layout::w, style::bell_base_layout::h);
+ temperatureUnit->setFont(bell_settings_style::time_fmt_set_list_item::font);
+ temperatureUnit->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Center));
+ temperatureUnit->setFocusEdges(RectangleEdge::None);
+ body->centerBox->addWidget(temperatureUnit);
+
+ dimensionChangedCallback = [&](Item &, const BoundingBox &newDim) -> bool {
+ body->setArea({0, 0, newDim.w, newDim.h});
+ return true;
+ };
+ focusChangedCallback = [&](Item &) {
+ setFocusItem(focus ? body : nullptr);
+ return true;
+ };
+
+ inputCallback = [&](Item &, const InputEvent &inputEvent) -> bool { return body->onInput(inputEvent); };
+ }
+
+ auto TemperatureUnitListItem::getUnitAsStr() const noexcept -> UTF8
+ {
+ return temperatureUnit->getCurrentText();
+ }
+} // namespace gui
A products/BellHybrid/apps/application-bell-settings/widgets/TemperatureUnitListItem.hpp => products/BellHybrid/apps/application-bell-settings/widgets/TemperatureUnitListItem.hpp +25 -0
@@ 0,0 1,25 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#pragma once
+
+#include <widgets/BellSideListItem.hpp>
+#include <utf8/UTF8.hpp>
+
+namespace gui
+{
+ class TextSpinner;
+
+ class TemperatureUnitListItem : public BellSideListItem
+ {
+ public:
+ explicit TemperatureUnitListItem(
+ const UTF8 &topDesc = "", Length x = 0, Length y = 0, Length w = 0, Length h = 0);
+
+ auto getUnitAsStr() const noexcept -> UTF8;
+
+ private:
+ TextSpinner *temperatureUnit{};
+ };
+
+} // namespace gui
A products/BellHybrid/apps/application-bell-settings/widgets/TimeFormatSetListItem.cpp => products/BellHybrid/apps/application-bell-settings/widgets/TimeFormatSetListItem.cpp +88 -0
@@ 0,0 1,88 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include "TimeFormatSetListItem.hpp"
+#include "BellSettingsStyle.hpp"
+
+#include <gui/core/FontManager.hpp>
+#include <gui/core/RawFont.hpp>
+#include <gui/widgets/Label.hpp>
+#include <gui/widgets/Spinner.hpp>
+
+#include <widgets/TimeSetFmtSpinner.hpp>
+
+namespace
+{
+ constexpr auto fmtSpinnerMin = 12U;
+ constexpr auto fmtSpinnerMax = 24U;
+ constexpr auto fmtSpinnerStep = 12U;
+} // namespace
+
+namespace gui
+{
+ TimeFormatSetListItem::TimeFormatSetListItem(
+ Length x, Length y, Length w, Length h, const UTF8 &topDesc, const UTF8 &botDesc)
+ : BellSideListItem(topDesc)
+ {
+ setMinimumSize(style::sidelistview::list_item::w, style::sidelistview::list_item::h);
+ setEdges(RectangleEdge::None);
+ setFocusItem(body);
+
+ timeFormat = new Spinner(fmtSpinnerMin, fmtSpinnerMax, fmtSpinnerStep, Boundaries::Continuous);
+ timeFormat->setMaximumSize(style::bell_base_layout::w, style::bell_base_layout::h);
+ timeFormat->setFont(bell_settings_style::time_fmt_set_list_item::font);
+
+ timeFormat->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Center));
+ timeFormat->setFixedFieldWidth(2);
+ timeFormat->setEdges(RectangleEdge::None);
+ timeFormat->setCurrentValue(fmtSpinnerMin);
+ timeFormat->setFocusEdges(RectangleEdge::None);
+ body->centerBox->addWidget(timeFormat);
+
+ bottomDescription = new Label(body->lastBox);
+ bottomDescription->setMaximumSize(style::bell_base_layout::w, style::bell_base_layout::outer_layouts_h);
+ bottomDescription->setFont(style::bell_sidelist_item::description_font);
+ bottomDescription->setEdges(RectangleEdge::None);
+ bottomDescription->activeItem = false;
+ bottomDescription->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Center));
+ bottomDescription->setText(botDesc);
+
+ dimensionChangedCallback = [&](Item &, const BoundingBox &newDim) -> bool {
+ body->setArea({0, 0, newDim.w, newDim.h});
+ return true;
+ };
+
+ focusChangedCallback = [&](Item &) {
+ setFocusItem(focus ? body : nullptr);
+ if (focus) {
+ setFocusItem(body);
+ }
+ else {
+ setFocusItem(nullptr);
+ if (onNextCallback) {
+ onNextCallback(*this);
+ }
+ }
+ return true;
+ };
+
+ inputCallback = [&](Item &, const InputEvent &inputEvent) -> bool { return body->onInput(inputEvent); };
+ }
+
+ auto TimeFormatSetListItem::getTimeFmt() const noexcept -> utils::time::Locale::TimeFormat
+ {
+ return timeFormat->getCurrentValue() == fmtSpinnerMin ? utils::time::Locale::TimeFormat::FormatTime12H
+ : utils::time::Locale::TimeFormat::FormatTime24H;
+ }
+
+ auto TimeFormatSetListItem::setTimeFmt(utils::time::Locale::TimeFormat fmt) noexcept -> void
+ {
+ using namespace utils::time;
+ if (fmt == Locale::TimeFormat::FormatTime12H) {
+ timeFormat->setCurrentValue(fmtSpinnerMin);
+ }
+ else if (fmt == Locale::TimeFormat::FormatTime24H) {
+ timeFormat->setCurrentValue(fmtSpinnerMax);
+ }
+ }
+} // namespace gui<
\ No newline at end of file
A products/BellHybrid/apps/application-bell-settings/widgets/TimeFormatSetListItem.hpp => products/BellHybrid/apps/application-bell-settings/widgets/TimeFormatSetListItem.hpp +36 -0
@@ 0,0 1,36 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#pragma once
+
+#include <time/time_locale.hpp>
+#include <utf8/UTF8.hpp>
+#include <widgets/BellSideListItem.hpp>
+
+#include <functional>
+
+namespace gui
+{
+ class Spinner;
+ class Label;
+
+ class TimeFormatSetListItem : public gui::BellSideListItem
+ {
+ public:
+ TimeFormatSetListItem() = delete;
+ TimeFormatSetListItem(
+ gui::Length x, gui::Length y, gui::Length w, gui::Length h, const UTF8 &topDesc, const UTF8 &botDesc);
+
+ auto getTimeFmt() const noexcept -> utils::time::Locale::TimeFormat;
+ auto setTimeFmt(utils::time::Locale::TimeFormat fmt) noexcept -> void;
+
+ /// called before next SideListItem is activated
+ /// @param `this` : item
+ std::function<void(Item &)> onNextCallback;
+
+ private:
+ Label *bottomDescription{};
+ Spinner *timeFormat{};
+ };
+
+} // namespace gui
A products/BellHybrid/apps/application-bell-settings/widgets/TimeSetListItem.cpp => products/BellHybrid/apps/application-bell-settings/widgets/TimeSetListItem.cpp +33 -0
@@ 0,0 1,33 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include "TimeSetListItem.hpp"
+#include "BellSettingsStyle.hpp"
+
+#include <gui/input/InputEvent.hpp>
+#include <widgets/TimeSetFmtSpinner.hpp>
+
+namespace gui
+{
+ TimeSetListItem::TimeSetListItem(
+ gui::Length x, gui::Length y, gui::Length w, gui::Length h, std::string description)
+ : BellSideListItem(std::move(description))
+ {
+ setMinimumSize(style::sidelistview::list_item::w, style::sidelistview::list_item::h);
+ timeSetFmtSpinner = new TimeSetFmtSpinner(body->centerBox);
+ timeSetFmtSpinner->setMaximumSize(style::bell_base_layout::w, style::bell_base_layout::h);
+ setFocusItem(body);
+
+ dimensionChangedCallback = [&](gui::Item &, const BoundingBox &newDim) -> bool {
+ body->setArea({0, 0, newDim.w, newDim.h});
+ return true;
+ };
+
+ focusChangedCallback = [&](Item &item) {
+ setFocusItem(focus ? body : nullptr);
+ return true;
+ };
+
+ inputCallback = [&](Item &, const InputEvent &inputEvent) -> bool { return body->onInput(inputEvent); };
+ }
+} /* namespace gui */
A products/BellHybrid/apps/application-bell-settings/widgets/TimeSetListItem.hpp => products/BellHybrid/apps/application-bell-settings/widgets/TimeSetListItem.hpp +21 -0
@@ 0,0 1,21 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#pragma once
+
+#include <widgets/BellSideListItem.hpp>
+
+#include <string>
+
+namespace gui
+{
+ class TimeSetFmtSpinner;
+
+ class TimeSetListItem : public BellSideListItem
+ {
+ public:
+ TimeSetFmtSpinner *timeSetFmtSpinner = nullptr;
+
+ TimeSetListItem(gui::Length x, gui::Length y, gui::Length w, gui::Length h, std::string description);
+ };
+} /* namespace gui */
A products/BellHybrid/apps/application-bell-settings/windows/BellSettingsAdvancedWindow.cpp => products/BellHybrid/apps/application-bell-settings/windows/BellSettingsAdvancedWindow.cpp +64 -0
@@ 0,0 1,64 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include "application-bell-settings/ApplicationBellSettings.hpp"
+#include "BellSettingsAdvancedWindow.hpp"
+#include "BellSettingsStyle.hpp"
+
+#include <apps-common/options/type/OptionBellMenu.hpp>
+#include <apps-common/messages/DialogMetadataMessage.hpp>
+#include <apps-common/windows/Dialog.hpp>
+#include <service-appmgr/Controller.hpp>
+
+namespace gui
+{
+
+ BellSettingsAdvancedWindow::BellSettingsAdvancedWindow(app::Application *app)
+ : OptionWindow(app, gui::window::name::bellSettingsAdvanced)
+ {
+ addOptions(settingsOptionsList());
+ buildInterface();
+ }
+
+ void BellSettingsAdvancedWindow::buildInterface()
+ {
+ statusBar->setVisible(false);
+ header->setTitleVisibility(false);
+ bottomBar->setVisible(false);
+
+ optionsList->setPosition(bell_settings_style::settings_window::options_list_margin_x,
+ bell_settings_style::settings_window::options_list_margin_y);
+ optionsList->setMaximumWidth(bell_settings_style::settings_window::default_body_width);
+ optionsList->setBoundaries(gui::Boundaries::Continuous);
+ }
+
+ std::list<Option> BellSettingsAdvancedWindow::settingsOptionsList()
+ {
+ std::list<gui::Option> settingsOptionList;
+ auto addWinSettings = [&](const UTF8 &name, const std::string &window) {
+ settingsOptionList.emplace_back(std::make_unique<gui::option::OptionBellMenu>(
+ name,
+ [=](gui::Item &item) {
+ if (window.empty()) {
+ return false;
+ }
+ application->switchWindow(
+ window,
+ gui::ShowMode::GUI_SHOW_INIT,
+ std::make_unique<gui::DialogMetadataMessage>(gui::DialogMetadata{name, "search_big", " "}));
+ return true;
+ },
+ [=](gui::Item &item) {
+ // put focus change callback here
+ return true;
+ },
+ this));
+ };
+
+ addWinSettings(utils::translate("app_bell_settings_advanced_time_units"),
+ gui::window::name::bellSettingsTimeUnits);
+
+ return settingsOptionList;
+ }
+
+} // namespace gui
A products/BellHybrid/apps/application-bell-settings/windows/BellSettingsAdvancedWindow.hpp => products/BellHybrid/apps/application-bell-settings/windows/BellSettingsAdvancedWindow.hpp +21 -0
@@ 0,0 1,21 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#pragma once
+
+#include <apps-common/windows/OptionWindow.hpp>
+
+namespace gui
+{
+
+ class BellSettingsAdvancedWindow : public OptionWindow
+ {
+ public:
+ explicit BellSettingsAdvancedWindow(app::Application *app);
+
+ private:
+ std::list<Option> settingsOptionsList();
+ void buildInterface() override;
+ };
+
+} // namespace gui
A products/BellHybrid/apps/application-bell-settings/windows/BellSettingsFinishedWindow.cpp => products/BellHybrid/apps/application-bell-settings/windows/BellSettingsFinishedWindow.cpp +61 -0
@@ 0,0 1,61 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include "BellSettingsFinishedWindow.hpp"
+
+#include <gui/input/InputEvent.hpp>
+#include <gui/widgets/Icon.hpp>
+
+namespace
+{
+ constexpr auto appNameToReturn = gui::window::name::bellSettingsAdvanced;
+}
+
+namespace gui
+{
+
+ BellSettingsFinishedWindow::BellSettingsFinishedWindow(app::Application *app, const std::string &name)
+ : WindowWithTimer(app, name)
+ {
+ buildInterface();
+
+ timerCallback = [this](Item &, sys::Timer &) {
+ application->switchWindow(appNameToReturn);
+ return true;
+ };
+ }
+ void BellSettingsFinishedWindow::buildInterface()
+ {
+ WindowWithTimer::buildInterface();
+
+ statusBar->setVisible(false);
+ header->setTitleVisibility(false);
+ bottomBar->setVisible(false);
+
+ icon = new Icon(this,
+ 0,
+ 0,
+ style::window_width,
+ style::window_height,
+ "circle_success",
+ utils::translate("app_bell_settings_time_units_finished_message"));
+ }
+ bool BellSettingsFinishedWindow::onInput(const InputEvent &inputEvent)
+ {
+ if (inputEvent.isShortRelease(KeyCode::KEY_ENTER) || inputEvent.isShortRelease(KeyCode::KEY_RF)) {
+ application->switchWindow(appNameToReturn);
+ return true;
+ }
+ if (AppWindow::onInput(inputEvent)) {
+ return true;
+ }
+
+ return AppWindow::onInput(inputEvent);
+ }
+ void BellSettingsFinishedWindow::rebuild()
+ {
+ erase();
+ buildInterface();
+ }
+
+} // namespace gui
A products/BellHybrid/apps/application-bell-settings/windows/BellSettingsFinishedWindow.hpp => products/BellHybrid/apps/application-bell-settings/windows/BellSettingsFinishedWindow.hpp +27 -0
@@ 0,0 1,27 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#pragma once
+
+#include "application-bell-settings/ApplicationBellSettings.hpp"
+
+#include <apps-common/popups/WindowWithTimer.hpp>
+
+namespace gui
+{
+ class Icon;
+
+ class BellSettingsFinishedWindow : public WindowWithTimer
+ {
+ public:
+ BellSettingsFinishedWindow(app::Application *app, const std::string &name = window::name::bellSettingsFinished);
+
+ private:
+ void buildInterface() override;
+ bool onInput(const InputEvent &inputEvent) override;
+ void rebuild() override;
+
+ Icon *icon{};
+ };
+
+} // namespace gui
A products/BellHybrid/apps/application-bell-settings/windows/BellSettingsTimeUnitsWindow.cpp => products/BellHybrid/apps/application-bell-settings/windows/BellSettingsTimeUnitsWindow.cpp +65 -0
@@ 0,0 1,65 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include "application-bell-settings/ApplicationBellSettings.hpp"
+#include "BellSettingsStyle.hpp"
+#include "BellSettingsTimeUnitsWindow.hpp"
+
+#include <gui/input/InputEvent.hpp>
+#include <apps-common/options/OptionStyle.hpp>
+
+namespace gui
+{
+ BellSettingsTimeUnitsWindow::BellSettingsTimeUnitsWindow(
+ app::Application *app,
+ std::unique_ptr<app::bell_settings::TimeUnitsWindowContract::Presenter> &&windowPresenter,
+ std::string name)
+ : AppWindow(app, name), presenter{std::move(windowPresenter)}
+ {
+ presenter->attach(this);
+ buildInterface();
+ }
+
+ void BellSettingsTimeUnitsWindow::rebuild()
+ {
+ erase();
+ buildInterface();
+ }
+
+ void BellSettingsTimeUnitsWindow::buildInterface()
+ {
+ AppWindow::buildInterface();
+ statusBar->setVisible(false);
+ header->setTitleVisibility(false);
+ bottomBar->setVisible(false);
+
+ presenter->createData();
+
+ sidelistview = new SideListView(
+ this, 0U, 0U, this->getWidth(), this->getHeight(), presenter->getPagesProvider(), PageBarType::None);
+ sidelistview->setEdges(RectangleEdge::None);
+
+ sidelistview->rebuildList(listview::RebuildType::Full);
+
+ presenter->loadData();
+
+ setFocusItem(sidelistview);
+ }
+
+ bool BellSettingsTimeUnitsWindow::onInput(const gui::InputEvent &inputEvent)
+ {
+ if (sidelistview->onInput(inputEvent)) {
+ return true;
+ }
+ if (inputEvent.isShortRelease(KeyCode::KEY_ENTER)) {
+ presenter->saveData();
+ application->switchWindow(window::name::bellSettingsFinished);
+ return true;
+ }
+ if (AppWindow::onInput(inputEvent)) {
+ return true;
+ }
+
+ return AppWindow::onInput(inputEvent);
+ }
+} /* namespace gui */
A products/BellHybrid/apps/application-bell-settings/windows/BellSettingsTimeUnitsWindow.hpp => products/BellHybrid/apps/application-bell-settings/windows/BellSettingsTimeUnitsWindow.hpp +33 -0
@@ 0,0 1,33 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#pragma once
+
+#include "application-bell-settings/ApplicationBellSettings.hpp"
+#include "TimeUnitsPresenter.hpp"
+#include "TimeUnitsModel.hpp"
+
+#include <apps-common/windows/AppWindow.hpp>
+#include <widgets/SideListView.hpp>
+
+namespace gui
+{
+ class SideListView;
+
+ class BellSettingsTimeUnitsWindow : public AppWindow, public app::bell_settings::TimeUnitsWindowContract::View
+ {
+ public:
+ explicit BellSettingsTimeUnitsWindow(
+ app::Application *app,
+ std::unique_ptr<app::bell_settings::TimeUnitsWindowContract::Presenter> &&windowPresenter,
+ std::string name = gui::window::name::bellSettingsTimeUnits);
+
+ void buildInterface() override;
+ bool onInput(const InputEvent &inputEvent) override;
+ void rebuild() override;
+
+ private:
+ SideListView *sidelistview = nullptr;
+ std::unique_ptr<app::bell_settings::TimeUnitsWindowContract::Presenter> presenter;
+ };
+} /* namespace gui */
A products/BellHybrid/apps/application-bell-settings/windows/BellSettingsWindow.cpp => products/BellHybrid/apps/application-bell-settings/windows/BellSettingsWindow.cpp +60 -0
@@ 0,0 1,60 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include "BellSettingsWindow.hpp"
+
+#include <application-bell-settings/ApplicationBellSettings.hpp>
+#include <data/BellSettingsStyle.hpp>
+
+#include <apps-common/messages/DialogMetadataMessage.hpp>
+#include <apps-common/options/type/OptionBellMenu.hpp>
+#include <apps-common/windows/Dialog.hpp>
+#include <service-appmgr/Controller.hpp>
+
+namespace gui
+{
+
+ BellSettingsWindow::BellSettingsWindow(app::Application *app) : OptionWindow(app, gui::window::name::bellSettings)
+ {
+ addOptions(settingsOptionsList());
+ buildInterface();
+ }
+
+ void BellSettingsWindow::buildInterface()
+ {
+ statusBar->setVisible(false);
+ header->setTitleVisibility(false);
+ bottomBar->setVisible(false);
+
+ optionsList->setPosition(bell_settings_style::settings_window::options_list_margin_x,
+ bell_settings_style::settings_window::options_list_margin_y);
+ optionsList->setMaximumWidth(bell_settings_style::settings_window::default_body_width);
+ optionsList->setBoundaries(gui::Boundaries::Continuous);
+ }
+
+ std::list<Option> BellSettingsWindow::settingsOptionsList()
+ {
+ std::list<gui::Option> settingsOptionList;
+ auto addWinSettings = [&](const UTF8 &name, const std::string &window) {
+ settingsOptionList.emplace_back(std::make_unique<gui::option::OptionBellMenu>(
+ name,
+ [=](gui::Item &item) {
+ if (window.empty()) {
+ return false;
+ }
+ application->switchWindow(window, gui::ShowMode::GUI_SHOW_INIT);
+ return true;
+ },
+ [=](gui::Item &item) {
+ // put focus change callback here
+ return true;
+ },
+ this));
+ };
+
+ addWinSettings(utils::translate("app_bell_settings_advanced"), gui::window::name::bellSettingsAdvanced);
+
+ return settingsOptionList;
+ }
+
+} // namespace gui
A products/BellHybrid/apps/application-bell-settings/windows/BellSettingsWindow.hpp => products/BellHybrid/apps/application-bell-settings/windows/BellSettingsWindow.hpp +21 -0
@@ 0,0 1,21 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#pragma once
+
+#include <apps-common/windows/OptionWindow.hpp>
+
+namespace gui
+{
+
+ class BellSettingsWindow : public OptionWindow
+ {
+ public:
+ explicit BellSettingsWindow(app::Application *app);
+
+ private:
+ std::list<Option> settingsOptionsList();
+ void buildInterface() override;
+ };
+
+} // namespace gui