From 7b8f1712f27c121e32290fdda266cb7ec193d115 Mon Sep 17 00:00:00 2001 From: Mateusz Grzegorzek Date: Wed, 7 Apr 2021 16:29:02 +0200 Subject: [PATCH] [EGD-6433] Implement SIM PIN enable request Implement SIM PIN enable/disable request in PinLockHandler --- .../assets/images/big_circle_placeholder.vpi | Bin 4749 -> 0 bytes image/assets/lang/English.json | 2 + .../ApplicationDesktop.cpp | 30 ++++++++++-- .../widgets/PinLockHandler.cpp | 43 ++++++++++++++++-- .../widgets/PinLockHandler.hpp | 6 ++- .../windows/ChangePasscodeWindow.cpp | 4 +- .../windows/PINSettingsWindow.cpp | 7 ++- .../service-cellular/ServiceCellular.cpp | 5 +- .../service-cellular/CellularMessage.hpp | 15 ++++++ 9 files changed, 96 insertions(+), 16 deletions(-) delete mode 100644 image/assets/images/big_circle_placeholder.vpi diff --git a/image/assets/images/big_circle_placeholder.vpi b/image/assets/images/big_circle_placeholder.vpi deleted file mode 100644 index df9e3eefbff39446370626d66df443ce50792cd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4749 zcmcIoT}u^F6rFpoUiEstWdUIJe7#1!2XZZ|fPi(e>*)C>R zXN#77qE7M!ppFBo161EpX#41Qt?i)gp+AY1IA=M|L698NAlq? zSd+U)gfXz)N&4lyMRF(~4xFWi;l^bQ$isoG_k%TKj`~MQznq8levZj(kJj`C+MH$F zH?1wvnBNn6H_;;cG)04ZSKo1m=)ij`LGB2(Z63J#?TCW%wv@MmvS;xQkmUD1*T$AO zHxtgg3FoFz8^J&F+%rCpdqc|WLD^TvedA-FmQ-FB=bE8Cnuk#tsI`0&Szk5(p3)vM zuF7`BMqU4rv8xZ%icrf5>T!Zv7HWwo%RO5uh5nLIi^k<~JTq_AhvH(+-MSD^{NgXo z>jiPlC;q%h{FxVuOO;vj*j_~x#&e-Y3F>u%8Yz21!H;(~JCf}jZ87SxytP^H&j~d& zZ#l|Xh+^vz4~3dd{BR|C4{v8LP;QI%eWF;P20@YjeTXRJc%U2;<+*VL`vXNhLk`$} zHrpBLPn(w>%SX(XvB1me3sms(Q`EWnTon|?3sgV&MX$d^MflYh zmr#MLg2H%#noPL9CR~%^5-M<2P#7;z6A9P1glj^%77E|x2WQbvNI|1Pp<;{i0@X_t zz9$MjDF_ATpQg~$3gD=(0JmemC;e{1EbrVOaS!IQnyMsF{u8X$2le$;z?4VoO*%&W&_T?uF zna58fW<#Ta*-s?p9OK2Q)O;#Z;ffPAC{#{Vj29<|H{bTm^?0Sg-Ew(#!EfEJLQzcwFTFbP-4|*hd^O%!yz}cTrgqg=b0x<}$E!d_ z>J{W0^F#i?ucAh5SB18#Xk%5(h@VGAoDfBI94lua33*uCZ}8nk$MU*xgm0ypz|^^2X>2f@00`I`0B ze+&56Wrong PUK code.

You have $ATTEMPTS attempts left", "app_desktop_sim_setup_wrong_puk_last_attempt": "Wrong PUK code.

You have 1 attempt left
", "app_desktop_sim_setup_wrong_puk_last_attempt_warning": "If the code is wrong this time, the

SIM card will be blocked and you'll

have to contact the operator.
", + "app_desktop_sim_card_unlocked": "SIM card unlocked", + "app_desktop_sim_card_locked": "SIM card locked", "app_desktop_screen_enter_passcode_to_unlock": "Enter the passcode

to unlock:
", "app_desktop_screen_wrong_passcode_last_attempt": "Wrong passcode.

You have 1 attempt left.
", "app_desktop_screen_wrong_passcode_last_attempt_warning": "If the passcode is wrong this time,

you'll have to wait $MINUTES minutes

before trying again.
", diff --git a/module-apps/application-desktop/ApplicationDesktop.cpp b/module-apps/application-desktop/ApplicationDesktop.cpp index 232ea6ef1be4d8f369c69def8d4c177ebb6e1708..1c0c0b053de7950f1db77506703f803c771c881e 100644 --- a/module-apps/application-desktop/ApplicationDesktop.cpp +++ b/module-apps/application-desktop/ApplicationDesktop.cpp @@ -104,12 +104,14 @@ namespace app }); addActionReceiver(app::manager::actions::RequestPinDisable, [this](auto &&data) { - lockHandler.handlePinDisableRequest(std::forward(data)); + lockHandler.handlePinEnableRequest(std::forward(data), + CellularSimCardLockDataMessage::SimCardLock::Unlocked); return actionHandled(); }); addActionReceiver(app::manager::actions::RequestPinEnable, [this](auto &&data) { - lockHandler.handlePinEnableRequest(std::forward(data)); + lockHandler.handlePinEnableRequest(std::forward(data), + CellularSimCardLockDataMessage::SimCardLock::Locked); return actionHandled(); }); @@ -415,7 +417,7 @@ namespace app [](app::ApplicationDesktop *app) -> std::unique_ptr { return std::make_unique( 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(request); + if (response->retCode) { + auto metaData = std::make_unique(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(updateos::UpdateMessageType::UpdateCheckForUpdateOnce); bus.sendUnicast(msgToSend, service::name::service_desktop); diff --git a/module-apps/application-desktop/widgets/PinLockHandler.cpp b/module-apps/application-desktop/widgets/PinLockHandler.cpp index 0c9f8c72a64faf33e166c8aad8512dc5854bc982..984ab30c3a30c1a3082c7723dadf907ba0c29ae2 100644 --- a/module-apps/application-desktop/widgets/PinLockHandler.cpp +++ b/module-apps/application-desktop/widgets/PinLockHandler.cpp @@ -8,7 +8,6 @@ #include "application-desktop/windows/Names.hpp" #include #include -#include 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(simCardLock)); + handlePasscodeParams(PinLock::LockType::SimPin, PinLock::LockState::PasscodeRequired, std::move(data)); + promptSimLockWindow = true; + auto onActivatedCallback = [this, simCardLock](PinLock::LockType type, const std::vector &data) { + app->bus.sendUnicast( + std::make_shared(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(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 &data) { + auto params = std::make_unique( + Store::GSM::get()->selected, simLock.value, PasscodeParams::pinName); + handlePinEnableRequest(std::move(params), simCardLock); + }; + switchToPinLockWindow(PinLock::LockState::PasscodeInvalidRetryRequired, onActivatedCallback); + } + else { + auto params = std::make_unique( + 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; diff --git a/module-apps/application-desktop/widgets/PinLockHandler.hpp b/module-apps/application-desktop/widgets/PinLockHandler.hpp index df7d218dfab33e213b517a37f7fde87171a1b196..e0c0c1c1c26f56a9cf298b8a1d7629a5d4de8999 100644 --- a/module-apps/application-desktop/widgets/PinLockHandler.hpp +++ b/module-apps/application-desktop/widgets/PinLockHandler.hpp @@ -7,6 +7,7 @@ #include #include +#include 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; diff --git a/module-apps/application-settings-new/windows/ChangePasscodeWindow.cpp b/module-apps/application-settings-new/windows/ChangePasscodeWindow.cpp index 5071bcf924a087aefd797530942ffa134ea0d993..3fc690845ac240b5c75598aafcf827048f938313 100644 --- a/module-apps/application-settings-new/windows/ChangePasscodeWindow.cpp +++ b/module-apps/application-settings-new/windows/ChangePasscodeWindow.cpp @@ -106,7 +106,7 @@ namespace gui auto metaData = std::make_unique( 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::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]() { diff --git a/module-apps/application-settings-new/windows/PINSettingsWindow.cpp b/module-apps/application-settings-new/windows/PINSettingsWindow.cpp index 6bf59219cbc26e651b956b2c3d3e171e1b232e1a..d4ad8d58953dc4e47a0828e037e3a31e16efe3f8 100644 --- a/module-apps/application-settings-new/windows/PINSettingsWindow.cpp +++ b/module-apps/application-settings-new/windows/PINSettingsWindow.cpp @@ -77,11 +77,14 @@ namespace gui { currentState = !currentState; refreshOptionsList(); + using namespace app::manager::actions; + auto params = std::make_unique( + 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 diff --git a/module-services/service-cellular/ServiceCellular.cpp b/module-services/service-cellular/ServiceCellular.cpp index 2a820da9bfa2bdb690c6db8f9c62d499b73963a1..4468a97275832ab0b3ad176729dbd49bdaa6c26e 100644 --- a/module-services/service-cellular/ServiceCellular.cpp +++ b/module-services/service-cellular/ServiceCellular.cpp @@ -355,9 +355,10 @@ void ServiceCellular::registerMessageHandlers() connect(typeid(CellularSimCardLockDataMessage), [&](sys::Message *request) -> sys::MessagePointer { auto msg = static_cast(request); - return std::make_shared( + return std::make_shared( setPinLock(msg->getLock() == CellularSimCardLockDataMessage::SimCardLock::Locked, - SimCard::pinToString(msg->getPin()))); + SimCard::pinToString(msg->getPin())), + msg->getLock()); }); connect(typeid(CellularChangeSimDataMessage), [&](sys::Message *request) -> sys::MessagePointer { diff --git a/module-services/service-cellular/service-cellular/CellularMessage.hpp b/module-services/service-cellular/service-cellular/CellularMessage.hpp index 786e8f72f0f6badca9479b9fbf474516bd1eb9f3..2a77ee8410eaf3a7962c17172255e10773f2b2b2 100644 --- a/module-services/service-cellular/service-cellular/CellularMessage.hpp +++ b/module-services/service-cellular/service-cellular/CellularMessage.hpp @@ -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: