From d99e713e59ba680a4170d2fb2630165c42d945f4 Mon Sep 17 00:00:00 2001 From: jiangkun5 Date: Mon, 21 Feb 2022 15:26:26 +0800 Subject: [PATCH] Fix inaccuracy in biometric timeout Bug: 212210817 AlarmManager.set() does not trigger on the exact timeout, AlarmManager.setExact() should be used instead. Change-Id: I7a59cfebd714ccd0192aeb01571a5ac531abe342 --- .../android/server/locksettings/LockSettingsStrongAuth.java | 6 +++--- .../server/locksettings/LockSettingsStrongAuthTest.java | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/locksettings/LockSettingsStrongAuth.java b/services/core/java/com/android/server/locksettings/LockSettingsStrongAuth.java index a102406cc1312..1203769cb72b7 100644 --- a/services/core/java/com/android/server/locksettings/LockSettingsStrongAuth.java +++ b/services/core/java/com/android/server/locksettings/LockSettingsStrongAuth.java @@ -262,7 +262,7 @@ public class LockSettingsStrongAuth { long nextAlarmTime = strongAuthTime + dpm.getRequiredStrongAuthTimeout(null, userId); // schedule a new alarm listener for the user - mAlarmManager.set(AlarmManager.ELAPSED_REALTIME, nextAlarmTime, + mAlarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, nextAlarmTime, STRONG_AUTH_TIMEOUT_ALARM_TAG, alarm, mHandler); } @@ -303,7 +303,7 @@ public class LockSettingsStrongAuth { alarm = new NonStrongBiometricTimeoutAlarmListener(userId); mNonStrongBiometricTimeoutAlarmListener.put(userId, alarm); // schedule a new alarm listener for the user - mAlarmManager.set(AlarmManager.ELAPSED_REALTIME, nextAlarmTime, + mAlarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, nextAlarmTime, NON_STRONG_BIOMETRIC_TIMEOUT_ALARM_TAG, alarm, mHandler); } @@ -394,7 +394,7 @@ public class LockSettingsStrongAuth { } // schedule a new alarm listener for the user if (DEBUG) Slog.d(TAG, "Schedule a new alarm for non-strong biometric idle timeout"); - mAlarmManager.set(AlarmManager.ELAPSED_REALTIME, nextAlarmTime, + mAlarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, nextAlarmTime, NON_STRONG_BIOMETRIC_IDLE_TIMEOUT_ALARM_TAG, alarm, mHandler); } diff --git a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStrongAuthTest.java b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStrongAuthTest.java index acb20edfe8d85..6de7fddf6ccd5 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStrongAuthTest.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStrongAuthTest.java @@ -229,8 +229,8 @@ public class LockSettingsStrongAuthTest { } private void verifyAlarm(long when, String tag, AlarmManager.OnAlarmListener alarm) { - verify(mAlarmManager).set( - eq(AlarmManager.ELAPSED_REALTIME), + verify(mAlarmManager).setExact( + eq(AlarmManager.ELAPSED_REALTIME_WAKEUP), eq(when), eq(tag), eq(alarm),