diff --git a/services/core/java/com/android/server/biometrics/sensors/InternalCleanupClient.java b/services/core/java/com/android/server/biometrics/sensors/InternalCleanupClient.java index ded9c8de4dba1..cdf22aadbd8cd 100644 --- a/services/core/java/com/android/server/biometrics/sensors/InternalCleanupClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/InternalCleanupClient.java @@ -113,7 +113,11 @@ public abstract class InternalCleanupClient getCurrentRemoveClient() { return (RemovalClient) mCurrentTask; } + + @VisibleForTesting + public ArrayList getUnknownHALTemplates() { + return mUnknownHALTemplates; + } } diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalCleanupClientTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalCleanupClientTest.java index 282c782e752aa..f0d8616ece9f9 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalCleanupClientTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalCleanupClientTest.java @@ -137,6 +137,32 @@ public class FingerprintInternalCleanupClientTest { verify(mCallback).onClientFinished(eq(mClient), eq(true)); } + @Test + public void cleanupUnknownHalTemplatesAfterEnumerationWhenVirtualIsDisabled() { + mClient = createClient(); + + final List templates = List.of( + new Fingerprint("one", 1, 1), + new Fingerprint("two", 2, 1), + new Fingerprint("three", 3, 1) + ); + mClient.start(mCallback); + for (int i = templates.size() - 1; i >= 0; i--) { + mClient.getCurrentEnumerateClient().onEnumerationResult(templates.get(i), i); + } + // The first template is removed after enumeration + assertThat(mClient.getUnknownHALTemplates().size()).isEqualTo(2); + + // Simulate finishing the removal of the first template. + // |remaining| is 0 because one FingerprintRemovalClient is associated with only one + // biometrics ID. + mClient.getCurrentRemoveClient().onRemoved(templates.get(0), 0); + assertThat(mClient.getUnknownHALTemplates().size()).isEqualTo(1); + // Simulate finishing the removal of the second template. + mClient.getCurrentRemoveClient().onRemoved(templates.get(1), 0); + assertThat(mClient.getUnknownHALTemplates()).isEmpty(); + } + protected FingerprintInternalCleanupClient createClient() { final List enrollments = new ArrayList<>(); final Map authenticatorIds = new HashMap<>();