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

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

Merge "Fix Fingperint Virtual Hal cancellation while waiting finger touch" into main

parents b34f1335 74e25d2d
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -62,12 +62,17 @@ void FakeFingerprintEngine::enrollImpl(ISessionCallback* cb,
        return;
    }

    waitForFingerDown(cb, cancel);

    updateContext(WorkMode::kEnroll, cb, const_cast<std::future<void>&>(cancel), 0, hat);
}

void FakeFingerprintEngine::authenticateImpl(ISessionCallback* cb, int64_t operationId,
                                             const std::future<void>& cancel) {
    BEGIN_OP(0);

    waitForFingerDown(cb, cancel);

    updateContext(WorkMode::kAuthenticate, cb, const_cast<std::future<void>&>(cancel), operationId,
                  keymaster::HardwareAuthToken());
}
@@ -84,6 +89,8 @@ void FakeFingerprintEngine::detectInteractionImpl(ISessionCallback* cb,
        return;
    }

    waitForFingerDown(cb, cancel);

    updateContext(WorkMode::kDetectInteract, cb, const_cast<std::future<void>&>(cancel), 0,
                  keymaster::HardwareAuthToken());
}
@@ -398,6 +405,7 @@ ndk::ScopedAStatus FakeFingerprintEngine::onPointerDownImpl(int32_t /*pointerId*

ndk::ScopedAStatus FakeFingerprintEngine::onPointerUpImpl(int32_t /*pointerId*/) {
    BEGIN_OP(0);
    mFingerIsDown = false;
    return ndk::ScopedAStatus::ok();
}

@@ -533,4 +541,17 @@ void FakeFingerprintEngine::lockoutTimerExpired(ISessionCallback* cb) {
    isLockoutTimerStarted = false;
    isLockoutTimerAborted = false;
}

void FakeFingerprintEngine::waitForFingerDown(ISessionCallback* cb,
                                              const std::future<void>& cancel) {
    while (!mFingerIsDown) {
        if (shouldCancel(cancel)) {
            LOG(ERROR) << "waitForFingerDown, Fail: cancel";
            cb->onError(Error::CANCELED, 0 /* vendorCode */);
            return;
        }
        SLEEP_MS(10);
    }
}

}  // namespace aidl::android::hardware::biometrics::fingerprint
+1 −0
Original line number Diff line number Diff line
@@ -249,6 +249,7 @@ ndk::ScopedAStatus Session::close() {
ndk::ScopedAStatus Session::onPointerDown(int32_t pointerId, int32_t x, int32_t y, float minor,
                                          float major) {
    LOG(INFO) << "onPointerDown";
    mEngine->notifyFingerdown();
    mWorker->schedule(Callable::from([this, pointerId, x, y, minor, major] {
        mEngine->onPointerDownImpl(pointerId, x, y, minor, major);
        enterIdling();
+3 −0
Original line number Diff line number Diff line
@@ -75,6 +75,7 @@ class FakeFingerprintEngine {
    enum class WorkMode : int8_t { kIdle = 0, kAuthenticate, kEnroll, kDetectInteract };

    WorkMode getWorkMode() { return mWorkMode; }
    void notifyFingerdown() { mFingerIsDown = true; }

    virtual std::string toString() const {
        std::ostringstream os;
@@ -100,6 +101,7 @@ class FakeFingerprintEngine {
    keymaster::HardwareAuthToken mHat;
    std::future<void> mCancel;
    int64_t mOperationId;
    bool mFingerIsDown;

  private:
    static constexpr int32_t FINGERPRINT_ACQUIRED_VENDOR_BASE = 1000;
@@ -109,6 +111,7 @@ class FakeFingerprintEngine {
    int32_t getRandomInRange(int32_t bound1, int32_t bound2);
    bool checkSensorLockout(ISessionCallback*);
    void clearLockout(ISessionCallback* cb);
    void waitForFingerDown(ISessionCallback* cb, const std::future<void>& cancel);

    FakeLockoutTracker mLockoutTracker;

+19 −0
Original line number Diff line number Diff line
@@ -185,6 +185,7 @@ TEST_F(FakeFingerprintEngineTest, Enroll) {
    FingerprintHalProperties::enrollments({});
    FingerprintHalProperties::next_enrollment("4:0,0:true");
    keymaster::HardwareAuthToken hat{.mac = {2, 4}};
    mEngine.notifyFingerdown();
    mEngine.enrollImpl(mCallback.get(), hat, mCancel.get_future());
    ASSERT_EQ(mEngine.getWorkMode(), FakeFingerprintEngine::WorkMode::kEnroll);
    mEngine.fingerDownAction();
@@ -202,6 +203,7 @@ TEST_F(FakeFingerprintEngineTest, EnrollCancel) {
    FingerprintHalProperties::next_enrollment(next);
    keymaster::HardwareAuthToken hat{.mac = {2, 4}};
    mCancel.set_value();
    mEngine.notifyFingerdown();
    mEngine.enrollImpl(mCallback.get(), hat, mCancel.get_future());
    mEngine.fingerDownAction();
    ASSERT_EQ(Error::CANCELED, mCallback->mError);
@@ -215,6 +217,7 @@ TEST_F(FakeFingerprintEngineTest, EnrollFail) {
    auto next = "2:0,0:false";
    FingerprintHalProperties::next_enrollment(next);
    keymaster::HardwareAuthToken hat{.mac = {2, 4}};
    mEngine.notifyFingerdown();
    mEngine.enrollImpl(mCallback.get(), hat, mCancel.get_future());
    mEngine.fingerDownAction();
    ASSERT_EQ(Error::UNABLE_TO_PROCESS, mCallback->mError);
@@ -228,6 +231,7 @@ TEST_F(FakeFingerprintEngineTest, EnrollAcquired) {
    FingerprintHalProperties::next_enrollment("4:0,5-[12,1013]:true");
    keymaster::HardwareAuthToken hat{.mac = {2, 4}};
    int32_t prevCnt = mCallback->mLastAcquiredCount;
    mEngine.notifyFingerdown();
    mEngine.enrollImpl(mCallback.get(), hat, mCancel.get_future());
    mEngine.fingerDownAction();
    ASSERT_FALSE(FingerprintHalProperties::next_enrollment().has_value());
@@ -242,6 +246,7 @@ TEST_F(FakeFingerprintEngineTest, EnrollAcquired) {
TEST_F(FakeFingerprintEngineTest, Authenticate) {
    FingerprintHalProperties::enrollments({1, 2});
    FingerprintHalProperties::enrollment_hit(2);
    mEngine.notifyFingerdown();
    mEngine.authenticateImpl(mCallback.get(), 0, mCancel.get_future());
    ASSERT_EQ(mEngine.getWorkMode(), FakeFingerprintEngine::WorkMode::kAuthenticate);
    mEngine.fingerDownAction();
@@ -255,6 +260,7 @@ TEST_F(FakeFingerprintEngineTest, AuthenticateCancel) {
    FingerprintHalProperties::enrollments({2});
    FingerprintHalProperties::enrollment_hit(2);
    mCancel.set_value();
    mEngine.notifyFingerdown();
    mEngine.authenticateImpl(mCallback.get(), 0, mCancel.get_future());
    mEngine.fingerDownAction();
    ASSERT_EQ(Error::CANCELED, mCallback->mError);
@@ -264,6 +270,7 @@ TEST_F(FakeFingerprintEngineTest, AuthenticateCancel) {
TEST_F(FakeFingerprintEngineTest, AuthenticateNotSet) {
    FingerprintHalProperties::enrollments({1, 2});
    FingerprintHalProperties::enrollment_hit({});
    mEngine.notifyFingerdown();
    mEngine.authenticateImpl(mCallback.get(), 0, mCancel.get_future());
    mEngine.fingerDownAction();
    ASSERT_TRUE(mCallback->mAuthenticateFailed);
@@ -272,6 +279,7 @@ TEST_F(FakeFingerprintEngineTest, AuthenticateNotSet) {
TEST_F(FakeFingerprintEngineTest, AuthenticateNotEnrolled) {
    FingerprintHalProperties::enrollments({1, 2});
    FingerprintHalProperties::enrollment_hit(3);
    mEngine.notifyFingerdown();
    mEngine.authenticateImpl(mCallback.get(), 0, mCancel.get_future());
    mEngine.fingerDownAction();
    ASSERT_TRUE(mCallback->mAuthenticateFailed);
@@ -282,6 +290,7 @@ TEST_F(FakeFingerprintEngineTest, AuthenticateLockout) {
    FingerprintHalProperties::enrollments({22, 2});
    FingerprintHalProperties::enrollment_hit(2);
    FingerprintHalProperties::lockout(true);
    mEngine.notifyFingerdown();
    mEngine.authenticateImpl(mCallback.get(), 0, mCancel.get_future());
    mEngine.fingerDownAction();
    ASSERT_TRUE(mCallback->mLockoutPermanent);
@@ -290,6 +299,7 @@ TEST_F(FakeFingerprintEngineTest, AuthenticateLockout) {

TEST_F(FakeFingerprintEngineTest, AuthenticateError8) {
    FingerprintHalProperties::operation_authenticate_error(8);
    mEngine.notifyFingerdown();
    mEngine.authenticateImpl(mCallback.get(), 0, mCancel.get_future());
    mEngine.fingerDownAction();
    ASSERT_EQ(mCallback->mError, (Error)8);
@@ -298,6 +308,7 @@ TEST_F(FakeFingerprintEngineTest, AuthenticateError8) {

TEST_F(FakeFingerprintEngineTest, AuthenticateError9) {
    FingerprintHalProperties::operation_authenticate_error(1009);
    mEngine.notifyFingerdown();
    mEngine.authenticateImpl(mCallback.get(), 0, mCancel.get_future());
    mEngine.fingerDownAction();
    ASSERT_EQ(mCallback->mError, (Error)7);
@@ -306,6 +317,7 @@ TEST_F(FakeFingerprintEngineTest, AuthenticateError9) {

TEST_F(FakeFingerprintEngineTest, AuthenticateFails) {
    FingerprintHalProperties::operation_authenticate_fails(true);
    mEngine.notifyFingerdown();
    mEngine.authenticateImpl(mCallback.get(), 0, mCancel.get_future());
    mEngine.fingerDownAction();
    ASSERT_TRUE(mCallback->mAuthenticateFailed);
@@ -318,6 +330,7 @@ TEST_F(FakeFingerprintEngineTest, AuthenticateAcquired) {
    FingerprintHalProperties::enrollment_hit(2);
    FingerprintHalProperties::operation_authenticate_acquired("4,1009");
    int32_t prevCount = mCallback->mLastAcquiredCount;
    mEngine.notifyFingerdown();
    mEngine.authenticateImpl(mCallback.get(), 0, mCancel.get_future());
    mEngine.fingerDownAction();
    ASSERT_FALSE(mCallback->mAuthenticateFailed);
@@ -332,6 +345,7 @@ TEST_F(FakeFingerprintEngineTest, InteractionDetect) {
    FingerprintHalProperties::enrollments({1, 2});
    FingerprintHalProperties::enrollment_hit(2);
    FingerprintHalProperties::operation_detect_interaction_acquired("");
    mEngine.notifyFingerdown();
    mEngine.detectInteractionImpl(mCallback.get(), mCancel.get_future());
    ASSERT_EQ(mEngine.getWorkMode(), FakeFingerprintEngine::WorkMode::kDetectInteract);
    mEngine.fingerDownAction();
@@ -345,6 +359,7 @@ TEST_F(FakeFingerprintEngineTest, InteractionDetectCancel) {
    FingerprintHalProperties::enrollments({1, 2});
    FingerprintHalProperties::enrollment_hit(2);
    mCancel.set_value();
    mEngine.notifyFingerdown();
    mEngine.detectInteractionImpl(mCallback.get(), mCancel.get_future());
    mEngine.fingerDownAction();
    ASSERT_EQ(Error::CANCELED, mCallback->mError);
@@ -355,6 +370,7 @@ TEST_F(FakeFingerprintEngineTest, InteractionDetectNotSet) {
    FingerprintHalProperties::detect_interaction(true);
    FingerprintHalProperties::enrollments({1, 2});
    FingerprintHalProperties::enrollment_hit({});
    mEngine.notifyFingerdown();
    mEngine.detectInteractionImpl(mCallback.get(), mCancel.get_future());
    mEngine.fingerDownAction();
    ASSERT_EQ(1, mCallback->mInteractionDetectedCount);
@@ -363,6 +379,7 @@ TEST_F(FakeFingerprintEngineTest, InteractionDetectNotSet) {
TEST_F(FakeFingerprintEngineTest, InteractionDetectNotEnrolled) {
    FingerprintHalProperties::enrollments({1, 2});
    FingerprintHalProperties::enrollment_hit(25);
    mEngine.notifyFingerdown();
    mEngine.detectInteractionImpl(mCallback.get(), mCancel.get_future());
    mEngine.fingerDownAction();
    ASSERT_EQ(1, mCallback->mInteractionDetectedCount);
@@ -371,6 +388,7 @@ TEST_F(FakeFingerprintEngineTest, InteractionDetectNotEnrolled) {
TEST_F(FakeFingerprintEngineTest, InteractionDetectError) {
    FingerprintHalProperties::detect_interaction(true);
    FingerprintHalProperties::operation_detect_interaction_error(8);
    mEngine.notifyFingerdown();
    mEngine.detectInteractionImpl(mCallback.get(), mCancel.get_future());
    mEngine.fingerDownAction();
    ASSERT_EQ(0, mCallback->mInteractionDetectedCount);
@@ -384,6 +402,7 @@ TEST_F(FakeFingerprintEngineTest, InteractionDetectAcquired) {
    FingerprintHalProperties::enrollment_hit(2);
    FingerprintHalProperties::operation_detect_interaction_acquired("4,1013");
    int32_t prevCount = mCallback->mLastAcquiredCount;
    mEngine.notifyFingerdown();
    mEngine.detectInteractionImpl(mCallback.get(), mCancel.get_future());
    mEngine.fingerDownAction();
    ASSERT_EQ(1, mCallback->mInteractionDetectedCount);
+3 −0
Original line number Diff line number Diff line
@@ -145,6 +145,7 @@ TEST_F(FakeFingerprintEngineUdfpsTest, initialization) {
TEST_F(FakeFingerprintEngineUdfpsTest, authenticate) {
    std::shared_ptr<TestSessionCallback> cb = ndk::SharedRefBase::make<TestSessionCallback>();
    std::promise<void> cancel;
    mEngine.notifyFingerdown();
    mEngine.authenticateImpl(cb.get(), 1, cancel.get_future());
    ASSERT_TRUE(mEngine.getWorkMode() == FakeFingerprintEngineUdfps::WorkMode::kAuthenticate);
    mEngine.onPointerDownImpl(1, 2, 3, 4.0, 5.0);
@@ -158,6 +159,7 @@ TEST_F(FakeFingerprintEngineUdfpsTest, enroll) {
    std::promise<void> cancel;
    keymaster::HardwareAuthToken hat{.mac = {5, 6}};
    FingerprintHalProperties::next_enrollment("5:0,0:true");
    mEngine.notifyFingerdown();
    mEngine.enrollImpl(cb.get(), hat, cancel.get_future());
    ASSERT_TRUE(mEngine.getWorkMode() == FakeFingerprintEngineUdfps::WorkMode::kEnroll);
    mEngine.onPointerDownImpl(1, 2, 3, 4.0, 5.0);
@@ -173,6 +175,7 @@ TEST_F(FakeFingerprintEngineUdfpsTest, detectInteraction) {
    FingerprintHalProperties::operation_detect_interaction_acquired("");
    std::shared_ptr<TestSessionCallback> cb = ndk::SharedRefBase::make<TestSessionCallback>();
    std::promise<void> cancel;
    mEngine.notifyFingerdown();
    mEngine.detectInteractionImpl(cb.get(), cancel.get_future());
    ASSERT_TRUE(mEngine.getWorkMode() == FakeFingerprintEngineUdfps::WorkMode::kDetectInteract);
    mEngine.onPointerDownImpl(1, 2, 3, 4.0, 5.0);