~aleteoryx/muditaos

79e1688149e246fdc4d0d1dfaff868f59e46482e — Dawid Wojtas 3 years ago 31e2446
[BH-1574][BH-1614] Fix the bedside lamp and brightness in the alarm

Now the bedside lamp has lower priority
than the pre-wake up and main alarm. It means
that front light will be changed according
to alarm settings.

Fix front light brightness calculation for
pre-wake up and main alarm.
M harmony_changelog.md => harmony_changelog.md +1 -0
@@ 30,6 30,7 @@
* Add loop mode

### Fixed
* Brightness calculation for alarms

#### Home Screen:
* Centering of battery indicator.

M module-services/service-evtmgr/screen-light-control/ScreenLightControlParameters.hpp => module-services/service-evtmgr/screen-light-control/ScreenLightControlParameters.hpp +9 -1
@@ 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


@@ 8,6 8,14 @@

namespace screen_light_control
{
    // Sender which send light request
    enum class Sender
    {
        Other,
        AlarmPrewakeup,
        Alarm
    };

    /// Modes in which front light can operate
    enum class ScreenLightMode
    {

M module-services/service-evtmgr/service-evtmgr/ScreenLightControlMessage.hpp => module-services/service-evtmgr/service-evtmgr/ScreenLightControlMessage.hpp +9 -23
@@ 11,15 11,18 @@

namespace sevm
{
    class ScreenLightSettingsControlMessage : public sys::DataMessage
    class ScreenLightControlMessage : public sys::DataMessage
    {
        const screen_light_control::Action action;
        std::optional<screen_light_control::Parameters> params;
        const screen_light_control::Sender sender;

      public:
        explicit ScreenLightSettingsControlMessage(
            screen_light_control::Action act, std::optional<screen_light_control::Parameters> params = std::nullopt)
            : sys::DataMessage(MessageType::ScreenLightControlAction), action(act), params{std::move(params)}
        explicit ScreenLightControlMessage(screen_light_control::Action act,
                                           std::optional<screen_light_control::Parameters> params = std::nullopt,
                                           screen_light_control::Sender sender = screen_light_control::Sender::Other)
            : sys::DataMessage(MessageType::ScreenLightControlAction),
              action(act), params{std::move(params)}, sender{sender}
        {}

        [[nodiscard]] auto getAction() const noexcept -> screen_light_control::Action


@@ 31,27 34,10 @@ namespace sevm
        {
            return params;
        }
    };

    class ScreenLightControlMessage : public sys::DataMessage
    {
        const screen_light_control::Action action;
        std::optional<screen_light_control::Parameters> params;

      public:
        explicit ScreenLightControlMessage(screen_light_control::Action act,
                                           std::optional<screen_light_control::Parameters> params = std::nullopt)
            : sys::DataMessage(MessageType::ScreenLightControlAction), action(act), params{std::move(params)}
        {}

        [[nodiscard]] auto getAction() const noexcept -> screen_light_control::Action
        [[nodiscard]] auto getSender() const noexcept -> screen_light_control::Sender
        {
            return action;
        }

        [[nodiscard]] auto getParams() const noexcept -> const std::optional<screen_light_control::Parameters> &
        {
            return params;
            return sender;
        }
    };


M products/BellHybrid/alarms/src/actions/FrontlightAction.cpp => products/BellHybrid/alarms/src/actions/FrontlightAction.cpp +54 -23
@@ 15,10 15,29 @@ namespace alarms
{
    namespace
    {
        screen_light_control::Sender translateDependency(FrontlightAction::SettingsDependency dependency)
        {
            screen_light_control::Sender sender;

            switch (dependency) {
            case FrontlightAction::SettingsDependency::AlarmClock:
                sender = screen_light_control::Sender::Alarm;
                break;
            case FrontlightAction::SettingsDependency::Prewakeup:
                sender = screen_light_control::Sender::AlarmPrewakeup;
                break;
            case FrontlightAction::SettingsDependency::None:
            default:
                sender = screen_light_control::Sender::Other;
                break;
            }
            return sender;
        }

        class ManualFrontlightAction : public AbstractAlarmAction
        {
          public:
            explicit ManualFrontlightAction(sys::Service &service);
            explicit ManualFrontlightAction(sys::Service &service, FrontlightAction::SettingsDependency dependency);
            bool execute() override;
            bool turnOff() override;



@@ 27,12 46,14 @@ namespace alarms

            sys::Service &service;
            settings::Settings settings;
            FrontlightAction::SettingsDependency settingsDependency;
        };

        class LinearProgressFrontlightAction : public AbstractAlarmAction
        {
          public:
            explicit LinearProgressFrontlightAction(sys::Service &service);
            explicit LinearProgressFrontlightAction(sys::Service &service,
                                                    FrontlightAction::SettingsDependency dependency);
            bool execute() override;
            bool turnOff() override;



@@ 41,16 62,17 @@ namespace alarms

            sys::Service &service;
            settings::Settings settings;
            FrontlightAction::SettingsDependency settingsDependency;
        };

        std::unique_ptr<AbstractAlarmAction> createFrontlightImplementation(sys::Service &service,
                                                                            FrontlightAction::Mode mode)
        std::unique_ptr<AbstractAlarmAction> createFrontlightImplementation(
            sys::Service &service, FrontlightAction::Mode mode, FrontlightAction::SettingsDependency settingsDependency)
        {
            switch (mode) {
            case FrontlightAction::Mode::Manual:
                return std::make_unique<ManualFrontlightAction>(service);
                return std::make_unique<ManualFrontlightAction>(service, settingsDependency);
            case FrontlightAction::Mode::LinearProgress:
                return std::make_unique<LinearProgressFrontlightAction>(service);
                return std::make_unique<LinearProgressFrontlightAction>(service, settingsDependency);
            }
            return nullptr;
        }


@@ 58,8 80,8 @@ namespace alarms

    FrontlightAction::FrontlightAction(sys::Service &service, Mode mode, SettingsDependency settingsDependency)
        : service{service}, settingsDependency{settingsDependency},
          pimpl{createFrontlightImplementation(service, mode)}, settings{
                                                                    service::ServiceProxy{service.weak_from_this()}}
          pimpl{createFrontlightImplementation(service, mode, settingsDependency)}, settings{service::ServiceProxy{
                                                                                        service.weak_from_this()}}
    {}

    bool FrontlightAction::execute()


@@ 116,12 138,14 @@ namespace alarms
            settings.getValue(bell::settings::Alarm::brightness, settings::SettingsScope::Global);

        screen_light_control::ManualModeParameters params{};
        params.manualModeBrightness = frontlight_utils::fixedValToPercentage(std::stoi(brightnessString));
        params.manualModeBrightness = utils::toNumeric(brightnessString);

        return params;
    }

    ManualFrontlightAction::ManualFrontlightAction(sys::Service &service) : service{service}
    ManualFrontlightAction::ManualFrontlightAction(sys::Service &service,
                                                   FrontlightAction::SettingsDependency dependency)
        : service{service}, settingsDependency{dependency}
    {
        settings.init(service::ServiceProxy{service.weak_from_this()});
    }


@@ 129,21 153,26 @@ namespace alarms
    bool ManualFrontlightAction::execute()
    {
        auto params = prepareParameters();
        service.bus.sendUnicast(std::make_shared<sevm::ScreenLightControlMessage>(
                                    screen_light_control::Action::turnOn, screen_light_control::Parameters{params}),
                                service::name::evt_manager);
        auto sender = translateDependency(settingsDependency);
        service.bus.sendUnicast(
            std::make_shared<sevm::ScreenLightControlMessage>(
                screen_light_control::Action::turnOn, screen_light_control::Parameters{params}, sender),
            service::name::evt_manager);
        return true;
    }

    bool ManualFrontlightAction::turnOff()
    {
        service.bus.sendUnicast(
            std::make_shared<sevm::ScreenLightControlMessage>(screen_light_control::Action::turnOff),
            service::name::evt_manager);
        auto sender = translateDependency(settingsDependency);
        service.bus.sendUnicast(std::make_shared<sevm::ScreenLightControlMessage>(
                                    screen_light_control::Action::turnOff, std::nullopt, sender),
                                service::name::evt_manager);
        return true;
    }

    LinearProgressFrontlightAction::LinearProgressFrontlightAction(sys::Service &service) : service{service}
    LinearProgressFrontlightAction::LinearProgressFrontlightAction(sys::Service &service,
                                                                   FrontlightAction::SettingsDependency dependency)
        : service{service}, settingsDependency{dependency}
    {
        settings.init(service::ServiceProxy{service.weak_from_this()});
    }


@@ 151,9 180,11 @@ namespace alarms
    bool LinearProgressFrontlightAction::execute()
    {
        const auto params = prepareParameters();
        auto sender       = translateDependency(settingsDependency);
        service.bus.sendUnicast(std::make_shared<sevm::ScreenLightSetAutoProgressiveModeParams>(params),
                                service::name::evt_manager);
        service.bus.sendUnicast(std::make_shared<sevm::ScreenLightControlMessage>(screen_light_control::Action::turnOn),
        service.bus.sendUnicast(std::make_shared<sevm::ScreenLightControlMessage>(
                                    screen_light_control::Action::turnOn, std::nullopt, sender),
                                service::name::evt_manager);
        return true;
    }


@@ 175,8 206,7 @@ namespace alarms
        startFunction.target   = 10.0f;

        endFunction.duration = secondTargetDuration;
        endFunction.target   = frontlight_utils::fixedValToPercentage(std::stoi(brightnessString));
        ;
        endFunction.target   = utils::toNumeric(brightnessString);

        params.startBrightnessValue = 0.0f;
        params.brightnessHysteresis = 0.0f;


@@ 187,9 217,10 @@ namespace alarms

    bool LinearProgressFrontlightAction::turnOff()
    {
        service.bus.sendUnicast(
            std::make_shared<sevm::ScreenLightControlMessage>(screen_light_control::Action::turnOff),
            service::name::evt_manager);
        auto sender = translateDependency(settingsDependency);
        service.bus.sendUnicast(std::make_shared<sevm::ScreenLightControlMessage>(
                                    screen_light_control::Action::turnOff, std::nullopt, sender),
                                service::name::evt_manager);
        return true;
    }


M products/BellHybrid/apps/application-bell-settings/models/FrontlightModel.cpp => products/BellHybrid/apps/application-bell-settings/models/FrontlightModel.cpp +6 -6
@@ 35,17 35,17 @@ namespace app::bell_settings
    }
    void FrontlightModel::setStatus(bool onOff)
    {
        app->bus.sendUnicast(std::make_shared<sevm::ScreenLightSettingsControlMessage>(
        app->bus.sendUnicast(std::make_shared<sevm::ScreenLightControlMessage>(
                                 onOff ? screen_light_control::Action::turnOn : screen_light_control::Action::turnOff),
                             service::name::evt_manager);
    }
    void FrontlightModel::setMode(screen_light_control::ScreenLightMode mode)
    {
        app->bus.sendUnicast(std::make_shared<sevm::ScreenLightSettingsControlMessage>(
                                 mode == screen_light_control::ScreenLightMode::Automatic
                                     ? screen_light_control::Action::enableAutomaticMode
                                     : screen_light_control::Action::disableAutomaticMode),
                             service::name::evt_manager);
        app->bus.sendUnicast(
            std::make_shared<sevm::ScreenLightControlMessage>(mode == screen_light_control::ScreenLightMode::Automatic
                                                                  ? screen_light_control::Action::enableAutomaticMode
                                                                  : screen_light_control::Action::disableAutomaticMode),
            service::name::evt_manager);
    }
    void FrontlightModel::setBrightness(frontlight_utils::Brightness value)
    {

M products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AlarmSettingsModel.cpp => products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AlarmSettingsModel.cpp +2 -2
@@ 50,13 50,13 @@ namespace app::bell_settings

    void AlarmFrontlightModel::setValue(frontlight_utils::Brightness value)
    {
        const auto valStr = std::to_string(value);
        const auto valStr = std::to_string(frontlight_utils::fixedValToPercentage(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);
        return frontlight_utils::percentageToFixedVal(std::stoi(str));
    }
} // namespace app::bell_settings

M products/BellHybrid/services/evtmgr/EventManager.cpp => products/BellHybrid/services/evtmgr/EventManager.cpp +2 -8
@@ 87,17 87,11 @@ void EventManager::initProductEvents()
{
    backlightHandler.init();

    connect(typeid(sevm::ScreenLightSettingsControlMessage), [&](sys::Message *msgl) {
        auto *m           = static_cast<sevm::ScreenLightSettingsControlMessage *>(msgl);
        const auto params = m->getParams();
        backlightHandler.processScreenRequest(m->getAction(), params.value_or(screen_light_control::Parameters()));
        return sys::msgHandled();
    });

    connect(typeid(sevm::ScreenLightControlMessage), [&](sys::Message *msgl) {
        auto *m           = static_cast<sevm::ScreenLightControlMessage *>(msgl);
        const auto params = m->getParams();
        backlightHandler.screenRequest(m->getAction(), params.value_or(screen_light_control::Parameters()));
        backlightHandler.processRequest(
            m->getAction(), params.value_or(screen_light_control::Parameters()), m->getSender());
        return sys::msgHandled();
    });


M products/BellHybrid/services/evtmgr/backlight-handler/BacklightHandler.cpp => products/BellHybrid/services/evtmgr/backlight-handler/BacklightHandler.cpp +17 -2
@@ 101,10 101,25 @@ namespace backlight
        backlightType = type;
    }

    void Handler::screenRequest(screen_light_control::Action action, const screen_light_control::Parameters &params)
    void Handler::processRequest(screen_light_control::Action action,
                                 const screen_light_control::Parameters &params,
                                 screen_light_control::Sender sender)
    {
        if (backlightType == Type::Frontlight) {
        switch (sender) {
        case screen_light_control::Sender::AlarmPrewakeup:
        case screen_light_control::Sender::Alarm:
            switch (action) {
            case screen_light_control::Action::turnOff:
                backlightType = Type::Frontlight;
                break;
            default:
                break;
            }
            processScreenRequest(action, params);
            break;
        default:
            processScreenRequest(action, params);
            break;
        }
    }


M products/BellHybrid/services/evtmgr/include/evtmgr/backlight-handler/BacklightHandler.hpp => products/BellHybrid/services/evtmgr/include/evtmgr/backlight-handler/BacklightHandler.hpp +5 -3
@@ 33,13 33,15 @@ namespace backlight
      public:
        Handler(std::shared_ptr<settings::Settings> settings, sys::Service *parent);

        void init() override;

        void handleKeyPressed(int key = 0);

        void handleScreenLight(Type type);

        void screenRequest(screen_light_control::Action action, const screen_light_control::Parameters &params);
        void processRequest(screen_light_control::Action action,
                            const screen_light_control::Parameters &params,
                            screen_light_control::Sender sender);

        void init() override;

        void processScreenRequest(screen_light_control::Action action,
                                  const screen_light_control::Parameters &params) override;