~aleteoryx/muditaos

e24d7c855e3dd7ccbd6583e51fd59f51baf88588 — Jakub Pyszczak 5 years ago bf2f4b0
[EGD-5541] Sim card check refactor

Moved checking for a SIM card logic from
application level to service cellular.
Provided an action in response to application messages.
M module-apps/application-messages/ApplicationMessages.cpp => module-apps/application-messages/ApplicationMessages.cpp +11 -10
@@ 1,4 1,4 @@
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "ApplicationMessages.hpp"


@@ 31,6 31,8 @@
#include <module-db/queries/messages/threads/QueryThreadRemove.hpp>
#include <module-db/queries/phonebook/QueryContactGetByID.hpp>

#include <service-cellular/CellularMessage.hpp>

#include <cassert>
#include <time/time_conversion.hpp>
#include <messages/OptionsWindow.hpp>


@@ 49,6 51,14 @@ namespace app
            switchWindow(gui::name::window::sms_templates, std::move(data));
            return msgHandled();
        });
        addActionReceiver(manager::actions::SmsRejectNoSim, [this](auto &&data) {
            auto action = [this]() {
                returnToPreviousWindow();
                return true;
            };
            showNotification(action);
            return msgHandled();
        });
    }

    // Invoked upon receiving data message


@@ 59,7 69,6 @@ namespace app
        if (reinterpret_cast<sys::ResponseMessage *>(retMsg.get())->retCode == sys::ReturnCodes::Success) {
            return retMsg;
        }

        if (msgl->messageType == MessageType::DBServiceNotification) {
            auto msg = dynamic_cast<db::NotificationMessage *>(msgl);
            if (msg != nullptr) {


@@ 369,14 378,6 @@ namespace app
            return false;
        }

        if (!Store::GSM::get()->simCardInserted()) {
            auto action = [=]() -> bool {
                returnToPreviousWindow();
                return true;
            };
            return showNotification(action);
        }

        return true;
    }


M module-apps/application-messages/ApplicationMessages.hpp => module-apps/application-messages/ApplicationMessages.hpp +5 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 81,7 81,10 @@ namespace app
    {
        static auto GetManifest() -> manager::ApplicationManifest
        {
            return {{manager::actions::Launch, manager::actions::CreateSms, manager::actions::ShowSmsTemplates}};
            return {{manager::actions::Launch,
                     manager::actions::CreateSms,
                     manager::actions::ShowSmsTemplates,
                     manager::actions::SmsRejectNoSim}};
        }
    };
} /* namespace app */

M module-apps/application-messages/windows/NewMessage.cpp => module-apps/application-messages/windows/NewMessage.cpp +0 -10
@@ 126,16 126,6 @@ namespace gui
            LOG_ERROR("Failed to send the SMS.");
            return false;
        }
        if (!Store::GSM::get()->simCardInserted()) {
            auto action = [this, number]() {
                if (!switchToThreadWindow(number.getView())) {
                    LOG_ERROR("switchToThreadWindow failed");
                }
                return true;
            };
            app->showNotification(action, true);
            return true;
        }
        return switchToThreadWindow(number.getView());
    }


M module-services/service-appmgr/model/ApplicationManager.cpp => module-services/service-appmgr/model/ApplicationManager.cpp +1 -0
@@ 299,6 299,7 @@ namespace app::manager
        connect(typeid(CellularNotAnEmergencyNotification), convertibleToActionHandler);
        connect(typeid(sys::CriticalBatteryLevelNotification), convertibleToActionHandler);
        connect(typeid(sys::SystemBrownoutMesssage), convertibleToActionHandler);
        connect(typeid(CellularSmsNoSimRequestMessage), convertibleToActionHandler);
    }

    sys::ReturnCodes ApplicationManager::SwitchPowerModeHandler(const sys::ServicePowerMode mode)

M module-services/service-appmgr/service-appmgr/Actions.hpp => module-services/service-appmgr/service-appmgr/Actions.hpp +1 -0
@@ 50,6 50,7 @@ namespace app::manager
            ShowMMIResult,
            ShowMMIResponse,
            ShowMMIPush,
            SmsRejectNoSim,
            DisplayCMEError,
            DisplayLowBatteryNotification,
            SystemBrownout,

M module-services/service-cellular/ServiceCellular.cpp => module-services/service-cellular/ServiceCellular.cpp +14 -0
@@ 730,6 730,20 @@ auto ServiceCellular::handle(db::query::SMSSearchByTypeResult *response) -> bool
{
    if (response->getResults().size() > 0) {
        LOG_DEBUG("sending %ud last queued message(s)", static_cast<unsigned int>(response->getResults().size()));
        if (Store::GSM::get()->simCardInserted() == false) {
            auto message = std::make_shared<CellularSmsNoSimRequestMessage>();
            bus.sendUnicast(std::move(message), app::manager::ApplicationManager::ServiceName);
            auto records = response->getResults();

            for (auto &record : response->getResults()) {
                if (record.type == SMSType::QUEUED) {
                    record.type = SMSType::FAILED;
                    DBServiceAPI::GetQuery(
                        this, db::Interface::Name::SMS, std::make_unique<db::query::SMSUpdate>(std::move(record)));
                }
            }
            return true;
        }
        for (auto &rec : response->getResults()) {
            if (rec.type == SMSType::QUEUED) {
                sendSMS(rec);

M module-services/service-cellular/service-cellular/CellularMessage.hpp => module-services/service-cellular/service-cellular/CellularMessage.hpp +14 -1
@@ 27,7 27,7 @@
class CellularMessage : public sys::DataMessage
{
  public:
    CellularMessage(MessageType messageType) : sys::DataMessage(messageType){};
    explicit CellularMessage(MessageType messageType) : sys::DataMessage(messageType){};
};

class CellularCallMessage : public CellularMessage


@@ 300,6 300,19 @@ class CellularCallRequestMessage : public CellularMessage
    RequestMode requestMode = RequestMode::Normal;
};

class CellularSmsNoSimRequestMessage : public CellularMessage, public app::manager::actions::ConvertibleToAction
{
  public:
    CellularSmsNoSimRequestMessage() : CellularMessage{MessageType::MessageTypeUninitialized}
    {}

    [[nodiscard]] auto toAction() const -> std::unique_ptr<app::manager::ActionRequest>
    {
        return std::make_unique<app::manager::ActionRequest>(
            sender, app::manager::actions::SmsRejectNoSim, std::make_unique<app::manager::actions::ActionParams>());
    }
};

class CellularSimMessage : public CellularMessage
{
  public: