~aleteoryx/muditaos

7b8f1712f27c121e32290fdda266cb7ec193d115 — Mateusz Grzegorzek 5 years ago 5fb105d
[EGD-6433] Implement SIM PIN enable request

Implement SIM PIN enable/disable request
in PinLockHandler
D image/assets/images/big_circle_placeholder.vpi => image/assets/images/big_circle_placeholder.vpi +0 -0
M image/assets/lang/English.json => image/assets/lang/English.json +2 -0
@@ 249,6 249,8 @@
  "app_desktop_sim_setup_wrong_puk": "<text>Wrong PUK code.<br></br>You have <token>$ATTEMPTS</token> attempts left</text>",
  "app_desktop_sim_setup_wrong_puk_last_attempt": "<text>Wrong PUK code.<br></br>You have 1 attempt left</text>",
  "app_desktop_sim_setup_wrong_puk_last_attempt_warning": "<text>If the code is wrong this time, the<br></br>SIM card will be blocked and you'll<br></br>have to contact the operator.</text>",
  "app_desktop_sim_card_unlocked": "SIM card unlocked",
  "app_desktop_sim_card_locked": "SIM card locked",
  "app_desktop_screen_enter_passcode_to_unlock": "<text>Enter the passcode<br></br>to unlock:</text>",
  "app_desktop_screen_wrong_passcode_last_attempt": "<text>Wrong passcode.<br></br>You have 1 attempt left.</text>",
  "app_desktop_screen_wrong_passcode_last_attempt_warning": "<text>If the passcode is wrong this time,<br></br>you'll have to wait <token>$MINUTES</token> minutes<br></br>before trying again.</text>",

M module-apps/application-desktop/ApplicationDesktop.cpp => module-apps/application-desktop/ApplicationDesktop.cpp +27 -3
@@ 104,12 104,14 @@ namespace app
        });

        addActionReceiver(app::manager::actions::RequestPinDisable, [this](auto &&data) {
            lockHandler.handlePinDisableRequest(std::forward<decltype(data)>(data));
            lockHandler.handlePinEnableRequest(std::forward<decltype(data)>(data),
                                               CellularSimCardLockDataMessage::SimCardLock::Unlocked);
            return actionHandled();
        });

        addActionReceiver(app::manager::actions::RequestPinEnable, [this](auto &&data) {
            lockHandler.handlePinEnableRequest(std::forward<decltype(data)>(data));
            lockHandler.handlePinEnableRequest(std::forward<decltype(data)>(data),
                                               CellularSimCardLockDataMessage::SimCardLock::Locked);
            return actionHandled();
        });



@@ 415,7 417,7 @@ namespace app
            [](app::ApplicationDesktop *app) -> std::unique_ptr<gui::DialogMetadataMessage> {
            return std::make_unique<gui::DialogMetadataMessage>(
                gui::DialogMetadata{utils::localize.get("app_desktop_sim_change_pin"),
                                    "big_circle_placeholder",
                                    "success_icon_W_G",
                                    utils::localize.get("app_desktop_sim_pin_changed_successfully"),
                                    "",
                                    [app]() {


@@ 445,6 447,28 @@ namespace app
            return sys::MessageNone{};
        });

        connect(typeid(CellularSimCardLockResponseMessage), [&](sys::Message *request) -> sys::MessagePointer {
            auto response = dynamic_cast<CellularSimCardLockResponseMessage *>(request);
            if (response->retCode) {
                auto metaData = std::make_unique<gui::DialogMetadataMessage>(gui::DialogMetadata{
                    "",
                    "success_icon_W_G",
                    response->getSimCardLock() == CellularSimCardLockDataMessage::SimCardLock::Unlocked
                        ? utils::localize.get("app_desktop_sim_card_unlocked")
                        : utils::localize.get("app_desktop_sim_card_locked"),
                    "",
                    [this]() {
                        switchWindow(app::window::name::desktop_main_window);
                        return true;
                    }});
                switchWindow(gui::window::name::dialog_confirm, gui::ShowMode::GUI_SHOW_INIT, std::move(metaData));
            }
            else {
                lockHandler.handlePinEnableRequestFailed(response->getSimCardLock());
            }
            return sys::MessageNone{};
        });

        auto msgToSend =
            std::make_shared<sdesktop::UpdateOsMessage>(updateos::UpdateMessageType::UpdateCheckForUpdateOnce);
        bus.sendUnicast(msgToSend, service::name::service_desktop);

M module-apps/application-desktop/widgets/PinLockHandler.cpp => module-apps/application-desktop/widgets/PinLockHandler.cpp +38 -5
@@ 8,7 8,6 @@
#include "application-desktop/windows/Names.hpp"
#include <module-utils/common_data/EventStore.hpp>
#include <service-appmgr/service-appmgr/data/SimActionsParams.hpp>
#include <service-cellular/CellularMessage.hpp>

namespace gui
{


@@ 115,18 114,52 @@ namespace gui
        switchToPinLockWindow(onActivatedCallback);
    }

    void PinLockHandler::handlePinDisableRequest(app::manager::actions::ActionParamsPtr &&data)
    void PinLockHandler::handlePinEnableRequest(app::manager::actions::ActionParamsPtr &&data,
                                                CellularSimCardLockDataMessage::SimCardLock simCardLock)
    {
        LOG_INFO("Handling RequestPinDisable action");
        LOG_DEBUG("Handling PinEnableRequest action, simCardLock = %d", static_cast<int>(simCardLock));
        handlePasscodeParams(PinLock::LockType::SimPin, PinLock::LockState::PasscodeRequired, std::move(data));
        promptSimLockWindow      = true;
        auto onActivatedCallback = [this, simCardLock](PinLock::LockType type, const std::vector<unsigned int> &data) {
            app->bus.sendUnicast(
                std::make_shared<CellularSimCardLockDataMessage>(Store::GSM::get()->selected, simCardLock, data),
                serviceCellular);
        };
        switchToPinLockWindow(onActivatedCallback);
    }

    void PinLockHandler::handlePinEnableRequest(app::manager::actions::ActionParamsPtr &&data)
    void PinLockHandler::handlePinEnableRequestFailed(CellularSimCardLockDataMessage::SimCardLock simCardLock)
    {
        LOG_INFO("Handling RequestPinEnable action");
        LOG_DEBUG("Handling PinEnableRequestFailed action, simCardLock = %d, simLock.value = %u",
                  static_cast<int>(simCardLock),
                  simLock.value);
        using namespace app::manager::actions;
        if (simLock.value > 0) {
            --simLock.value;
        }
        else {
            LOG_ERROR("Number of attempts left is equal to zero before decrementation!");
        }
        if (simLock.value > 0) {
            simLock.lockState        = PinLock::LockState::PasscodeInvalidRetryRequired;
            auto onActivatedCallback = [this, simCardLock](PinLock::LockType type,
                                                           const std::vector<unsigned int> &data) {
                auto params = std::make_unique<PasscodeParams>(
                    Store::GSM::get()->selected, simLock.value, PasscodeParams::pinName);
                handlePinEnableRequest(std::move(params), simCardLock);
            };
            switchToPinLockWindow(PinLock::LockState::PasscodeInvalidRetryRequired, onActivatedCallback);
        }
        else {
            auto params = std::make_unique<PasscodeParams>(
                Store::GSM::get()->selected, PasscodeParams::numOfAttemptsForEnteringPUK, PasscodeParams::pukName);
            handlePasscodeRequest(gui::PinLock::LockType::SimPuk, std::move(params));
        }
    }

    void PinLockHandler::handlePinChangeRequestFailed()
    {
        LOG_DEBUG("Handling PinChangeRequestFailed action, simLock.value = %u", simLock.value);
        using namespace app::manager::actions;
        if (simLock.value > 0) {
            --simLock.value;

M module-apps/application-desktop/widgets/PinLockHandler.hpp => module-apps/application-desktop/widgets/PinLockHandler.hpp +4 -2
@@ 7,6 7,7 @@

#include <module-services/service-appmgr/service-appmgr/messages/ActionRequest.hpp>
#include <module-services/service-appmgr/service-appmgr/Actions.hpp>
#include <service-cellular/CellularMessage.hpp>

namespace app
{


@@ 49,8 50,9 @@ namespace gui

        void handlePasscodeRequest(PinLock::LockType type, app::manager::actions::ActionParamsPtr &&data);
        void handlePinChangeRequest(app::manager::actions::ActionParamsPtr &&data);
        void handlePinDisableRequest(app::manager::actions::ActionParamsPtr &&data);
        void handlePinEnableRequest(app::manager::actions::ActionParamsPtr &&data);
        void handlePinEnableRequest(app::manager::actions::ActionParamsPtr &&data,
                                    CellularSimCardLockDataMessage::SimCardLock simCardLock);
        void handlePinEnableRequestFailed(CellularSimCardLockDataMessage::SimCardLock simCardLock);
        void handleSimBlocked(app::manager::actions::ActionParamsPtr &&data);
        void handleUnlockSim(app::manager::actions::ActionParamsPtr &&data);
        void handleCMEError(app::manager::actions::ActionParamsPtr &&data) const;

M module-apps/application-settings-new/windows/ChangePasscodeWindow.cpp => module-apps/application-settings-new/windows/ChangePasscodeWindow.cpp +2 -2
@@ 106,7 106,7 @@ namespace gui

                auto metaData = std::make_unique<gui::DialogMetadataMessage>(
                    gui::DialogMetadata{utils::localize.get("app_settings_security_change_passcode"),
                                        "big_circle_placeholder",
                                        "success_icon_W_G",
                                        utils::localize.get("app_settings_security_passcode_disabled"),
                                        "",
                                        [this]() {


@@ 168,7 168,7 @@ namespace gui

            auto metaData = std::make_unique<gui::DialogMetadataMessage>(
                gui::DialogMetadata{utils::localize.get("app_settings_security_change_passcode"),
                                    "big_circle_placeholder",
                                    "success_icon_W_G",
                                    utils::localize.get("app_settings_security_passcode_changed_successfully"),
                                    "",
                                    [this]() {

M module-apps/application-settings-new/windows/PINSettingsWindow.cpp => module-apps/application-settings-new/windows/PINSettingsWindow.cpp +5 -2
@@ 77,11 77,14 @@ namespace gui
    {
        currentState = !currentState;
        refreshOptionsList();
        using namespace app::manager::actions;
        auto params = std::make_unique<PasscodeParams>(
            Store::GSM::get()->selected, PasscodeParams::numOfAttemptsForEnteringPIN, PasscodeParams::pinName);
        if (!currentState) {
            app::manager::Controller::sendAction(application, app::manager::actions::RequestPinDisable, nullptr);
            app::manager::Controller::sendAction(application, RequestPinDisable, std::move(params));
        }
        else {
            app::manager::Controller::sendAction(application, app::manager::actions::RequestPinEnable, nullptr);
            app::manager::Controller::sendAction(application, RequestPinEnable, std::move(params));
        }
    }
} // namespace gui

M module-services/service-cellular/ServiceCellular.cpp => module-services/service-cellular/ServiceCellular.cpp +3 -2
@@ 355,9 355,10 @@ void ServiceCellular::registerMessageHandlers()

    connect(typeid(CellularSimCardLockDataMessage), [&](sys::Message *request) -> sys::MessagePointer {
        auto msg = static_cast<CellularSimCardLockDataMessage *>(request);
        return std::make_shared<CellularResponseMessage>(
        return std::make_shared<CellularSimCardLockResponseMessage>(
            setPinLock(msg->getLock() == CellularSimCardLockDataMessage::SimCardLock::Locked,
                       SimCard::pinToString(msg->getPin())));
                       SimCard::pinToString(msg->getPin())),
            msg->getLock());
    });

    connect(typeid(CellularChangeSimDataMessage), [&](sys::Message *request) -> sys::MessagePointer {

M module-services/service-cellular/service-cellular/CellularMessage.hpp => module-services/service-cellular/service-cellular/CellularMessage.hpp +15 -0
@@ 645,6 645,21 @@ class CellularSimPukResponseMessage : public CellularResponseMessage
    {}
};

class CellularSimCardLockResponseMessage : public CellularResponseMessage
{
    CellularSimCardLockDataMessage::SimCardLock cardLock;

  public:
    CellularSimCardLockResponseMessage(bool retCode, CellularSimCardLockDataMessage::SimCardLock cardLock)
        : CellularResponseMessage(retCode), cardLock(cardLock)
    {}

    [[nodiscard]] auto getSimCardLock() const noexcept -> CellularSimCardLockDataMessage::SimCardLock
    {
        return cardLock;
    }
};

class CellularAntennaResponseMessage : public sys::ResponseMessage
{
  public: