~aleteoryx/muditaos

ref: 0ef0d615f34e275f088890a1244dd480dd467920 muditaos/module-apps/application-settings/windows/USSDWindow.cpp -rw-r--r-- 4.4 KiB
0ef0d615 — Krzysztof Mozdzynski [EGD-4150] Change filename i18 to i18n (#1108) 5 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
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "USSDWindow.hpp"
#include "../ApplicationSettings.hpp"
#include "Label.hpp"
#include "Margins.hpp"
#include "module-utils/i18n/i18n.hpp"
#include "messages/AppMessage.hpp"
#include <service-appmgr/model/ApplicationManager.hpp>
#include <GridLayout.hpp>
#include <Style.hpp>
#include <functional>
#include <memory>
#include <Font.hpp>
#include <service-cellular/CellularServiceAPI.hpp>

namespace gui
{

    USSDWindow::USSDWindow(app::Application *app) : AppWindow(app, gui::window::name::ussd_window)
    {
        buildInterface();
    }

    void USSDWindow::rebuild()
    {}

    void USSDWindow::buildInterface()
    {
        AppWindow::buildInterface();
        bottomBar->setActive(BottomBar::Side::CENTER, true);
        bottomBar->setActive(BottomBar::Side::RIGHT, true);
        bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::select));
        bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));

        topBar->setActive(TopBar::Elements::SIGNAL, true);
        topBar->setActive(TopBar::Elements::BATTERY, true);

        setTitle("USSD test");

        uint32_t h = style::settings::ussd::commonYPos;

        incomingLabel = addTitle("Incoming code");
        incomingLabel->setPosition(style::settings::ussd::commonXPos, h);
        h += style::settings::ussd::commonLabelH;

        received = addText();

        received->setPosition(style::settings::ussd::commonXPos, h);
        h += style::settings::ussd::commonTextH;

        outgoingLabel = addTitle("Outgoing code");
        outgoingLabel->setPosition(style::settings::ussd::commonXPos, h);
        h += style::settings::ussd::commonLabelH;

        pullToSend = addText();
        pullToSend->setPosition(style::settings::ussd::commonXPos, h);
        pullToSend->activatedCallback = [=](gui::Item &) {
            std::string data = pullToSend->getText().c_str();
            CellularServiceAPI::USSDRequest(
                this->application, CellularUSSDMessage::RequestType::pullSesionRequest, data);
            return true;
        };
        pullToSend->setEditMode(EditMode::EDIT);
        pullToSend->setInputMode(new InputMode(
            {InputMode::digit},
            [=](const UTF8 &text) { bottomBarTemporaryMode(text); },
            [=]() { bottomBarRestoreFromTemporaryMode(); },
            [=]() { selectSpecialCharacter(); }));
        setFocusItem(pullToSend);
    }

    void USSDWindow::destroyInterface()
    {
        erase();
    }

    void USSDWindow::onBeforeShow(ShowMode mode, SwitchData *data)
    {}

    gui::Label *USSDWindow::addTitle(const UTF8 &title)
    {
        gui::Label *label = new gui::Label(this,
                                           style::settings::ussd::commonXPos,
                                           style::settings::ussd::commonYPos,
                                           style::settings::ussd::commonW,
                                           style::settings::ussd::commonLabelH,
                                           title);
        label->setFilled(false);
        label->setPenFocusWidth(style::window::default_border_focus_w);
        label->setPenWidth(style::window::default_border_no_focus_w);

        label->setFont(style::window::font::verysmall);
        label->setAlignment(gui::Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Center));

        return label;
    }
    gui::Text *USSDWindow::addText(void)
    {
        gui::Text *text = new gui::Text(this,
                                        style::settings::ussd::commonXPos,
                                        style::settings::ussd::commonYPos,
                                        style::settings::ussd::commonW,
                                        style::settings::ussd::commonTextH);
        text->setFilled(false);
        text->setPenFocusWidth(style::window::default_border_focus_w);
        text->setPenWidth(style::window::default_border_no_focus_w);

        text->setFont(style::window::font::verysmall);
        text->setAlignment(gui::Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Center));
        text->setEdges(RectangleEdge::All);
        return text;
    }

    void USSDWindow::handleIncomingUSSD(const std::string &data)
    {
        received->setText(UTF8(data));
    }
} // namespace gui