Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit acdde95a authored by Jeff Pu's avatar Jeff Pu Committed by Android (Google) Code Review
Browse files

Merge "Associate the session type in operation context with the client" into udc-dev

parents 682209e2 45106a4b
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -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,
+20 −16
Original line number Diff line number Diff line
@@ -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,19 +270,21 @@ public class OperationContextExt {
    }

    private void setFirstSessionId(@NonNull BiometricContext biometricContext) {
        mSessionInfo = biometricContext.getKeyguardEntrySessionInfo();
        if (mIsBP) {
            mSessionInfo = biometricContext.getBiometricPromptSessionInfo();
            if (mSessionInfo != null) {
                mAidlContext.id = mSessionInfo.getId();
            mAidlContext.reason = OperationReason.KEYGUARD;
                mAidlContext.reason = OperationReason.BIOMETRIC_PROMPT;
                return;
            }

        mSessionInfo = biometricContext.getBiometricPromptSessionInfo();
        } else {
            mSessionInfo = biometricContext.getKeyguardEntrySessionInfo();
            if (mSessionInfo != null) {
                mAidlContext.id = mSessionInfo.getId();
            mAidlContext.reason = OperationReason.BIOMETRIC_PROMPT;
                mAidlContext.reason = OperationReason.KEYGUARD;
                return;
            }
        }

        // no session
        mAidlContext.id = 0;
+0 −4
Original line number Diff line number Diff line
@@ -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;
    }
+6 −1
Original line number Diff line number Diff line
@@ -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());
    }
+19 −11
Original line number Diff line number Diff line
@@ -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) {
Loading