/* * Copyright (C) 2024 The LineageOS Project * * SPDX-License-Identifier: Apache-2.0 */ #include "Fingerprint.h" #include "LockoutTracker.h" #include namespace aidl { namespace android { namespace hardware { namespace biometrics { namespace fingerprint { void LockoutTracker::reset(bool clearAttemptCounter) { if (clearAttemptCounter) mFailedCount = 0; mLockoutTimedStart = 0; mCurrentMode = LockoutMode::NONE; } void LockoutTracker::addFailedAttempt() { mFailedCount++; if (mFailedCount >= LOCKOUT_PERMANENT_THRESHOLD) mCurrentMode = LockoutMode::PERMANENT; else if (mFailedCount >= LOCKOUT_TIMED_THRESHOLD) { mCurrentMode = LockoutMode::TIMED; mLockoutTimedStart = Util::getSystemNanoTime(); } } LockoutMode LockoutTracker::getMode() { if (mCurrentMode == LockoutMode::TIMED) { if (Util::hasElapsed(mLockoutTimedStart, LOCKOUT_TIMED_DURATION)) { mCurrentMode = LockoutMode::NONE; mLockoutTimedStart = 0; } } return mCurrentMode; } int64_t LockoutTracker::getLockoutTimeLeft() { int64_t res = 0; if (mLockoutTimedStart > 0) { auto now = Util::getSystemNanoTime(); auto elapsed = (now - mLockoutTimedStart) / 1000000LL; res = LOCKOUT_TIMED_DURATION - elapsed; } return res; } } // namespace fingerprint } // namespace biometrics } // namespace hardware } // namespace android } // namespace aidl