~aleteoryx/muditaos

4bbdb1d3b0d16b8d00f70786539cbfc18220aab7 — Pawel Paprocki 5 years ago f0b1ee9
[EGD-4465] Create info window for incoming MMI messages (#1078)

M changelog.md => changelog.md +1 -0
@@ 8,6 8,7 @@
* `[notes]` MMI/USSD communication window
* `[notes]` Notes application implemented.
* `[notes]` Notes search engine implemented.
* `[desktop]` info window for incoming MMI messages.


### Changed

M module-apps/CMakeLists.txt => module-apps/CMakeLists.txt +1 -1
@@ 30,7 30,7 @@ set( SOURCES
    "widgets/BrightnessBox.cpp"
    "widgets/ModesBox.cpp"
    "widgets/BarGraph.cpp"
    )
     )

add_library(${PROJECT_NAME} STATIC ${SOURCES} ${BOARD_SOURCES})


M module-apps/application-desktop/ApplicationDesktop.cpp => module-apps/application-desktop/ApplicationDesktop.cpp +10 -0
@@ 12,6 12,8 @@
#include "windows/Reboot.hpp"
#include "windows/Update.hpp"
#include "windows/MmiPullWindow.hpp"
#include "windows/MmiPushWindow.hpp"

#include "AppWindow.hpp"
#include "data/LockPhoneData.hpp"



@@ 69,6 71,11 @@ namespace app
            switchWindow(app::window::name::desktop_mmi_pull, std::move(data));
            return msgHandled();
        });

        addActionReceiver(app::manager::actions::ShowMMIPush, [this](auto &&data) {
            switchWindow(app::window::name::desktop_mmi_push, std::move(data));
            return msgHandled();
        });
    }

    ApplicationDesktop::~ApplicationDesktop()


@@ 336,6 343,9 @@ namespace app
        windowsFactory.attach(desktop_mmi_pull, [](Application *app, const std::string newname) {
            return std::make_unique<gui::MmiPullWindow>(app, desktop_mmi_pull);
        });
        windowsFactory.attach(desktop_mmi_push, [](Application *app, const std::string newname) {
            return std::make_unique<gui::MmiPushWindow>(app, desktop_mmi_push);
        });
    }

    void ApplicationDesktop::destroyUserInterface()

M module-apps/application-desktop/ApplicationDesktop.hpp => module-apps/application-desktop/ApplicationDesktop.hpp +1 -0
@@ 101,6 101,7 @@ namespace app
                     manager::actions::UnlockSim,
                     manager::actions::BlockSim,
                     manager::actions::ShowMMIResponse,
                     manager::actions::ShowMMIPush,
                     manager::actions::DisplayCMEError}};
        }
    };

M module-apps/application-desktop/CMakeLists.txt => module-apps/application-desktop/CMakeLists.txt +3 -0
@@ 31,10 31,12 @@ target_sources( ${PROJECT_NAME}
        "${CMAKE_CURRENT_LIST_DIR}/windows/Reboot.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/windows/Update.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/windows/MmiPullWindow.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/windows/MmiPushWindow.cpp"
	PUBLIC
		"${CMAKE_CURRENT_LIST_DIR}/ApplicationDesktop.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/data/LockPhoneData.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/data/Style.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/data/Mmi.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/widgets/PinHash.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/widgets/PinLock.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/widgets/DesktopInputWidget.hpp"


@@ 54,6 56,7 @@ target_sources( ${PROJECT_NAME}
		"${CMAKE_CURRENT_LIST_DIR}/windows/Update.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/windows/Names.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/windows/MmiPullWindow.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/windows/MmiPushWindow.hpp"
)

target_link_libraries(${PROJECT_NAME}

A module-apps/application-desktop/data/Mmi.hpp => module-apps/application-desktop/data/Mmi.hpp +17 -0
@@ 0,0 1,17 @@
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

namespace mmi
{
    static inline std::string removePhrase(std::string str, std::string phrase)
    {
        auto find_pos = str.find(phrase);
        while (find_pos != std::string::npos) {
            str.replace(find_pos, phrase.size(), "");
            find_pos = str.find(phrase, find_pos);
        }
        return str;
    }
} // namespace mmi

M module-apps/application-desktop/windows/MmiPullWindow.cpp => module-apps/application-desktop/windows/MmiPullWindow.cpp +3 -12
@@ 2,7 2,8 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "MmiPullWindow.hpp"
#include "application-desktop/widgets/DesktopInputWidget.hpp"
#include <application-desktop/widgets/DesktopInputWidget.hpp>
#include <application-desktop/data/Mmi.hpp>
#include <service-appmgr/model/ApplicationManager.hpp>
#include <service-appmgr/data/MmiActionsParams.hpp>



@@ 65,21 66,11 @@ MmiPullWindow::MmiPullWindow(app::Application *app, const std::string &name) : g
    addWidget(InputBox);
}

std::string MmiPullWindow::removePhrase(std::string str, std::string phrase)
{
    auto find_pos = str.find(phrase);
    while (find_pos != std::string::npos) {
        str.replace(find_pos, phrase.size(), "");
        find_pos = str.find(phrase, find_pos);
    }
    return str;
}

void MmiPullWindow::onBeforeShow(ShowMode mode, SwitchData *data)
{
    auto metadata = dynamic_cast<app::manager::actions::MMIParams *>(data);
    if (metadata != nullptr) {
        text->setText(removePhrase(metadata->getData(), "\r"));
        text->setText(mmi::removePhrase(metadata->getData(), "\r"));
    }
    InputBox->setVisible(true);
    setFocusItem(InputBox->inputText);

M module-apps/application-desktop/windows/MmiPullWindow.hpp => module-apps/application-desktop/windows/MmiPullWindow.hpp +0 -1
@@ 26,7 26,6 @@ namespace gui
        void onBeforeShow(ShowMode mode, SwitchData *data) override;
        bool onInput(const InputEvent &inputEvent) override;
        void destroyInterface() override;
        std::string removePhrase(std::string str, std::string phrase);
    };

}; // namespace gui

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

#include "MmiPushWindow.hpp"
#include <service-appmgr/model/ApplicationManager.hpp>
#include <service-appmgr/data/MmiActionsParams.hpp>
#include <application-desktop/data/Mmi.hpp>
#include <i18n/i18n.hpp>

using namespace gui;

// move to style
namespace style::desktop
{
    namespace image
    {
        constexpr uint32_t x = 176;
        constexpr uint32_t y = 135;
    } // namespace image
    namespace text
    {
        constexpr uint32_t x = 40;
        constexpr uint32_t y = 260;
        constexpr uint32_t w = 400;
        constexpr uint32_t h = 135;
    } // namespace text

} // namespace style::desktop

MmiPushWindow::MmiPushWindow(app::Application *app, const std::string &name) : gui::AppWindow(app, name)
{
    AppWindow::buildInterface();

    topBar->setActive(TopBar::Elements::TIME, true);
    topBar->setActive(TopBar::Elements::SIM, false);
    bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::ok));
    icon = new Image(this, style::desktop::image::x, style::desktop::image::y, "");
    icon->set("info_big_circle_W_G");
    text = new Text(
        this, style::desktop::text::x, style::desktop::text::y, style::desktop::text::w, style::desktop::text::h);
    text->setTextType(TextType::MULTI_LINE);
    text->setEditMode(EditMode::BROWSE);
    text->setEdges(RectangleEdge::None);
    text->setFont(style::window::font::medium);
    text->setAlignment(gui::Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Center));
    setTitle(utils::localize.get("app_desktop_info"));
}

void MmiPushWindow::onBeforeShow(ShowMode mode, SwitchData *data)
{
    if (auto metadata = dynamic_cast<app::manager::actions::MMIParams *>(data); metadata != nullptr) {
        text->setText(mmi::removePhrase(metadata->getData(), "\r"));
    }
}

bool MmiPushWindow::onInput(const InputEvent &inputEvent)
{
    if (inputEvent.isShortPress()) {
        switch (inputEvent.keyCode) {
        case KeyCode::KEY_ENTER: {
            application->returnToPreviousWindow();
            return true;
        }
        case KeyCode::KEY_RF: {
            return true;
        }
        default:
            break;
        }
    }
    return AppWindow::onInput(inputEvent);
}

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

MmiPushWindow::~MmiPushWindow()
{
    destroyInterface();
}

A module-apps/application-desktop/windows/MmiPushWindow.hpp => module-apps/application-desktop/windows/MmiPushWindow.hpp +27 -0
@@ 0,0 1,27 @@
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include <AppWindow.hpp>
#include <Text.hpp>
#include <functional>
#include <DialogMetadata.hpp>

namespace gui
{
    class MmiPushWindow : public AppWindow
    {
      protected:
        Text *text  = nullptr;
        Image *icon = nullptr;

      public:
        MmiPushWindow(app::Application *app, const std::string &name);
        ~MmiPushWindow() override;
        void onBeforeShow(ShowMode mode, SwitchData *data) override;
        bool onInput(const InputEvent &inputEvent) override;
        void destroyInterface() override;
    };

}; // namespace gui

M module-apps/application-desktop/windows/Names.hpp => module-apps/application-desktop/windows/Names.hpp +1 -0
@@ 14,4 14,5 @@ namespace app::window::name
    inline constexpr auto desktop_locked      = "LockedInfoWindow";
    inline constexpr auto desktop_update      = "Update";
    inline constexpr auto desktop_mmi_pull    = "MmiPullWindow";
    inline constexpr auto desktop_mmi_push    = "MmiPushWindow";
}; // namespace app::window::name