~aleteoryx/muditaos

ref: 20e0437d15787fc7b635490d2c73bf3082feea38 muditaos/module-apps/application-settings/windows/network/NetworkWindow.cpp -rw-r--r-- 5.8 KiB
20e0437d — Lefucjusz [MOS-000] Update Pure 1.8.0 changelog 2 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "NetworkWindow.hpp"

#include <application-settings/ApplicationSettings.hpp>
#include <application-settings/windows/WindowNames.hpp>
#include <OptionSetting.hpp>
#include <widgets/ButtonTriState.hpp>

namespace
{
    cellular::VolteState getVolteStateFromSettingsApp(app::ApplicationCommon *application)
    {
        auto const *settingsApp = static_cast<app::ApplicationSettings *>(application);
        return settingsApp->getVolteState();
    }
} // namespace

namespace gui
{
    NetworkWindow::NetworkWindow(app::ApplicationCommon *app,
                                 app::settingsInterface::OperatorsSettings *operatorsSettings)
        : BaseSettingsWindow(app, gui::window::name::network), operatorsSettings(operatorsSettings)
    {
        setTitle(utils::translate("app_settings_net"));
    }

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

    auto NetworkWindow::buildOptionsList() -> std::list<gui::Option>
    {
        using namespace cellular;

        std::list<gui::Option> optList;

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

        optList.emplace_back(std::make_unique<gui::option::OptionSettings>(
            [this]() {
                auto ret              = utils::translate("app_settings_network_voice_over_lte");
                const auto volteState = getVolteStateFromSettingsApp(application);
                if (!volteState.permitted) {
                    if (volteState.enablement == VolteState::Enablement::On) {
                        LOG_ERROR("[VoLTE] still enabled in modem despite not permitted by operator");
                    }
                    ret += ": ";
                    ret += utils::translate("app_settings_network_volte_not_available");
                }
                return ret;
            }(),
            [this](gui::Item &item) {
                const auto volteState = getVolteStateFromSettingsApp(application);
                if (!volteState.permitted) {
                    return true;
                }
                auto *settingsApp = static_cast<app::ApplicationSettings *>(application);
                switch (volteState.enablement) {
                case VolteState::Enablement::Off:
                    settingsApp->sendVolteChangeRequest(true);
                    break;
                case VolteState::Enablement::On:
                    settingsApp->sendVolteChangeRequest(false);
                    break;
                default:
                    LOG_INFO("[VoLTE] skip request due to unsettled VoLTE state");
                    break;
                }
                return true;
            },
            [&](Item &item) {
                navBar->setText(nav_bar::Side::Center, [&]() {
                    if (!item.focus) {
                        return utils::translate("common_select");
                    }
                    return getVolteStateFromSettingsApp(application).permitted ? utils::translate("common_switch") : "";
                }());
                return true;
            },
            nullptr,
            [&]() {
                const auto volteState = getVolteStateFromSettingsApp(application);
                if (!volteState.permitted) {
                    return option::SettingRightItem::Disabled;
                }
                switch (volteState.enablement) {
                case VolteState::Enablement::Off:
                    return option::SettingRightItem::Off;
                case VolteState::Enablement::On:
                    return option::SettingRightItem::On;
                default:
                    return option::SettingRightItem::Transiting;
                }
            }()));

#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) {
                operatorsSettings->setOperatorsOn(!operatorsOn);
                refreshOptionsList();
                return true;
            },
            nullptr,
            nullptr,
            operatorsOn ? gui::option::SettingRightItem::On : gui::option::SettingRightItem::Off));
        if (!operatorsOn) {
            optList.emplace_back(std::make_unique<gui::option::OptionSettings>(
                utils::translate("app_settings_network_all_operators"),
                [=](gui::Item &item) {
                    this->application->switchWindow(gui::window::name::all_operators, nullptr);
                    return true;
                },
                nullptr,
                nullptr,
                gui::option::SettingRightItem::ArrowWhite,
                false));
        }
#endif // DISABLED_SETTINGS_OPTIONS

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

        navBar->setText(nav_bar::Side::Center, utils::translate(style::strings::common::select));

        return optList;
    }
} // namespace gui