diff options
author | Vincent Wang <firewall@google.com> | 2023-08-02 05:56:42 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-08-20 08:08:05 +0000 |
commit | 5b9076c604c0f0f44fce1b5170dc2dbbd12d231d (patch) | |
tree | 6ffeac38f3180050596651d7356c4300946a76dd | |
parent | 31e654d1278627bff86041bbce0dbe2c3b1ab872 (diff) | |
download | base-5b9076c604c0f0f44fce1b5170dc2dbbd12d231d.tar.gz |
Fix biometric context update problem.
Bug: b/288761850
Test: Check b/288761850
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:a7c50568f6e09782429b31eedd547bf72b001d30)
Merged-In: I890d102d10a3efa230e26e4e9753f9c66b71afdb
Change-Id: I890d102d10a3efa230e26e4e9753f9c66b71afdb
2 files changed, 15 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/biometrics/log/BiometricContextProvider.java b/services/core/java/com/android/server/biometrics/log/BiometricContextProvider.java index fc3d7c8114b0..745222873698 100644 --- a/services/core/java/com/android/server/biometrics/log/BiometricContextProvider.java +++ b/services/core/java/com/android/server/biometrics/log/BiometricContextProvider.java @@ -216,6 +216,10 @@ public final class BiometricContextProvider implements BiometricContext { public void subscribe(@NonNull OperationContextExt context, @NonNull Consumer<OperationContext> consumer) { mSubscribers.put(context, consumer); + // TODO(b/294161627) Combine the getContext/subscribe APIs to avoid race + if (context.getDisplayState() != getDisplayState()) { + consumer.accept(context.update(this, context.isCrypto()).toAidlContext()); + } } @Override diff --git a/services/tests/servicestests/src/com/android/server/biometrics/log/BiometricContextProviderTest.java b/services/tests/servicestests/src/com/android/server/biometrics/log/BiometricContextProviderTest.java index a4423038a072..437510595ecb 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/log/BiometricContextProviderTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/log/BiometricContextProviderTest.java @@ -252,6 +252,14 @@ public class BiometricContextProviderTest { } @Test + public void testSubscribesWithDifferentState() throws RemoteException { + final Consumer<OperationContext> nonEmptyConsumer = mock(Consumer.class); + mListener.onDisplayStateChanged(AuthenticateOptions.DISPLAY_STATE_AOD); + mProvider.subscribe(mOpContext, nonEmptyConsumer); + verify(nonEmptyConsumer).accept(same(mOpContext.toAidlContext())); + } + + @Test public void testUnsubscribes() throws RemoteException { final Consumer<OperationContext> emptyConsumer = mock(Consumer.class); mProvider.subscribe(mOpContext, emptyConsumer); @@ -259,6 +267,9 @@ public class BiometricContextProviderTest { mListener.onDisplayStateChanged(AuthenticateOptions.DISPLAY_STATE_AOD); + //reset to unknown to avoid trigger accept when subscribe + mListener.onDisplayStateChanged(AuthenticateOptions.DISPLAY_STATE_UNKNOWN); + final Consumer<OperationContext> nonEmptyConsumer = mock(Consumer.class); mProvider.subscribe(mOpContext, nonEmptyConsumer); mListener.onDisplayStateChanged(AuthenticateOptions.DISPLAY_STATE_LOCKSCREEN); |