~aleteoryx/muditaos

e415112fb009e02e6233447192c2414eddcce12e — Mateusz Piesta 4 years ago 68af24d
[BH-1220] Various critical bug fixes

BH-1220 - Hide memory info from About screen
BH-1224 - Removed Svenska language
BH-1226 - Onboarding trigger set to light click
BH-1243 - Implemented proper snooze settings flow
M products/BellHybrid/CMakeLists.txt => products/BellHybrid/CMakeLists.txt +1 -0
@@ 104,4 104,5 @@ add_subdirectory(services)
add_subdirectory(sys)

option(CONFIG_ENABLE_TEMP "Enable displaying temperature" OFF)
option(CONFIG_SHOW_MEMORY_INFO "Enable displaying memory info" OFF)
configure_file(config/ProductConfig.in.hpp ${CMAKE_BINARY_DIR}/ProductConfig.hpp  @ONLY)

M products/BellHybrid/apps/application-bell-onboarding/presenter/OnBoardingLanguageWindowPresenter.cpp => products/BellHybrid/apps/application-bell-onboarding/presenter/OnBoardingLanguageWindowPresenter.cpp +1 -3
@@ 11,9 11,7 @@ namespace app::OnBoarding

    std::vector<std::string> OnBoardingLanguageWindowPresenter::getLanguages()
    {
        auto languages = loader.getAvailableDisplayLanguages();
        std::sort(languages.begin(), languages.end());
        return languages;
        return languages.getSupportedLanguages();
    }

    unsigned OnBoardingLanguageWindowPresenter::getSelectedLanguageIndex()

M products/BellHybrid/apps/application-bell-onboarding/presenter/OnBoardingLanguageWindowPresenter.hpp => products/BellHybrid/apps/application-bell-onboarding/presenter/OnBoardingLanguageWindowPresenter.hpp +2 -2
@@ 5,7 5,7 @@

#include <apps-common/BasePresenter.hpp>
#include <apps-common/ApplicationCommon.hpp>
#include <i18n/i18n.hpp>
#include <common/Languages.hpp>

#include <vector>
#include <string>


@@ 33,7 33,7 @@ namespace app::OnBoarding
    class OnBoardingLanguageWindowPresenter : public OnBoardingLanguageWindowContract::Presenter
    {
      private:
        utils::LangLoader loader;
        common::Languages languages;
        app::ApplicationCommon *app;

      public:

M products/BellHybrid/apps/application-bell-settings/models/advanced/AboutYourBellModel.cpp => products/BellHybrid/apps/application-bell-settings/models/advanced/AboutYourBellModel.cpp +3 -0
@@ 5,6 5,7 @@

#include <BellSettingsStyle.hpp>
#include <widgets/advanced/AboutYourBellListItem.hpp>
#include <ProductConfig.hpp>

#include <ListView.hpp>
#include <product/version.hpp>


@@ 46,6 47,7 @@ namespace app::bell_settings
                                           utils::translate("app_bell_settings_advanced_about_version"),
                                           gui::AboutYourBellListItem::TokenMap({{"$VERSION", std::string(VERSION)}})));

#if CONFIG_SHOW_MEMORY_INFO == 1
        struct statvfs stat;
        const auto result = statvfs(purefs::dir::getRootDiskPath().c_str(), &stat);
        if (result < 0) {


@@ 60,6 62,7 @@ namespace app::bell_settings
            utils::translate("app_bell_settings_advanced_about_storage_text"),
            gui::AboutYourBellListItem::TokenMap(
                {{"$USED_MEMORY", std::to_string(usedMB)}, {"$TOTAL_MEMORY", std::to_string(totalMB)}})));
#endif

        internalData.push_back(
            new gui::AboutYourBellListItem(utils::translate("app_bell_settings_advanced_about_info_title"),

M products/BellHybrid/apps/application-bell-settings/models/alarm_settings/SnoozeListItemProvider.cpp => products/BellHybrid/apps/application-bell-settings/models/alarm_settings/SnoozeListItemProvider.cpp +54 -25
@@ 11,15 11,46 @@ namespace app::bell_settings
{
    using namespace gui;

    enum Intervals
    NumWithStringListItem::NumWithStringSpinner::Range getDefaultChimeIntervalRange()
    {
        Interval_1  = 1,
        Interval_2  = 2,
        Interval_5  = 5,
        Interval_10 = 10,
        Interval_15 = 15,
        Interval_30 = 30
    };
        const UTF8 minStr = utils::translate("common_minute_short");
        return {
            NumWithStringListItem::Value{utils::translate("app_settings_toggle_off")},
            NumWithStringListItem::Value{1, minStr},
            NumWithStringListItem::Value{2, minStr},
            NumWithStringListItem::Value{3, minStr},
            NumWithStringListItem::Value{5, minStr},
        };
    }

    NumWithStringListItem::NumWithStringSpinner::Range transformChimeIntervalsRange(const std::uint32_t chimeLength)
    {
        auto chimeIntervals = getDefaultChimeIntervalRange();

        chimeIntervals.erase(
            std::remove_if(chimeIntervals.begin() + 1,
                           chimeIntervals.end(),
                           [chimeLength](const auto &e) { return e.getValue().value() >= chimeLength; }),
            chimeIntervals.end());

        return chimeIntervals;
    }

    std::optional<NumWithStringListItem::Value> calculateCurrentChimeIntervalValue(
        const NumWithStringListItem::NumWithStringSpinner::Range &range,
        const NumWithStringListItem::Value &chimeInterval)
    {
        if (range.size() == 1) {
            return {};
        }

        if (chimeInterval.getValue() && (chimeInterval.getValue().value() >= range.back().getValue().value())) {
            return range.back();
        }
        else {
            return chimeInterval;
        }
    }

    SnoozeListItemProvider::SnoozeListItemProvider(AbstractSnoozeSettingsModel &model,
                                                   std::vector<UTF8> chimeTonesRange)


@@ 66,33 97,31 @@ namespace app::bell_settings

        internalData.emplace_back(chimeLength);

        const UTF8 minStr = utils::translate("common_minute_short");
        const auto range  = NumWithStringListItem::NumWithStringSpinner::Range{NumWithStringListItem::Value{0, minStr}};

        auto chimeInterval = new NumWithStringListItem(
            model.getSnoozeChimeInterval(),
            range,
            getDefaultChimeIntervalRange(),
            utils::translate("app_bell_settings_alarm_settings_snooze_chime_interval"),
            utils::translate("app_bell_settings_alarm_settings_snooze_chime_interval_bot_desc"));
        chimeLength->setValue();

        internalData.emplace_back(chimeInterval);

        chimeLength->onProceed = [chimeInterval, chimeLength, this]() {
            if (chimeInterval != nullptr) {
                auto val = chimeLength->getCurrentValue();
                NumWithStringListItem::NumWithStringSpinner::Range chimeRange;
                const UTF8 minStr = utils::translate("common_minute_short");
                chimeRange.push_back(NumWithStringListItem::Value{utils::translate("app_alarm_clock_no_snooze")});
                for (unsigned int i = 1; i <= val; i++) {
                    if ((i != Intervals::Interval_1) && (i != Intervals::Interval_2) && (i != Intervals::Interval_5) &&
                        (i != Intervals::Interval_10) && (i != Intervals::Interval_15) &&
                        (i != Intervals::Interval_30)) {
                        continue;
                    }
                    chimeRange.push_back(NumWithStringListItem::Value{i, minStr});
                const auto currentChimeLength   = chimeLength->getCurrentValue();
                const auto currentChimeInterval = chimeInterval->getCurrentValue();
                const auto calculatedRange      = transformChimeIntervalsRange(currentChimeLength);
                const auto calculatedChimeInterval =
                    calculateCurrentChimeIntervalValue(calculatedRange, currentChimeInterval);

                if (calculatedChimeInterval) {
                    chimeInterval->getSpinner()->setRange(calculatedRange);
                    chimeInterval->getSpinner()->setCurrentValue(calculatedChimeInterval.value());
                    chimeInterval->setArrowsVisibility();
                }
                else {
                    this->onExit();
                }
                chimeInterval->getSpinner()->setRange(chimeRange);
                chimeInterval->setArrowsVisibility(chimeRange);
            }
            return false;
        };

M products/BellHybrid/apps/application-bell-settings/presenter/advanced/LanguageWindowPresenter.cpp => products/BellHybrid/apps/application-bell-settings/presenter/advanced/LanguageWindowPresenter.cpp +1 -3
@@ 11,9 11,7 @@ namespace app::bell_settings

    std::vector<std::string> LanguageWindowPresenter::getLanguages() const
    {
        auto languages = loader.getAvailableDisplayLanguages();
        std::sort(languages.begin(), languages.end());
        return languages;
        return languages.getSupportedLanguages();
    }

    std::string LanguageWindowPresenter::getSelectedLanguage() const

M products/BellHybrid/apps/application-bell-settings/presenter/advanced/LanguageWindowPresenter.hpp => products/BellHybrid/apps/application-bell-settings/presenter/advanced/LanguageWindowPresenter.hpp +2 -2
@@ 5,7 5,7 @@

#include <apps-common/BasePresenter.hpp>
#include <apps-common/ApplicationCommon.hpp>
#include <i18n/i18n.hpp>
#include <common/Languages.hpp>

#include <vector>
#include <string>


@@ 33,7 33,7 @@ namespace app::bell_settings
    class LanguageWindowPresenter : public LanguageWindowContract::Presenter
    {
      private:
        utils::LangLoader loader;
        common::Languages languages;
        app::ApplicationCommon *app{};

      public:

M products/BellHybrid/apps/application-bell-settings/widgets/advanced/AboutYourBellListItem.cpp => products/BellHybrid/apps/application-bell-settings/widgets/advanced/AboutYourBellListItem.cpp +1 -1
@@ 14,7 14,7 @@ namespace gui
    {
        setMinimumSize(bell_settings_style::about_your_bell_window::list_item::width,
                       bell_settings_style::about_your_bell_window::list_item::height);
        setMargins(Margins(0, style::margins::big, 0, style::margins::big));
        setMargins(Margins(0, style::margins::big, 0, style::margins::huge));
        activeItem = false;

        body = new VBox(this, 0, 0, 0, 0);

M products/BellHybrid/apps/application-bell-settings/windows/advanced/AboutYourBellWindow.cpp => products/BellHybrid/apps/application-bell-settings/windows/advanced/AboutYourBellWindow.cpp +4 -3
@@ 28,11 28,12 @@ namespace gui

        list = new ListView(this,
                            style::window::default_left_margin,
                            style::window::default_vertical_pos,
                            style::listview::body_width_with_scroll,
                            style::window::default_body_height,
                            top_margin,
                            width,
                            height,
                            presenter->getPagesProvider(),
                            listview::ScrollBarType::Fixed);
        list->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Center));

        setFocusItem(list);
        list->rebuildList();

M products/BellHybrid/apps/application-bell-settings/windows/advanced/AboutYourBellWindow.hpp => products/BellHybrid/apps/application-bell-settings/windows/advanced/AboutYourBellWindow.hpp +4 -0
@@ 18,6 18,10 @@ namespace gui
                            std::shared_ptr<app::bell_settings::AboutYourBellWindowContract::Presenter> presenter);

      private:
        static constexpr auto height     = 400;
        static constexpr auto width      = 380;
        static constexpr auto top_margin = 41;

        void buildInterface() override;

        ListView *list{};

M products/BellHybrid/apps/common/CMakeLists.txt => products/BellHybrid/apps/common/CMakeLists.txt +1 -0
@@ 40,6 40,7 @@ target_sources(application-bell-common
        src/options/OptionBellMenu.cpp
        src/options/BellOptionsNavigation.cpp
    PUBLIC
        include/common/Languages.hpp
        include/common/BellListItemProvider.hpp
        include/common/SoundsRepository.hpp
        include/common/BellPowerOffPresenter.hpp

A products/BellHybrid/apps/common/include/common/Languages.hpp => products/BellHybrid/apps/common/include/common/Languages.hpp +39 -0
@@ 0,0 1,39 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include <i18n/i18n.hpp>

#include <algorithm>
#include <vector>
#include <array>
#include <string_view>

namespace common
{
    class Languages
    {
      public:
        std::vector<Language> getSupportedLanguages() const
        {
            auto languages = loader.getAvailableDisplayLanguages();
            languages.erase(
                std::remove_if(languages.begin(), languages.end(), [this](const auto &lang) { return matcher(lang); }),
                languages.end());
            std::sort(languages.begin(), languages.end());
            return languages;
        }

      private:
        bool matcher(const std::string_view language) const
        {
            const auto result = std::find(excludedLanguages.begin(), excludedLanguages.end(), language);
            return result != excludedLanguages.end();
        }

        static constexpr std::array<std::string_view, 1> excludedLanguages = {{"Svenska"}};
        utils::LangLoader loader;
    };

} // namespace common

M products/BellHybrid/apps/common/include/common/widgets/ListItems.hpp => products/BellHybrid/apps/common/include/common/widgets/ListItems.hpp +2 -1
@@ 63,7 63,8 @@ namespace gui
        {
            return spinner;
        }
        void setArrowsVisibility(const NumWithStringSpinner::Range &range);
        NumWithStringSpinner::Type getCurrentValue();
        void setArrowsVisibility();

      private:
        NumWithStringSpinner *spinner{};

M products/BellHybrid/apps/common/src/widgets/ListItems.cpp => products/BellHybrid/apps/common/src/widgets/ListItems.cpp +9 -6
@@ 103,7 103,7 @@ namespace gui
        inputCallback = [&, range](Item &item, const InputEvent &event) {
            const auto result = OnInputCallback(event);
            bottomText->setVisible(spinner->getCurrentValue().getValue().has_value());
            setArrowsVisibility(range);
            setArrowsVisibility();
            return result;
        };



@@ 117,7 117,7 @@ namespace gui
            const auto val = spinner->getCurrentValue().getValue();
            model.setValue(not val ? 0 : *val);
        };
        setValue = [&model, this, range]() {
        setValue = [&model, this]() {
            const auto modelValue = model.getValue();
            if (modelValue > 0) {
                spinner->setCurrentValue(Value{modelValue, minStr});


@@ 125,7 125,7 @@ namespace gui
            else {
                spinner->setCurrentValue(Value{minStr});
            }
            setArrowsVisibility(range);
            setArrowsVisibility();
        };
    }



@@ 134,10 134,13 @@ namespace gui
        return not spinner->getCurrentValue().getValue().has_value();
    }

    void NumWithStringListItem::setArrowsVisibility(const NumWithStringSpinner::Range &range)
    void NumWithStringListItem::setArrowsVisibility()
    {
        const auto selectedVal = spinner->getCurrentValue();
        body->setMinMaxArrowsVisibility(selectedVal == range.front(), selectedVal == range.back());
        body->setMinMaxArrowsVisibility(spinner->isAtMin(), spinner->isAtMax());
    }
    NumWithString<uint32_t, UTF8> NumWithStringListItem::getCurrentValue()
    {
        return spinner->getCurrentValue();
    }

    UTF8ListItem::UTF8ListItem(AbstractSettingsModel<UTF8> &model,

M products/BellHybrid/apps/common/src/windows/BellWelcomeWindow.cpp => products/BellHybrid/apps/common/src/windows/BellWelcomeWindow.cpp +1 -1
@@ 57,7 57,7 @@ namespace gui

    bool BellWelcomeWindow::onInput(const InputEvent &inputEvent)
    {
        if (inputEvent.isKeyRelease(KeyCode::KEY_LF)) {
        if (inputEvent.isKeyRelease(KeyCode::KEY_ENTER)) {
            if (onAction) {
                onAction();
            }

M products/BellHybrid/config/ProductConfig.in.hpp => products/BellHybrid/config/ProductConfig.in.hpp +1 -0
@@ 4,3 4,4 @@
#pragma once

#cmakedefine01 CONFIG_ENABLE_TEMP
#cmakedefine01 CONFIG_SHOW_MEMORY_INFO