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

Commit 671a2425 authored by Kevin Chyn's avatar Kevin Chyn Committed by Android (Google) Code Review
Browse files

Merge "5/n: Add invalidation plumbing in fingerprint/face providers"

parents 6d4c6ec2 f3004223
Loading
Loading
Loading
Loading
+15 −5
Original line number Diff line number Diff line
@@ -20,6 +20,9 @@ import android.annotation.NonNull;
import android.content.Context;
import android.hardware.biometrics.BiometricAuthenticator;
import android.hardware.biometrics.BiometricsProtoEnums;
import android.hardware.biometrics.IInvalidationCallback;
import android.os.RemoteException;
import android.util.Slog;

import java.util.Map;

@@ -30,22 +33,29 @@ import java.util.Map;
public abstract class InvalidationClient<S extends BiometricAuthenticator.Identifier, T>
        extends ClientMonitor<T> {

    private final BiometricUtils<S> mUtils;
    private final Map<Integer, Long> mAuthenticatorIds;
    private static final String TAG = "InvalidationClient";

    @NonNull private final Map<Integer, Long> mAuthenticatorIds;
    @NonNull private final IInvalidationCallback mInvalidationCallback;

    public InvalidationClient(@NonNull Context context, @NonNull LazyDaemon<T> lazyDaemon,
            int userId, int sensorId, @NonNull BiometricUtils<S> utils,
            @NonNull Map<Integer, Long> authenticatorIds) {
            int userId, int sensorId, @NonNull Map<Integer, Long> authenticatorIds,
            @NonNull IInvalidationCallback callback) {
        super(context, lazyDaemon, null /* token */, null /* listener */, userId,
                context.getOpPackageName(), 0 /* cookie */, sensorId,
                BiometricsProtoEnums.MODALITY_UNKNOWN, BiometricsProtoEnums.ACTION_UNKNOWN,
                BiometricsProtoEnums.CLIENT_UNKNOWN);
        mUtils = utils;
        mAuthenticatorIds = authenticatorIds;
        mInvalidationCallback = callback;
    }

    public void onAuthenticatorIdInvalidated(long newAuthenticatorId) {
        mAuthenticatorIds.put(getTargetUserId(), newAuthenticatorId);
        try {
            mInvalidationCallback.onCompleted();
        } catch (RemoteException e) {
            Slog.e(TAG, "Remote exception", e);
        }
        mCallback.onClientFinished(this, true /* success */);
    }

+3 −3
Original line number Diff line number Diff line
@@ -18,13 +18,13 @@ package com.android.server.biometrics.sensors.face.aidl;

import android.annotation.NonNull;
import android.content.Context;
import android.hardware.biometrics.IInvalidationCallback;
import android.hardware.biometrics.face.ISession;
import android.hardware.face.Face;
import android.os.RemoteException;
import android.util.Slog;

import com.android.server.biometrics.sensors.InvalidationClient;
import com.android.server.biometrics.sensors.face.FaceUtils;

import java.util.Map;

@@ -33,8 +33,8 @@ public class FaceInvalidationClient extends InvalidationClient<Face, ISession> {

    public FaceInvalidationClient(@NonNull Context context,
            @NonNull LazyDaemon<ISession> lazyDaemon, int userId, int sensorId,
            @NonNull FaceUtils utils, @NonNull Map<Integer, Long> authenticatorIds) {
        super(context, lazyDaemon, userId, sensorId, utils, authenticatorIds);
            @NonNull Map<Integer, Long> authenticatorIds, @NonNull IInvalidationCallback callback) {
        super(context, lazyDaemon, userId, sensorId, authenticatorIds, callback);
    }

    @Override
+27 −1
Original line number Diff line number Diff line
@@ -20,10 +20,10 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.ActivityTaskManager;
import android.app.IActivityTaskManager;
import android.app.TaskStackListener;
import android.content.Context;
import android.content.pm.UserInfo;
import android.hardware.biometrics.IInvalidationCallback;
import android.hardware.biometrics.ITestSession;
import android.hardware.biometrics.face.IFace;
import android.hardware.biometrics.face.SensorProps;
@@ -268,6 +268,32 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
        return FaceUtils.getInstance(sensorId).getBiometricsForUser(mContext, userId);
    }

    @Override
    public void scheduleInvalidateAuthenticatorId(int sensorId, int userId,
            @NonNull IInvalidationCallback callback) {
        mHandler.post(() -> {
            final IFace daemon = getHalInstance();
            if (daemon == null) {
                Slog.e(getTag(), "Null daemon during scheduleInvalidateAuthenticatorId: "
                        + sensorId);
                return;
            }

            try {
                if (!mSensors.get(sensorId).hasSessionForUser(userId)) {
                    createNewSessionWithoutHandler(daemon, sensorId, userId);
                }

                final FaceInvalidationClient client = new FaceInvalidationClient(mContext,
                        mSensors.get(sensorId).getLazySession(), userId, sensorId,
                        mSensors.get(sensorId).getAuthenticatorIds(), callback);
                mSensors.get(sensorId).getScheduler().scheduleClientMonitor(client);
            } catch (RemoteException e) {
                Slog.e(getTag(), "Remote exception", e);
            }
        });
    }

    @Override
    public int getLockoutModeForUser(int sensorId, int userId) {
        return mSensors.get(sensorId).getLockoutCache().getLockoutModeForUser(userId);
+11 −1
Original line number Diff line number Diff line
@@ -376,7 +376,17 @@ public class Sensor implements IBinder.DeathRecipient {

        @Override
        public void onAuthenticatorIdInvalidated(long newAuthenticatorId) {
            // TODO(b/159667191)
            mHandler.post(() -> {
                final ClientMonitor<?> client = mScheduler.getCurrentClient();
                if (!(client instanceof FaceInvalidationClient)) {
                    Slog.e(mTag, "onAuthenticatorIdInvalidated for wrong consumer: "
                            + Utils.getClientName(client));
                    return;
                }

                final FaceInvalidationClient invalidationClient = (FaceInvalidationClient) client;
                invalidationClient.onAuthenticatorIdInvalidated(newAuthenticatorId);
            });
        }

    }
+3 −3
Original line number Diff line number Diff line
@@ -18,13 +18,13 @@ package com.android.server.biometrics.sensors.fingerprint.aidl;

import android.annotation.NonNull;
import android.content.Context;
import android.hardware.biometrics.IInvalidationCallback;
import android.hardware.biometrics.fingerprint.ISession;
import android.hardware.fingerprint.Fingerprint;
import android.os.RemoteException;
import android.util.Slog;

import com.android.server.biometrics.sensors.InvalidationClient;
import com.android.server.biometrics.sensors.fingerprint.FingerprintUtils;

import java.util.Map;

@@ -33,8 +33,8 @@ public class FingerprintInvalidationClient extends InvalidationClient<Fingerprin

    public FingerprintInvalidationClient(@NonNull Context context,
            @NonNull LazyDaemon<ISession> lazyDaemon, int userId, int sensorId,
            @NonNull FingerprintUtils utils, @NonNull Map<Integer, Long> authenticatorIds) {
        super(context, lazyDaemon, userId, sensorId, utils, authenticatorIds);
            @NonNull Map<Integer, Long> authenticatorIds, @NonNull IInvalidationCallback callback) {
        super(context, lazyDaemon, userId, sensorId, authenticatorIds, callback);
    }

    @Override
Loading