~aleteoryx/muditaos

1bff91d0a18f2bd058f42b15ae0f20da9ae3e3e0 — Maciej Gibowicz 1 year, 11 months ago 9ef4540
[BH-1882] Fix display of "Connected" label on home screen

The "connected" label did not appear on the home screen if the USB was
connected on another screen.
M harmony_changelog.md => harmony_changelog.md +1 -0
@@ 18,6 18,7 @@
* Fixed alarm rings when deactivated during snooze
* Fixed popup about file deletion showing in Relaxation app even if no file was deleted
* Fixed displaying the menu after deep press on main screen
* Fixed display of "Connected" label on home screen

### Added
* Added setting onboarding year to build date year

M module-apps/apps-common/ApplicationCommon.cpp => module-apps/apps-common/ApplicationCommon.cpp +9 -5
@@ 1,4 1,4 @@
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "ApplicationCommon.hpp"


@@ 113,9 113,13 @@ namespace app
        connect(typeid(cellular::msg::notification::SimStateUpdate),
                [&](sys::Message *msg) -> sys::MessagePointer { return handleSimStateUpdateMessage(msg); });
        connect(typeid(sdesktop::usb::USBConnected),
                [&](sys::Message *msg) -> sys::MessagePointer { return handleUSBStatusChange(); });
        connect(typeid(sdesktop::usb::USBDisconnected),
                [&](sys::Message *msg) -> sys::MessagePointer { return handleUSBStatusChange(); });
                [&](sys::Message *msg) -> sys::MessagePointer { return handleUsbStatusChange(); });
        connect(typeid(sdesktop::usb::USBDisconnected), [&](sys::Message *msg) -> sys::MessagePointer {
            if (onUsbDisconnected != nullptr) {
                onUsbDisconnected();
            }
            return handleUsbStatusChange();
        });

        addActionReceiver(app::manager::actions::PhoneModeChanged, [this](auto &&params) {
            if (params != nullptr) {


@@ 452,7 456,7 @@ namespace app
        return sys::msgHandled();
    }

    sys::MessagePointer ApplicationCommon::handleUSBStatusChange()
    sys::MessagePointer ApplicationCommon::handleUsbStatusChange()
    {
        if ((state == State::ACTIVE_FORGROUND) && getCurrentWindow()->updateBatteryStatus()) {
            refreshWindow(gui::RefreshModes::GUI_REFRESH_FAST);

M module-apps/apps-common/ApplicationCommon.hpp => module-apps/apps-common/ApplicationCommon.hpp +4 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 176,6 176,8 @@ namespace app
        using OnActionReceived = std::function<ActionResult(manager::actions::ActionParamsPtr &&)>;

      protected:
        std::function<void()> onUsbDisconnected;

        virtual sys::MessagePointer handleKBDKeyEvent(sys::Message *msgl);
        virtual sys::MessagePointer handleApplicationSwitch(sys::Message *msgl);
        virtual sys::MessagePointer handleAppClose(sys::Message *msgl);


@@ 194,7 196,7 @@ namespace app
        sys::MessagePointer handleNetworkAccessTechnologyUpdate(sys::Message *msgl);
        sys::MessagePointer handleInputEvent(sys::Message *msgl);
        sys::MessagePointer handleBatteryStatusChange();
        sys::MessagePointer handleUSBStatusChange();
        sys::MessagePointer handleUsbStatusChange();
        sys::MessagePointer handleSimStateUpdateMessage(sys::Message *msgl);
        sys::MessagePointer handleMinuteUpdated(sys::Message *msgl);
        sys::MessagePointer handleAction(sys::Message *msgl);

M products/BellHybrid/apps/application-bell-main/ApplicationBellMain.cpp => products/BellHybrid/apps/application-bell-main/ApplicationBellMain.cpp +11 -2
@@ 3,6 3,7 @@

#include "include/application-bell-main/ApplicationBellMain.hpp"
#include "models/TemperatureModel.hpp"
#include "models/UsbStatusModel.hpp"

#include "windows/BellBatteryShutdownWindow.hpp"
#include "windows/BellHomeScreenWindow.hpp"


@@ 81,11 82,13 @@ namespace app
        });

        connect(typeid(sdesktop::usb::USBConfigured), [&](sys::Message *msg) -> sys::MessagePointer {
            usbStatusModel->setUsbStatus(app::AbstractUsbStatusModel::UsbStatus::Connected);
            if (getCurrentWindow()->getName() == gui::name::window::main_window) {
                homeScreenPresenter->setUSBStatusConnected();
                homeScreenPresenter->updateUsbStatus();
            }
            return sys::msgHandled();
        });

        connect(typeid(AlarmDeactivated), [this](sys::Message *request) -> sys::MessagePointer {
            alarmModel->turnOff();
            alarmModel->activateAlarm(false);


@@ 95,6 98,10 @@ namespace app
            alarmModel->activateAlarm(true);
            return sys::msgHandled();
        });

        onUsbDisconnected = [this]() {
            usbStatusModel->setUsbStatus(app::AbstractUsbStatusModel::UsbStatus::Disconnected);
        };
    }

    sys::ReturnCodes ApplicationBellMain::InitHandler()


@@ 109,13 116,15 @@ namespace app
        temperatureModel              = std::make_unique<app::home_screen::TemperatureModel>(this);
        userSessionModel              = std::make_unique<app::UserSessionModel>(this);
        batteryLevelNotificationModel = std::make_unique<app::BatteryLevelNotificationModel>();
        usbStatusModel                = std::make_unique<app::UsbStatusModel>();
        homeScreenPresenter           = std::make_shared<app::home_screen::HomeScreenPresenter>(this,
                                                                                      *alarmModel,
                                                                                      *batteryModel,
                                                                                      *temperatureModel,
                                                                                      *timeModel,
                                                                                      *userSessionModel,
                                                                                      *batteryLevelNotificationModel);
                                                                                      *batteryLevelNotificationModel,
                                                                                      *usbStatusModel);

        createUserInterface();


M products/BellHybrid/apps/application-bell-main/CMakeLists.txt => products/BellHybrid/apps/application-bell-main/CMakeLists.txt +2 -0
@@ 10,6 10,7 @@ target_sources(application-bell-main
        windows/BellMainMenuWindow.cpp

        models/TemperatureModel.cpp
        models/UsbStatusModel.cpp

        presenters/HomeScreenPresenter.cpp
        presenters/StateController.cpp


@@ 19,6 20,7 @@ target_sources(application-bell-main
        windows/BellMainMenuWindow.hpp

        models/TemperatureModel.hpp
        models/UsbStatusModel.hpp

        presenters/StateController.hpp


M products/BellHybrid/apps/application-bell-main/include/application-bell-main/ApplicationBellMain.hpp => products/BellHybrid/apps/application-bell-main/include/application-bell-main/ApplicationBellMain.hpp +1 -0
@@ 53,6 53,7 @@ namespace app
        std::unique_ptr<home_screen::AbstractTemperatureModel> temperatureModel;
        std::unique_ptr<AbstractUserSessionModel> userSessionModel;
        std::unique_ptr<AbstractBatteryLevelNotificationModel> batteryLevelNotificationModel;
        std::unique_ptr<AbstractUsbStatusModel> usbStatusModel;
        std::shared_ptr<app::home_screen::HomeScreenPresenter> homeScreenPresenter;
    };


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 +7 -4
@@ 27,6 27,7 @@ namespace app
    class AbstractBatteryLevelNotificationModel;
    class ApplicationCommon;
    class TemperatureModel;
    class AbstractUsbStatusModel;
    class AbstractUserSessionModel;
    class ProgressTimerWithSnoozeTimer;
} // namespace app


@@ 67,7 68,7 @@ namespace app::home_screen
        virtual void setTemperature(utils::temperature::Temperature newTemp)    = 0;
        virtual void setTextDescription(const UTF8 &desc)                       = 0;
        virtual void setBatteryLevelState(const Store::Battery &batteryContext) = 0;
        virtual void setUSBStatusConnected()                                    = 0;
        virtual void updateUsbStatus(bool isConnected)                          = 0;

        /// Various
        virtual void setLayout(gui::LayoutGenerator layoutGenerator) = 0;


@@ 103,7 104,7 @@ namespace app::home_screen
        virtual void switchToBatteryStatus()                                                     = 0;
        virtual void switchToLowBatteryWarning()                                                 = 0;
        virtual UTF8 getGreeting()                                                               = 0;
        virtual void setUSBStatusConnected()                                                     = 0;
        virtual void updateUsbStatus()                                                           = 0;
        virtual void handleLowBatteryWarning()                                                   = 0;
        virtual bool isLowBatteryWarningNeeded()                                                 = 0;
        virtual void updateBatteryLevelInterval()                                                = 0;


@@ 122,7 123,8 @@ namespace app::home_screen
                            AbstractTemperatureModel &temperatureModel,
                            AbstractTimeModel &timeModel,
                            AbstractUserSessionModel &userSessionModel,
                            AbstractBatteryLevelNotificationModel &batteryLevelNotificationModel);
                            AbstractBatteryLevelNotificationModel &batteryLevelNotificationModel,
                            AbstractUsbStatusModel &usbStatusModel);
        virtual ~HomeScreenPresenter();
        HomeScreenPresenter()        = delete;
        HomeScreenPresenter &operator=(const HomeScreenPresenter &oth) = delete;


@@ 150,7 152,7 @@ namespace app::home_screen
        std::uint32_t getBatteryLvl() const override;
        bool isBatteryCharging() const override;
        bool isAlarmActivatedByLatch() const override;
        void setUSBStatusConnected() override;
        void updateUsbStatus() override;

        void incAlarmMinute() override;
        void decAlarmMinute() override;


@@ 175,6 177,7 @@ namespace app::home_screen
        AbstractTimeModel &timeModel;
        AbstractUserSessionModel &userSessionModel;
        AbstractBatteryLevelNotificationModel &batteryLevelNotificationModel;
        AbstractUsbStatusModel &usbStatusModel;
        std::unique_ptr<AbstractController> stateController;
        std::unique_ptr<ProgressTimerWithSnoozeTimer> snoozeTimer;
        std::unique_ptr<std::mt19937> rngEngine;

A products/BellHybrid/apps/application-bell-main/models/UsbStatusModel.cpp => products/BellHybrid/apps/application-bell-main/models/UsbStatusModel.cpp +17 -0
@@ 0,0 1,17 @@
// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "UsbStatusModel.hpp"

namespace app
{
    bool UsbStatusModel::isUsbConnected(const Store::Battery::State &state) const
    {
        return ((usbConnected == UsbStatus::Connected) && (state == Store::Battery::State::PluggedNotCharging));
    }

    void UsbStatusModel::setUsbStatus(UsbStatus status)
    {
        usbConnected = status;
    }
} // namespace app

A products/BellHybrid/apps/application-bell-main/models/UsbStatusModel.hpp => products/BellHybrid/apps/application-bell-main/models/UsbStatusModel.hpp +34 -0
@@ 0,0 1,34 @@
// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include <module-utils/EventStore/EventStore.hpp>

namespace app
{
    class AbstractUsbStatusModel
    {
      public:
        enum class UsbStatus : bool
        {
            Disconnected,
            Connected
        };

        virtual ~AbstractUsbStatusModel() noexcept = default;

        virtual bool isUsbConnected(const Store::Battery::State &state) const = 0;
        virtual void setUsbStatus(UsbStatus status)                           = 0;
    };

    class UsbStatusModel : public AbstractUsbStatusModel
    {
      public:
        bool isUsbConnected(const Store::Battery::State &state) const override;
        void setUsbStatus(UsbStatus status) override;

      private:
        UsbStatus usbConnected{UsbStatus::Disconnected};
    };
} // namespace app

M products/BellHybrid/apps/application-bell-main/presenters/HomeScreenPresenter.cpp => products/BellHybrid/apps/application-bell-main/presenters/HomeScreenPresenter.cpp +11 -5
@@ 4,6 4,7 @@
#include "application-bell-main/presenters/HomeScreenPresenter.hpp"
#include "StateController.hpp"
#include "models/TemperatureModel.hpp"
#include "models/UsbStatusModel.hpp"

#include <windows/BellHomeScreenWindow.hpp>
#include <application-bell-main/ApplicationBellMain.hpp>


@@ 78,11 79,12 @@ namespace app::home_screen
                                             AbstractTemperatureModel &temperatureModel,
                                             AbstractTimeModel &timeModel,
                                             AbstractUserSessionModel &userSessionModel,
                                             AbstractBatteryLevelNotificationModel &batteryLevelNotificationModel)
                                             AbstractBatteryLevelNotificationModel &batteryLevelNotificationModel,
                                             AbstractUsbStatusModel &usbStatusModel)
        : app{app}, alarmModel{alarmModel}, batteryModel{batteryModel},
          temperatureModel{temperatureModel}, timeModel{timeModel}, userSessionModel{userSessionModel},
          batteryLevelNotificationModel{batteryLevelNotificationModel}, rngEngine{std::make_unique<std::mt19937>(
                                                                            bsp::trng::getRandomValue())}
          batteryLevelNotificationModel{batteryLevelNotificationModel},
          usbStatusModel{usbStatusModel}, rngEngine{std::make_unique<std::mt19937>(bsp::trng::getRandomValue())}
    {}

    gui::RefreshModes HomeScreenPresenter::handleUpdateTimeEvent()


@@ 133,6 135,7 @@ namespace app::home_screen
        getView()->setAlarmTimeFormat(timeModel.getTimeFormat());
        getView()->setSnoozeFormat(timeModel.getTimeFormat());
        getView()->setTemperature(temperatureModel.getTemperature());
        updateUsbStatus();
    }
    void HomeScreenPresenter::createData()
    {


@@ 221,6 224,7 @@ namespace app::home_screen
    void HomeScreenPresenter::handleBatteryStatus()
    {
        stateController->handleBatteryStatus();
        updateUsbStatus();
    }

    void HomeScreenPresenter::setLayout(gui::LayoutGenerator layoutGenerator)


@@ 273,9 277,11 @@ namespace app::home_screen
        return greetingCollection[dist(*rngEngine)];
    };

    void HomeScreenPresenter::setUSBStatusConnected()
    void HomeScreenPresenter::updateUsbStatus()
    {
        getView()->setUSBStatusConnected();
        const auto batteryState   = batteryModel.getLevelState().state;
        const bool isUsbConnected = usbStatusModel.isUsbConnected(batteryState);
        getView()->updateUsbStatus(isUsbConnected);
    }

    bool HomeScreenPresenter::isLowBatteryWarningNeeded()

M products/BellHybrid/apps/application-bell-main/windows/BellHomeScreenWindow.cpp => products/BellHybrid/apps/application-bell-main/windows/BellHomeScreenWindow.cpp +2 -2
@@ 182,10 182,10 @@ namespace gui
        return false;
    }

    void BellHomeScreenWindow::setUSBStatusConnected()
    void BellHomeScreenWindow::updateUsbStatus(bool isConnected)
    {
        if (currentLayout) {
            currentLayout->setUSBStatusConnected();
            currentLayout->updateUsbStatus(isConnected);
            application->refreshWindow(gui::RefreshModes::GUI_REFRESH_FAST);
        }
    }

M products/BellHybrid/apps/application-bell-main/windows/BellHomeScreenWindow.hpp => products/BellHybrid/apps/application-bell-main/windows/BellHomeScreenWindow.hpp +2 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 40,7 40,7 @@ namespace gui
        void setAlarmTimeFormat(utils::time::Locale::TimeFormat fmt) override;
        void setSnoozeFormat(utils::time::Locale::TimeFormat fmt) override;
        bool updateBatteryStatus() override;
        void setUSBStatusConnected() override;
        void updateUsbStatus(bool isConnected) override;

        std::shared_ptr<app::home_screen::AbstractPresenter> presenter;


M products/BellHybrid/apps/common/include/common/layouts/BaseHomeScreenLayoutProvider.hpp => products/BellHybrid/apps/common/include/common/layouts/BaseHomeScreenLayoutProvider.hpp +1 -1
@@ 50,7 50,7 @@ namespace gui
        virtual void setViewState(app::home_screen::ViewState state)            = 0;
        virtual void setTextDescription(const UTF8 &desc)                       = 0;
        virtual void setBatteryLevelState(const Store::Battery &batteryContext) = 0;
        virtual void setUSBStatusConnected()                                    = 0;
        virtual void updateUsbStatus(bool isConnected)                          = 0;
        virtual void setTime(std::time_t newTime)                               = 0;
        virtual void setAlarmTimeFormat(utils::time::Locale::TimeFormat fmt)    = 0;
        virtual std::time_t getAlarmTime() const                                = 0;

M products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayoutClassic.hpp => products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayoutClassic.hpp +1 -1
@@ 66,7 66,7 @@ namespace gui
        auto getAlarmTime() const -> std::time_t override;
        auto setAlarmTime(std::time_t newTime) -> void override;
        auto setSnoozeTime(std::time_t newTime) -> void override;
        auto setUSBStatusConnected() -> void override;
        auto updateUsbStatus(bool isConnected) -> void override;

        auto getSnoozeTimer() -> SnoozeTimer * override;
        auto getLayout() -> Item * override;

M products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayoutVertical.hpp => products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayoutVertical.hpp +2 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 44,7 44,7 @@ namespace gui
        auto setAlarmTimeFormat(utils::time::Locale::TimeFormat fmt) -> void override;
        auto getAlarmTime() const -> std::time_t override;
        auto setAlarmTime(std::time_t newTime) -> void override;
        auto setUSBStatusConnected() -> void override;
        auto updateUsbStatus(bool isConnected) -> void override;

        auto getSnoozeTimer() -> SnoozeTimer * override;
        auto getLayout() -> Item * override;

M products/BellHybrid/apps/common/include/common/widgets/BellConnectionStatus.hpp => products/BellHybrid/apps/common/include/common/widgets/BellConnectionStatus.hpp +1 -2
@@ 14,8 14,7 @@ namespace gui
      public:
        BellConnectionStatus(Item *parent);
        void setFont(const UTF8 &fontName);
        void checkIfConnected(const Store::Battery::State &state);
        void setConnected();
        void show(bool visibility);

      private:
        Text *statusText = nullptr;

M products/BellHybrid/apps/common/src/layouts/HomeScreenLayoutClassic.cpp => products/BellHybrid/apps/common/src/layouts/HomeScreenLayoutClassic.cpp +4 -12
@@ 299,17 299,8 @@ namespace gui
    void HomeScreenLayoutClassic::setBatteryLevelState(const Store::Battery &batteryContext)
    {
        battery->update(batteryContext.level, isBatteryCharging(batteryContext.state));
        connectionStatus->checkIfConnected(batteryContext.state);

        if (isBatteryVisibilityAllowed(batteryContext)) {
            battery->setVisible(true);
        }
        else {
            battery->setVisible(false);
        }
        battery->setVisible(isBatteryVisibilityAllowed(batteryContext));
        battery->informContentChanged();
        connectionStatus->informContentChanged();
        adjustConnectionStatusPosition();
    }

    void HomeScreenLayoutClassic::setTime(std::time_t newTime)


@@ 359,10 350,11 @@ namespace gui
    {
        return this;
    }
    auto HomeScreenLayoutClassic::setUSBStatusConnected() -> void
    auto HomeScreenLayoutClassic::updateUsbStatus(bool isConnected) -> void
    {
        connectionStatus->setConnected();
        connectionStatus->show(isConnected);
        connectionStatus->informContentChanged();
        adjustConnectionStatusPosition();
    }

    auto HomeScreenLayoutClassic::adjustConnectionStatusPosition() -> void

M products/BellHybrid/apps/common/src/layouts/HomeScreenLayoutVertical.cpp => products/BellHybrid/apps/common/src/layouts/HomeScreenLayoutVertical.cpp +3 -11
@@ 162,16 162,8 @@ namespace gui
    void HomeScreenLayoutVertical::setBatteryLevelState(const Store::Battery &batteryContext)
    {
        battery->update(batteryContext.level, isBatteryCharging(batteryContext.state));
        connectionStatus->checkIfConnected(batteryContext.state);

        if (isBatteryVisibilityAllowed(batteryContext)) {
            battery->setVisible(true);
        }
        else {
            battery->setVisible(false);
        }
        battery->setVisible(isBatteryVisibilityAllowed(batteryContext));
        battery->informContentChanged();
        connectionStatus->informContentChanged();
    }

    void HomeScreenLayoutVertical::setTime(std::time_t newTime)


@@ 210,9 202,9 @@ namespace gui
    {
        return this;
    }
    auto HomeScreenLayoutVertical::setUSBStatusConnected() -> void
    auto HomeScreenLayoutVertical::updateUsbStatus(bool isConnected) -> void
    {
        connectionStatus->setConnected();
        connectionStatus->show(isConnected);
        connectionStatus->informContentChanged();
    }


M products/BellHybrid/apps/common/src/widgets/BellConnectionStatus.cpp => products/BellHybrid/apps/common/src/widgets/BellConnectionStatus.cpp +3 -10
@@ 26,7 26,7 @@ namespace gui
        statusText->activeItem = false;
        statusText->drawUnderline(false);
        statusText->setText(utils::translate(usb_connected_status));
        statusText->setVisible(true);
        statusText->setVisible(false);
    }

    void BellConnectionStatus::setFont(const UTF8 &fontName)


@@ 34,15 34,8 @@ namespace gui
        statusText->setFont(fontName);
    }

    void BellConnectionStatus::checkIfConnected(const Store::Battery::State &state)
    void BellConnectionStatus::show(bool visibility)
    {
        if (state != Store::Battery::State::PluggedNotCharging) {
            statusText->setVisible(false);
        }
    }

    void BellConnectionStatus::setConnected()
    {
        statusText->setVisible(true);
        statusText->setVisible(visibility);
    }
} // namespace gui