Files
MuditaOS/module-apps/application-settings-new/widgets/ChangePasscodeLockHandler.cpp
Mateusz Grzegorzek 8856a65641 [EGD-4995] Add changing passcode windows flow
Implement changing passcode windows flow
2021-01-18 15:12:25 +01:00

58 lines
2.1 KiB
C++

// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include "ChangePasscodeLockHandler.hpp"
#include "application-desktop/widgets/PinHash.hpp"
namespace gui
{
ChangePasscodeLockHandler::ChangePasscodeLockHandler()
: lock(Store::GSM::SIM::NONE, PinLock::LockState::PasscodeRequired, PinLock::LockType::Screen)
{}
PinLock::LockState ChangePasscodeLockHandler::checkPasscode(unsigned int currentLockPassHash)
{
return activateLock([this, currentLockPassHash](PinLock::LockType, const std::vector<unsigned int> &pin) {
const auto hash = GetPinHash(pin);
if (hash == currentLockPassHash) {
lock.lockState = PinLock::LockState::NewPasscodeRequired;
}
else {
lock.lockState = PinLock::LockState::PasscodeInvalidRetryRequired;
}
});
}
PinLock::LockState ChangePasscodeLockHandler::newPasscodeConfirmed()
{
return activateLock([this](PinLock::LockType, const std::vector<unsigned int> &pin) {
const auto newPasscodeConfirmedHash = GetPinHash(pin);
if (newPasscodeHash == newPasscodeConfirmedHash) {
lock.lockState = PinLock::LockState::Unlocked;
}
else {
lock.lockState = PinLock::LockState::NewPasscodeInvalid;
}
});
}
PinLock::LockState ChangePasscodeLockHandler::newPasscodeProvided()
{
return activateLock([this](PinLock::LockType, const std::vector<unsigned int> &pin) {
if (pin.size() < lock.getMaxPinSize()) {
lock.lockState = PinLock::LockState::NewPasscodeInvalidRetryRequired;
return;
}
newPasscodeHash = GetPinHash(pin);
lock.lockState = PinLock::LockState::NewPasscodeConfirmRequired;
});
}
PinLock::LockState ChangePasscodeLockHandler::activateLock(OnActivatedCallback onActivatedCallback)
{
lock.onActivatedCallback = onActivatedCallback;
lock.activate();
return lock.lockState;
}
} // namespace gui