~aleteoryx/muditaos

ref: a8fd5d25ec9589660fcbd316d2dcf13f74542a09 muditaos/module-apps/application-settings/windows/network/ApnOptionsWindow.cpp -rw-r--r-- 2.4 KiB
a8fd5d25 — Adam Wulkiewicz [MOS-691] Fix memory leaks in APN settings 3 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
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "ApnOptionsWindow.hpp"

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

#include <OptionSetting.hpp>

namespace gui
{
    ApnOptionsWindow::ApnOptionsWindow(app::ApplicationCommon *app)
        : BaseSettingsWindow(app, window::name::apn_options), apnSettingsModel(app)
    {
        setTitle(utils::translate("common_options_title"));
    }

    auto ApnOptionsWindow::buildOptionsList() -> std::list<gui::Option>
    {
        std::list<gui::Option> optionsList;

        optionsList.emplace_back(std::make_unique<gui::option::OptionSettings>(
            utils::translate("app_settings_apn_options_edit"),
            [=](gui::Item &item) {
                std::unique_ptr<gui::SwitchData> data = std::make_unique<ApnItemData>(apn);
                data->ignoreCurrentWindowOnStack      = true;
                application->switchWindow(gui::window::name::new_apn, gui::ShowMode::GUI_SHOW_INIT, std::move(data));
                return true;
            },
            nullptr,
            this));

        optionsList.emplace_back(std::make_unique<gui::option::OptionSettings>(
            utils::translate("app_settings_apn_options_delete"),
            [=](gui::Item &item) {
                apnSettingsModel.removeAPN(apn);
                application->returnToPreviousWindow();
                return true;
            },
            nullptr,
            this));

        optionsList.emplace_back(std::make_unique<gui::option::OptionSettings>(
            utils::translate("app_settings_apn_options_set_as_default"),
            [=](gui::Item &item) {
                apnSettingsModel.setAsDefaultAPN(apn);
                application->returnToPreviousWindow();
                return true;
            },
            nullptr,
            this));

        return optionsList;
    }

    auto ApnOptionsWindow::handleSwitchData(SwitchData *data) -> bool
    {
        if (data == nullptr) {
            return false;
        }

        auto item = dynamic_cast<ApnItemData *>(data);
        if (item == nullptr) {
            return false;
        }

        apn = item->getApn();
        if (apn == nullptr) {
            apn = std::make_shared<packet_data::APN::Config>();
            return true;
        }

        return true;
    }
} // namespace gui