// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once #include "PinLock.hpp" #include #include namespace app { class ApplicationDesktop; } namespace gui { class PinLockHandler { app::ApplicationDesktop *app = nullptr; gui::PinLock screenLock; gui::PinLock simLock; bool promptSimLockWindow = true; void handleScreenPin(const std::vector &pin); void handlePasscode(PinLock::LockType type, const std::vector passcode); void handlePasscodeChange(const std::vector passcode); void handleNewPasscodeUnconfirmed(const std::vector &passcode, const std::vector &pin); void handleNewPasscodeConfirmed(PinLock::LockType type, const std::vector &passcode, const std::vector &pin); void handleNewPasscodeInvalid(const std::vector &passcode); void handlePasscodeParams(PinLock::LockType type, PinLock::LockState state, app::manager::actions::ActionParamsPtr &&data); void switchToPinLockWindow( std::function &)> onLockActivatedCallback); void switchToPinLockWindow( PinLock::LockState type, std::function &)> onLockActivatedCallback); auto getStrongestLock() noexcept -> gui::PinLock &; void unlock(); void setSimLockHandled() noexcept; public: PinLockHandler(app::ApplicationDesktop *app); void handlePasscodeRequest(PinLock::LockType type, app::manager::actions::ActionParamsPtr &&data); void handlePinChangeRequest(app::manager::actions::ActionParamsPtr &&data); void handleSimBlocked(app::manager::actions::ActionParamsPtr &&data); void handleUnlockSim(app::manager::actions::ActionParamsPtr &&data); void handleCMEError(app::manager::actions::ActionParamsPtr &&data) const; [[nodiscard]] auto isScreenLocked() const noexcept -> bool { return !screenLock.isState(PinLock::LockState::Unlocked); } [[nodiscard]] auto isScreenBlocked() const noexcept -> bool { return screenLock.isState(PinLock::LockState::Blocked); } void lockScreen(); void unlockScreen(); }; } // namespace gui