summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yong Zhang <zhangyong@google.com> 2023-08-04 22:32:40 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2023-08-04 22:32:40 +0000
commit9fee241befea3ff902fd359df80057e4eade577d (patch)
treee5598cefc133e1ebf889e1cb8b61d4bee6bf1528
parent9797640ca53e2c3c04f89e5e11c4f4d8764b8bc1 (diff)
parent656f5d512f36fbe6c6a5a6340458e54cf512c82b (diff)
Merge "Fix biometric context update problem." into udc-dev am: 656f5d512f
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/24284551 Change-Id: I6357533b229a437f34e12a6a03e9d42736a6f707 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--services/core/java/com/android/server/biometrics/log/BiometricContextProvider.java4
-rw-r--r--services/tests/servicestests/src/com/android/server/biometrics/log/BiometricContextProviderTest.java11
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);