Fix Fingperint Virtual Hal cancellation while waiting finger touch
Bug: 319146424
Test: atest BiometricsE2eTests:BiometricPromptAuthSuccessTest
Test: atest android.hardware.biometrics.fingerprint.*
Change-Id: I26a2dde01608177411cce3f9c68ee6fd1fd6aab8
diff --git a/biometrics/fingerprint/aidl/default/FakeFingerprintEngine.cpp b/biometrics/fingerprint/aidl/default/FakeFingerprintEngine.cpp
index 4e80052..a7acf3d 100644
--- a/biometrics/fingerprint/aidl/default/FakeFingerprintEngine.cpp
+++ b/biometrics/fingerprint/aidl/default/FakeFingerprintEngine.cpp
@@ -62,12 +62,17 @@
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 @@
return;
}
+ waitForFingerDown(cb, cancel);
+
updateContext(WorkMode::kDetectInteract, cb, const_cast<std::future<void>&>(cancel), 0,
keymaster::HardwareAuthToken());
}
@@ -398,6 +405,7 @@
ndk::ScopedAStatus FakeFingerprintEngine::onPointerUpImpl(int32_t /*pointerId*/) {
BEGIN_OP(0);
+ mFingerIsDown = false;
return ndk::ScopedAStatus::ok();
}
@@ -533,4 +541,17 @@
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