Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 92d18403 authored by Jeff Pu's avatar Jeff Pu Committed by Android (Google) Code Review
Browse files

Merge "Fix fingerprint vhal permanent lockout" into main

parents 7518ae2f b00dade5
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -389,10 +389,10 @@ void FakeFingerprintEngine::resetLockoutImpl(ISessionCallback* cb,
    if (isLockoutTimerStarted) isLockoutTimerAborted = true;
}

void FakeFingerprintEngine::clearLockout(ISessionCallback* cb) {
void FakeFingerprintEngine::clearLockout(ISessionCallback* cb, bool dueToTimeout) {
    Fingerprint::cfg().set<bool>("lockout", false);
    cb->onLockoutCleared();
    mLockoutTracker.reset();
    mLockoutTracker.reset(dueToTimeout);
}

ndk::ScopedAStatus FakeFingerprintEngine::onPointerDownImpl(int32_t /*pointerId*/, int32_t /*x*/,
@@ -536,7 +536,7 @@ void FakeFingerprintEngine::startLockoutTimer(int64_t timeout, ISessionCallback*
void FakeFingerprintEngine::lockoutTimerExpired(ISessionCallback* cb) {
    BEGIN_OP(0);
    if (!isLockoutTimerAborted) {
        clearLockout(cb);
        clearLockout(cb, true);
    }
    isLockoutTimerStarted = false;
    isLockoutTimerAborted = false;
+7 −3
Original line number Diff line number Diff line
@@ -23,8 +23,11 @@ using namespace ::android::fingerprint::virt;

namespace aidl::android::hardware::biometrics::fingerprint {

void FakeLockoutTracker::reset() {
void FakeLockoutTracker::reset(bool dueToTimeout) {
    if (!dueToTimeout) {
        mFailedCount = 0;
    }
    mFailedCountTimed = 0;
    mLockoutTimedStart = 0;
    mCurrentMode = LockoutMode::kNone;
}
@@ -33,6 +36,7 @@ void FakeLockoutTracker::addFailedAttempt() {
    bool enabled = Fingerprint::cfg().get<bool>("lockout_enable");
    if (enabled) {
        mFailedCount++;
        mFailedCountTimed++;
        int32_t lockoutTimedThreshold =
                Fingerprint::cfg().get<std::int32_t>("lockout_timed_threshold");
        int32_t lockoutPermanetThreshold =
@@ -40,7 +44,7 @@ void FakeLockoutTracker::addFailedAttempt() {
        if (mFailedCount >= lockoutPermanetThreshold) {
            mCurrentMode = LockoutMode::kPermanent;
            Fingerprint::cfg().set<bool>("lockout", true);
        } else if (mFailedCount >= lockoutTimedThreshold) {
        } else if (mFailedCountTimed >= lockoutTimedThreshold) {
            if (mCurrentMode == LockoutMode::kNone) {
                mCurrentMode = LockoutMode::kTimed;
                mLockoutTimedStart = Util::getSystemNanoTime();
+1 −1
Original line number Diff line number Diff line
@@ -110,7 +110,7 @@ class FakeFingerprintEngine {
    std::pair<Error, int32_t> convertError(int32_t code);
    int32_t getRandomInRange(int32_t bound1, int32_t bound2);
    bool checkSensorLockout(ISessionCallback*);
    void clearLockout(ISessionCallback* cb);
    void clearLockout(ISessionCallback* cb, bool dueToTimeout = false);
    void waitForFingerDown(ISessionCallback* cb, const std::future<void>& cancel);

    FakeLockoutTracker mLockoutTracker;
+3 −2
Original line number Diff line number Diff line
@@ -24,12 +24,12 @@ namespace aidl::android::hardware::biometrics::fingerprint {

class FakeLockoutTracker {
  public:
    FakeLockoutTracker() : mFailedCount(0) {}
    FakeLockoutTracker() : mFailedCount(0), mFailedCountTimed(0) {}
    ~FakeLockoutTracker() {}

    enum class LockoutMode : int8_t { kNone = 0, kTimed, kPermanent };

    void reset();
    void reset(bool dueToTimeout = false);
    LockoutMode getMode();
    void addFailedAttempt();
    int64_t getLockoutTimeLeft();
@@ -44,6 +44,7 @@ class FakeLockoutTracker {

  private:
    int32_t mFailedCount;
    int32_t mFailedCountTimed;
    int64_t mLockoutTimedStart;
    LockoutMode mCurrentMode;
};
+1 −1
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ TEST_F(FakeLockoutTrackerTest, addFailedAttemptLockoutTimed) {
        prevTimeLeft = currTimeLeft;
    }
    ASSERT_EQ(mLockoutTracker.getMode(), FakeLockoutTracker::LockoutMode::kNone);
    mLockoutTracker.reset();
    mLockoutTracker.reset(true);
}

TEST_F(FakeLockoutTrackerTest, addFailedAttemptPermanent) {