From 738f50216423f018c6f98b94c7a38a246dd36977 Mon Sep 17 00:00:00 2001 From: Lukasz Skrzypczak Date: Fri, 1 Oct 2021 05:54:23 -0700 Subject: [PATCH] [BH-934] Frontlight intensity live change Added live frontlight brightness setting --- .../models/FrontlightModel.cpp | 17 +++++++++++++++-- .../models/FrontlightModel.hpp | 1 + .../windows/BellSettingsFrontlight.cpp | 11 +++++++++++ .../BellHybrid/services/evtmgr/EventManager.cpp | 2 +- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/products/BellHybrid/apps/application-bell-settings/models/FrontlightModel.cpp b/products/BellHybrid/apps/application-bell-settings/models/FrontlightModel.cpp index cbbe7bb25a2efe3595fec3e3997712b88fc84096..231d6e4c845be7eaf20f3d6cd4c790fdb7f8fbc4 100644 --- a/products/BellHybrid/apps/application-bell-settings/models/FrontlightModel.cpp +++ b/products/BellHybrid/apps/application-bell-settings/models/FrontlightModel.cpp @@ -45,8 +45,7 @@ namespace app::bell_settings void FrontlightModel::createData() { - frontlightSetSpinner = - new gui::Spinner(fmtSpinnerMin, fmtSpinnerMax, fmtSpinnerStep, gui::Boundaries::Continuous); + frontlightSetSpinner = new gui::Spinner(fmtSpinnerMin, fmtSpinnerMax, fmtSpinnerStep, gui::Boundaries::Fixed); frontlightSetSpinner->setMaximumSize(style::bell_base_layout::w, style::bell_base_layout::h); frontlightSetSpinner->setFont(gui::bell_settings_style::time_fmt_set_list_item::font); @@ -55,6 +54,7 @@ namespace app::bell_settings frontlightSetSpinner->setFixedFieldWidth(2); frontlightSetSpinner->setEdges(gui::RectangleEdge::None); frontlightSetSpinner->setCurrentValue(fmtSpinnerMin); + frontlightSetSpinner->setFixedFieldWidth(0); frontlightSetSpinner->setFocusEdges(gui::RectangleEdge::None); } @@ -72,6 +72,19 @@ namespace app::bell_settings bsp::eink_frontlight::BrightnessPercentage brightnessValue = utils::getNumericValue(settings.getValue(brightnessLevel, settings::SettingsScope::Global)); LOG_DEBUG("Reading frontlight value %0.1f", brightnessValue); + // prevent showing spinner value less than minimum when database empty + if (static_cast(brightnessValue) < fmtSpinnerMin) { + brightnessValue = static_cast(fmtSpinnerMin); + } frontlightSetSpinner->setCurrentValue(static_cast(brightnessValue / 10)); } + + void FrontlightModel::setLiveBrightness(const int value) + { + screenLightSettings->setStatus(true); + if ((value < static_cast(fmtSpinnerMin)) || (value > static_cast(fmtSpinnerMax))) { + return; + } + screenLightSettings->setBrightness(static_cast(value * 10)); + } } // namespace app::bell_settings diff --git a/products/BellHybrid/apps/application-bell-settings/models/FrontlightModel.hpp b/products/BellHybrid/apps/application-bell-settings/models/FrontlightModel.hpp index d229c34f39a636de86b647c177deb674b2ecbc82..5a91cb6bf61590c4e493f156341d6c6cbf6b5571 100644 --- a/products/BellHybrid/apps/application-bell-settings/models/FrontlightModel.hpp +++ b/products/BellHybrid/apps/application-bell-settings/models/FrontlightModel.hpp @@ -24,6 +24,7 @@ namespace app::bell_settings auto createData() -> void; [[nodiscard]] auto getSpinner() -> gui::Spinner *; + auto setLiveBrightness(const int value) -> void; private: app::ApplicationCommon *application = nullptr; diff --git a/products/BellHybrid/apps/application-bell-settings/windows/BellSettingsFrontlight.cpp b/products/BellHybrid/apps/application-bell-settings/windows/BellSettingsFrontlight.cpp index 5febeb6afde1cc47d2a95d246a681374f86067ff..5e201ba9fa1fa51403a108c4b86ec5792510e0d2 100644 --- a/products/BellHybrid/apps/application-bell-settings/windows/BellSettingsFrontlight.cpp +++ b/products/BellHybrid/apps/application-bell-settings/windows/BellSettingsFrontlight.cpp @@ -59,6 +59,17 @@ namespace gui bool BellSettingsFrontlightWindow::onInput(const gui::InputEvent &inputEvent) { + // this has to be first because body->oninput() catches those keycodes for itself + // also because of body->oninput() sends keypresses to spinner, it's value is updated *after* frontlight + // brightness set so proper +1 -1 has to be added to to set brightness level corresponding to screen indicator + if (inputEvent.isShortRelease(KeyCode::KEY_UP)) { + auto value = presenter->getPagesProvider()->getSpinner()->getCurrentValue(); + presenter->getPagesProvider()->setLiveBrightness(value + 1); + } + else if (inputEvent.isShortRelease(KeyCode::KEY_DOWN)) { + auto value = presenter->getPagesProvider()->getSpinner()->getCurrentValue(); + presenter->getPagesProvider()->setLiveBrightness(value - 1); + } if (body->onInput(inputEvent)) { return true; } diff --git a/products/BellHybrid/services/evtmgr/EventManager.cpp b/products/BellHybrid/services/evtmgr/EventManager.cpp index c048f0f4ae6ebb67c8e68a61b120d126754b5f8f..de0bfc54de7fd0a537daea716b697301a54e5c75 100644 --- a/products/BellHybrid/services/evtmgr/EventManager.cpp +++ b/products/BellHybrid/services/evtmgr/EventManager.cpp @@ -52,7 +52,7 @@ void EventManager::handleKeyEvent(sys::Message *msg) } if (kbdMessage->key.state == RawKey::State::Pressed) { - backlightHandler.handleKeyPressed(static_cast(static_cast(kbdMessage->key.keyCode))); + backlightHandler.handleKeyPressed(static_cast(mapKey(static_cast(kbdMessage->key.keyCode)))); } keySequenceMgr->process(kbdMessage->key);