Associate the session type in operation context with the client
Bug: 276271514 Test: atest android.server.biometrics.cts.BiometricsAtomsTests#testAuthenticateAtom -c Change-Id: Ic85a279e437f5a0c553e658296e0745190d8202e
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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,25 +316,6 @@ public class BiometricContextProviderTest {
|
||||
assertThat(aidlContext.isAod).isEqualTo(false);
|
||||
assertThat(aidlContext.isCrypto).isEqualTo(false);
|
||||
|
||||
for (int type : List.of(StatusBarManager.SESSION_BIOMETRIC_PROMPT,
|
||||
StatusBarManager.SESSION_KEYGUARD)) {
|
||||
final int id = 40 + type;
|
||||
final boolean aod = (type & 1) == 0;
|
||||
|
||||
mListener.onDisplayStateChanged(aod ? AuthenticateOptions.DISPLAY_STATE_AOD
|
||||
: AuthenticateOptions.DISPLAY_STATE_LOCKSCREEN);
|
||||
mSessionListener.onSessionStarted(type, InstanceId.fakeInstanceId(id));
|
||||
context = mProvider.updateContext(mOpContext, false /* crypto */);
|
||||
aidlContext = context.toAidlContext();
|
||||
assertThat(context).isSameInstanceAs(mOpContext);
|
||||
assertThat(aidlContext.id).isEqualTo(id);
|
||||
assertThat(aidlContext.reason).isEqualTo(reason(type));
|
||||
assertThat(aidlContext.isAod).isEqualTo(aod);
|
||||
assertThat(aidlContext.isCrypto).isEqualTo(false);
|
||||
|
||||
mSessionListener.onSessionEnded(type, InstanceId.fakeInstanceId(id));
|
||||
}
|
||||
|
||||
context = mProvider.updateContext(mOpContext, false /* crypto */);
|
||||
aidlContext = context.toAidlContext();
|
||||
assertThat(context).isSameInstanceAs(mOpContext);
|
||||
@@ -344,6 +325,33 @@ public class BiometricContextProviderTest {
|
||||
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(opContext, false /* crypto */);
|
||||
aidlContext = context.toAidlContext();
|
||||
assertThat(context).isSameInstanceAs(opContext);
|
||||
assertThat(aidlContext.id).isEqualTo(id);
|
||||
assertThat(aidlContext.reason).isEqualTo(reason(type));
|
||||
assertThat(aidlContext.isAod).isEqualTo(aod);
|
||||
assertThat(aidlContext.isCrypto).isEqualTo(false);
|
||||
|
||||
mSessionListener.onSessionEnded(type, InstanceId.fakeInstanceId(id));
|
||||
}
|
||||
}
|
||||
|
||||
private static byte reason(int type) {
|
||||
if (type == StatusBarManager.SESSION_BIOMETRIC_PROMPT) {
|
||||
return OperationReason.BIOMETRIC_PROMPT;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user