From 6caecd482650c8c30610d9b72846a98ec5eeb81f Mon Sep 17 00:00:00 2001 From: jabashque Date: Thu, 5 Jan 2023 11:42:46 -0800 Subject: [PATCH] fingerprint: set dimlayer_hbm on finger up/down instead of auth/cancel When dimlayer_hbm is enabled, HWC ends up disabling all color transformations, including Night Light. Since we enable/disable dimlayer_hbm on authenticate/cancel, this means that whenever the UDFPS circle is present, Night Light ends up temporarily turning off. This is especially not helpful on the lock screen, where the UDFPS circle is active all the time. Instead of turning on dimlayer_hbm during the entire time that the UDFPS circle is showing, let's turn on dimlayer_hbm only when the user is pressing down on the circle. In doing so, the color transformations will be disabled for only when the user is touching the circle. We will still disable dimlayer_hbm on cancel anyway, just in case that wasn't already set to off by the time cancel() is called. However, when enrolling a new fingerprint, the user is going to be tapping on the UDFPS circle many, many times, and the user may prefer to just keep dimlayer on for the entire duration. Add `isEnrolling` to track that, and don't change dimlayer state while that is set to true. Change-Id: I9ed1a6b5839e39b8f70ff4af4ebe8d1bc66ffb98 Signed-off-by: AnierinB --- hidl/fingerprint/BiometricsFingerprint.cpp | 19 ++++++++++++++++--- hidl/fingerprint/BiometricsFingerprint.h | 1 + 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/hidl/fingerprint/BiometricsFingerprint.cpp b/hidl/fingerprint/BiometricsFingerprint.cpp index 2055a25..99f0e5c 100644 --- a/hidl/fingerprint/BiometricsFingerprint.cpp +++ b/hidl/fingerprint/BiometricsFingerprint.cpp @@ -38,6 +38,7 @@ Return BiometricsFingerprint::setNotify( } Return BiometricsFingerprint::preEnroll() { + this->isEnrolling = true; setDimlayerHbm(1); return mOplusBiometricsFingerprint->preEnroll(); } @@ -48,6 +49,7 @@ Return BiometricsFingerprint::enroll(const hidl_array BiometricsFingerprint::postEnroll() { + this->isEnrolling = false; setDimlayerHbm(0); return mOplusBiometricsFingerprint->postEnroll(); } @@ -57,7 +59,9 @@ Return BiometricsFingerprint::getAuthenticatorId() { } Return BiometricsFingerprint::cancel() { - setDimlayerHbm(0); + if (!this->isEnrolling) { + setDimlayerHbm(0); + } return mOplusBiometricsFingerprint->cancel(); } @@ -75,7 +79,8 @@ Return BiometricsFingerprint::setActiveGroup(uint32_t gid, } Return BiometricsFingerprint::authenticate(uint64_t operationId, uint32_t gid) { - setDimlayerHbm(1); + // In case postEnroll never got called for whatever reason, set isEnrolling to false. + this->isEnrolling = false; return mOplusBiometricsFingerprint->authenticate(operationId, gid); } @@ -84,12 +89,18 @@ Return BiometricsFingerprint::isUdfps(uint32_t sensorID) { } Return BiometricsFingerprint::onFingerDown(uint32_t x, uint32_t y, float minor, float major) { + if (!this->isEnrolling) { + setDimlayerHbm(1); + } setFpPress(1); return mOplusBiometricsFingerprint->onFingerDown(x, y, minor, major); } Return BiometricsFingerprint::onFingerUp() { setFpPress(0); + if (!this->isEnrolling) { + setDimlayerHbm(0); + } return mOplusBiometricsFingerprint->onFingerUp(); } @@ -116,8 +127,10 @@ Return BiometricsFingerprint::onAuthenticated(uint64_t deviceId, uint32_t Return BiometricsFingerprint::onError(uint64_t deviceId, FingerprintError error, int32_t vendorCode) { - setDimlayerHbm(0); setFpPress(0); + if (!this->isEnrolling) { + setDimlayerHbm(0); + } return mClientCallback->onError(deviceId, error, vendorCode); } diff --git a/hidl/fingerprint/BiometricsFingerprint.h b/hidl/fingerprint/BiometricsFingerprint.h index 49f09e0..78390d7 100644 --- a/hidl/fingerprint/BiometricsFingerprint.h +++ b/hidl/fingerprint/BiometricsFingerprint.h @@ -126,6 +126,7 @@ class BiometricsFingerprint : public IBiometricsFingerprint, sp mClientCallback; int mOplusDisplayFd; + bool isEnrolling; }; } // namespace implementation