diff options
| author | 2023-04-26 22:36:36 +0000 | |
|---|---|---|
| committer | 2023-04-26 22:36:36 +0000 | |
| commit | acdde95a6b4b9dead9efdcaefa789bf77aab63c6 (patch) | |
| tree | 64ebfed9dd62e4c3989fa19f5a55598c30b8faa9 | |
| parent | 682209e24f99c2fea038691a26e1063c70d25c30 (diff) | |
| parent | 45106a4b7e72fd4f05516dab054464209ffec9cc (diff) | |
Merge "Associate the session type in operation context with the client" into udc-dev
8 files changed, 63 insertions, 47 deletions
diff --git a/services/core/java/com/android/server/biometrics/AuthSession.java b/services/core/java/com/android/server/biometrics/AuthSession.java index 5127d26e6e73..bf5e8ee27157 100644 --- a/services/core/java/com/android/server/biometrics/AuthSession.java +++ b/services/core/java/com/android/server/biometrics/AuthSession.java @@ -704,7 +704,8 @@ public final class AuthSession implements IBinder.DeathRecipient { } BiometricFrameworkStatsLogger.getInstance().authenticate( - mBiometricContext.updateContext(new OperationContextExt(), isCrypto()), + mBiometricContext.updateContext(new OperationContextExt(true /* isBP */), + isCrypto()), statsModality(), BiometricsProtoEnums.ACTION_UNKNOWN, BiometricsProtoEnums.CLIENT_BIOMETRIC_PROMPT, @@ -734,7 +735,8 @@ public final class AuthSession implements IBinder.DeathRecipient { } // Auth canceled BiometricFrameworkStatsLogger.getInstance().error( - mBiometricContext.updateContext(new OperationContextExt(), isCrypto()), + mBiometricContext.updateContext(new OperationContextExt(true /* isBP */), + isCrypto()), statsModality(), BiometricsProtoEnums.ACTION_AUTHENTICATE, BiometricsProtoEnums.CLIENT_BIOMETRIC_PROMPT, diff --git a/services/core/java/com/android/server/biometrics/log/OperationContextExt.java b/services/core/java/com/android/server/biometrics/log/OperationContextExt.java index d1de80b4761d..4d821e9819b4 100644 --- a/services/core/java/com/android/server/biometrics/log/OperationContextExt.java +++ b/services/core/java/com/android/server/biometrics/log/OperationContextExt.java @@ -46,15 +46,17 @@ public class OperationContextExt { private int mDockState = Intent.EXTRA_DOCK_STATE_UNDOCKED; @Surface.Rotation private int mOrientation = Surface.ROTATION_0; private int mFoldState = IBiometricContextListener.FoldState.UNKNOWN; + private final boolean mIsBP; - /** Create a new empty context. */ - public OperationContextExt() { - this(new OperationContext()); + /** Create a context. */ + public OperationContextExt(boolean isBP) { + this(new OperationContext(), isBP); } /** Create a wrapped context. */ - public OperationContextExt(@NonNull OperationContext context) { + public OperationContextExt(@NonNull OperationContext context, boolean isBP) { mAidlContext = context; + mIsBP = isBP; } /** @@ -268,18 +270,20 @@ public class OperationContextExt { } private void setFirstSessionId(@NonNull BiometricContext biometricContext) { - mSessionInfo = biometricContext.getKeyguardEntrySessionInfo(); - if (mSessionInfo != null) { - mAidlContext.id = mSessionInfo.getId(); - mAidlContext.reason = OperationReason.KEYGUARD; - return; - } - - mSessionInfo = biometricContext.getBiometricPromptSessionInfo(); - if (mSessionInfo != null) { - mAidlContext.id = mSessionInfo.getId(); - mAidlContext.reason = OperationReason.BIOMETRIC_PROMPT; - return; + if (mIsBP) { + mSessionInfo = biometricContext.getBiometricPromptSessionInfo(); + if (mSessionInfo != null) { + mAidlContext.id = mSessionInfo.getId(); + mAidlContext.reason = OperationReason.BIOMETRIC_PROMPT; + return; + } + } else { + mSessionInfo = biometricContext.getKeyguardEntrySessionInfo(); + if (mSessionInfo != null) { + mAidlContext.id = mSessionInfo.getId(); + mAidlContext.reason = OperationReason.KEYGUARD; + return; + } } // no session diff --git a/services/core/java/com/android/server/biometrics/sensors/AuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/AuthenticationClient.java index 7b9fc36e8d61..05ca6e4554fb 100644 --- a/services/core/java/com/android/server/biometrics/sensors/AuthenticationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/AuthenticationClient.java @@ -133,10 +133,6 @@ public abstract class AuthenticationClient<T, O extends AuthenticateOptions> binderDiedInternal(clearListener); } - public boolean isBiometricPrompt() { - return getCookie() != 0; - } - public long getOperationId() { return mOperationId; } diff --git a/services/core/java/com/android/server/biometrics/sensors/HalClientMonitor.java b/services/core/java/com/android/server/biometrics/sensors/HalClientMonitor.java index d0a4807d937e..03658ce21fc2 100644 --- a/services/core/java/com/android/server/biometrics/sensors/HalClientMonitor.java +++ b/services/core/java/com/android/server/biometrics/sensors/HalClientMonitor.java @@ -37,7 +37,7 @@ public abstract class HalClientMonitor<T> extends BaseClientMonitor { protected final Supplier<T> mLazyDaemon; @NonNull - private final OperationContextExt mOperationContext = new OperationContextExt(); + private final OperationContextExt mOperationContext; /** * @param context system_server context @@ -58,6 +58,7 @@ public abstract class HalClientMonitor<T> extends BaseClientMonitor { super(context, token, listener, userId, owner, cookie, sensorId, biometricLogger, biometricContext); mLazyDaemon = lazyDaemon; + mOperationContext = new OperationContextExt(isBiometricPrompt()); } @Nullable @@ -85,6 +86,10 @@ public abstract class HalClientMonitor<T> extends BaseClientMonitor { unsubscribeBiometricContext(); } + public boolean isBiometricPrompt() { + return getCookie() != 0; + } + protected OperationContextExt getOperationContext() { return getBiometricContext().updateContext(mOperationContext, isCryptoOperation()); } 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 07c6182569b2..fb3a5f64d808 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 @@ -80,7 +80,7 @@ public class BiometricContextProviderTest { @Mock private WindowManager mWindowManager; - private OperationContextExt mOpContext = new OperationContextExt(); + private OperationContextExt mOpContext = new OperationContextExt(true); private IBiometricContextListener mListener; private BiometricContextProvider mProvider; @@ -316,17 +316,33 @@ public class BiometricContextProviderTest { assertThat(aidlContext.isAod).isEqualTo(false); assertThat(aidlContext.isCrypto).isEqualTo(false); + context = mProvider.updateContext(mOpContext, false /* crypto */); + aidlContext = context.toAidlContext(); + assertThat(context).isSameInstanceAs(mOpContext); + assertThat(aidlContext.id).isEqualTo(0); + assertThat(aidlContext.reason).isEqualTo(OperationReason.UNKNOWN); + assertThat(aidlContext.isAod).isEqualTo(false); + assertThat(aidlContext.isCrypto).isEqualTo(false); + } + + @Test + public void testUpdateAllSessionTypes() throws RemoteException { + OperationContextExt context = mProvider.updateContext(mOpContext, false /* crypto */); + OperationContext aidlContext = context.toAidlContext(); + for (int type : List.of(StatusBarManager.SESSION_BIOMETRIC_PROMPT, StatusBarManager.SESSION_KEYGUARD)) { final int id = 40 + type; final boolean aod = (type & 1) == 0; + OperationContextExt opContext = + new OperationContextExt(type == StatusBarManager.SESSION_BIOMETRIC_PROMPT); mListener.onDisplayStateChanged(aod ? AuthenticateOptions.DISPLAY_STATE_AOD : AuthenticateOptions.DISPLAY_STATE_LOCKSCREEN); mSessionListener.onSessionStarted(type, InstanceId.fakeInstanceId(id)); - context = mProvider.updateContext(mOpContext, false /* crypto */); + context = mProvider.updateContext(opContext, false /* crypto */); aidlContext = context.toAidlContext(); - assertThat(context).isSameInstanceAs(mOpContext); + assertThat(context).isSameInstanceAs(opContext); assertThat(aidlContext.id).isEqualTo(id); assertThat(aidlContext.reason).isEqualTo(reason(type)); assertThat(aidlContext.isAod).isEqualTo(aod); @@ -334,14 +350,6 @@ public class BiometricContextProviderTest { mSessionListener.onSessionEnded(type, InstanceId.fakeInstanceId(id)); } - - context = mProvider.updateContext(mOpContext, false /* crypto */); - aidlContext = context.toAidlContext(); - assertThat(context).isSameInstanceAs(mOpContext); - assertThat(aidlContext.id).isEqualTo(0); - assertThat(aidlContext.reason).isEqualTo(OperationReason.UNKNOWN); - assertThat(aidlContext.isAod).isEqualTo(false); - assertThat(aidlContext.isCrypto).isEqualTo(false); } private static byte reason(int type) { diff --git a/services/tests/servicestests/src/com/android/server/biometrics/log/BiometricFrameworkStatsLoggerTest.java b/services/tests/servicestests/src/com/android/server/biometrics/log/BiometricFrameworkStatsLoggerTest.java index 5adf391a1c32..5cff48dc3c2a 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/log/BiometricFrameworkStatsLoggerTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/log/BiometricFrameworkStatsLoggerTest.java @@ -34,7 +34,7 @@ public class BiometricFrameworkStatsLoggerTest { @Test public void testConvertsWakeReason_whenEmpty() { - final OperationContextExt ctx = new OperationContextExt(); + final OperationContextExt ctx = new OperationContextExt(false); final int reason = BiometricFrameworkStatsLogger.toProtoWakeReason(ctx); final int[] reasonDetails = BiometricFrameworkStatsLogger @@ -48,11 +48,11 @@ public class BiometricFrameworkStatsLoggerTest { public void testConvertsWakeReason_whenPowerReason() { final OperationContext context = new OperationContext(); context.wakeReason = WakeReason.WAKE_MOTION; - final OperationContextExt ctx = new OperationContextExt(context); + final OperationContextExt ctx = new OperationContextExt(context, false); final int reason = BiometricFrameworkStatsLogger.toProtoWakeReason(ctx); final int[] reasonDetails = BiometricFrameworkStatsLogger - .toProtoWakeReasonDetails(new OperationContextExt(context)); + .toProtoWakeReasonDetails(new OperationContextExt(context, false)); assertThat(reason).isEqualTo(BiometricsProtoEnums.WAKE_REASON_WAKE_MOTION); assertThat(reasonDetails).isEmpty(); @@ -63,7 +63,7 @@ public class BiometricFrameworkStatsLoggerTest { final OperationContext context = new OperationContext(); context.authenticateReason = AuthenticateReason.faceAuthenticateReason( AuthenticateReason.Face.ASSISTANT_VISIBLE); - final OperationContextExt ctx = new OperationContextExt(context); + final OperationContextExt ctx = new OperationContextExt(context, false); final int reason = BiometricFrameworkStatsLogger.toProtoWakeReason(ctx); final int[] reasonDetails = BiometricFrameworkStatsLogger @@ -79,7 +79,7 @@ public class BiometricFrameworkStatsLoggerTest { final OperationContext context = new OperationContext(); context.authenticateReason = AuthenticateReason.vendorAuthenticateReason( new AuthenticateReason.Vendor()); - final OperationContextExt ctx = new OperationContextExt(context); + final OperationContextExt ctx = new OperationContextExt(context, false); final int reason = BiometricFrameworkStatsLogger.toProtoWakeReason(ctx); final int[] reasonDetails = BiometricFrameworkStatsLogger @@ -96,7 +96,7 @@ public class BiometricFrameworkStatsLoggerTest { context.wakeReason = WakeReason.WAKE_KEY; context.authenticateReason = AuthenticateReason.faceAuthenticateReason( AuthenticateReason.Face.PRIMARY_BOUNCER_SHOWN); - final OperationContextExt ctx = new OperationContextExt(context); + final OperationContextExt ctx = new OperationContextExt(context, false); final int reason = BiometricFrameworkStatsLogger.toProtoWakeReason(ctx); final int[] reasonDetails = BiometricFrameworkStatsLogger @@ -113,7 +113,7 @@ public class BiometricFrameworkStatsLoggerTest { context.wakeReason = WakeReason.LID; context.authenticateReason = AuthenticateReason.vendorAuthenticateReason( new AuthenticateReason.Vendor()); - final OperationContextExt ctx = new OperationContextExt(context); + final OperationContextExt ctx = new OperationContextExt(context, false); final int reason = BiometricFrameworkStatsLogger.toProtoWakeReason(ctx); final int[] reasonDetails = BiometricFrameworkStatsLogger diff --git a/services/tests/servicestests/src/com/android/server/biometrics/log/BiometricLoggerTest.java b/services/tests/servicestests/src/com/android/server/biometrics/log/BiometricLoggerTest.java index 81dcf4838b07..612f717226a2 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/log/BiometricLoggerTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/log/BiometricLoggerTest.java @@ -74,7 +74,7 @@ public class BiometricLoggerTest { @Before public void setUp() { - mOpContext = new OperationContextExt(); + mOpContext = new OperationContextExt(false); mContext.addMockSystemService(SensorManager.class, mSensorManager); when(mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT)).thenReturn( new Sensor(new InputSensorInfo("", "", 0, 0, Sensor.TYPE_LIGHT, 0, 0, 0, 0, 0, 0, diff --git a/services/tests/servicestests/src/com/android/server/biometrics/log/OperationContextExtTest.java b/services/tests/servicestests/src/com/android/server/biometrics/log/OperationContextExtTest.java index c652b74f5848..5cf59602a43b 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/log/OperationContextExtTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/log/OperationContextExtTest.java @@ -53,12 +53,12 @@ public class OperationContextExtTest { @Test public void hasAidlContext() { - OperationContextExt context = new OperationContextExt(); + OperationContextExt context = new OperationContextExt(false); assertThat(context.toAidlContext()).isNotNull(); final OperationContext aidlContext = newAidlContext(); - context = new OperationContextExt(aidlContext); + context = new OperationContextExt(aidlContext, false); assertThat(context.toAidlContext()).isSameInstanceAs(aidlContext); final int id = 5; @@ -79,7 +79,7 @@ public class OperationContextExtTest { @Test public void hasNoOrderWithoutSession() { - OperationContextExt context = new OperationContextExt(); + OperationContextExt context = new OperationContextExt(false); assertThat(context.getOrderAndIncrement()).isEqualTo(-1); assertThat(context.getOrderAndIncrement()).isEqualTo(-1); } @@ -96,7 +96,7 @@ public class OperationContextExtTest { ); for (Map.Entry<Integer, Integer> entry : map.entrySet()) { - final OperationContextExt context = new OperationContextExt(newAidlContext()); + final OperationContextExt context = new OperationContextExt(newAidlContext(), true); when(mBiometricContext.getDisplayState()).thenReturn(entry.getKey()); assertThat(context.update(mBiometricContext).getDisplayState()) .isEqualTo(entry.getValue()); @@ -136,7 +136,8 @@ public class OperationContextExtTest { when(mBiometricContext.isDisplayOn()).thenReturn(true); when(mBiometricContext.getDisplayState()).thenReturn(displayState); - final OperationContextExt context = new OperationContextExt(newAidlContext()); + final OperationContextExt context = new OperationContextExt(newAidlContext(), + sessionType == OperationReason.BIOMETRIC_PROMPT); assertThat(context.update(mBiometricContext)).isSameInstanceAs(context); |