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

Commit 9eae1727 authored by Ilya Matyukhin's avatar Ilya Matyukhin
Browse files

Update face for the new enrollment API

Bug: 174619156
Test: atest CtsBiometricsTestCases
Change-Id: I8098cdbefaafeabee8cf4bb940ecf7f574137833
parent 71a2c83a
Loading
Loading
Loading
Loading
+14 −3
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@ import static android.Manifest.permission.TEST_BIOMETRIC;
import android.annotation.NonNull;
import android.content.Context;
import android.hardware.biometrics.ITestSession;
import android.hardware.biometrics.face.AuthenticationFrame;
import android.hardware.biometrics.face.BaseFrame;
import android.hardware.face.Face;
import android.hardware.face.IFaceServiceReceiver;
import android.os.Binder;
@@ -180,12 +182,21 @@ public class BiometricTestSessionImpl extends ITestSession.Stub {
        mSensor.getSessionForUser(userId).mHalSessionCallback.onAuthenticationFailed();
    }

    // TODO(b/174619156): replace with notifyAuthenticationFrame and notifyEnrollmentFrame.
    @Override
    public void notifyAcquired(int userId, int acquireInfo) {
        Utils.checkPermission(mContext, TEST_BIOMETRIC);

        mSensor.getSessionForUser(userId).mHalSessionCallback
                .onAcquired((byte) acquireInfo, 0 /* vendorCode */);
        BaseFrame data = new BaseFrame();
        data.acquiredInfo = (byte) acquireInfo;

        AuthenticationFrame authenticationFrame = new AuthenticationFrame();
        authenticationFrame.data = data;

        // TODO(b/174619156): Currently onAuthenticationFrame and onEnrollmentFrame are the same.
        // This will need to call the correct callback once the onAcquired callback is removed.
        mSensor.getSessionForUser(userId).mHalSessionCallback.onAuthenticationFrame(
                authenticationFrame);
    }

    @Override
+3 −1
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.content.Context;
import android.hardware.biometrics.BiometricFaceConstants;
import android.hardware.biometrics.BiometricsProtoEnums;
import android.hardware.biometrics.common.ICancellationSignal;
import android.hardware.biometrics.face.EnrollmentType;
import android.hardware.biometrics.face.IFace;
import android.hardware.biometrics.face.ISession;
import android.hardware.face.Face;
@@ -114,7 +115,8 @@ public class FaceEnrollClient extends EnrollClient<ISession> {

        try {
            // TODO(b/172593978): Pass features.
            mCancellationSignal = getFreshDaemon().enroll(mSequentialId,
            // TODO(b/174619156): Handle accessibility enrollment.
            mCancellationSignal = getFreshDaemon().enroll(mSequentialId, EnrollmentType.DEFAULT,
                    HardwareAuthTokenUtils.toHardwareAuthToken(mHardwareAuthToken),
                    mPreviewSurface);
        } catch (RemoteException e) {
+21 −2
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ import android.content.Context;
import android.content.pm.UserInfo;
import android.hardware.biometrics.BiometricsProtoEnums;
import android.hardware.biometrics.ITestSession;
import android.hardware.biometrics.face.AuthenticationFrame;
import android.hardware.biometrics.face.EnrollmentFrame;
import android.hardware.biometrics.face.Error;
import android.hardware.biometrics.face.IFace;
import android.hardware.biometrics.face.ISession;
@@ -167,7 +169,8 @@ public class Sensor implements IBinder.DeathRecipient {
        }

        @Override
        public void onAcquired(byte info, int vendorCode) {
        public void onAuthenticationFrame(AuthenticationFrame frame) {
            // TODO(b/174619156): propagate the frame to an AuthenticationClient
            mHandler.post(() -> {
                final BaseClientMonitor client = mScheduler.getCurrentClient();
                if (!(client instanceof AcquisitionClient)) {
@@ -177,7 +180,23 @@ public class Sensor implements IBinder.DeathRecipient {
                }

                final AcquisitionClient<?> acquisitionClient = (AcquisitionClient<?>) client;
                acquisitionClient.onAcquired(info, vendorCode);
                acquisitionClient.onAcquired(frame.data.acquiredInfo, frame.data.vendorCode);
            });
        }

        @Override
        public void onEnrollmentFrame(EnrollmentFrame frame) {
            // TODO(b/174619156): propagate the frame to an EnrollmentClient
            mHandler.post(() -> {
                final BaseClientMonitor client = mScheduler.getCurrentClient();
                if (!(client instanceof AcquisitionClient)) {
                    Slog.e(mTag, "onAcquired for non-acquisition client: "
                            + Utils.getClientName(client));
                    return;
                }

                final AcquisitionClient<?> acquisitionClient = (AcquisitionClient<?>) client;
                acquisitionClient.onAcquired(frame.data.acquiredInfo, frame.data.vendorCode);
            });
        }

+2 −2
Original line number Diff line number Diff line
@@ -49,8 +49,8 @@ public class TestHal extends IFace.Stub {
            }

            @Override
            public ICancellationSignal enroll(int cookie, HardwareAuthToken hat,
                    NativeHandle previewSurface) {
            public ICancellationSignal enroll(int cookie, byte enrollmentType,
                    HardwareAuthToken hat, NativeHandle previewSurface) {
                return null;
            }

+1 −1
Original line number Diff line number Diff line
@@ -50,7 +50,7 @@ public class TestSession extends ISession.Stub {
    }

    @Override
    public ICancellationSignal enroll(int cookie, HardwareAuthToken hat,
    public ICancellationSignal enroll(int cookie, byte enrollmentType, HardwareAuthToken hat,
            NativeHandle previewSurface) {
        return null;
    }