From d6cd8d5c02fbd086feff9119bb5eb6083dd68db5 Mon Sep 17 00:00:00 2001 From: Beverly Date: Fri, 2 Dec 2022 16:14:10 +0000 Subject: [PATCH] Update FP listening right after POWER_PRESSED err Instead of delaying 500ms Test: atest KeyguardUpdateMonitorTest Test: Attempt to authenticate with SideFPS right after pressing the power button => observe FP can authenticate Fixes: 259172472 Change-Id: I7f07c549628a21a92ddfac0d0679d0f054ad1dda --- .../com/android/keyguard/KeyguardUpdateMonitor.java | 10 +++++++--- .../keyguard/logging/KeyguardUpdateMonitorLogger.kt | 5 +++-- .../android/keyguard/KeyguardUpdateMonitorTest.java | 11 +++++++++-- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index bba4e2c6a9ff1..b46a3e788851c 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -955,12 +955,16 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab setFingerprintRunningState(BIOMETRIC_STATE_STOPPED); } - if (msgId == FingerprintManager.FINGERPRINT_ERROR_HW_UNAVAILABLE - || msgId == FingerprintManager.BIOMETRIC_ERROR_POWER_PRESSED) { - mLogger.logRetryAfterFpError(msgId, errString); + if (msgId == FingerprintManager.FINGERPRINT_ERROR_HW_UNAVAILABLE) { + mLogger.logRetryAfterFpErrorWithDelay(msgId, errString, HAL_ERROR_RETRY_TIMEOUT); mHandler.postDelayed(mRetryFingerprintAuthentication, HAL_ERROR_RETRY_TIMEOUT); } + if (msgId == FingerprintManager.BIOMETRIC_ERROR_POWER_PRESSED) { + mLogger.logRetryAfterFpErrorWithDelay(msgId, errString, 0); + updateFingerprintListeningState(BIOMETRIC_ACTION_START); + } + boolean lockedOutStateChanged = false; if (msgId == FingerprintManager.FINGERPRINT_ERROR_LOCKOUT_PERMANENT) { lockedOutStateChanged = !mFingerprintLockedOutPermanent; diff --git a/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt b/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt index 1f6441a470929..b66ae286171ae 100644 --- a/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt +++ b/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt @@ -225,12 +225,13 @@ class KeyguardUpdateMonitorLogger @Inject constructor( { "Retrying face after HW unavailable, attempt $int1" }) } - fun logRetryAfterFpError(msgId: Int, errString: String?) { + fun logRetryAfterFpErrorWithDelay(msgId: Int, errString: String?, delay: Int) { logBuffer.log(TAG, DEBUG, { int1 = msgId + int2 = delay str1 = "$errString" }, { - "Fingerprint retrying auth due to($int1) -> $str1" + "Fingerprint retrying auth after $int2 ms due to($int1) -> $str1" }) } diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java index 1cce472b7c735..50abac2d6871a 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java @@ -779,6 +779,15 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { verify(mFaceManager).authenticate(any(), any(), any(), any(), anyInt(), anyBoolean()); } + @Test + public void testFingerprintPowerPressed_restartsFingerprintListeningStateImmediately() { + mKeyguardUpdateMonitor.mFingerprintAuthenticationCallback + .onAuthenticationError(FingerprintManager.BIOMETRIC_ERROR_POWER_PRESSED, ""); + + verify(mFingerprintManager).authenticate(any(), any(), any(), any(), anyInt(), anyInt(), + anyInt()); + } + @Test public void testOnFaceAuthenticated_skipsFaceWhenAuthenticated() { // test whether face will be skipped if authenticated, so the value of isStrongBiometric @@ -919,8 +928,6 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { verify(mFaceManager).authenticate(any(), any(), any(), any(), anyInt(), anyBoolean()); verify(mFingerprintManager).authenticate(any(), any(), any(), any(), anyInt(), anyInt(), anyInt()); -// resetFaceManager(); -// resetFingerprintManager(); when(mFingerprintManager.getLockoutModeForUser(eq(FINGERPRINT_SENSOR_ID), eq(newUser))) .thenReturn(fingerprintLockoutMode);