~aleteoryx/muditaos

ref: 8bbb57776aa05eae541e6fdf288fdc9df11f6841 muditaos/module-apps/application-phonebook/widgets/NumberWithIconsWidget.cpp -rw-r--r-- 5.1 KiB
8bbb5777 — Artur Śleszyński [EGD-4115] Implement FreeRTOS configASSERT macro 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
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "NumberWithIconsWidget.hpp"

#include "application-phonebook/data/PhonebookStyle.hpp"

#include <BottomBar.hpp>

#include <application-call/data/CallSwitchData.hpp>
#include <service-appmgr/Controller.hpp>
#include <module-apps/application-messages/data/SMSdata.hpp>

namespace gui
{
    NumberWithIconsWidget::NumberWithIconsWidget(app::Application *app,
                                                 const utils::PhoneNumber::View &number,
                                                 const std::string &font,
                                                 Item *parent)
        : HBox(parent, 0, 0, 0, 0)
    {
        setReverseOrder(true);
        setMinimumSize(phonebookStyle::informationWidget::w, phonebookStyle::numbersWithIconsWidget::h);
        setEdges(gui::RectangleEdge::None);
        setAlignment(Alignment(gui::Alignment::Horizontal::Right, gui::Alignment::Vertical::Center));

        smsImage                = new ImageBox(this,
                                0,
                                0,
                                phonebookStyle::numbersWithIconsWidget::sms_image_w,
                                phonebookStyle::numbersWithIconsWidget::sms_image_h,
                                new Image("mail"));
        smsImage->inputCallback = [=](Item &item, const InputEvent &input) {
            if (input.keyCode == KeyCode::KEY_ENTER && input.state == InputEvent::State::keyReleasedShort) {
                LOG_INFO("SMS operation started");
                auto data                        = std::make_unique<SMSSendRequest>(number, std::string{});
                data->ignoreCurrentWindowOnStack = true;
                return app::manager::Controller::sendAction(app,
                                                            app::manager::actions::CreateSms,
                                                            std::move(data),
                                                            app::manager::OnSwitchBehaviour::RunInBackground);
            }
            return false;
        };

        phoneImage = new ImageBox(this,
                                  0,
                                  0,
                                  phonebookStyle::numbersWithIconsWidget::phone_image_w,
                                  phonebookStyle::numbersWithIconsWidget::phone_image_h,
                                  new Image("phonebook_phone_ringing"));
        phoneImage->setMargins(Margins(phonebookStyle::numbersWithIconsWidget::phone_image_margin_left,
                                       0,
                                       phonebookStyle::numbersWithIconsWidget::phone_image_margin_right,
                                       0));
        phoneImage->inputCallback = [=](Item &item, const InputEvent &input) {
            if (input.keyCode == KeyCode::KEY_ENTER && input.state == InputEvent::State::keyReleasedShort) {
                app::manager::Controller::sendAction(app,
                                                     app::manager::actions::Dial,
                                                     std::make_unique<app::ExecuteCallData>(number),
                                                     app::manager::OnSwitchBehaviour::RunInBackground);
                LOG_INFO("Call operation started");
            }
            return false;
        };

        numberText = new TextFixedSize(this, 0, 0, 0, 0);
        numberText->setUnderline(false);
        numberText->setMaximumSize(phonebookStyle::informationWidget::w,
                                   phonebookStyle::numbersWithIconsWidget::number_text_h);
        numberText->setFont(font);
        numberText->setEdges(gui::RectangleEdge::None);
        numberText->setEditMode(EditMode::Browse);
        numberText->setAlignment(Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center));
        numberText->setText(number.getFormatted());
        numberText->activeItem = false;

        focusChangedCallback = [&](Item &item) {
            setFocusItem(focus ? phoneImage : nullptr);
            return true;
        };

        phoneImage->focusChangedCallback = [&, app](Item &item) {
            if (phoneImage->focus) {
                phoneImage->setEdges(RectangleEdge::Bottom | RectangleEdge::Top);
                app->getCurrentWindow()->bottomBarTemporaryMode(
                    utils::localize.get(style::strings::common::call), BottomBar::Side::CENTER, false);
            }
            else {
                phoneImage->setEdges(RectangleEdge::None);
            }
            return true;
        };

        smsImage->focusChangedCallback = [&, app](Item &item) {
            if (smsImage->focus) {
                smsImage->setEdges(RectangleEdge::Bottom | RectangleEdge::Top);
                app->getCurrentWindow()->bottomBarTemporaryMode(
                    utils::localize.get(style::strings::common::send), BottomBar::Side::CENTER, false);
            }
            else {
                smsImage->setEdges(RectangleEdge::None);
            }
            return true;
        };
    }
} /* namespace gui */