From dd26b295758539790019bc7ad27c68f6ec0a14e7 Mon Sep 17 00:00:00 2001 From: Dawid Wojtas Date: Tue, 29 Nov 2022 15:53:41 +0100 Subject: [PATCH] [BH-1415] Front light intensity for pre-wake up and main alarm The user can manage the intensity of the front light during the pre-wake up and main alarm. The intensity can be selected from a 10-degree scale, where 1 is the lightest front light and 10 the brightest. --- harmony_changelog.md | 3 + image/assets/lang/English.json | 8 +-- image/user/db/settings_bell_002.sql | 2 + .../alarms/src/actions/FrontlightAction.cpp | 51 ++++++++++++----- .../alarms/src/actions/FrontlightAction.hpp | 1 + .../ApplicationBellSettings.cpp | 48 ++++++++++------ .../models/FrontlightModel.cpp | 32 ++--------- .../AbstractPrewakeUpSettingsModel.hpp | 22 +++++-- .../AlarmSettingsListItemProvider.cpp | 56 +++++++++++++++--- .../AlarmSettingsListItemProvider.hpp | 6 +- .../alarm_settings/AlarmSettingsModel.cpp | 12 ++++ .../PrewakeUpListItemProvider.cpp | 57 +++++++++++++++---- .../PrewakeUpListItemProvider.hpp | 8 ++- .../alarm_settings/PrewakeUpSettingsModel.cpp | 12 ++++ .../alarm_settings/PrewakeUpSettingsModel.hpp | 18 +++++- .../SettingsListItemProvider.hpp | 10 +++- .../alarm_settings/AlarmSettingsPresenter.cpp | 24 ++++++-- .../alarm_settings/AlarmSettingsPresenter.hpp | 14 +++-- .../alarm_settings/PrewakeUpPresenter.cpp | 23 ++++++-- .../alarm_settings/PrewakeUpPresenter.hpp | 11 ++-- .../BellSettingsAlarmSettingsWindow.cpp | 10 +--- .../BellSettingsAlarmSettingsWindow.hpp | 1 - .../BellHybrid/apps/common/CMakeLists.txt | 1 + .../include/common/data/FrontlightUtils.hpp | 36 ++++++++++++ .../models/AbstractAlarmSettingsModel.hpp | 19 +++++-- .../common/models/AlarmSettingsModel.hpp | 21 +++++-- .../include/common/models/FrontlightModel.hpp | 7 +-- .../services/db/include/db/SystemSettings.hpp | 2 + 28 files changed, 380 insertions(+), 135 deletions(-) create mode 100644 products/BellHybrid/apps/common/include/common/data/FrontlightUtils.hpp diff --git a/harmony_changelog.md b/harmony_changelog.md index 70318991bb6349f8b98317cc1755824d30b9b1da..0ef954e607a99997d76889be99b7c076e1700a39 100644 --- a/harmony_changelog.md +++ b/harmony_changelog.md @@ -17,6 +17,9 @@ #### Onboarding * Shortcuts instruction. +#### Alarm +* Front light intensity during the main alarm and pre-wake up + ### Changed #### Home Screen: diff --git a/image/assets/lang/English.json b/image/assets/lang/English.json index f0d5605bde2cbb1639aa44c682a1059f1f2f4500..6693b59ba6c572e16bb244d04e562654409d8eb3 100644 --- a/image/assets/lang/English.json +++ b/image/assets/lang/English.json @@ -669,11 +669,11 @@ "app_bell_settings_about_info_text": "www.mudita.com", "app_bell_settings_alarm_settings": "Alarm", "app_bell_settings_alarm_settings_title": "Alarm settings", - "app_bell_settings_alarm_settings_tone": "Alarm tone", - "app_bell_settings_alarm_settings_volume": "Alarm volume", - "app_bell_settings_alarm_settings_light": "Alarm light", + "app_bell_settings_alarm_settings_tone": "Main alarm tone", + "app_bell_settings_alarm_settings_volume": "Main alarm volume", + "app_bell_settings_alarm_settings_light": "Main alarm light", "app_bell_settings_alarm_settings_prewake_up": "Pre-wake up", - "app_bell_settings_alarm_settings_prewake_up_chime_top_description": "Pre-wake up chime", + "app_bell_settings_alarm_settings_prewake_up_chime_top_description": "Pre-wake up", "app_bell_settings_alarm_settings_prewake_up_chime_bottom_description": "before the alarm", "app_bell_settings_alarm_settings_prewake_up_chime_tone": "Pre-wake up chime tone", "app_bell_settings_alarm_settings_prewake_up_chime_volume": "Pre-wake up chime volume", diff --git a/image/user/db/settings_bell_002.sql b/image/user/db/settings_bell_002.sql index 59a9dca6b1d1d5673d6c844fbff8b0ea0d9b4fe3..12a5d669e6af7a70422f5944b4769a870133133b 100644 --- a/image/user/db/settings_bell_002.sql +++ b/image/user/db/settings_bell_002.sql @@ -38,9 +38,11 @@ INSERT OR IGNORE INTO settings_tab (path, value) VALUES ('prewake_up_duration', '0'), ('prewake_up_tone','Joyful Awakening'), ('prewake_up_light_duration','0'), + ('prewake_up_brightness','50.0f'), ('alarm_tone','Morning Dew'), ('alarm_light_active','1'), ('alarm_duration','5'), + ('alarm_brightness','50.0f'), ('bedtime_active','0'), ('bedtime_time','22:00'), ('bedtime_tone','Evening Horizon'), diff --git a/products/BellHybrid/alarms/src/actions/FrontlightAction.cpp b/products/BellHybrid/alarms/src/actions/FrontlightAction.cpp index 5583e661c360204510cdd05d61010ef52e47792f..b0e96693b3e34e24fe30695e1e8771c16844b599 100644 --- a/products/BellHybrid/alarms/src/actions/FrontlightAction.cpp +++ b/products/BellHybrid/alarms/src/actions/FrontlightAction.cpp @@ -9,6 +9,7 @@ #include #include #include +#include namespace alarms { @@ -25,6 +26,7 @@ namespace alarms screen_light_control::ManualModeParameters prepareParameters(); sys::Service &service; + settings::Settings settings; }; class LinearProgressFrontlightAction : public AbstractAlarmAction @@ -84,6 +86,7 @@ namespace alarms case SettingsDependency::None: break; } + return pimpl->execute(); } @@ -103,11 +106,25 @@ namespace alarms default: break; } + return pimpl->turnOff(); } + screen_light_control::ManualModeParameters ManualFrontlightAction::prepareParameters() + { + std::string brightnessString = + settings.getValue(bell::settings::Alarm::brightness, settings::SettingsScope::Global); + + screen_light_control::ManualModeParameters params{}; + params.manualModeBrightness = frontlight_utils::fixedValToPercentage(std::stoi(brightnessString)); + + return params; + } + ManualFrontlightAction::ManualFrontlightAction(sys::Service &service) : service{service} - {} + { + settings.init(service::ServiceProxy{service.weak_from_this()}); + } bool ManualFrontlightAction::execute() { @@ -118,11 +135,6 @@ namespace alarms return true; } - screen_light_control::ManualModeParameters ManualFrontlightAction::prepareParameters() - { - return screen_light_control::ManualModeParameters{.manualModeBrightness = 100.0f}; - } - bool ManualFrontlightAction::turnOff() { service.bus.sendUnicast( @@ -149,16 +161,28 @@ namespace alarms screen_light_control::LinearProgressModeParameters LinearProgressFrontlightAction::prepareParameters() { constexpr auto firstTargetDuration = std::chrono::seconds{5}; + + std::string brightnessString = + settings.getValue(bell::settings::PrewakeUp::brightness, settings::SettingsScope::Global); const auto value = settings.getValue(bell::settings::PrewakeUp::lightDuration, settings::SettingsScope::Global); const auto lightDuration = std::chrono::minutes{utils::toNumeric(value)}; const auto secondTargetDuration = lightDuration - std::chrono::minutes{1} - firstTargetDuration; - return screen_light_control::LinearProgressModeParameters{ - .startBrightnessValue = 0.0f, - .functions = {screen_light_control::functions::LinearProgressFunction{.target = 10.0f, - .duration = firstTargetDuration}, - screen_light_control::functions::LinearProgressFunction{.target = 100.0f, - .duration = secondTargetDuration}}, - .brightnessHysteresis = 0.0f}; + + screen_light_control::LinearProgressModeParameters params{}; + screen_light_control::functions::LinearProgressFunction startFunction{}, endFunction{}; + + startFunction.duration = firstTargetDuration; + startFunction.target = 10.0f; + + endFunction.duration = secondTargetDuration; + endFunction.target = frontlight_utils::fixedValToPercentage(std::stoi(brightnessString)); + ; + + params.startBrightnessValue = 0.0f; + params.brightnessHysteresis = 0.0f; + params.functions = {startFunction, endFunction}; + + return params; } bool LinearProgressFrontlightAction::turnOff() @@ -168,4 +192,5 @@ namespace alarms service::name::evt_manager); return true; } + } // namespace alarms diff --git a/products/BellHybrid/alarms/src/actions/FrontlightAction.hpp b/products/BellHybrid/alarms/src/actions/FrontlightAction.hpp index 33f34417f804f55a9599adf9b14e884fc901049e..6ec9119c53d416b3c18dd1e223969f3b0553b198 100644 --- a/products/BellHybrid/alarms/src/actions/FrontlightAction.hpp +++ b/products/BellHybrid/alarms/src/actions/FrontlightAction.hpp @@ -5,6 +5,7 @@ #include "AbstractAlarmAction.hpp" #include +#include #include diff --git a/products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp b/products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp index 721fb9df95a88df14149998e982415d7d731779a..d74cdbcdf88d601cccd255ae5365f7c65c89eb23 100644 --- a/products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp +++ b/products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp @@ -154,20 +154,28 @@ namespace app windowsFactory.attach( gui::BellSettingsPrewakeUpWindow::name, [this](ApplicationCommon *app, const std::string &name) { - auto chimeDurationModel = std::make_unique(this); - auto chimeToneModel = std::make_unique(this); - auto chimeVolumeModel = std::make_unique(*audioModel); - auto lightDurationModel = std::make_unique(this); + auto prewakeUpChimeDurationModel = std::make_unique(this); + auto prewakeUpChimeToneModel = std::make_unique(this); + auto prewakeUpChimeVolumeModel = + std::make_unique(*audioModel); + auto prewakeUpLightDurationModel = std::make_unique(this); + auto prewakeUpFrontlightModel = std::make_unique(this); auto prewakeUpSettingsModel = - std::make_unique(std::move(chimeDurationModel), - std::move(chimeToneModel), - std::move(chimeVolumeModel), - std::move(lightDurationModel)); + std::make_unique(std::move(prewakeUpChimeDurationModel), + std::move(prewakeUpChimeToneModel), + std::move(prewakeUpChimeVolumeModel), + std::move(prewakeUpLightDurationModel), + std::move(prewakeUpFrontlightModel)); auto soundsRepository = std::make_unique(alarms::paths::getPreWakeUpChimesDir()); - auto provider = std::make_shared( + auto provider = std::make_unique( *prewakeUpSettingsModel, soundsRepository->getSongTitles()); - auto presenter = std::make_unique( - provider, std::move(prewakeUpSettingsModel), *audioModel, std::move(soundsRepository)); + auto frontlightModel = std::make_unique(app); + auto presenter = + std::make_unique(std::move(provider), + std::move(prewakeUpSettingsModel), + *audioModel, + std::move(soundsRepository), + std::move(frontlightModel)); return std::make_unique(app, std::move(presenter)); }); @@ -201,13 +209,21 @@ namespace app auto alarmToneModel = std::make_unique(this); auto alarmVolumeModel = std::make_unique(*audioModel); auto alarmLightOnOffModel = std::make_unique(this); - auto alarmSettingsModel = std::make_unique( - std::move(alarmToneModel), std::move(alarmVolumeModel), std::move(alarmLightOnOffModel)); + auto alarmFrontlightModel = std::make_unique(this); + auto alarmSettingsModel = + std::make_unique(std::move(alarmToneModel), + std::move(alarmVolumeModel), + std::move(alarmLightOnOffModel), + std::move(alarmFrontlightModel)); auto soundsRepository = std::make_unique(alarms::paths::getAlarmDir()); - auto provider = std::make_shared( + auto frontlightModel = std::make_unique(app); + auto provider = std::make_unique( *alarmSettingsModel, soundsRepository->getSongTitles()); - auto presenter = std::make_unique( - provider, std::move(alarmSettingsModel), *audioModel, std::move(soundsRepository)); + auto presenter = std::make_unique(std::move(provider), + std::move(alarmSettingsModel), + *audioModel, + std::move(soundsRepository), + std::move(frontlightModel)); return std::make_unique(app, std::move(presenter)); }); diff --git a/products/BellHybrid/apps/application-bell-settings/models/FrontlightModel.cpp b/products/BellHybrid/apps/application-bell-settings/models/FrontlightModel.cpp index 3d8d0f295c7e2cfc88203e6a856048684ab0b480..d7948ab62fc8a6b21eb555d1e7b4742216844635 100644 --- a/products/BellHybrid/apps/application-bell-settings/models/FrontlightModel.cpp +++ b/products/BellHybrid/apps/application-bell-settings/models/FrontlightModel.cpp @@ -8,28 +8,6 @@ #include #include -namespace -{ - constexpr auto minPercent = 0.0f; - constexpr auto maxPercent = 100.0f; - constexpr auto minimumLightOnPercentOffsetValue = 16.0f; - constexpr auto minBrightness = 1U; - constexpr auto maxBrightness = 10U; - constexpr float multiplier = (maxPercent - minimumLightOnPercentOffsetValue) / maxBrightness; - - float fixedValToPercentage(app::bell_settings::AbstractFrontlightModel::Brightness value) - { - float scaled = minimumLightOnPercentOffsetValue + (value - minBrightness) * multiplier; - return std::min(maxPercent, std::max(minPercent, scaled)); - } - - app::bell_settings::AbstractFrontlightModel::Brightness percentageToFixedVal(float percent) - { - auto value = (percent - minimumLightOnPercentOffsetValue) / multiplier; - return std::round(value + minBrightness); - } -} // namespace - namespace app::bell_settings { FrontlightModel::FrontlightModel(ApplicationCommon *app) @@ -41,7 +19,8 @@ namespace app::bell_settings const auto responseCallback = [this](const auto response) -> bool { const auto resp = dynamic_cast(response); if (resp) { - this->brightnessAdapter->update(percentageToFixedVal(resp->getParams().manualModeBrightness)); + this->brightnessAdapter->update( + frontlight_utils::percentageToFixedVal(resp->getParams().manualModeBrightness)); this->modeAdapter->update( resp->getMode() == screen_light_control::ScreenLightMode::Automatic ? autoStr : onDemandStr); if (this->onReady) { @@ -68,10 +47,11 @@ namespace app::bell_settings : screen_light_control::Action::disableAutomaticMode), service::name::evt_manager); } - void FrontlightModel::setBrightness(Brightness value) + void FrontlightModel::setBrightness(frontlight_utils::Brightness value) { hasUnsavedChanges = true; - screen_light_control::ConstLinearProgressModeParameters parameters{fixedValToPercentage(value)}; + screen_light_control::ConstLinearProgressModeParameters parameters{ + frontlight_utils::fixedValToPercentage(value)}; app->bus.sendUnicast(std::make_shared(parameters), service::name::evt_manager); } @@ -89,10 +69,10 @@ namespace app::bell_settings if (!hasUnsavedChanges) { return; } - setStatus(false); setMode(modeAdapter->getValue() == autoStr ? screen_light_control::ScreenLightMode::Automatic : screen_light_control::ScreenLightMode::Manual); setBrightness(brightnessAdapter->getValue()); + setStatus(true); } void FrontlightModel::setChangesSaved() diff --git a/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AbstractPrewakeUpSettingsModel.hpp b/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AbstractPrewakeUpSettingsModel.hpp index 3b200844b13fee6f42c98dffb6b61a5b0e4fcace..7010d183876556937e3549da1f71c89022ecbd70 100644 --- a/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AbstractPrewakeUpSettingsModel.hpp +++ b/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AbstractPrewakeUpSettingsModel.hpp @@ -1,9 +1,10 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once #include +#include #include #include @@ -15,12 +16,15 @@ namespace app::bell_settings class AbstractPrewakeUpSettingsModel { public: - AbstractPrewakeUpSettingsModel(std::unique_ptr> chimeDuration, - std::unique_ptr> chimeTone, - std::unique_ptr> chimeVolume, - std::unique_ptr> lightDuration) + AbstractPrewakeUpSettingsModel( + std::unique_ptr> chimeDuration, + std::unique_ptr> chimeTone, + std::unique_ptr> chimeVolume, + std::unique_ptr> lightDuration, + std::unique_ptr> frontlight) : chimeDuration(std::move(chimeDuration)), chimeTone(std::move(chimeTone)), - chimeVolume(std::move(chimeVolume)), lightDuration(std::move(lightDuration)) + chimeVolume(std::move(chimeVolume)), lightDuration(std::move(lightDuration)), + frontlight(std::move(frontlight)) {} virtual ~AbstractPrewakeUpSettingsModel() = default; @@ -45,10 +49,16 @@ namespace app::bell_settings return *lightDuration; } + gui::AbstractSettingsModel &getBrightness() + { + return *frontlight; + } + private: std::unique_ptr> chimeDuration; std::unique_ptr> chimeTone; std::unique_ptr> chimeVolume; std::unique_ptr> lightDuration; + std::unique_ptr> frontlight; }; } // namespace app::bell_settings diff --git a/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AlarmSettingsListItemProvider.cpp b/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AlarmSettingsListItemProvider.cpp index 5c862e3abdcd99bfd17a36ca1aca1125a7bd23e4..a6ab86c9ecdc4c2294cb5a45088a5d3ff8abaf4d 100644 --- a/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AlarmSettingsListItemProvider.cpp +++ b/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AlarmSettingsListItemProvider.cpp @@ -1,8 +1,9 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "BellSettingsStyle.hpp" #include "AlarmSettingsListItemProvider.hpp" +#include #include #include #include @@ -12,20 +13,23 @@ namespace app::bell_settings { using namespace gui; - AlarmSettingsListItemProvider::AlarmSettingsListItemProvider(AbstractAlarmSettingsModel &model, + AlarmSettingsListItemProvider::AlarmSettingsListItemProvider(AbstractAlarmSettingsModel &settingsModel, std::vector alarmToneRange) - : model{model} + : settingsModel{settingsModel} { buildListItems(std::move(alarmToneRange)); } void AlarmSettingsListItemProvider::buildListItems(std::vector alarmTonesRange) { - constexpr auto itemCount = 4U; + constexpr auto brightnessMin = 1U; + constexpr auto brightnessMax = 10U; + constexpr auto brightnessStep = 1U; + constexpr auto itemCount = 5U; internalData.reserve(itemCount); auto alarmTone = new list_items::Text(std::move(alarmTonesRange), - model.getAlarmTone(), + settingsModel.getAlarmTone(), utils::translate("app_bell_settings_alarm_settings_tone")); alarmTone->set_on_value_change_cb([this](const auto &val) { if (onToneChange) { @@ -49,7 +53,7 @@ namespace app::bell_settings constexpr auto volumeMax = 10U; auto alarmVolume = new list_items::Numeric(list_items::Numeric::spinner_type::range{volumeMin, volumeMax, volumeStep}, - model.getAlarmVolume(), + settingsModel.getAlarmVolume(), utils::translate("app_bell_settings_alarm_settings_volume")); alarmVolume->set_on_value_change_cb([this](const auto &val) { if (onVolumeChange) { @@ -69,8 +73,44 @@ namespace app::bell_settings internalData.emplace_back(alarmVolume); - internalData.emplace_back( - new OnOffListItem(model.getAlarmLightOnOff(), utils::translate("app_bell_settings_alarm_settings_light"))); + auto onOffLight = new OnOffListItem(settingsModel.getAlarmLightOnOff(), + utils::translate("app_bell_settings_alarm_settings_light")); + + internalData.emplace_back(onOffLight); + + onOffLight->onProceed = [onOffLight, this]() { + if (!onOffLight->isActive()) { + this->onExit(); + return true; + } + return false; + }; + + auto brightness = new list_items::Numeric( + list_items::Numeric::spinner_type::range{brightnessMin, brightnessMax, brightnessStep}, + settingsModel.getBrightness(), + utils::translate("app_bell_settings_frontlight_top_message")); + + brightness->set_on_value_change_cb([this](const auto &val) { + if (onFrontlightChange) { + onFrontlightChange(val); + } + }); + + brightness->onEnter = [this]() { + auto brightness = settingsModel.getBrightness().getValue(); + if (onFrontlightEnter) { + onFrontlightEnter(brightness); + } + }; + + brightness->onExit = [this]() { + if (onFrontlightExit) { + onFrontlightExit(); + } + }; + + internalData.emplace_back(brightness); for (auto item : internalData) { item->deleteByList = false; diff --git a/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AlarmSettingsListItemProvider.hpp b/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AlarmSettingsListItemProvider.hpp index 3dcab6673fa45b3204478f7884648ecc85a6552a..07f4a3fa162087de96c2e91e414a3d986ffe3ff8 100644 --- a/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AlarmSettingsListItemProvider.hpp +++ b/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AlarmSettingsListItemProvider.hpp @@ -5,18 +5,20 @@ #include "SettingsListItemProvider.hpp" #include +#include namespace app::bell_settings { + class AbstractFrontlightModel; class AlarmSettingsListItemProvider : public SettingsListItemProvider { public: - AlarmSettingsListItemProvider(AbstractAlarmSettingsModel &model, std::vector alarmToneRange); + AlarmSettingsListItemProvider(AbstractAlarmSettingsModel &settingsModel, std::vector alarmToneRange); private: void buildListItems(std::vector alarmTonesRange); - AbstractAlarmSettingsModel &model; + AbstractAlarmSettingsModel &settingsModel; }; } // namespace app::bell_settings diff --git a/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AlarmSettingsModel.cpp b/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AlarmSettingsModel.cpp index 94f1a57c2a2fd6e165a49886563aa05eff0e885d..6b437bf4017275572f1338b84bda974579cc07d5 100644 --- a/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AlarmSettingsModel.cpp +++ b/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AlarmSettingsModel.cpp @@ -47,4 +47,16 @@ namespace app::bell_settings const auto str = settings.getValue(bell::settings::Alarm::lightActive, settings::SettingsScope::Global); return std::stoi(str); } + + void AlarmFrontlightModel::setValue(frontlight_utils::Brightness value) + { + const auto valStr = std::to_string(value); + settings.setValue(bell::settings::Alarm::brightness, valStr, settings::SettingsScope::Global); + } + + frontlight_utils::Brightness AlarmFrontlightModel::getValue() const + { + const auto str = settings.getValue(bell::settings::Alarm::brightness, settings::SettingsScope::Global); + return std::stoi(str); + } } // namespace app::bell_settings diff --git a/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/PrewakeUpListItemProvider.cpp b/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/PrewakeUpListItemProvider.cpp index bdfe8abad07c0b845a5c79aa5909bab115819cf8..096abbde881cce9b25ddaf28a470dacd4231353f 100644 --- a/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/PrewakeUpListItemProvider.cpp +++ b/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/PrewakeUpListItemProvider.cpp @@ -1,7 +1,8 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "PrewakeUpListItemProvider.hpp" +#include #include #include #include @@ -14,29 +15,31 @@ namespace app::bell_settings { using namespace gui; - PrewakeUpListItemProvider::PrewakeUpListItemProvider(AbstractPrewakeUpSettingsModel &model, + PrewakeUpListItemProvider::PrewakeUpListItemProvider(AbstractPrewakeUpSettingsModel &settingsModel, std::vector chimeToneRange) - : model{model} + : settingsModel{settingsModel} { buildListItems(std::move(chimeToneRange)); } void PrewakeUpListItemProvider::buildListItems(std::vector chimeToneRange) { - constexpr auto itemCount = 4U; + constexpr auto brightnessMin = 1U; + constexpr auto brightnessMax = 10U; + constexpr auto brightnessStep = 1U; + constexpr auto itemCount = 5U; internalData.reserve(itemCount); const std::string minStr = utils::translate("common_minute_short"); auto chimeDuration = new list_items::NumberWithSuffix( list_items::NumberWithSuffix::spinner_type::range{0, 5, 10, 15}, - model.getChimeDuration(), + settingsModel.getChimeDuration(), utils::translate("app_bell_settings_alarm_settings_prewake_up_chime_top_description"), utils::translate("app_bell_settings_alarm_settings_prewake_up_chime_bottom_description")); chimeDuration->onProceed = [chimeDuration, this]() { if (chimeDuration->value() == 0) { - constexpr auto lightDurationListIndex = 3U; - list->rebuildList(gui::listview::RebuildType::OnOffset, lightDurationListIndex); + this->onExit(); return true; } return false; @@ -46,7 +49,7 @@ namespace app::bell_settings auto chimeTone = new list_items::Text(std::move(chimeToneRange), - model.getChimeTone(), + settingsModel.getChimeTone(), utils::translate("app_bell_settings_alarm_settings_prewake_up_chime_tone")); chimeTone->set_on_value_change_cb([this](const auto &val) { if (onToneChange) { @@ -70,7 +73,7 @@ namespace app::bell_settings constexpr auto volumeMax = 10U; auto volume = new list_items::Numeric(list_items::Numeric::spinner_type::range{volumeMin, volumeMax, volumeStep}, - model.getChimeVolume(), + settingsModel.getChimeVolume(), utils::translate("app_bell_settings_alarm_settings_prewake_up_chime_volume")); volume->set_on_value_change_cb([this](const auto &val) { if (onVolumeChange) { @@ -93,7 +96,7 @@ namespace app::bell_settings auto lightDuration = new list_items::NumberWithSuffix( list_items::NumberWithSuffix::spinner_type::range{0, 5, 10, 15}, - model.getLightDuration(), + settingsModel.getLightDuration(), utils::translate("app_bell_settings_alarm_settings_prewake_up_light_top_description"), utils::translate("app_bell_settings_alarm_settings_prewake_up_light_bottom_description")); @@ -105,8 +108,42 @@ namespace app::bell_settings return false; }; + lightDuration->onProceed = [lightDuration, this]() { + if (lightDuration->value() == 0) { + this->onExit(); + return true; + } + return false; + }; + internalData.emplace_back(lightDuration); + auto brightness = new list_items::Numeric( + list_items::Numeric::spinner_type::range{brightnessMin, brightnessMax, brightnessStep}, + settingsModel.getBrightness(), + utils::translate("app_bell_settings_frontlight_top_message")); + + brightness->set_on_value_change_cb([this](const auto &val) { + if (onFrontlightChange) { + onFrontlightChange(val); + } + }); + + brightness->onEnter = [this]() { + auto brightness = settingsModel.getBrightness().getValue(); + if (onFrontlightEnter) { + onFrontlightEnter(brightness); + } + }; + + brightness->onExit = [this]() { + if (onFrontlightExit) { + onFrontlightExit(); + } + }; + + internalData.emplace_back(brightness); + for (auto item : internalData) { item->deleteByList = false; } diff --git a/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/PrewakeUpListItemProvider.hpp b/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/PrewakeUpListItemProvider.hpp index 2770e6078852bf6ab1fdac5fe84b678feeba66e2..1955f2b3d73044ebc3dd7cb7b285c92edc58ba58 100644 --- a/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/PrewakeUpListItemProvider.hpp +++ b/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/PrewakeUpListItemProvider.hpp @@ -1,22 +1,24 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once #include "SettingsListItemProvider.hpp" #include "AbstractPrewakeUpSettingsModel.hpp" +#include namespace app::bell_settings { + class AbstractFrontlightModel; class PrewakeUpListItemProvider : public SettingsListItemProvider { public: - PrewakeUpListItemProvider(AbstractPrewakeUpSettingsModel &model, std::vector chimeToneRange); + PrewakeUpListItemProvider(AbstractPrewakeUpSettingsModel &settingsModel, std::vector chimeToneRange); private: void buildListItems(std::vector preWakeupToneRange); - AbstractPrewakeUpSettingsModel &model; + AbstractPrewakeUpSettingsModel &settingsModel; }; } // namespace app::bell_settings diff --git a/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/PrewakeUpSettingsModel.cpp b/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/PrewakeUpSettingsModel.cpp index cd65fe12850684994e840edba1ca6488e27d665e..5dc96f4f567ee95c9fc1eae034471e45f4c1bf7b 100644 --- a/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/PrewakeUpSettingsModel.cpp +++ b/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/PrewakeUpSettingsModel.cpp @@ -59,4 +59,16 @@ namespace app::bell_settings const auto str = settings.getValue(bell::settings::PrewakeUp::lightDuration, settings::SettingsScope::Global); return std::stoi(str); } + + void PrewakeUpFrontlightModel::setValue(frontlight_utils::Brightness value) + { + const auto valStr = std::to_string(frontlight_utils::fixedValToPercentage(value)); + settings.setValue(bell::settings::PrewakeUp::brightness, valStr, settings::SettingsScope::Global); + } + + frontlight_utils::Brightness PrewakeUpFrontlightModel::getValue() const + { + const auto str = settings.getValue(bell::settings::PrewakeUp::brightness, settings::SettingsScope::Global); + return frontlight_utils::percentageToFixedVal(std::stoi(str)); + } } // namespace app::bell_settings diff --git a/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/PrewakeUpSettingsModel.hpp b/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/PrewakeUpSettingsModel.hpp index 3acd0fede4099b1d4d852444a9d1f70f50a570ed..18b0287a40ace41d4c6f3c46ce805bfe2214c945 100644 --- a/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/PrewakeUpSettingsModel.hpp +++ b/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/PrewakeUpSettingsModel.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once @@ -6,6 +6,7 @@ #include "AbstractPrewakeUpSettingsModel.hpp" #include #include +#include namespace app::bell_settings { @@ -49,17 +50,28 @@ namespace app::bell_settings std::uint8_t getValue() const override; }; + class PrewakeUpFrontlightModel : public gui::SettingsModel + { + public: + using SettingsModel::SettingsModel; + + void setValue(frontlight_utils::Brightness value) override; + frontlight_utils::Brightness getValue() const override; + }; + class PrewakeUpSettingsModel : public AbstractPrewakeUpSettingsModel { public: PrewakeUpSettingsModel(std::unique_ptr chimeDurationModel, std::unique_ptr chimeToneModel, std::unique_ptr chimeVolumeModel, - std::unique_ptr lightDurationModel) + std::unique_ptr lightDurationModel, + std::unique_ptr frontlightModel) : AbstractPrewakeUpSettingsModel(std::move(chimeDurationModel), std::move(chimeToneModel), std::move(chimeVolumeModel), - std::move(lightDurationModel)) + std::move(lightDurationModel), + std::move(frontlightModel)) {} }; } // namespace app::bell_settings diff --git a/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/SettingsListItemProvider.hpp b/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/SettingsListItemProvider.hpp index 7b9f5f9292c623221546173768ccbf713c924b1b..2543ef55973a82bb2667325919b00a8111d5d302 100644 --- a/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/SettingsListItemProvider.hpp +++ b/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/SettingsListItemProvider.hpp @@ -1,9 +1,10 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once #include +#include #include namespace app::bell_settings @@ -18,6 +19,9 @@ namespace app::bell_settings /// Val contains currently chosen volume(1-10 range) using VolumeCallback = std::function; using VolumeEnterCallback = ToneCallback; + using FrontlightCallback = std::function; + using FrontlightEnterCallback = FrontlightCallback; + using FrontlightExitCallback = std::function; std::vector getListItems(); @@ -40,6 +44,10 @@ namespace app::bell_settings VolumeEnterCallback onVolumeEnter; VolumeCallback onVolumeExit; VolumeCallback onVolumeChange; + + FrontlightEnterCallback onFrontlightEnter; + FrontlightExitCallback onFrontlightExit; + FrontlightCallback onFrontlightChange; }; } // namespace app::bell_settings diff --git a/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.cpp b/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.cpp index 7818c65508b59e829747c154012091bf5bc04e02..110dafb1ef78f92d8b5e990f8a8d78f53c2e273d 100644 --- a/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.cpp +++ b/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.cpp @@ -6,12 +6,13 @@ namespace app::bell_settings { - AlarmSettingsPresenter::AlarmSettingsPresenter(std::shared_ptr provider, - std::unique_ptr model, + AlarmSettingsPresenter::AlarmSettingsPresenter(std::unique_ptr &&provider, + std::unique_ptr &&settingsModel, AbstractAudioModel &audioModel, - std::unique_ptr soundsRepository) - : provider(provider), - model(std::move(model)), audioModel{audioModel}, soundsRepository{std::move(soundsRepository)} + std::unique_ptr &&soundsRepository, + std::unique_ptr &&frontlight) + : provider{std::move(provider)}, settingsModel{std::move(settingsModel)}, audioModel{audioModel}, + soundsRepository{std::move(soundsRepository)}, frontlight{std::move(frontlight)} { auto playSound = [this](const UTF8 &val) { @@ -29,6 +30,15 @@ namespace app::bell_settings this->provider->onVolumeChange = [this](const auto &val) { this->audioModel.setVolume(val, AbstractAudioModel::PlaybackType::Alarm, {}); }; + + auto setBrightness = [this](const auto &brightness) { + this->frontlight->setStatus(true); + this->frontlight->setBrightness(brightness); + }; + + this->provider->onFrontlightEnter = setBrightness; + this->provider->onFrontlightChange = setBrightness; + this->provider->onFrontlightExit = [this]() { this->frontlight->revertUnsavedChanges(); }; } auto AlarmSettingsPresenter::saveData() -> void @@ -54,10 +64,12 @@ namespace app::bell_settings { provider->clearData(); } + void AlarmSettingsPresenter::stopSound() { this->audioModel.stopPlayedByThis({}); } + void AlarmSettingsPresenter::exitWithSave() { saveData(); @@ -67,7 +79,7 @@ namespace app::bell_settings void AlarmSettingsPresenter::exitWithRollback() { this->stopSound(); - model->getAlarmVolume().restoreDefault(); + settingsModel->getAlarmVolume().restoreDefault(); eraseProviderData(); } } // namespace app::bell_settings diff --git a/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.hpp b/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.hpp index 4657814203bec31597648b70c9d5272e3a77e653..230660a9a86ffdb60c3de002401a0f9773ddb73a 100644 --- a/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.hpp +++ b/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.hpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -35,6 +36,7 @@ namespace app::bell_settings virtual ~Presenter() noexcept = default; virtual auto getPagesProvider() const -> std::shared_ptr = 0; virtual auto loadData() -> void = 0; + virtual auto saveData() -> void = 0; virtual auto eraseProviderData() -> void = 0; virtual auto exitWithSave() -> void = 0; virtual auto exitWithRollback() -> void = 0; @@ -44,24 +46,26 @@ namespace app::bell_settings class AlarmSettingsPresenter : public AlarmSettingsWindowContract::Presenter { public: - AlarmSettingsPresenter(std::shared_ptr provider, - std::unique_ptr model, + AlarmSettingsPresenter(std::unique_ptr &&provider, + std::unique_ptr &&settingsModel, AbstractAudioModel &audioModel, - std::unique_ptr soundsRepository); + std::unique_ptr &&soundsRepository, + std::unique_ptr &&frontlight); auto getPagesProvider() const -> std::shared_ptr override; auto loadData() -> void override; + auto saveData() -> void; auto eraseProviderData() -> void override; auto exitWithSave() -> void override; auto exitWithRollback() -> void override; private: auto stopSound() -> void; - auto saveData() -> void; std::shared_ptr provider; - std::unique_ptr model; + std::unique_ptr settingsModel; AbstractAudioModel &audioModel; std::unique_ptr soundsRepository; + std::unique_ptr frontlight; }; } // namespace app::bell_settings diff --git a/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.cpp b/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.cpp index fe33c1e5d1349e4452e9f1910705310119f59028..6c5a2c2cf4a4e02d8f25da4ad09a2726013deee6 100644 --- a/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.cpp +++ b/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "PrewakeUpPresenter.hpp" @@ -6,12 +6,13 @@ namespace app::bell_settings { - PrewakeUpWindowPresenter::PrewakeUpWindowPresenter(std::shared_ptr provider, - std::unique_ptr model, + PrewakeUpWindowPresenter::PrewakeUpWindowPresenter(std::unique_ptr &&provider, + std::unique_ptr &&model, AbstractAudioModel &audioModel, - std::unique_ptr soundsRepository) - : provider(std::move(provider)), - model(std::move(model)), audioModel{audioModel}, soundsRepository{std::move(soundsRepository)} + std::unique_ptr &&soundsRepository, + std::unique_ptr &&frontlight) + : provider{std::move(provider)}, model{std::move(model)}, audioModel{audioModel}, + soundsRepository{std::move(soundsRepository)}, frontlight{std::move(frontlight)} { auto playSound = [this](const UTF8 &val) { currentSoundPath = val; @@ -34,11 +35,21 @@ namespace app::bell_settings playSound(currentSoundPath); } }; + + auto setBrightness = [this](const auto &brightness) { + this->frontlight->setStatus(true); + this->frontlight->setBrightness(brightness); + }; + + this->provider->onFrontlightEnter = setBrightness; + this->provider->onFrontlightChange = setBrightness; + this->provider->onFrontlightExit = [this]() { this->frontlight->revertUnsavedChanges(); }; } auto PrewakeUpWindowPresenter::saveData() -> void { for (const auto &item : provider->getListItems()) { + item->getValue(); } } diff --git a/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.hpp b/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.hpp index be32ab0db97c2caf640601c68a858f321d4de53e..ab1b566a22abecbe40231967cbb2b034643438c8 100644 --- a/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.hpp +++ b/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -44,10 +45,11 @@ namespace app::bell_settings class PrewakeUpWindowPresenter : public PrewakeUpWindowContract::Presenter { public: - PrewakeUpWindowPresenter(std::shared_ptr provider, - std::unique_ptr model, + PrewakeUpWindowPresenter(std::unique_ptr &&provider, + std::unique_ptr &&model, AbstractAudioModel &audioModel, - std::unique_ptr soundsRepository); + std::unique_ptr &&soundsRepository, + std::unique_ptr &&frontlight); auto getPagesProvider() const -> std::shared_ptr override; auto saveData() -> void override; @@ -62,6 +64,7 @@ namespace app::bell_settings std::unique_ptr model; AbstractAudioModel &audioModel; std::unique_ptr soundsRepository; + std::unique_ptr frontlight; UTF8 currentSoundPath; }; } // namespace app::bell_settings diff --git a/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.cpp b/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.cpp index d7be5129a8bff17cbfd3eb9438a09c1c66e7c225..a247d213aff5f3388a7b81d9c127fe95e8d0ccad 100644 --- a/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.cpp +++ b/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.cpp @@ -26,7 +26,6 @@ namespace gui { erase(); buildInterface(); - isSaveNeeded = false; } void BellSettingsAlarmSettingsWindow::buildInterface() @@ -51,7 +50,6 @@ namespace gui return true; } if (inputEvent.isShortRelease(KeyCode::KEY_ENTER)) { - isSaveNeeded = true; exit(); return true; } @@ -64,6 +62,7 @@ namespace gui void BellSettingsAlarmSettingsWindow::exit() { + presenter->saveData(); application->switchWindow( window::bell_finished::defaultName, BellFinishedWindowData::Factory::create("circle_success_big", BellSettingsAlarmSettingsMenuWindow::name)); @@ -72,12 +71,7 @@ namespace gui void BellSettingsAlarmSettingsWindow::onClose(CloseReason reason) { if (reason != CloseReason::Popup) { - if (isSaveNeeded) { - presenter->exitWithSave(); - } - else { - presenter->exitWithRollback(); - } + presenter->eraseProviderData(); } } diff --git a/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.hpp b/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.hpp index ff6a67ba2dc62b488e605249b9f40c4d0d217213..12a846efe26e24c4f6591518b4251f556e9248b2 100644 --- a/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.hpp +++ b/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.hpp @@ -31,6 +31,5 @@ namespace gui private: SideListView *sidelistview{}; std::unique_ptr presenter; - bool isSaveNeeded{false}; }; } /* namespace gui */ diff --git a/products/BellHybrid/apps/common/CMakeLists.txt b/products/BellHybrid/apps/common/CMakeLists.txt index 99f3d33af923edb500ba71f9dad9c51086f6db81..3a12c72151e48c251c88a0dae467438fc666a8ea 100644 --- a/products/BellHybrid/apps/common/CMakeLists.txt +++ b/products/BellHybrid/apps/common/CMakeLists.txt @@ -75,6 +75,7 @@ target_sources(application-bell-common include/common/windows/SessionPausedWindow.hpp include/common/TimeUtils.hpp include/common/data/BatteryUtils.hpp + include/common/data/FrontlightUtils.hpp include/common/models/AbstractAlarmModel.hpp include/common/models/AbstractBedtimeModel.hpp include/common/models/AbstractSettingsModel.hpp diff --git a/products/BellHybrid/apps/common/include/common/data/FrontlightUtils.hpp b/products/BellHybrid/apps/common/include/common/data/FrontlightUtils.hpp new file mode 100644 index 0000000000000000000000000000000000000000..f27ff899b2891f14e204a84f43ca1c8725426605 --- /dev/null +++ b/products/BellHybrid/apps/common/include/common/data/FrontlightUtils.hpp @@ -0,0 +1,36 @@ +// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#pragma once + +#include +#include + +namespace frontlight_utils +{ + namespace + { + static constexpr auto minPercent = 0.0f; + static constexpr auto maxPercent = 100.0f; + static constexpr auto minimumLightOnPercentOffsetValue = 16.0f; + static constexpr auto minBrightness = 1U; + static constexpr auto maxBrightness = 10U; + static constexpr float multiplier = (maxPercent - minimumLightOnPercentOffsetValue) / maxBrightness; + } // namespace + + /// 1-10 range + using Brightness = std::uint8_t; + + static inline float fixedValToPercentage(Brightness value) + { + float scaled = minimumLightOnPercentOffsetValue + (value - minBrightness) * multiplier; + return std::min(maxPercent, std::max(minPercent, scaled)); + } + + static inline Brightness percentageToFixedVal(float percent) + { + auto value = (percent - minimumLightOnPercentOffsetValue) / multiplier; + return std::round(value + minBrightness); + } + +} // namespace frontlight_utils diff --git a/products/BellHybrid/apps/common/include/common/models/AbstractAlarmSettingsModel.hpp b/products/BellHybrid/apps/common/include/common/models/AbstractAlarmSettingsModel.hpp index 4c7b789c28454a02ab3f784f3413da49dbba7ae3..949e0a4e7f9e14342cb35085fa55a27228567ff0 100644 --- a/products/BellHybrid/apps/common/include/common/models/AbstractAlarmSettingsModel.hpp +++ b/products/BellHybrid/apps/common/include/common/models/AbstractAlarmSettingsModel.hpp @@ -1,9 +1,10 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once #include +#include #include #include @@ -13,11 +14,13 @@ namespace app::bell_settings class AbstractAlarmSettingsModel { public: - AbstractAlarmSettingsModel(std::unique_ptr> alarmTone, - std::unique_ptr> alarmVolume, - std::unique_ptr> alarmLightOnOff) + AbstractAlarmSettingsModel( + std::unique_ptr> alarmTone, + std::unique_ptr> alarmVolume, + std::unique_ptr> alarmLightOnOff, + std::unique_ptr> alarmFrontlight) : alarmTone(std::move(alarmTone)), alarmVolume(std::move(alarmVolume)), - alarmLightOnOff(std::move(alarmLightOnOff)) + alarmLightOnOff(std::move(alarmLightOnOff)), alarmFrontlight(std::move(alarmFrontlight)) {} virtual ~AbstractAlarmSettingsModel() = default; @@ -37,9 +40,15 @@ namespace app::bell_settings return *alarmLightOnOff; } + gui::AbstractSettingsModel &getBrightness() + { + return *alarmFrontlight; + } + private: std::unique_ptr> alarmTone; std::unique_ptr> alarmVolume; std::unique_ptr> alarmLightOnOff; + std::unique_ptr> alarmFrontlight; }; } // namespace app::bell_settings diff --git a/products/BellHybrid/apps/common/include/common/models/AlarmSettingsModel.hpp b/products/BellHybrid/apps/common/include/common/models/AlarmSettingsModel.hpp index 182e45d5b24f63e69eac14c081f00de18e79350d..64d858d70ccd543125f7d0a0679149fcdcf36ad7 100644 --- a/products/BellHybrid/apps/common/include/common/models/AlarmSettingsModel.hpp +++ b/products/BellHybrid/apps/common/include/common/models/AlarmSettingsModel.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once @@ -6,6 +6,7 @@ #include "AbstractAlarmSettingsModel.hpp" #include #include +#include namespace app::bell_settings { @@ -40,14 +41,26 @@ namespace app::bell_settings bool getValue() const override; }; + class AlarmFrontlightModel : public gui::SettingsModel + { + public: + using SettingsModel::SettingsModel; + + void setValue(frontlight_utils::Brightness value) override; + frontlight_utils::Brightness getValue() const override; + }; + class AlarmSettingsModel : public AbstractAlarmSettingsModel { public: AlarmSettingsModel(std::unique_ptr alarmToneModel, std::unique_ptr alarmVolumeModel, - std::unique_ptr alarmLightOnOffModel) - : AbstractAlarmSettingsModel( - std::move(alarmToneModel), std::move(alarmVolumeModel), std::move(alarmLightOnOffModel)) + std::unique_ptr alarmLightOnOffModel, + std::unique_ptr alarmFrontlightModel) + : AbstractAlarmSettingsModel(std::move(alarmToneModel), + std::move(alarmVolumeModel), + std::move(alarmLightOnOffModel), + std::move(alarmFrontlightModel)) {} }; } // namespace app::bell_settings diff --git a/products/BellHybrid/apps/common/include/common/models/FrontlightModel.hpp b/products/BellHybrid/apps/common/include/common/models/FrontlightModel.hpp index c30c93422b12798d616bba8714d54514dd53fe06..9880d3005cbdc1a924dabe40886fc297029b0d1e 100644 --- a/products/BellHybrid/apps/common/include/common/models/FrontlightModel.hpp +++ b/products/BellHybrid/apps/common/include/common/models/FrontlightModel.hpp @@ -5,6 +5,7 @@ #include #include +#include #include namespace app @@ -17,10 +18,8 @@ namespace app::bell_settings class AbstractFrontlightModel { public: - /// 1-10 range - using Brightness = std::uint8_t; virtual ~AbstractFrontlightModel() = default; - virtual void setBrightness(Brightness value) = 0; + virtual void setBrightness(frontlight_utils::Brightness value) = 0; virtual void setMode(screen_light_control::ScreenLightMode mode) = 0; virtual void setStatus(bool onOff) = 0; virtual void revertUnsavedChanges() = 0; @@ -40,7 +39,7 @@ namespace app::bell_settings gui::AbstractSettingsModel &getBrightnessModel() override; gui::AbstractSettingsModel &getModeModel() override; - void setBrightness(Brightness value) override; + void setBrightness(frontlight_utils::Brightness value) override; void setMode(screen_light_control::ScreenLightMode mode) override; void setStatus(bool onOff) override; void revertUnsavedChanges() override; diff --git a/products/BellHybrid/services/db/include/db/SystemSettings.hpp b/products/BellHybrid/services/db/include/db/SystemSettings.hpp index 276eb8e8a443167454905e8df232ab72795293af..2266e8a793e2f5c1b99f2424de98b7e0524e0ed3 100644 --- a/products/BellHybrid/services/db/include/db/SystemSettings.hpp +++ b/products/BellHybrid/services/db/include/db/SystemSettings.hpp @@ -21,12 +21,14 @@ namespace bell::settings constexpr inline auto duration = "prewake_up_duration"; constexpr inline auto tone = "prewake_up_tone"; constexpr inline auto lightDuration = "prewake_up_light_duration"; + constexpr inline auto brightness = "prewake_up_brightness"; } // namespace PrewakeUp namespace Alarm { constexpr inline auto tone = "alarm_tone"; constexpr inline auto lightActive = "alarm_light_active"; constexpr inline auto duration = "alarm_duration"; + constexpr inline auto brightness = "alarm_brightness"; } // namespace Alarm namespace Bedtime {