~aleteoryx/muditaos

c8fe78884039d790f0d97a09dad20887b9a9842e — Przemyslaw Brudny 4 years ago 01d4b62
[EGD-7134] Network setting cleanup and fixes

Network setting cleanup. Added missing sim cards window.
Fixed option texts. Disabled not working options in UI.
26 files changed, 223 insertions(+), 153 deletions(-)

M image/assets/lang/English.json
M module-apps/application-settings/ApplicationSettings.cpp
M module-apps/application-settings/ApplicationSettings.hpp
M module-apps/application-settings/CMakeLists.txt
R module-apps/application-settings/models/{ => network}/ApnSettingsModel.cpp
R module-apps/application-settings/models/{ => network}/ApnSettingsModel.hpp
R module-apps/application-settings/models/{ => network}/NewApnModel.cpp
R module-apps/application-settings/models/{ => network}/NewApnModel.hpp
R module-apps/application-settings/widgets/{ => network}/ApnInputWidget.cpp
R module-apps/application-settings/widgets/{ => network}/ApnInputWidget.hpp
R module-apps/application-settings/widgets/{ => network}/ApnListItem.hpp
M module-apps/application-settings/windows/OfflineWindow.cpp
R module-apps/application-settings/windows/{ => network}/ApnOptionsWindow.cpp
R module-apps/application-settings/windows/{ => network}/ApnOptionsWindow.hpp
R module-apps/application-settings/windows/{ => network}/ApnSettingsWindow.cpp
R module-apps/application-settings/windows/{ => network}/ApnSettingsWindow.hpp
R module-apps/application-settings/windows/{ => network}/NetworkWindow.cpp
R module-apps/application-settings/windows/{ => network}/NetworkWindow.hpp
R module-apps/application-settings/windows/{ => network}/NewApnWindow.cpp
R module-apps/application-settings/windows/{ => network}/NewApnWindow.hpp
A module-apps/application-settings/windows/network/SimCardsWindow.cpp
A module-apps/application-settings/windows/network/SimCardsWindow.hpp
M module-apps/apps-common/options/OptionStyle.hpp
M module-apps/apps-common/options/type/OptionSetting.cpp
M module-gui/gui/widgets/Text.cpp
M module-gui/gui/widgets/Text.hpp
M image/assets/lang/English.json => image/assets/lang/English.json +1 -0
@@ 393,6 393,7 @@
  "app_settings_sar": "SAR",
  "app_settings_about": "About Mudita Pure",
  "app_settings_title_languages": "Language selection",
  "app_settings_network_sim_cards": "Sim cards",
  "app_settings_network_active_card": "Active card",
  "app_settings_network_operator_auto_select": "Operator auto-select",
  "app_settings_network_all_operators": "All operators",

M module-apps/application-settings/ApplicationSettings.cpp => module-apps/application-settings/ApplicationSettings.cpp +22 -17
@@ 14,8 14,11 @@
#include <application-settings/windows/bluetooth/AllDevicesWindow.hpp>
#include <application-settings/windows/bluetooth/PhoneNameWindow.hpp>
#include <application-settings/windows/bluetooth/BluetoothCheckPasskeyWindow.hpp>
#include <application-settings/windows/ApnSettingsWindow.hpp>
#include <application-settings/windows/ApnOptionsWindow.hpp>
#include <application-settings/windows/network/NetworkWindow.hpp>
#include <application-settings/windows/network/SimCardsWindow.hpp>
#include <application-settings/windows/network/NewApnWindow.hpp>
#include <application-settings/windows/network/ApnSettingsWindow.hpp>
#include <application-settings/windows/network/ApnOptionsWindow.hpp>
#include <application-settings/windows/DisplayAndKeypadWindow.hpp>
#include <application-settings/windows/InputLanguageWindow.hpp>
#include <application-settings/windows/LockedScreenWindow.hpp>


@@ 24,7 27,6 @@
#include <application-settings/windows/KeypadLightWindow.hpp>
#include <application-settings/windows/AppsAndToolsWindow.hpp>
#include <application-settings/windows/NightshiftWindow.hpp>
#include <application-settings/windows/NetworkWindow.hpp>
#include <application-settings/windows/PhoneWindow.hpp>
#include <application-settings/windows/MessagesWindow.hpp>
#include <application-settings/windows/AlarmClockWindow.hpp>


@@ 40,7 42,6 @@
#include <application-settings/windows/QuotesOptionsWindow.hpp>
#include <application-settings/windows/SARInfoWindow.hpp>
#include <application-settings/windows/SystemMainWindow.hpp>
#include <application-settings/windows/NewApnWindow.hpp>
#include <application-settings/windows/LanguagesWindow.hpp>
#include <application-settings/windows/DateAndTimeMainWindow.hpp>
#include <application-settings/windows/ChangeTimeZone.hpp>


@@ 154,8 155,8 @@ namespace app
            selectedSim = Store::GSM::get()->selected;
            CellularServiceAPI::RequestForOwnNumber(this);
            auto currentWindow = getCurrentWindow();
            if (gui::window::name::network == currentWindow->getName()) {
                updateWindow(gui::window::name::network, nullptr);
            if (gui::window::name::sim_cards == currentWindow->getName()) {
                updateWindow(gui::window::name::sim_cards, nullptr);
            }
            return sys::MessageNone{};
        });


@@ 362,6 363,19 @@ namespace app
        windowsFactory.attach(gui::window::name::all_devices, [](Application *app, const std::string &name) {
            return std::make_unique<gui::AllDevicesWindow>(app);
        });
        windowsFactory.attach(gui::window::name::phone_name, [](Application *app, const std::string &name) {
            return std::make_unique<gui::PhoneNameWindow>(app);
        });
        windowsFactory.attach(gui::window::name::bluetooth_check_passkey,
                              [](Application *app, const std::string &name) {
                                  return std::make_unique<gui::BluetoothCheckPasskeyWindow>(app);
                              });
        windowsFactory.attach(gui::window::name::network, [](Application *app, const std::string &name) {
            return std::make_unique<gui::NetworkWindow>(app, static_cast<ApplicationSettings *>(app));
        });
        windowsFactory.attach(gui::window::name::sim_cards, [](Application *app, const std::string &name) {
            return std::make_unique<gui::SimCardsWindow>(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);
        });


@@ 389,10 403,7 @@ namespace app
        windowsFactory.attach(gui::window::name::nightshift, [](Application *app, const std::string &name) {
            return std::make_unique<gui::NightshiftWindow>(app);
        });
        windowsFactory.attach(gui::window::name::network, [](Application *app, const std::string &name) {
            return std::make_unique<gui::NetworkWindow>(
                app, static_cast<ApplicationSettings *>(app), static_cast<ApplicationSettings *>(app));
        });

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


@@ 417,9 428,7 @@ 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::phone_name, [](Application *app, const std::string &name) {
            return std::make_unique<gui::PhoneNameWindow>(app);
        });

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


@@ 509,10 518,6 @@ namespace 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::bluetooth_check_passkey,
                              [](Application *app, const std::string &name) {
                                  return std::make_unique<gui::BluetoothCheckPasskeyWindow>(app);
                              });

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

M module-apps/application-settings/ApplicationSettings.hpp => module-apps/application-settings/ApplicationSettings.hpp +6 -4
@@ 24,9 24,12 @@ namespace gui::window::name
    inline constexpr auto add_device              = "AddDevice";
    inline constexpr auto bluetooth_check_passkey = "BluetoothCheckPasskey";

    inline constexpr auto network        = "Network";
    inline constexpr auto apn_settings   = "APNSettings";
    inline constexpr auto apn_options    = "APNOptions";
    inline constexpr auto network       = "Network";
    inline constexpr auto sim_cards     = "SimCards";
    inline constexpr auto all_operators = "AllOperators";
    inline constexpr auto apn_settings  = "APNSettings";
    inline constexpr auto apn_options   = "APNOptions";

    inline constexpr auto phone_modes    = "PhoneModes";
    inline constexpr auto apps_and_tools = "AppsAndTools";
    inline constexpr auto security       = "Security";


@@ 59,7 62,6 @@ namespace gui::window::name

    inline constexpr auto display_and_keypad = "DisplayAndKeypad";
    inline constexpr auto change_settings    = "ChangeSettings";
    inline constexpr auto all_operators      = "AllOperators";
    inline constexpr auto pin_settings       = "PINSettings";
    inline constexpr auto import_contacts    = "ImportContacts";
    inline constexpr auto dialog_settings    = "DialogSettings";

M module-apps/application-settings/CMakeLists.txt => module-apps/application-settings/CMakeLists.txt +11 -9
@@ 17,8 17,8 @@ target_sources( ${PROJECT_NAME}
        ApplicationSettings.cpp
        models/advanced/ColorTestModel.cpp
        models/bluetooth/BluetoothSettingsModel.cpp
        models/ApnSettingsModel.cpp
        models/NewApnModel.cpp
        models/network/ApnSettingsModel.cpp
        models/network/NewApnModel.cpp
        models/DateAndTimeModel.cpp
        models/FromTimeToTimeModel.cpp
        models/QuotesModel.cpp


@@ 31,9 31,9 @@ target_sources( ${PROJECT_NAME}
        presenter/TechnicalWindowPresenter.cpp
        widgets/advanced/ColorTestListItem.cpp
        widgets/advanced/ColorTestListView.cpp
        widgets/network/ApnInputWidget.cpp
        widgets/QuoteWidget.cpp
        widgets/CategoryWidget.cpp
        widgets/ApnInputWidget.cpp
        widgets/SettingsDateItem.cpp
        widgets/SettingsTimeItem.cpp
        widgets/SettingsSoundItem.cpp


@@ 48,8 48,10 @@ target_sources( ${PROJECT_NAME}
        windows/bluetooth/BluetoothWindow.cpp
        windows/bluetooth/PhoneNameWindow.cpp
        windows/bluetooth/BluetoothCheckPasskeyWindow.cpp
        windows/ApnSettingsWindow.cpp
        windows/ApnOptionsWindow.cpp
        windows/network/NetworkWindow.cpp
        windows/network/SimCardsWindow.cpp
        windows/network/ApnSettingsWindow.cpp
        windows/network/ApnOptionsWindow.cpp
        windows/BaseSettingsWindow.cpp
        windows/FontSizeWindow.cpp
        windows/InputLanguageWindow.cpp


@@ 58,7 60,6 @@ target_sources( ${PROJECT_NAME}
        windows/LockedScreenWindow.cpp
        windows/DisplayAndKeypadWindow.cpp
        windows/AppsAndToolsWindow.cpp
        windows/NetworkWindow.cpp
        windows/NightshiftWindow.cpp
        windows/OptionsWidgetMaker.cpp
        windows/PhoneWindow.cpp


@@ 73,7 74,7 @@ target_sources( ${PROJECT_NAME}
        windows/QuotesOptionsWindow.cpp
        windows/SARInfoWindow.cpp
        windows/SecurityMainWindow.cpp
        windows/NewApnWindow.cpp
        windows/network/NewApnWindow.cpp
        widgets/SpinBox.cpp
        widgets/SpinBoxOptionSettings.cpp
        windows/SystemMainWindow.cpp


@@ 98,15 99,16 @@ target_sources( ${PROJECT_NAME}
        widgets/advanced/ColorTestListItem.hpp
        widgets/advanced/ColorTestListItem.hpp
        widgets/advanced/ColorTestListStyle.hpp
        widgets/ApnInputWidget.hpp
        widgets/network/ApnInputWidget.hpp
        widgets/CategoryWidget.hpp
        windows/NewApnWindow.hpp
        windows/SettingsMainWindow.hpp
        windows/advanced/AdvancedOptionsWindow.hpp
        windows/advanced/InformationWindow.hpp
        windows/advanced/UITestWindow.hpp
        windows/advanced/EinkModeWindow.hpp
        windows/advanced/ColorTestWindow.hpp
        windows/network/SimCardsWindow.hpp
        windows/network/NewApnWindow.hpp
        windows/BaseSettingsWindow.hpp
        windows/FontSizeWindow.hpp
        windows/InputLanguageWindow.hpp

R module-apps/application-settings/models/ApnSettingsModel.cpp => module-apps/application-settings/models/network/ApnSettingsModel.cpp +0 -0
R module-apps/application-settings/models/ApnSettingsModel.hpp => module-apps/application-settings/models/network/ApnSettingsModel.hpp +0 -0
R module-apps/application-settings/models/NewApnModel.cpp => module-apps/application-settings/models/network/NewApnModel.cpp +3 -3
@@ 3,11 3,11 @@

#include "NewApnModel.hpp"

#include "application-settings/widgets/ApnInputWidget.hpp"
#include <application-settings/data/SettingsItemData.hpp>
#include <application-settings/widgets/SettingsStyle.hpp>
#include <application-settings/widgets/network/ApnInputWidget.hpp>

#include <ListView.hpp>
#include <time/ScopedTime.hpp>
#include <BottomBar.hpp>

NewApnModel::NewApnModel(app::Application *app) : application(app)
{}

R module-apps/application-settings/models/NewApnModel.hpp => module-apps/application-settings/models/network/NewApnModel.hpp +3 -5
@@ 3,12 3,10 @@

#pragma once

#include "application-settings/data/SettingsItemData.hpp"
#include "application-settings/widgets/ApnListItem.hpp"
#include "application-settings/widgets/SettingsStyle.hpp"
#include "InternalModel.hpp"
#include "Application.hpp"
#include <application-settings/widgets/network/ApnListItem.hpp>

#include <InternalModel.hpp>
#include <Application.hpp>
#include <ListItemProvider.hpp>

class NewApnModel : public app::InternalModel<gui::ApnListItem *>, public gui::ListItemProvider

R module-apps/application-settings/widgets/ApnInputWidget.cpp => module-apps/application-settings/widgets/network/ApnInputWidget.cpp +2 -4
@@ 2,10 2,9 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "ApnInputWidget.hpp"
#include <Span.hpp>
#include "application-settings/widgets/SettingsStyle.hpp"

#include <application-settings/widgets/SettingsStyle.hpp>
#include <i18n/i18n.hpp>
#include <utility>

namespace gui
{


@@ 17,7 16,6 @@ namespace gui
                                   unsigned int lines)
        : listItemName(listItemName), checkTextContent(std::move(contentChanged))
    {

        setMinimumSize(style::settings::widget::apnInputWidget::w,
                       style::settings::widget::apnInputWidget::title_label_h +
                           style::settings::widget::apnInputWidget::span_size +

R module-apps/application-settings/widgets/ApnInputWidget.hpp => module-apps/application-settings/widgets/network/ApnInputWidget.hpp +2 -4
@@ 3,11 3,9 @@

#pragma once

#include "application-settings/data/SettingsInternals.hpp"
#include "application-settings//widgets/ApnListItem.hpp"
#include "ApnListItem.hpp"

#include <ListItem.hpp>
#include <Text.hpp>
#include <application-settings/data/SettingsInternals.hpp>
#include <TextFixedSize.hpp>

namespace gui

R module-apps/application-settings/widgets/ApnListItem.hpp => module-apps/application-settings/widgets/network/ApnListItem.hpp +1 -1
@@ 3,7 3,7 @@

#pragma once

#include "application-settings/data/SettingsItemData.hpp"
#include <application-settings/data/SettingsItemData.hpp>

namespace gui
{

M module-apps/application-settings/windows/OfflineWindow.cpp => module-apps/application-settings/windows/OfflineWindow.cpp +1 -1
@@ 54,7 54,7 @@ namespace gui
            false,
            utils::translate(isFlightMode ? "app_settings_no_network_connection_flight_mode"
                                          : "app_settings_messages_only"),
            false));
            true));

        if (!isFlightMode) {
            optList.emplace_back(std::make_unique<gui::option::OptionSettings>(

R module-apps/application-settings/windows/ApnOptionsWindow.cpp => module-apps/application-settings/windows/network/ApnOptionsWindow.cpp +3 -4
@@ 3,10 3,9 @@

#include "ApnOptionsWindow.hpp"

#include "application-settings/ApplicationSettings.hpp"
#include "application-settings/data/SettingsItemData.hpp"
#include "application-settings/models/ApnSettingsModel.hpp"
#include "OptionSetting.hpp"
#include <application-settings/ApplicationSettings.hpp>
#include <application-settings/data/SettingsItemData.hpp>
#include <OptionSetting.hpp>

namespace gui
{

R module-apps/application-settings/windows/ApnOptionsWindow.hpp => module-apps/application-settings/windows/network/ApnOptionsWindow.hpp +2 -2
@@ 3,8 3,8 @@

#pragma once

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

#include <service-cellular/PacketDataTypes.hpp>


R module-apps/application-settings/windows/ApnSettingsWindow.cpp => module-apps/application-settings/windows/network/ApnSettingsWindow.cpp +6 -5
@@ 2,11 2,12 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "ApnSettingsWindow.hpp"
#include "application-settings/ApplicationSettings.hpp"
#include "application-settings/data/ApnListData.hpp"
#include "application-settings/widgets/SettingsStyle.hpp"
#include "application-settings/data/SettingsItemData.hpp"
#include "OptionSetting.hpp"

#include <application-settings/ApplicationSettings.hpp>
#include <application-settings/data/ApnListData.hpp>
#include <application-settings/widgets/SettingsStyle.hpp>
#include <application-settings/data/SettingsItemData.hpp>
#include <OptionSetting.hpp>

#include <header/AddElementAction.hpp>
#include <InputEvent.hpp>

R module-apps/application-settings/windows/ApnSettingsWindow.hpp => module-apps/application-settings/windows/network/ApnSettingsWindow.hpp +2 -2
@@ 3,8 3,8 @@

#pragma once

#include "OptionWindow.hpp"
#include "application-settings/models/ApnSettingsModel.hpp"
#include <OptionWindow.hpp>
#include <application-settings/models/network/ApnSettingsModel.hpp>

#include <Icon.hpp>
#include <service-cellular/PacketDataTypes.hpp>

R module-apps/application-settings/windows/NetworkWindow.cpp => module-apps/application-settings/windows/network/NetworkWindow.cpp +16 -67
@@ 2,73 2,41 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "NetworkWindow.hpp"
#include "application-settings/ApplicationSettings.hpp"
#include "application-settings/data/PINSettingsSimData.hpp"

#include "OptionSetting.hpp"
#include <application-settings/ApplicationSettings.hpp>
#include <application-settings/data/PINSettingsSimData.hpp>
#include <OptionSetting.hpp>

#include <i18n/i18n.hpp>

namespace gui
{
    NetworkWindow::NetworkWindow(app::Application *app,
                                 app::settingsInterface::SimParams *simParams,
                                 app::settingsInterface::OperatorsSettings *operatorsSettings)
        : BaseSettingsWindow(app, gui::window::name::network), simParams(simParams),
          operatorsSettings(operatorsSettings)
    NetworkWindow::NetworkWindow(app::Application *app, app::settingsInterface::OperatorsSettings *operatorsSettings)
        : BaseSettingsWindow(app, gui::window::name::network), operatorsSettings(operatorsSettings)
    {}

    void NetworkWindow::onBeforeShow(ShowMode mode, SwitchData *data)
    {
        simParams->updateSim();
        BaseSettingsWindow::onBeforeShow(mode, data);
    }

    auto NetworkWindow::buildOptionsList() -> std::list<gui::Option>
    {
        std::list<gui::Option> optList;
        std::string simStr;
        auto phoneNumber = simParams->getNumber();
        auto sim         = simParams->getSim();
        switch (sim) {
        case Store::GSM::SIM::SIM1:
            simStr = utils::translate("app_settings_network_sim1");
            break;
        case Store::GSM::SIM::SIM2:
            simStr = utils::translate("app_settings_network_sim2");
            break;
        case Store::GSM::SIM::NONE:
        case Store::GSM::SIM::SIM_FAIL:
        case Store::GSM::SIM::SIM_UNKNOWN:
            simStr      = utils::translate("app_settings_network_sim_none");
            phoneNumber = {};
            break;
        }
        auto operatorsOn = operatorsSettings->getOperatorsOn();

        optList.emplace_back(std::make_unique<gui::option::OptionSettings>(
            utils::translate("app_settings_network_active_card") + ":" + simStr + " / " + phoneNumber,
            utils::translate("app_settings_network_sim_cards"),
            [=](gui::Item &item) {
                if (Store::GSM::SIM::SIM1 == sim) {
                    simParams->setSim(Store::GSM::SIM::SIM2);
                }
                else {
                    simParams->setSim(Store::GSM::SIM::SIM1);
                }

                this->application->switchWindow(gui::window::name::sim_cards, nullptr);
                return true;
            },
            [=](gui::Item &item) {
                if (item.focus) {
                    this->setBottomBarText(utils::translate(style::strings::common::Switch), BottomBar::Side::CENTER);
                }
                else {
                    this->setBottomBarText(utils::translate(style::strings::common::select), BottomBar::Side::CENTER);
                }
                return true;
            },
            this));
            nullptr,
            nullptr,
            gui::option::SettingRightItem::ArrowWhite,
            false));

#if DISABLED_SETTINGS_OPTIONS == 1
        auto operatorsOn = operatorsSettings->getOperatorsOn();
        optList.emplace_back(std::make_unique<gui::option::OptionSettings>(
            utils::translate("app_settings_network_operator_auto_select"),
            [=](gui::Item &item) {


@@ 91,27 59,7 @@ namespace gui
                gui::option::SettingRightItem::ArrowWhite,
                false));
        }

        optList.emplace_back(std::make_unique<gui::option::OptionSettings>(
            utils::translate("app_settings_network_pin_settings") + " (" + simStr + ")",
            [=](gui::Item &item) {
                auto pinSettingsData = std::make_unique<gui::PINSettingsSimData>(simStr);
                this->application->switchWindow(gui::window::name::pin_settings, std::move(pinSettingsData));
                return true;
            },
            nullptr,
            nullptr,
            gui::option::SettingRightItem::ArrowWhite,
            false));

        optList.emplace_back(std::make_unique<gui::option::OptionSettings>(
            utils::translate("app_settings_network_import_contacts_from_sim_card"),
            [=](gui::Item &item) {
                this->application->switchWindow(gui::window::name::import_contacts, nullptr);
                return true;
            },
            nullptr,
            nullptr));
#endif // DISABLED_SETTINGS_OPTIONS

#if ENABLE_VOLTE == 1
        auto voLteOn = operatorsSettings->getVoLTEOn();


@@ 126,6 74,7 @@ namespace gui
            nullptr,
            voLteOn ? gui::option::SettingRightItem::On : gui::option::SettingRightItem::Off));
#endif // ENABLE_VOLTE

        optList.emplace_back(std::make_unique<gui::option::OptionSettings>(
            utils::translate("app_settings_network_apn_settings"),
            [=](gui::Item &item) {


@@ 135,7 84,7 @@ namespace gui
            nullptr,
            nullptr,
            gui::option::SettingRightItem::ArrowWhite,
            true));
            false));

        bottomBar->setText(BottomBar::Side::CENTER, utils::translate(style::strings::common::select));


R module-apps/application-settings/windows/NetworkWindow.hpp => module-apps/application-settings/windows/network/NetworkWindow.hpp +2 -13
@@ 3,34 3,23 @@

#pragma once

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

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

namespace gui
{

    namespace window
    {
        inline constexpr auto network_window = "Network";
    };

    class NetworkWindow : public BaseSettingsWindow
    {
      private:
        auto buildOptionsList() -> std::list<Option> override;
        app::settingsInterface::SimParams *simParams;
        app::settingsInterface::OperatorsSettings *operatorsSettings;

      public:
        NetworkWindow(app::Application *app,
                      app::settingsInterface::SimParams *simParams,
                      app::settingsInterface::OperatorsSettings *operatorsSettings);
        NetworkWindow(app::Application *app, app::settingsInterface::OperatorsSettings *operatorsSettings);

        void onBeforeShow(ShowMode mode, SwitchData *data) override;
    };

R module-apps/application-settings/windows/NewApnWindow.cpp => module-apps/application-settings/windows/network/NewApnWindow.cpp +2 -3
@@ 2,10 2,9 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

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

#include <Dialog.hpp>
#include <messages/DialogMetadataMessage.hpp>
#include <application-settings/ApplicationSettings.hpp>
#include <application-settings/widgets/SettingsStyle.hpp>

namespace gui
{

R module-apps/application-settings/windows/NewApnWindow.hpp => module-apps/application-settings/windows/network/NewApnWindow.hpp +2 -2
@@ 3,8 3,8 @@

#pragma once

#include "application-settings/models/ApnSettingsModel.hpp"
#include "application-settings/models/NewApnModel.hpp"
#include <application-settings/models/network/ApnSettingsModel.hpp>
#include <application-settings/models/network/NewApnModel.hpp>

#include <AppWindow.hpp>
#include <ListView.hpp>

A module-apps/application-settings/windows/network/SimCardsWindow.cpp => module-apps/application-settings/windows/network/SimCardsWindow.cpp +100 -0
@@ 0,0 1,100 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "SimCardsWindow.hpp"

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

#include <i18n/i18n.hpp>

namespace gui
{
    SimCardsWindow::SimCardsWindow(app::Application *app, app::settingsInterface::SimParams *simParams)
        : BaseSettingsWindow(app, gui::window::name::sim_cards), simParams(simParams)
    {}

    void SimCardsWindow::onBeforeShow(ShowMode mode, SwitchData *data)
    {
        setTitle(utils::translate("app_settings_network_sim_cards"));
        simParams->updateSim();
        BaseSettingsWindow::onBeforeShow(mode, data);
    }

    auto SimCardsWindow::buildOptionsList() -> std::list<gui::Option>
    {
        std::list<gui::Option> optList;
        std::string simStr;
        auto phoneNumber = simParams->getNumber();
        auto sim         = simParams->getSim();
        switch (sim) {
        case Store::GSM::SIM::SIM1:
            simStr = utils::translate("app_settings_network_sim1");
            break;
        case Store::GSM::SIM::SIM2:
            simStr = utils::translate("app_settings_network_sim2");
            break;
        case Store::GSM::SIM::NONE:
        case Store::GSM::SIM::SIM_FAIL:
        case Store::GSM::SIM::SIM_UNKNOWN:
            simStr      = utils::translate("app_settings_network_sim_none");
            phoneNumber = {};
            break;
        }

        optList.emplace_back(std::make_unique<gui::option::OptionSettings>(
            utils::translate("app_settings_network_active_card"),
            [=](gui::Item &item) {
                if (Store::GSM::SIM::SIM1 == sim) {
                    simParams->setSim(Store::GSM::SIM::SIM2);
                }
                else {
                    simParams->setSim(Store::GSM::SIM::SIM1);
                }

                return true;
            },
            [=](gui::Item &item) {
                if (item.focus) {
                    this->setBottomBarText(utils::translate(style::strings::common::Switch), BottomBar::Side::CENTER);
                }
                else {
                    this->setBottomBarText(utils::translate(style::strings::common::select), BottomBar::Side::CENTER);
                }
                return true;
            },
            this,
            gui::option::SettingRightItem::Text,
            false,
            simStr + " / " + phoneNumber,
            true));

        optList.emplace_back(std::make_unique<gui::option::OptionSettings>(
            utils::translate("app_settings_network_pin_settings"),
            [=](gui::Item &item) {
                auto pinSettingsData = std::make_unique<gui::PINSettingsSimData>(simStr);
                this->application->switchWindow(gui::window::name::pin_settings, std::move(pinSettingsData));
                return true;
            },
            nullptr,
            nullptr,
            gui::option::SettingRightItem::ArrowWhite,
            false));

#if DISABLED_SETTINGS_OPTIONS == 1
        optList.emplace_back(std::make_unique<gui::option::OptionSettings>(
            utils::translate("app_settings_network_import_contacts_from_sim_card"),
            [=](gui::Item &item) {
                this->application->switchWindow(gui::window::name::import_contacts, nullptr);
                return true;
            },
            nullptr,
            nullptr));
#endif // DISABLED_SETTINGS_OPTIONS

        bottomBar->setText(BottomBar::Side::CENTER, utils::translate(style::strings::common::select));

        return optList;
    }
} // namespace gui

A module-apps/application-settings/windows/network/SimCardsWindow.hpp => module-apps/application-settings/windows/network/SimCardsWindow.hpp +26 -0
@@ 0,0 1,26 @@
// 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 <application-settings/windows/BaseSettingsWindow.hpp>

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

namespace gui
{
    class SimCardsWindow : public BaseSettingsWindow
    {
      private:
        auto buildOptionsList() -> std::list<Option> override;
        app::settingsInterface::SimParams *simParams;

      public:
        SimCardsWindow(app::Application *app, app::settingsInterface::SimParams *simParams);

        void onBeforeShow(ShowMode mode, SwitchData *data) override;
    };
} // namespace gui

M module-apps/apps-common/options/OptionStyle.hpp => module-apps/apps-common/options/OptionStyle.hpp +0 -2
@@ 40,8 40,6 @@ namespace gui::option
        inline constexpr gui::Length option_left_margin       = 10;
        inline constexpr gui::Length option_right_margin      = 10;
        inline constexpr gui::Length option_bottom_margin     = style::margins::big;
        inline constexpr gui::Length option_right_min_size    = 150;
        inline constexpr gui::Length option_rightbig_min_size = 350;
        inline constexpr uint32_t optionsListTopMargin        = 10U;
        inline constexpr uint32_t optionsListX                = style::window::default_left_margin;
        inline constexpr uint32_t optionsListY = style::window::default_vertical_pos + optionsListTopMargin;

M module-apps/apps-common/options/type/OptionSetting.cpp => module-apps/apps-common/options/type/OptionSetting.cpp +4 -5
@@ 65,14 65,13 @@ namespace gui::option
        case SettingRightItem::Text: {
            auto optionTextRight = new TextFixedSize(optionBodyHBox, 0, 0, 0, 0);
            optionTextRight->setUnderline(false);
            optionTextRight->setMinimumSize((textOnRightIsSmall) ? gui::option::window::option_right_min_size
                                                                 : gui::option::window::option_rightbig_min_size,
                                            style::window::label::big_h);
            optionTextRight->setFont((textOnRightIsSmall) ? style::window::font::verysmall
                                                          : style::window::font::medium);
            optionTextRight->setMinimumWidthToFitText(textOnRight);
            optionTextRight->setMinimumHeight(style::window::label::big_h);
            optionTextRight->setAlignment(
                gui::Alignment(gui::Alignment::Horizontal::Right, gui::Alignment::Vertical::Center));
            optionTextRight->setMargins(Margins(0, 0, window::option_right_margin, 0));
            optionTextRight->setFont((textOnRightIsSmall) ? style::window::font::medium
                                                          : style::window::font::verysmall);
            optionTextRight->setRichText(textOnRight);
            break;
        }

M module-gui/gui/widgets/Text.cpp => module-gui/gui/widgets/Text.cpp +5 -0
@@ 220,6 220,11 @@ namespace gui
        buildCursor();
    }

    void Text::setMinimumWidthToFitText(const UTF8 &text)
    {
        setMinimumWidth(format.getFont()->getPixelWidth(text) + TextCursor::defaultWidth);
    }

    auto Text::setCursorStartPosition(CursorStartPosition val) -> void
    {
        // As we destroy cursors starting position information need to be stored in both places

M module-gui/gui/widgets/Text.hpp => module-gui/gui/widgets/Text.hpp +1 -0
@@ 158,6 158,7 @@ namespace gui
        virtual bool saveText(UTF8 path);
        void setFont(const UTF8 &fontName);
        void setFont(RawFont *font);
        void setMinimumWidthToFitText(const UTF8 &text);

        // virtual methods from Item
        bool onInput(const InputEvent &inputEvent) override;