~aleteoryx/muditaos

031b7c72ed433718370a52b5907a4e28f3626168 — Przemyslaw Brudny 4 years ago 4201fca
[EGD-7136] Phone modes setting cleanup and fixes

Phone modes setting cleanup. Fixed text top padding.
Fixed titles and selector in phone modes. Updated arrows.
A art/phone/common/arrow_left_32px_W_G.png => art/phone/common/arrow_left_32px_W_G.png +0 -0
A art/phone/common/arrow_right_32px_W_G.png => art/phone/common/arrow_right_32px_W_G.png +0 -0
A art/phone/common/arrow_right_empty_32px_W_G.png => art/phone/common/arrow_right_empty_32px_W_G.png +0 -0
A image/assets/images/arrow_left_32px_W_G.vpi => image/assets/images/arrow_left_32px_W_G.vpi +0 -0
A image/assets/images/arrow_right_32px_W_G.vpi => image/assets/images/arrow_right_32px_W_G.vpi +0 -0
A image/assets/images/arrow_right_empty_32px_W_G.vpi => image/assets/images/arrow_right_empty_32px_W_G.vpi +0 -0
M module-apps/application-settings/ApplicationSettings.cpp => module-apps/application-settings/ApplicationSettings.cpp +23 -19
@@ 30,6 30,10 @@
#include <application-settings/windows/display-keypad/QuotesOptionsWindow.hpp>
#include <application-settings/windows/display-keypad/KeypadLightWindow.hpp>
#include <application-settings/windows/display-keypad/InputLanguageWindow.hpp>
#include <application-settings/windows/phone-modes/PhoneModesWindow.hpp>
#include <application-settings/windows/phone-modes/DoNotDisturbWindow.hpp>
#include <application-settings/windows/phone-modes/OfflineWindow.hpp>
#include <application-settings/windows/phone-modes/ConnectionFrequencyWindow.hpp>
#include <application-settings/windows/AppsAndToolsWindow.hpp>
#include <application-settings/windows/NightshiftWindow.hpp>
#include <application-settings/windows/PhoneWindow.hpp>


@@ 45,11 49,7 @@
#include <application-settings/windows/DateAndTimeMainWindow.hpp>
#include <application-settings/windows/ChangeTimeZone.hpp>
#include <application-settings/windows/ChangeDateAndTimeWindow.hpp>
#include <application-settings/windows/PhoneModesWindow.hpp>
#include <application-settings/windows/PINSettingsWindow.hpp>
#include <application-settings/windows/DoNotDisturbWindow.hpp>
#include <application-settings/windows/OfflineWindow.hpp>
#include <application-settings/windows/ConnectionFrequencyWindow.hpp>
#include <application-settings/windows/AboutYourPureWindow.hpp>
#include <application-settings/windows/CertificationWindow.hpp>
#include <application-settings/windows/TechnicalInformationWindow.hpp>


@@ 421,6 421,20 @@ namespace app
            return std::make_unique<gui::InputLanguageWindow>(app);
        });

        // Phone modes
        windowsFactory.attach(gui::window::name::phone_modes, [](Application *app, const std::string &name) {
            return std::make_unique<gui::PhoneModesWindow>(app, static_cast<ApplicationSettings *>(app));
        });
        windowsFactory.attach(gui::window::name::do_not_disturb, [](Application *app, const std::string &name) {
            return std::make_unique<gui::DoNotDisturbWindow>(app, static_cast<ApplicationSettings *>(app));
        });
        windowsFactory.attach(gui::window::name::offline, [](Application *app, const std::string &name) {
            return std::make_unique<gui::OfflineWindow>(app, static_cast<ApplicationSettings *>(app));
        });
        windowsFactory.attach(gui::window::name::connection_frequency, [](Application *app, const std::string &name) {
            return std::make_unique<gui::ConnectionFrequencyWindow>(app, static_cast<ApplicationSettings *>(app));
        });

        windowsFactory.attach(gui::window::name::dialog_settings, [](Application *app, const std::string &name) {
            return std::make_unique<gui::Dialog>(app, name);
        });


@@ 448,14 462,12 @@ namespace app
        windowsFactory.attach(gui::window::name::sound_select, [](Application *app, const std::string &name) {
            return std::make_unique<gui::SoundSelectWindow>(app, name);
        });

        windowsFactory.attach(gui::window::name::autolock, [](Application *app, const std::string &name) {
            return std::make_unique<gui::AutolockWindow>(app, static_cast<ApplicationSettings *>(app));
        });
        windowsFactory.attach(gui::window::name::torch, [](Application *app, const std::string &name) {
            return std::make_unique<gui::TorchWindow>(app);
        });

        windowsFactory.attach(gui::window::name::quotes_dialog_yes_no, [](Application *app, const std::string &name) {
            return std::make_unique<gui::DialogYesNo>(app, name);
        });


@@ 508,19 520,6 @@ namespace app
        windowsFactory.attach(gui::window::name::dialog_retry, [](Application *app, const std::string &name) {
            return std::make_unique<gui::DialogRetry>(app, name);
        });
        windowsFactory.attach(gui::window::name::phone_modes, [](Application *app, const std::string &name) {
            return std::make_unique<gui::PhoneModesWindow>(
                app, static_cast<ApplicationSettings *>(app), static_cast<ApplicationSettings *>(app));
        });
        windowsFactory.attach(gui::window::name::do_not_disturb, [](Application *app, const std::string &name) {
            return std::make_unique<gui::DoNotDisturbWindow>(app, static_cast<ApplicationSettings *>(app));
        });
        windowsFactory.attach(gui::window::name::offline, [](Application *app, const std::string &name) {
            return std::make_unique<gui::OfflineWindow>(app, static_cast<ApplicationSettings *>(app));
        });
        windowsFactory.attach(gui::window::name::connection_frequency, [](Application *app, const std::string &name) {
            return std::make_unique<gui::ConnectionFrequencyWindow>(app, static_cast<ApplicationSettings *>(app));
        });

        attachPopups({gui::popup::ID::Volume,
                      gui::popup::ID::Tethering,


@@ 700,6 699,11 @@ namespace app
                        app::manager::ApplicationManager::ServiceName);
    }

    auto ApplicationSettings::getCurrentPhoneMode() const noexcept -> sys::phone_modes::PhoneMode
    {
        return phoneMode;
    }

    void ApplicationSettings::setAutoLockTime(std::chrono::seconds lockTime)
    {
        bus.sendUnicast(std::make_shared<app::manager::SetAutoLockTimeoutRequest>(lockTime),

M module-apps/application-settings/ApplicationSettings.hpp => module-apps/application-settings/ApplicationSettings.hpp +9 -0
@@ 94,6 94,12 @@ namespace app
            virtual void setAutoLockTime(std::chrono::seconds lockTime) = 0;
        };

        class PhoneModeSettings
        {
          public:
            virtual auto getCurrentPhoneMode() const noexcept -> sys::phone_modes::PhoneMode = 0;
        };

    }; // namespace settingsInterface

    class ApplicationSettings : public app::Application,


@@ 105,6 111,7 @@ namespace app
                                public settingsInterface::OfflineSettings,
                                public settingsInterface::ConnectionSettings,
                                public settingsInterface::AutoLockSettings,
                                public settingsInterface::PhoneModeSettings,
                                public AsyncCallbackReceiver
    {
      public:


@@ 158,6 165,8 @@ namespace app
        void getAutoLockTime() override;
        void setAutoLockTime(std::chrono::seconds lockTime) override;

        auto getCurrentPhoneMode() const noexcept -> sys::phone_modes::PhoneMode override;

      private:
        void attachQuotesWindows();
        void switchToAllDevicesViaBtErrorPrompt(std::shared_ptr<sys::DataMessage> msg, const std::string &errorMsg);

M module-apps/application-settings/CMakeLists.txt => module-apps/application-settings/CMakeLists.txt +4 -4
@@ 63,6 63,10 @@ target_sources( ${PROJECT_NAME}
        windows/display-keypad/QuoteCategoriesWindow.cpp
        windows/display-keypad/KeypadLightWindow.cpp
        windows/display-keypad/InputLanguageWindow.cpp
        windows/phone-modes/PhoneModesWindow.cpp
        windows/phone-modes/DoNotDisturbWindow.cpp
        windows/phone-modes/OfflineWindow.cpp
        windows/phone-modes/ConnectionFrequencyWindow.cpp
        windows/BaseSettingsWindow.cpp
        windows/AppsAndToolsWindow.cpp
        windows/NightshiftWindow.cpp


@@ 82,10 86,6 @@ target_sources( ${PROJECT_NAME}
        windows/DateAndTimeMainWindow.cpp
        windows/ChangeTimeZone.cpp
        windows/ChangeDateAndTimeWindow.cpp
        windows/ConnectionFrequencyWindow.cpp
        windows/DoNotDisturbWindow.cpp
        windows/OfflineWindow.cpp
        windows/PhoneModesWindow.cpp
        windows/PINSettingsWindow.cpp
        windows/AboutYourPureWindow.cpp
        windows/CertificationWindow.cpp

M module-apps/application-settings/widgets/SettingsStyle.hpp => module-apps/application-settings/widgets/SettingsStyle.hpp +7 -13
@@ 102,16 102,15 @@ namespace style
                }     // namespace passkey
            }         // namespace bluetooth

            namespace offline
            namespace phone_modes
            {
                inline constexpr auto body_offset = 155;
                inline constexpr auto body_offset = 155U;

                inline constexpr auto bar_y = 396;
                inline constexpr auto bar_h = 1;

                inline constexpr auto description_y = 375;
                inline constexpr auto description_h = 150;
            } // namespace offline
                inline constexpr auto description_top_padding      = 34;
                inline constexpr auto description_vertical_padding = 10;
                inline constexpr auto description_y                = 363U;
                inline constexpr auto description_h                = 154U;
            } // namespace phone_modes

            namespace sar
            {


@@ 144,11 143,6 @@ namespace style
            inline constexpr auto Height = style::window_height - Y - style::footer::height;
        } // namespace list

        inline constexpr auto cross_x = 48;
        inline constexpr auto cross_y = 55;
        inline constexpr auto arrow_x = 30;
        inline constexpr auto arrow_y = 62;

    } // namespace quotes::categories

    namespace certification

M module-apps/application-settings/windows/WindowNames.hpp => module-apps/application-settings/windows/WindowNames.hpp +7 -8
@@ 38,7 38,11 @@ namespace gui::window::name
    inline constexpr auto keypad_light         = "KeypadLight";
    inline constexpr auto input_language       = "InputLanguage";

    inline constexpr auto phone_modes    = "PhoneModes";
    inline constexpr auto phone_modes          = "PhoneModes";
    inline constexpr auto do_not_disturb       = "DoNotDisturb";
    inline constexpr auto offline              = "Offline";
    inline constexpr auto connection_frequency = "ConnectionFrequency";

    inline constexpr auto apps_and_tools = "AppsAndTools";
    inline constexpr auto security       = "Security";
    inline constexpr auto system         = "System";


@@ 56,9 60,8 @@ namespace gui::window::name
    inline constexpr auto display_and_keypad = "DisplayAndKeypad";
    inline constexpr auto change_settings    = "ChangeSettings";
    inline constexpr auto pin_settings       = "PINSettings";

    inline constexpr auto dialog_settings = "DialogSettings";
    inline constexpr auto change_passcode = "ChangePasscode";
    inline constexpr auto dialog_settings    = "DialogSettings";
    inline constexpr auto change_passcode    = "ChangePasscode";

    inline constexpr auto languages             = "Languages";
    inline constexpr auto date_and_time         = "DateAndTime";


@@ 71,8 74,4 @@ namespace gui::window::name
    inline constexpr auto change_date_and_time = "ChangeDateAndTime";
    inline constexpr auto change_time_zone     = "ChangeTimeZone";

    inline constexpr auto do_not_disturb       = "DoNotDisturb";
    inline constexpr auto offline              = "Offline";
    inline constexpr auto connection_frequency = "ConnectionFrequency";

} // namespace gui::window::name

R module-apps/application-settings/windows/ConnectionFrequencyWindow.cpp => module-apps/application-settings/windows/phone-modes/ConnectionFrequencyWindow.cpp +10 -5
@@ 2,8 2,9 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "ConnectionFrequencyWindow.hpp"
#include "application-settings/ApplicationSettings.hpp"
#include "OptionSetting.hpp"

#include <application-settings/ApplicationSettings.hpp>
#include <OptionSetting.hpp>
#include <i18n/i18n.hpp>

namespace gui


@@ 11,15 12,19 @@ namespace gui
    ConnectionFrequencyWindow::ConnectionFrequencyWindow(app::Application *app,
                                                         app::settingsInterface::ConnectionSettings *connectionSettings)
        : BaseSettingsWindow(app, gui::window::name::connection_frequency), connectionSettings(connectionSettings)
    {}
    {
        setTitle(utils::translate("app_settings_title_connection_frequency"));
    }

    void ConnectionFrequencyWindow::onBeforeShow(ShowMode m, SwitchData *d)
    {
        rebuild();
        refreshOptionsList(
            std::distance(frequency.begin(),
                          std::find(frequency.begin(), frequency.end(), connectionSettings->getConnectionFrequency())));
    }
    auto ConnectionFrequencyWindow::buildOptionsList() -> std::list<gui::Option>
    {
        std::list<gui::Option> optList;
        std::vector<uint8_t> frequency{0, 15, 30, 45, 60};

        auto intervalText = [](uint8_t value) {
            if (value == 0) {

R module-apps/application-settings/windows/ConnectionFrequencyWindow.hpp => module-apps/application-settings/windows/phone-modes/ConnectionFrequencyWindow.hpp +2 -7
@@ 3,7 3,7 @@

#pragma once

#include "BaseSettingsWindow.hpp"
#include <application-settings/windows/BaseSettingsWindow.hpp>

namespace app::settingsInterface
{


@@ 12,12 12,6 @@ namespace app::settingsInterface

namespace gui
{

    namespace window
    {
        inline constexpr auto connection_frequency_window = "ConnectionFrequency";
    };

    class ConnectionFrequencyWindow : public BaseSettingsWindow
    {
      private:


@@ 25,6 19,7 @@ namespace gui
        void rebuild() override;
        app::settingsInterface::ConnectionSettings *connectionSettings;
        void updateInterval(uint8_t value);
        std::vector<uint8_t> frequency{0, 15, 30, 45, 60};

      public:
        ConnectionFrequencyWindow(app::Application *app,

R module-apps/application-settings/windows/DoNotDisturbWindow.cpp => module-apps/application-settings/windows/phone-modes/DoNotDisturbWindow.cpp +17 -16
@@ 2,10 2,10 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "DoNotDisturbWindow.hpp"
#include "application-settings/ApplicationSettings.hpp"
#include "application-settings/widgets/SettingsStyle.hpp"

#include "OptionSetting.hpp"
#include <application-settings/ApplicationSettings.hpp>
#include <application-settings/widgets/SettingsStyle.hpp>
#include <OptionSetting.hpp>

#include <i18n/i18n.hpp>



@@ 21,21 21,22 @@ namespace gui
    {
        setTitle(utils::translate("app_settings_title_do_not_disturb"));
        optionsList->setSize(optionsList->getWidth(),
                             optionsList->getHeight() - style::settings::window::offline::body_offset);
        bar = new Rect(this,
                       style::window::default_left_margin,
                       style::settings::window::offline::bar_y,
                       style::window::default_body_width,
                       style::settings::window::offline::bar_h);
        bar->setVisible(true);
        descriptionText = new Text(this,
                                   style::window::default_left_margin,
                                   style::settings::window::offline::description_y,
                                   style::window::default_body_width,
                                   style::settings::window::offline::description_h);
                             optionsList->getHeight() - style::settings::window::phone_modes::body_offset);

        descriptionText = new gui::Text(this,
                                        style::window::default_left_margin,
                                        style::settings::window::phone_modes::description_y,
                                        style::window::default_body_width,
                                        style::settings::window::phone_modes::description_h);
        descriptionText->setFont(style::window::font::medium);
        descriptionText->setAlignment(gui::Alignment{gui::Alignment::Vertical::Top});
        descriptionText->setEdges(gui::RectangleEdge::Top);
        descriptionText->setPenWidth(style::window::default_border_rect_no_focus);
        descriptionText->setPadding(gui::Padding(style::settings::window::phone_modes::description_vertical_padding,
                                                 style::settings::window::phone_modes::description_top_padding,
                                                 style::settings::window::phone_modes::description_vertical_padding,
                                                 0));
        descriptionText->setText(utils::translate("app_settings_info_dnd"));
        descriptionText->setVisible(true);
    }

    auto DoNotDisturbWindow::buildOptionsList() -> std::list<gui::Option>

R module-apps/application-settings/windows/DoNotDisturbWindow.hpp => module-apps/application-settings/windows/phone-modes/DoNotDisturbWindow.hpp +1 -9
@@ 3,8 3,7 @@

#pragma once

#include "BaseSettingsWindow.hpp"

#include <application-settings/windows/BaseSettingsWindow.hpp>
#include <Text.hpp>

namespace app::settingsInterface


@@ 14,12 13,6 @@ namespace app::settingsInterface

namespace gui
{

    namespace window
    {
        inline constexpr auto do_not_disturb_window = "DoNotDisturb";
    };

    class DoNotDisturbWindow : public BaseSettingsWindow
    {
      public:


@@ 28,7 21,6 @@ namespace gui

      private:
        app::settingsInterface::DndSettings *dndSettings = nullptr;
        Rect *bar                                        = nullptr;
        Text *descriptionText                            = nullptr;
        auto buildOptionsList() -> std::list<Option> override;
    };

R module-apps/application-settings/windows/OfflineWindow.cpp => module-apps/application-settings/windows/phone-modes/OfflineWindow.cpp +16 -16
@@ 2,10 2,10 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "OfflineWindow.hpp"
#include "application-settings/ApplicationSettings.hpp"
#include "application-settings/widgets/SettingsStyle.hpp"

#include "OptionSetting.hpp"
#include <application-settings/ApplicationSettings.hpp>
#include <application-settings/widgets/SettingsStyle.hpp>
#include <OptionSetting.hpp>

#include <i18n/i18n.hpp>



@@ 23,23 23,23 @@ namespace gui
    {
        setTitle(utils::translate("app_settings_title_offline"));
        optionsList->setSize(optionsList->getWidth(),
                             optionsList->getHeight() - style::settings::window::offline::body_offset);
                             optionsList->getHeight() - style::settings::window::phone_modes::body_offset);

        bar = new Rect(this,
                       style::window::default_left_margin,
                       style::settings::window::offline::bar_y,
                       style::window::default_body_width,
                       style::settings::window::offline::bar_h);
        bar->setVisible(true);
        descriptionText = new Text(this,
                                   style::window::default_left_margin,
                                   style::settings::window::offline::description_y,
                                   style::window::default_body_width,
                                   style::settings::window::offline::description_h);
        descriptionText = new gui::Text(this,
                                        style::window::default_left_margin,
                                        style::settings::window::phone_modes::description_y,
                                        style::window::default_body_width,
                                        style::settings::window::phone_modes::description_h);
        descriptionText->setFont(style::window::font::medium);
        descriptionText->setAlignment(gui::Alignment{gui::Alignment::Vertical::Top});
        descriptionText->setEdges(gui::RectangleEdge::Top);
        descriptionText->setPenWidth(style::window::default_border_rect_no_focus);
        descriptionText->setPadding(gui::Padding(style::settings::window::phone_modes::description_vertical_padding,
                                                 style::settings::window::phone_modes::description_top_padding,
                                                 style::settings::window::phone_modes::description_vertical_padding,
                                                 0));
        descriptionText->setText(utils::translate(isFlightMode ? "app_settings_info_offline_flight_mode"
                                                               : "app_settings_info_offline_messages_only"));
        descriptionText->setVisible(true);
    }

    auto OfflineWindow::buildOptionsList() -> std::list<gui::Option>

R module-apps/application-settings/windows/OfflineWindow.hpp => module-apps/application-settings/windows/phone-modes/OfflineWindow.hpp +1 -2
@@ 3,7 3,7 @@

#pragma once

#include "BaseSettingsWindow.hpp"
#include <application-settings/windows/BaseSettingsWindow.hpp>

#include <Text.hpp>



@@ 22,7 22,6 @@ namespace gui

      private:
        app::settingsInterface::OfflineSettings *offlineSettings;
        Rect *bar             = nullptr;
        Text *descriptionText = nullptr;
        auto buildOptionsList() -> std::list<Option> override;
        bool changeFlightMode(bool isFlightMode);

R module-apps/application-settings/windows/PhoneModesWindow.cpp => module-apps/application-settings/windows/phone-modes/PhoneModesWindow.cpp +20 -9
@@ 2,20 2,31 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "PhoneModesWindow.hpp"
#include "application-settings/ApplicationSettings.hpp"

#include "OptionSetting.hpp"

#include <application-settings/ApplicationSettings.hpp>
#include <OptionSetting.hpp>
#include <i18n/i18n.hpp>

namespace gui
{
    PhoneModesWindow::PhoneModesWindow(app::Application *app,
                                       app::settingsInterface::SimParams *simParams,
                                       app::settingsInterface::OperatorsSettings *operatorsSettings)
        : OptionWindow(app, gui::window::name::phone_modes), simParams(simParams), operatorsSettings(operatorsSettings)
                                       app::settingsInterface::PhoneModeSettings *phoneModeSettings)
        : OptionWindow(app, gui::window::name::phone_modes), phoneModeSettings(phoneModeSettings)
    {
        addOptions(modesOptList());

        setTitle(utils::translate("app_settings_phone_modes"));
    }

    void PhoneModesWindow::onBeforeShow(ShowMode m, SwitchData *d)
    {
        auto selectedPhoneModeIndex = static_cast<unsigned int>(phoneModeSettings->getCurrentPhoneMode());

        modifiedModesStrings = initialModesStrings;
        modifiedModesStrings[selectedPhoneModeIndex] =
            "<text><b>" + modifiedModesStrings[selectedPhoneModeIndex] + " </b></text>";

        refreshOptions(modesOptList(), selectedPhoneModeIndex);
    }

    auto PhoneModesWindow::modesOptList() -> std::list<gui::Option>


@@ 23,7 34,7 @@ namespace gui
        std::list<gui::Option> optList;

        optList.emplace_back(std::make_unique<gui::option::OptionSettings>(
            utils::translate("app_settings_connected"),
            modifiedModesStrings[0],
            [=](gui::Item &item) { return true; },
            [=](gui::Item &item) {
                if (item.focus) {


@@ 34,7 45,7 @@ namespace gui
            this));

        optList.emplace_back(std::make_unique<gui::option::OptionSettings>(
            utils::translate("app_settings_title_do_not_disturb"),
            modifiedModesStrings[1],
            [=](gui::Item &item) {
                this->application->switchWindow(gui::window::name::do_not_disturb, nullptr);
                return true;


@@ 49,7 60,7 @@ namespace gui
            gui::option::SettingRightItem::ArrowWhite));

        optList.emplace_back(std::make_unique<gui::option::OptionSettings>(
            utils::translate("app_settings_title_offline"),
            modifiedModesStrings[2],
            [=](gui::Item &item) {
                this->application->switchWindow(gui::window::name::offline, nullptr);
                return true;

R module-apps/application-settings/windows/PhoneModesWindow.hpp => module-apps/application-settings/windows/phone-modes/PhoneModesWindow.hpp +10 -15
@@ 3,33 3,28 @@

#pragma once

#include "OptionWindow.hpp"
#include "Application.hpp"
#include <OptionWindow.hpp>

namespace app::settingsInterface
{
    class SimParams;
    class OperatorsSettings;
    class PhoneModeSettings;
}; // namespace app::settingsInterface

namespace gui
{

    namespace window
    {
        inline constexpr auto phone_modes_window = "PhoneModes";
    };

    class PhoneModesWindow : public OptionWindow
    {
      private:
        auto modesOptList() -> std::list<gui::Option>;
        app::settingsInterface::SimParams *simParams;
        app::settingsInterface::OperatorsSettings *operatorsSettings;
        void onBeforeShow(ShowMode m, SwitchData *d) override;
        app::settingsInterface::PhoneModeSettings *phoneModeSettings;

        const std::vector<std::string> initialModesStrings{utils::translate("app_settings_connected"),
                                                           utils::translate("app_settings_title_do_not_disturb"),
                                                           utils::translate("app_settings_title_offline")};
        std::vector<std::string> modifiedModesStrings{initialModesStrings};

      public:
        PhoneModesWindow(app::Application *app,
                         app::settingsInterface::SimParams *simParams,
                         app::settingsInterface::OperatorsSettings *operatorsSettings);
        PhoneModesWindow(app::Application *app, app::settingsInterface::PhoneModeSettings *phoneModeSettings);
    };
} // namespace gui

M module-apps/apps-common/options/type/OptionSetting.cpp => module-apps/apps-common/options/type/OptionSetting.cpp +3 -4
@@ 39,10 39,10 @@ namespace gui::option

        switch (rightItem) {
        case SettingRightItem::ArrowBlack:
            imageName = "right_label_arrow";
            imageName = "arrow_right_32px_W_G";
            break;
        case SettingRightItem::ArrowWhite:
            imageName = "right_label_arrow_border";
            imageName = "arrow_right_empty_32px_W_G";
            break;
        case SettingRightItem::On:
            button = new ButtonOnOff(optionBodyHBox, ButtonState::On);


@@ 80,8 80,7 @@ namespace gui::option
        }

        if (!imageName.empty()) {
            auto image = new gui::Image(optionBodyHBox, 0, 0, 0, 0, imageName);
            image->setMargins(Margins(0, 0, window::option_right_margin, 0));
            new gui::Image(optionBodyHBox, 0, 0, 0, 0, imageName);
        }

        if (button) {

M module-apps/apps-common/options/type/OptionSimple.cpp => module-apps/apps-common/options/type/OptionSimple.cpp +1 -2
@@ 41,8 41,7 @@ namespace gui::option
        optionItem->activatedCallback = activatedCallback;

        if (arrow == Arrow::Enabled) {
            auto arrowImage = new gui::Image(optionBodyHBox, 0, 0, 0, 0, "right_label_arrow");
            arrowImage->setMargins(Margins(0, 0, window::option_right_margin, 0));
            new gui::Image(optionBodyHBox, 0, 0, 0, 0, "arrow_right_empty_32px_W_G");
        }

        return optionItem;

M module-gui/gui/widgets/Lines.cpp => module-gui/gui/widgets/Lines.cpp +5 -2
@@ 38,6 38,8 @@ namespace gui
    auto Lines::draw(BlockCursor &drawCursor, Length w, Length h, Position lineYPosition, Position lineXPosition)
        -> void
    {
        Position initialTopPadding = lineYPosition;

        while (true) {
            auto textLine = gui::TextLine(drawCursor, w);



@@ 47,7 49,7 @@ namespace gui
                break;
            }

            if (lineYPosition + textLine.height() > h) { // no more space for next line
            if ((lineYPosition + textLine.height()) > (h + initialTopPadding)) { // no more space for next line
                debug_text_lines("no more space for next text_line: %d + %" PRIu32 " > %" PRIu32,
                                 lineYPosition,
                                 textLine.height(),


@@ 74,6 76,7 @@ namespace gui
                     Position lineXPosition,
                     unsigned int linesCount) -> void
    {
        Position initialTopPadding = lineYPosition;
        Length initHeight = text->getTextFormat().getFont()->info.line_height;

        while (true) {


@@ 89,7 92,7 @@ namespace gui
                break;
            }

            if (lineYPosition + initHeight > h) {
            if ((lineYPosition + initHeight) > (h + initialTopPadding)) {
                if ((textLine.length() == 0) && textLine.getLineEnd()) {
                    stopCondition = LinesDrawStop::OutOfText;
                    break;