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

Commit b95f1529 authored by Kevin Chyn's avatar Kevin Chyn
Browse files

Update framework together with IBiometricsFace.hal

Bug: 123262389

Test: Builds
Change-Id: I7d6f874e93180cb41f30cf02dd7f47c57dd6bb92
parent af597830
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -286,14 +286,15 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan
     * @hide
     * @hide
     */
     */
    @RequiresPermission(MANAGE_BIOMETRIC)
    @RequiresPermission(MANAGE_BIOMETRIC)
    public void setFeature(int feature, boolean enabled, byte[] token) {
    public boolean setFeature(int feature, boolean enabled, byte[] token) {
        if (mService != null) {
        if (mService != null) {
            try {
            try {
                mService.setFeature(feature, enabled, token);
                return mService.setFeature(feature, enabled, token);
            } catch (RemoteException e) {
            } catch (RemoteException e) {
                throw e.rethrowFromSystemServer();
                throw e.rethrowFromSystemServer();
            }
            }
        }
        }
        return false;
    }
    }


    /**
    /**
+1 −1
Original line number Original line Diff line number Diff line
@@ -98,7 +98,7 @@ interface IFaceService {
    // Enumerate all faces
    // Enumerate all faces
    void enumerate(IBinder token, int userId, IFaceServiceReceiver receiver);
    void enumerate(IBinder token, int userId, IFaceServiceReceiver receiver);


    int setFeature(int feature, boolean enabled, in byte [] token);
    boolean setFeature(int feature, boolean enabled, in byte [] token);


    boolean getFeature(int feature);
    boolean getFeature(int feature);


+50 −18
Original line number Original line Diff line number Diff line
@@ -32,6 +32,7 @@ import android.hardware.biometrics.IBiometricServiceLockoutResetCallback;
import android.hardware.biometrics.IBiometricServiceReceiverInternal;
import android.hardware.biometrics.IBiometricServiceReceiverInternal;
import android.hardware.biometrics.face.V1_0.IBiometricsFace;
import android.hardware.biometrics.face.V1_0.IBiometricsFace;
import android.hardware.biometrics.face.V1_0.IBiometricsFaceClientCallback;
import android.hardware.biometrics.face.V1_0.IBiometricsFaceClientCallback;
import android.hardware.biometrics.face.V1_0.OptionalBool;
import android.hardware.biometrics.face.V1_0.Status;
import android.hardware.biometrics.face.V1_0.Status;
import android.hardware.face.Face;
import android.hardware.face.Face;
import android.hardware.face.FaceManager;
import android.hardware.face.FaceManager;
@@ -54,7 +55,6 @@ import com.android.server.SystemServerInitThreadPool;
import com.android.server.biometrics.AuthenticationClient;
import com.android.server.biometrics.AuthenticationClient;
import com.android.server.biometrics.BiometricServiceBase;
import com.android.server.biometrics.BiometricServiceBase;
import com.android.server.biometrics.BiometricUtils;
import com.android.server.biometrics.BiometricUtils;
import com.android.server.biometrics.ClientMonitor;
import com.android.server.biometrics.EnumerateClient;
import com.android.server.biometrics.EnumerateClient;
import com.android.server.biometrics.Metrics;
import com.android.server.biometrics.Metrics;
import com.android.server.biometrics.RemovalClient;
import com.android.server.biometrics.RemovalClient;
@@ -385,38 +385,61 @@ public class FaceService extends BiometricServiceBase {
        }
        }


        @Override
        @Override
        public int setFeature(int feature, boolean enabled, final byte[] token) {
        public boolean setFeature(int feature, boolean enabled, final byte[] token) {
            checkPermission(MANAGE_BIOMETRIC);
            checkPermission(MANAGE_BIOMETRIC);


            if (!FaceService.this.hasEnrolledBiometrics(mCurrentUserId)) {
                Slog.e(TAG, "No enrolled biometrics while setting feature: " + feature);
                return false;
            }

            final ArrayList<Byte> byteToken = new ArrayList<>();
            final ArrayList<Byte> byteToken = new ArrayList<>();
            for (int i = 0; i < token.length; i++) {
            for (int i = 0; i < token.length; i++) {
                byteToken.add(token[i]);
                byteToken.add(token[i]);
            }
            }


            int result;
            // TODO: Support multiple faces
            final int faceId = getFirstTemplateForUser(mCurrentUserId);

            if (mDaemon != null) {
                try {
                try {
                result = mDaemon != null ? mDaemon.setFeature(feature, enabled, byteToken)
                    return mDaemon.setFeature(feature, enabled, byteToken, faceId) == Status.OK;
                        : Status.INTERNAL_ERROR;
                } catch (RemoteException e) {
                } catch (RemoteException e) {
                    Slog.e(getTag(), "Unable to set feature: " + feature + " to enabled:" + enabled,
                    Slog.e(getTag(), "Unable to set feature: " + feature + " to enabled:" + enabled,
                            e);
                            e);
                result = Status.INTERNAL_ERROR;
                }
                }

            }
            return result;
            return false;
        }
        }


        @Override
        @Override
        public boolean getFeature(int feature) {
        public boolean getFeature(int feature) {
            checkPermission(MANAGE_BIOMETRIC);
            checkPermission(MANAGE_BIOMETRIC);


            boolean result = true;
            // This should ideally return tri-state, but the user isn't shown settings unless
            // they are enrolled so it's fine for now.
            if (!FaceService.this.hasEnrolledBiometrics(mCurrentUserId)) {
                Slog.e(TAG, "No enrolled biometrics while getting feature: " + feature);
                return false;
            }

            // TODO: Support multiple faces
            final int faceId = getFirstTemplateForUser(mCurrentUserId);

            if (mDaemon != null) {
                try {
                try {
                result = mDaemon != null ? mDaemon.getFeature(feature) : true;
                    OptionalBool result = mDaemon.getFeature(feature, faceId);
                    if (result.status == Status.OK) {
                        return result.value;
                    } else {
                        // Same tri-state comment applies here.
                        return false;
                    }
                } catch (RemoteException e) {
                } catch (RemoteException e) {
                    Slog.e(getTag(), "Unable to getRequireAttention", e);
                    Slog.e(getTag(), "Unable to getRequireAttention", e);
                }
                }
            return result;
            }
            return false;
        }
        }


        @Override
        @Override
@@ -431,6 +454,15 @@ public class FaceService extends BiometricServiceBase {
                }
                }
            }
            }
        }
        }

        // TODO: Support multiple faces
        private int getFirstTemplateForUser(int user) {
            final List<Face> faces = FaceService.this.getEnrolledTemplates(user);
            if (!faces.isEmpty()) {
                return faces.get(0).getBiometricId();
            }
            return 0;
        }
    }
    }


    /**
    /**