From 90ed595397783dc31d92bb4209264cbd23bc7c69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Zieli=C5=84ski?= Date: Tue, 30 Aug 2022 10:55:38 +0200 Subject: [PATCH] [MOS-718] Fix part of SIM unlocking Fixed a potential bug in message handling, refactored unclear naming and logic there and in some other places. --- module-apps/apps-common/ApplicationCommon.cpp | 2 +- module-apps/apps-common/ApplicationCommon.hpp | 2 +- .../locks/handlers/SimLockHandler.cpp | 46 ++++++++++--------- .../locks/handlers/SimLockHandler.hpp | 6 +-- .../ApplicationBellOnBoarding.cpp | 12 ++--- .../services/appmgr/ApplicationManager.cpp | 10 ++-- 6 files changed, 40 insertions(+), 38 deletions(-) diff --git a/module-apps/apps-common/ApplicationCommon.cpp b/module-apps/apps-common/ApplicationCommon.cpp index baa8f379a00dc605e85f09b3e2f4fcb2faea6f1b..65ef75d60d122354c39b40256f59e82d8752d3c8 100644 --- a/module-apps/apps-common/ApplicationCommon.cpp +++ b/module-apps/apps-common/ApplicationCommon.cpp @@ -927,7 +927,7 @@ namespace app windowsStack().push(newWindow, windowsFactory.build(this, newWindow), d); } - std::optional ApplicationCommon::getPrevWindow(uint32_t count) const + std::optional ApplicationCommon::getPreviousWindow(std::uint32_t count) const { return windowsStack().get(count); } diff --git a/module-apps/apps-common/ApplicationCommon.hpp b/module-apps/apps-common/ApplicationCommon.hpp index 8d48e80a17162345d659c30834915832ab17f6e9..c9235b4c5819b7685d0df4344b579223e259f645 100644 --- a/module-apps/apps-common/ApplicationCommon.hpp +++ b/module-apps/apps-common/ApplicationCommon.hpp @@ -377,7 +377,7 @@ namespace app void pushWindow(const std::string &newWindow, const gui::popup::Disposition &d = gui::popup::WindowDisposition); /// getter for previous window name /// @ingrup AppWindowStack - std::optional getPrevWindow(uint32_t count = 1) const; + std::optional getPreviousWindow(std::uint32_t count = 1) const; /// clears windows stack /// @ingrup AppWindowStack void cleanPrevWindw(); diff --git a/module-apps/apps-common/locks/handlers/SimLockHandler.cpp b/module-apps/apps-common/locks/handlers/SimLockHandler.cpp index 3c0c9a2ce81ee9deefe98ebdb7c83cf7a336e5b2..b8b84fa7c11339656fb4676105e2fb148f618945 100644 --- a/module-apps/apps-common/locks/handlers/SimLockHandler.cpp +++ b/module-apps/apps-common/locks/handlers/SimLockHandler.cpp @@ -113,7 +113,7 @@ namespace locks lock.attemptsLeft = attempts; lock.lockName = utils::enumToString(Store::GSM::get()->selected); - if (simUnlockBlockOnLockedPhone) { + if (simUnlockingNeeded_) { return sys::msgNotHandled(); } @@ -134,7 +134,7 @@ namespace locks lock.attemptsLeft = attempts; lock.lockName = utils::enumToString(Store::GSM::get()->selected); - if (simUnlockBlockOnLockedPhone) { + if (simUnlockingNeeded_) { return sys::msgNotHandled(); } @@ -240,7 +240,7 @@ namespace locks { setSimInputTypeAction(SimInputTypeAction::Blocked); - if (simUnlockBlockOnLockedPhone) { + if (simUnlockingNeeded_) { return sys::msgNotHandled(); } @@ -255,7 +255,7 @@ namespace locks { setSimInputTypeAction(SimInputTypeAction::Error); - if (simUnlockBlockOnLockedPhone) { + if (simUnlockingNeeded_) { storedErrorCode = errorCode; return sys::msgNotHandled(); } @@ -332,9 +332,9 @@ namespace locks } } - void SimLockHandler::setSimUnlockBlockOnLockedPhone() + void SimLockHandler::needSimUnlocking() { - simUnlockBlockOnLockedPhone = true; + simUnlockingNeeded_ = true; } void SimLockHandler::setSimReady() @@ -343,24 +343,26 @@ namespace locks simReadyAction(); } - sys::MessagePointer SimLockHandler::releaseSimUnlockBlockOnLockedPhone() + sys::MessagePointer SimLockHandler::askForSimUnlocking() { - if (simUnlockBlockOnLockedPhone) { - simUnlockBlockOnLockedPhone = false; - if (simInputTypeAction == SimInputTypeAction::UnlockWithPin) { - return handleSimPinRequest(lock.getAttemptsLeft()); - } - else if (simInputTypeAction == SimInputTypeAction::UnlockWithPuk) { - return handleSimPukRequest(lock.getAttemptsLeft()); - } - else if (simInputTypeAction == SimInputTypeAction::Blocked) { - return handleSimBlockedRequest(); - } - else if (simInputTypeAction == SimInputTypeAction::Error) { - return handleCMEErrorRequest(storedErrorCode); - } + if (!simUnlockingNeeded_) { + return sys::msgNotHandled(); + } + + simUnlockingNeeded_ = false; + switch (simInputTypeAction) { + case SimInputTypeAction::UnlockWithPin: + return handleSimPinRequest(lock.getAttemptsLeft()); + case SimInputTypeAction::UnlockWithPuk: + return handleSimPukRequest(lock.getAttemptsLeft()); + case SimInputTypeAction::Blocked: + return handleSimBlockedRequest(); + case SimInputTypeAction::Error: + return handleCMEErrorRequest(storedErrorCode); + default: + LOG_WARN("got message of unexpected type: %s", magic_enum::enum_name(simInputTypeAction).data()); + return sys::msgNotHandled(); } - return sys::msgNotHandled(); } sys::MessagePointer SimLockHandler::resolveNewInputAction(LockInput firstInputData, LockInput secondInputData) diff --git a/module-apps/apps-common/locks/handlers/SimLockHandler.hpp b/module-apps/apps-common/locks/handlers/SimLockHandler.hpp index 6f48d360ba6c934c3168619054f6bed2cee30e14..67f697112141de4b5de5da57ace0263f347e491b 100644 --- a/module-apps/apps-common/locks/handlers/SimLockHandler.hpp +++ b/module-apps/apps-common/locks/handlers/SimLockHandler.hpp @@ -22,7 +22,7 @@ namespace locks SimInputTypeAction simInputTypeAction = SimInputTypeAction::UnlockWithPin; unsigned int storedErrorCode = 0; - bool simUnlockBlockOnLockedPhone = false; + bool simUnlockingNeeded_ = false; bool simReady = false; StoredLockInput storedFirstInput; StoredLockInput storedSecondInput; @@ -48,10 +48,10 @@ namespace locks public: explicit SimLockHandler(sys::Service *owner); - void setSimUnlockBlockOnLockedPhone(); void setSimReady(); - sys::MessagePointer releaseSimUnlockBlockOnLockedPhone(); + void needSimUnlocking(); + sys::MessagePointer askForSimUnlocking(); sys::MessagePointer verifySimLockInput(LockInput inputData); diff --git a/products/BellHybrid/apps/application-bell-onboarding/ApplicationBellOnBoarding.cpp b/products/BellHybrid/apps/application-bell-onboarding/ApplicationBellOnBoarding.cpp index 2e913a576732e74b7d5f21f05e6a0bc5bbeca963..0f88afc69a4b9a96a82bd4db1050cd33439c433f 100644 --- a/products/BellHybrid/apps/application-bell-onboarding/ApplicationBellOnBoarding.cpp +++ b/products/BellHybrid/apps/application-bell-onboarding/ApplicationBellOnBoarding.cpp @@ -206,7 +206,7 @@ namespace app auto selectedWindowCondition = getCurrentWindow()->getName() == gui::window::name::informationOnBoardingWindow && - msg->getWindowName() == *getPrevWindow() && + msg->getWindowName() == *getPreviousWindow() && msg->getSenderWindowName() == gui::window::name::informationOnBoardingWindow; if (selectedWindowCondition && informationState == OnBoarding::InformationStates::DeepClickWarningInfo) { @@ -238,7 +238,7 @@ namespace app inputEvent.isKeyRelease(gui::KeyCode::KEY_LEFT)) { informationState = OnBoarding::InformationStates::DeepClickWarningInfo; if (getCurrentWindow()->getName() == gui::window::name::informationOnBoardingWindow) { - displayInformation(*getPrevWindow()); + displayInformation(*getPreviousWindow()); } else { displayInformation(getCurrentWindow()->getName()); @@ -248,7 +248,7 @@ namespace app if (informationState == OnBoarding::InformationStates::DeepClickWarningInfo) { informationPromptTimer.stop(); informationState = OnBoarding::InformationStates::DeepClickCorrectionInfo; - displayInformation(*getPrevWindow()); + displayInformation(*getPreviousWindow()); } else { informationState = OnBoarding::InformationStates::RotateInfo; @@ -260,13 +260,13 @@ namespace app switch (informationState) { case OnBoarding::InformationStates::DeepClickCorrectionInfo: if (inputEvent.isKeyRelease(gui::KeyCode::KEY_ENTER)) { - switchWindow(*getPrevWindow()); + switchWindow(*getPreviousWindow()); return true; } break; case OnBoarding::InformationStates::LightClickInfo: if (inputEvent.isKeyRelease(gui::KeyCode::KEY_ENTER)) { - switchWindow(*getPrevWindow()); + switchWindow(*getPreviousWindow()); return true; } break; @@ -274,7 +274,7 @@ namespace app if (inputEvent.isKeyRelease(gui::KeyCode::KEY_UP) || inputEvent.isKeyRelease(gui::KeyCode::KEY_DOWN) || inputEvent.isKeyRelease(gui::KeyCode::KEY_ENTER)) { - switchWindow(*getPrevWindow()); + switchWindow(*getPreviousWindow()); return true; } break; diff --git a/products/PurePhone/services/appmgr/ApplicationManager.cpp b/products/PurePhone/services/appmgr/ApplicationManager.cpp index 8406326d71a95b2c65ad4570cc96e87bebbe20f9..190d84c923beb63ed21a2d9b6dc0634443207d5c 100644 --- a/products/PurePhone/services/appmgr/ApplicationManager.cpp +++ b/products/PurePhone/services/appmgr/ApplicationManager.cpp @@ -197,7 +197,7 @@ namespace app::manager }); connect(typeid(locks::UnlockedPhone), [&](sys::Message *request) -> sys::MessagePointer { autoLockTimer.start(); - return simLockHandler.releaseSimUnlockBlockOnLockedPhone(); + return simLockHandler.askForSimUnlocking(); }); connect(typeid(locks::ChangePhoneLock), [&](sys::Message *request) -> sys::MessagePointer { return phoneLockHandler.handleChangePhoneLock(); }); @@ -228,7 +228,7 @@ namespace app::manager connect(typeid(cellular::msg::notification::SimNeedPin), [&](sys::Message *request) -> sys::MessagePointer { auto data = static_cast(request); if (phoneLockHandler.isPhoneLocked()) { - simLockHandler.setSimUnlockBlockOnLockedPhone(); + simLockHandler.needSimUnlocking(); } return simLockHandler.handleSimPinRequest(data->attempts); }); @@ -250,7 +250,7 @@ namespace app::manager connect(typeid(cellular::msg::notification::SimNeedPuk), [&](sys::Message *request) -> sys::MessagePointer { auto data = static_cast(request); if (phoneLockHandler.isPhoneLocked()) { - simLockHandler.setSimUnlockBlockOnLockedPhone(); + simLockHandler.needSimUnlocking(); } return simLockHandler.handleSimPukRequest(data->attempts); }); @@ -296,14 +296,14 @@ namespace app::manager }); connect(typeid(cellular::msg::notification::SimBlocked), [&](sys::Message *request) -> sys::MessagePointer { if (phoneLockHandler.isPhoneLocked()) { - simLockHandler.setSimUnlockBlockOnLockedPhone(); + simLockHandler.needSimUnlocking(); } return simLockHandler.handleSimBlockedRequest(); }); connect(typeid(cellular::msg::notification::UnhandledCME), [&](sys::Message *request) -> sys::MessagePointer { auto data = static_cast(request); if (phoneLockHandler.isPhoneLocked()) { - simLockHandler.setSimUnlockBlockOnLockedPhone(); + simLockHandler.needSimUnlocking(); } return simLockHandler.handleCMEErrorRequest(data->code); });