M products/BellHybrid/apps/application-bell-main/include/application-bell-main/presenters/HomeScreenPresenter.hpp => products/BellHybrid/apps/application-bell-main/include/application-bell-main/presenters/HomeScreenPresenter.hpp +3 -0
@@ 95,6 95,7 @@ namespace app::home_screen
virtual void decAlarmMinute() = 0;
virtual void switchToMenu() = 0;
virtual void switchToBatteryStatus() = 0;
+ virtual UTF8 getGreeting() = 0;
static constexpr auto defaultTimeout = std::chrono::milliseconds{5000};
};
@@ 138,6 139,7 @@ namespace app::home_screen
void decAlarmMinute();
void switchToMenu();
void switchToBatteryStatus();
+ UTF8 getGreeting();
void setLayout(gui::LayoutGenerator layoutGenerator) override;
@@ 150,6 152,7 @@ namespace app::home_screen
std::unique_ptr<AbstractTimeModel> timeModel;
std::shared_ptr<AbstractController> stateController;
std::unique_ptr<ProgressTimerWithSnoozeTimer> snoozeTimer;
+ std::unique_ptr<std::mt19937> rngEngine;
void handleCyclicDeepRefresh();
M products/BellHybrid/apps/application-bell-main/presenters/HomeScreenPresenter.cpp => products/BellHybrid/apps/application-bell-main/presenters/HomeScreenPresenter.cpp +14 -1
@@ 75,7 75,8 @@ namespace app::home_screen
std::unique_ptr<AbstractTemperatureModel> temperatureModel,
std::unique_ptr<AbstractTimeModel> timeModel)
: app{app}, alarmModel{std::move(alarmModel)}, batteryModel{std::move(batteryModel)},
- temperatureModel{std::move(temperatureModel)}, timeModel{std::move(timeModel)}
+ temperatureModel{std::move(temperatureModel)}, timeModel{std::move(timeModel)},
+ rngEngine{std::make_unique<std::mt19937>(std::random_device{}())}
{}
void HomeScreenPresenter::handleUpdateTimeEvent()
@@ 245,4 246,16 @@ namespace app::home_screen
app->switchWindow(gui::BellBatteryStatusWindow::name,
std::make_unique<gui::BellBatteryStatusWindow::Data>(getBatteryLvl(), isBatteryCharging()));
}
+
+ UTF8 HomeScreenPresenter::getGreeting()
+ {
+ const auto greetingCollection = utils::translate_array("app_bell_greeting_msg");
+ if (greetingCollection.empty()) {
+ LOG_WARN("app_bell_greeting_msg array does not exist, using default string");
+ return "app_bell_greeting_msg";
+ }
+
+ std::uniform_int_distribution<std::mt19937::result_type> dist(0, greetingCollection.size() - 1);
+ return greetingCollection[dist(*rngEngine)];
+ };
} // namespace app::home_screen
M products/BellHybrid/apps/application-bell-main/presenters/StateController.cpp => products/BellHybrid/apps/application-bell-main/presenters/StateController.cpp +1 -15
@@ 80,20 80,6 @@ namespace app::home_screen
};
auto isSnoozeActive = [](AbstractAlarmModel &alarmModel) -> bool { return alarmModel.isSnoozeActive(); };
auto snooze = [](AbstractController &controller) { controller.snooze(true); };
- auto getRand = [](const std::uint32_t lo, const std::uint32_t hi) -> std::uint32_t {
- std::random_device dev;
- std::mt19937 rng(dev());
- std::uniform_int_distribution<std::mt19937::result_type> dist(lo, hi);
- return dist(rng);
- };
- auto getGreeting = []() -> UTF8 {
- const auto greetingCollection = utils::translate_array("app_bell_greeting_msg");
- if (greetingCollection.empty()) {
- LOG_WARN("app_bell_greeting_msg array does not exist, using default string");
- return "app_bell_greeting_msg";
- }
- return greetingCollection[Helpers::getRand(0, greetingCollection.size() - 1)];
- };
auto turnOffRingingAlarm = [](AbstractAlarmModel &alarmModel) { alarmModel.turnOff(); };
auto updateBatteryStatus = [](AbstractView &view, AbstractBatteryModel &batteryModel) {
view.setBatteryLevelState(batteryModel.getLevelState());
@@ 252,7 238,7 @@ namespace app::home_screen
alarmModel.turnOff();
alarmModel.activate(false);
view.setViewState(ViewState::AlarmRingingDeactivatedWait);
- view.setTextDescription(Helpers::getGreeting());
+ view.setTextDescription(presenter.getGreeting());
};
auto exit = [](AbstractView &view, AbstractPresenter &presenter) { presenter.detachTimer(); };
} // namespace AlarmRingingDeactivatedWait