From 145178ae2687c1ad5ef978a6f1ecba9940b0b246 Mon Sep 17 00:00:00 2001 From: Przemyslaw Brudny Date: Thu, 20 May 2021 23:38:30 +0200 Subject: [PATCH] [EGD-6791] Added PhoneUnlock on external MuditaCenter message Added PhoneUnlock on external MuditaCenter message. --- module-apps/locks/data/PhoneLockMessages.hpp | 37 ++++++++++++ .../locks/handlers/PhoneLockHandler.cpp | 56 +++++++++++++++++-- .../locks/handlers/PhoneLockHandler.hpp | 6 +- .../model/ApplicationManager.cpp | 10 +++- 4 files changed, 101 insertions(+), 8 deletions(-) diff --git a/module-apps/locks/data/PhoneLockMessages.hpp b/module-apps/locks/data/PhoneLockMessages.hpp index f788c5e9d6b1a0bfd72f69c59b47bb40c2798387..62bb75e465fb35715e37f262f4524082a9800404 100644 --- a/module-apps/locks/data/PhoneLockMessages.hpp +++ b/module-apps/locks/data/PhoneLockMessages.hpp @@ -57,4 +57,41 @@ namespace locks return inputData; } }; + + class ExternalUnLockPhone : public UnLockPhoneInput + { + public: + explicit ExternalUnLockPhone(std::vector inputData) : UnLockPhoneInput(std::move(inputData)) + {} + }; + + class ExternalPhoneLockAvailabilityChange : public sys::DataMessage + { + private: + bool value = true; + + public: + explicit ExternalPhoneLockAvailabilityChange(bool value) : value(value) + {} + + [[nodiscard]] auto getAvailability() const noexcept + { + return value; + } + }; + + class ExternalUnLockPhoneInfo : public sys::DataMessage + { + private: + unsigned int attemptsLeft; + + public: + explicit ExternalUnLockPhoneInfo(unsigned int attemptsLeft) : DataMessage{}, attemptsLeft(attemptsLeft) + {} + + [[nodiscard]] auto getAttemptsLeft() const noexcept + { + return attemptsLeft; + } + }; } // namespace locks diff --git a/module-apps/locks/handlers/PhoneLockHandler.cpp b/module-apps/locks/handlers/PhoneLockHandler.cpp index 543a450d37311d1377cc282720676fd25435dba5..d8652cb5d852e5d621f8cf7b1660310d469632ef 100644 --- a/module-apps/locks/handlers/PhoneLockHandler.cpp +++ b/module-apps/locks/handlers/PhoneLockHandler.cpp @@ -121,6 +121,12 @@ namespace locks gui::popup::ID::PhoneLockChangeInfo, lock, phoneLockInputTypeAction)); } + void PhoneLockHandler::phoneExternalUnlockInfoAction() + { + owner->bus.sendMulticast(std::make_shared(lock.getAttemptsLeft()), + sys::BusChannel::PhoneLockChanges); + } + void PhoneLockHandler::setPhoneLockInSettings() { phoneLockHash = getHash(storedInputData); @@ -234,7 +240,7 @@ namespace locks phoneInputRequiredAction(); } - sys::MessagePointer PhoneLockHandler::verifyPhoneLockInput(LockInput inputData) + sys::MessagePointer PhoneLockHandler::handlePhoneLockInput(LockInput inputData) { if (checkPhoneLockInputTypeAction(PhoneLockInputTypeAction::Enable) || checkPhoneLockInputTypeAction(PhoneLockInputTypeAction::Change) || @@ -246,7 +252,7 @@ namespace locks } } - sys::MessagePointer PhoneLockHandler::verifyPhoneUnlockInput(LockInput inputData) + void PhoneLockHandler::comparePhoneLockHashCode(LockInput inputData) { const uint32_t hash = getHash(inputData); lock.attemptsLeft--; @@ -254,8 +260,6 @@ namespace locks if (phoneLockHash == hash) { lock.lockState = Lock::LockState::Unlocked; lock.attemptsLeft = default_attempts; - resolvePhoneLockAction(); - return sys::msgHandled(); } else if (lock.attemptsLeft > 0) { lock.lockState = Lock::LockState::InputInvalid; @@ -263,8 +267,18 @@ namespace locks else { lock.lockState = Lock::LockState::Blocked; } + } - phoneInputRequiredAction(); + sys::MessagePointer PhoneLockHandler::verifyPhoneUnlockInput(LockInput inputData) + { + comparePhoneLockHashCode(inputData); + + if (lock.isState(Lock::LockState::Unlocked)) { + resolvePhoneLockAction(); + } + else { + phoneInputRequiredAction(); + } return sys::msgHandled(); } @@ -287,7 +301,37 @@ namespace locks phoneInputRequiredAction(); - return sys::MessagePointer(); + return sys::msgHandled(); + } + + sys::MessagePointer PhoneLockHandler::handleExternalUnlockRequest(LockInput inputData) + { + if (!phoneLockEnabled) { + phoneUnlockAction(); + return sys::msgHandled(); + } + + if (lock.isState(Lock::LockState::Blocked)) { + phoneExternalUnlockInfoAction(); + return sys::msgHandled(); + } + + comparePhoneLockHashCode(inputData); + + if (lock.isState(Lock::LockState::Unlocked)) { + phoneUnlockAction(); + } + else { + phoneExternalUnlockInfoAction(); + } + + return sys::msgHandled(); + } + + sys::MessagePointer PhoneLockHandler::handleExternalAvailabilityChange(bool value) + { + setPhoneLockAvailabilityInSettings(value); + return sys::msgHandled(); } void PhoneLockHandler::resolvePhoneLockAction() diff --git a/module-apps/locks/handlers/PhoneLockHandler.hpp b/module-apps/locks/handlers/PhoneLockHandler.hpp index f2ea94b3ce835d59c37749ca5cff8430acebf6e8..4d29855ae76c15798e3f026fcafabcbb31c0be36 100644 --- a/module-apps/locks/handlers/PhoneLockHandler.hpp +++ b/module-apps/locks/handlers/PhoneLockHandler.hpp @@ -45,10 +45,12 @@ namespace locks void phoneInputRequiredAction(); void phoneUnlockPopupsCloseAction(); void phoneLockChangeInfoAction(); + void phoneExternalUnlockInfoAction(); void checkNewPhoneLock(); void resolvePhoneLockAction(); + void comparePhoneLockHashCode(LockInput inputData); sys::MessagePointer verifyPhoneUnlockInput(LockInput inputData); sys::MessagePointer verifyPhoneLockChangeInput(LockInput inputData); @@ -63,7 +65,9 @@ namespace locks sys::MessagePointer handleChangePhoneLock(); sys::MessagePointer handleSetPhoneLock(); sys::MessagePointer handleSkipSetPhoneLock(); - sys::MessagePointer verifyPhoneLockInput(LockInput inputData); + sys::MessagePointer handlePhoneLockInput(LockInput inputData); + sys::MessagePointer handleExternalUnlockRequest(LockInput inputData); + sys::MessagePointer handleExternalAvailabilityChange(bool value); void enablePhoneLock(bool _phoneLockEnabled); void setPhoneLockHash(const std::string &value); diff --git a/module-services/service-appmgr/model/ApplicationManager.cpp b/module-services/service-appmgr/model/ApplicationManager.cpp index 5a714f499c88ba56bf2631359fed51bc670717c7..a0eab44eb913d1eb1fcb37fedb2622887c1522fd 100644 --- a/module-services/service-appmgr/model/ApplicationManager.cpp +++ b/module-services/service-appmgr/model/ApplicationManager.cpp @@ -437,7 +437,7 @@ namespace app::manager }); connect(typeid(locks::UnLockPhoneInput), [&](sys::Message *request) -> sys::MessagePointer { auto data = static_cast(request); - return phoneLockHandler.verifyPhoneLockInput(data->getInputData()); + return phoneLockHandler.handlePhoneLockInput(data->getInputData()); }); connect(typeid(locks::EnablePhoneLock), [&](sys::Message *request) -> sys::MessagePointer { return phoneLockHandler.handleEnablePhoneLock(); }); @@ -463,6 +463,14 @@ namespace app::manager auto req = static_cast(request); return handleAutoLockSetRequest(req); }); + connect(typeid(locks::ExternalUnLockPhone), [&](sys::Message *request) -> sys::MessagePointer { + auto data = static_cast(request); + return phoneLockHandler.handleExternalUnlockRequest(data->getInputData()); + }); + connect(typeid(locks::ExternalPhoneLockAvailabilityChange), [&](sys::Message *request) -> sys::MessagePointer { + auto data = static_cast(request); + return phoneLockHandler.handleExternalAvailabilityChange(data->getAvailability()); + }); // SimLock connects connect(typeid(cellular::msg::notification::SimNeedPin), [&](sys::Message *request) -> sys::MessagePointer {