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

Commit 69317f81 authored by Joe Bolinger's avatar Joe Bolinger Committed by Android (Google) Code Review
Browse files

Merge changes I653cc165,Icd0be731

* changes:
  Use new context HAL methods for all biometric operations.
  Remove useless type.
parents b2c2e8fd 40c2f1a3
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@ import android.os.VibrationEffect;
import android.os.Vibrator;
import android.util.Slog;

import java.util.function.Supplier;

/**
 * Abstract {@link HalClientMonitor} subclass that operations eligible/interested in acquisition
 * messages should extend.
@@ -52,12 +54,7 @@ public abstract class AcquisitionClient<T> extends HalClientMonitor<T> implement
    private boolean mShouldSendErrorToClient = true;
    private boolean mAlreadyCancelled;

    /**
     * Stops the HAL operation specific to the ClientMonitor subclass.
     */
    protected abstract void stopHalOperation();

    public AcquisitionClient(@NonNull Context context, @NonNull LazyDaemon<T> lazyDaemon,
    public AcquisitionClient(@NonNull Context context, @NonNull Supplier<T> lazyDaemon,
            @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId,
            @NonNull String owner, int cookie, int sensorId, boolean shouldVibrate,
            int statsModality, int statsAction, int statsClient) {
@@ -67,6 +64,11 @@ public abstract class AcquisitionClient<T> extends HalClientMonitor<T> implement
        mShouldVibrate = shouldVibrate;
    }

    /**
     * Stops the HAL operation specific to the ClientMonitor subclass.
     */
    protected abstract void stopHalOperation();

    @Override
    public void unableToStart() {
        try {
+18 −17
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import com.android.server.biometrics.Utils;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;

/**
 * A class to keep track of the authentication state for a given client.
@@ -89,23 +90,7 @@ public abstract class AuthenticationClient<T> extends AcquisitionClient<T>
    //  the state. We should think of a way to improve this in the future.
    protected @State int mState = STATE_NEW;

    /**
     * Handles lifecycle, e.g. {@link BiometricScheduler},
     * {@link ClientMonitorCallback} after authentication
     * results are known. Note that this happens asynchronously from (but shortly after)
     * {@link #onAuthenticated(BiometricAuthenticator.Identifier, boolean, ArrayList)} and allows
     * {@link CoexCoordinator} a chance to invoke/delay this event.
     * @param authenticated
     */
    protected abstract void handleLifecycleAfterAuth(boolean authenticated);

    /**
     * @return true if a user was detected (i.e. face was found, fingerprint sensor was touched.
     *         etc)
     */
    public abstract boolean wasUserDetected();

    public AuthenticationClient(@NonNull Context context, @NonNull LazyDaemon<T> lazyDaemon,
    public AuthenticationClient(@NonNull Context context, @NonNull Supplier<T> lazyDaemon,
            @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener,
            int targetUserId, long operationId, boolean restricted, @NonNull String owner,
            int cookie, boolean requireConfirmation, int sensorId, boolean isStrongBiometric,
@@ -474,6 +459,22 @@ public abstract class AuthenticationClient<T> extends AcquisitionClient<T>
        }
    }

    /**
     * Handles lifecycle, e.g. {@link BiometricScheduler},
     * {@link com.android.server.biometrics.sensors.BaseClientMonitor.Callback} after authentication
     * results are known. Note that this happens asynchronously from (but shortly after)
     * {@link #onAuthenticated(BiometricAuthenticator.Identifier, boolean, ArrayList)} and allows
     * {@link CoexCoordinator} a chance to invoke/delay this event.
     * @param authenticated
     */
    protected abstract void handleLifecycleAfterAuth(boolean authenticated);

    /**
     * @return true if a user was detected (i.e. face was found, fingerprint sensor was touched.
     *         etc)
     */
    public abstract boolean wasUserDetected();

    public @State int getState() {
        return mState;
    }
+2 −1
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.util.Slog;
import com.android.server.biometrics.BiometricsProto;

import java.util.Arrays;
import java.util.function.Supplier;

/**
 * A class to keep track of the enrollment state for a given client.
@@ -49,7 +50,7 @@ public abstract class EnrollClient<T> extends AcquisitionClient<T> implements En
     */
    protected abstract boolean hasReachedEnrollmentLimit();

    public EnrollClient(@NonNull Context context, @NonNull LazyDaemon<T> lazyDaemon,
    public EnrollClient(@NonNull Context context, @NonNull Supplier<T> lazyDaemon,
            @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId,
            @NonNull byte[] hardwareAuthToken, @NonNull String owner, @NonNull BiometricUtils utils,
            int timeoutSec, int statsModality, int sensorId, boolean shouldVibrate) {
+3 −1
Original line number Diff line number Diff line
@@ -25,11 +25,13 @@ import android.util.Slog;

import com.android.server.biometrics.BiometricsProto;

import java.util.function.Supplier;

public abstract class GenerateChallengeClient<T> extends HalClientMonitor<T> {

    private static final String TAG = "GenerateChallengeClient";

    public GenerateChallengeClient(@NonNull Context context, @NonNull LazyDaemon<T> lazyDaemon,
    public GenerateChallengeClient(@NonNull Context context, @NonNull Supplier<T> lazyDaemon,
            @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener,
            int userId, @NonNull String owner, int sensorId) {
        super(context, lazyDaemon, token, listener, userId, owner, 0 /* cookie */, sensorId,
+18 −25
Original line number Diff line number Diff line
@@ -22,35 +22,16 @@ import android.content.Context;
import android.hardware.biometrics.BiometricsProtoEnums;
import android.os.IBinder;

import java.util.function.Supplier;

/**
 * Abstract {@link BaseClientMonitor} implementation that supports HAL operations.
 * @param <T> HAL template
 */
public abstract class HalClientMonitor<T> extends BaseClientMonitor {
    /**
     * Interface that allows ClientMonitor subclasses to retrieve a fresh instance to the HAL.
     */
    public interface LazyDaemon<T> {
        /**
         * @return A fresh instance to the biometric HAL
         */
        T getDaemon();
    }

    /**
     * Starts the HAL operation specific to the ClientMonitor subclass.
     */
    protected abstract void startHalOperation();

    /**
     * Invoked if the scheduler is unable to start the ClientMonitor (for example the HAL is null).
     * If such a problem is detected, the scheduler will not invoke
     * {@link #start(ClientMonitorCallback)}.
     */
    public abstract void unableToStart();
    
    @NonNull
    protected final LazyDaemon<T> mLazyDaemon;
    protected final Supplier<T> mLazyDaemon;

    /**
     * @param context    system_server context
@@ -65,7 +46,7 @@ public abstract class HalClientMonitor<T> extends BaseClientMonitor {
     * @param statsAction   One of {@link BiometricsProtoEnums} ACTION_* constants
     * @param statsClient   One of {@link BiometricsProtoEnums} CLIENT_* constants
     */
    public HalClientMonitor(@NonNull Context context, @NonNull LazyDaemon<T> lazyDaemon,
    public HalClientMonitor(@NonNull Context context, @NonNull Supplier<T> lazyDaemon,
            @Nullable IBinder token, @Nullable ClientMonitorCallbackConverter listener, int userId,
            @NonNull String owner, int cookie, int sensorId, int statsModality, int statsAction,
            int statsClient) {
@@ -76,6 +57,18 @@ public abstract class HalClientMonitor<T> extends BaseClientMonitor {

    @Nullable
    public T getFreshDaemon() {
        return mLazyDaemon.getDaemon();
        return mLazyDaemon.get();
    }

    /**
     * Starts the HAL operation specific to the ClientMonitor subclass.
     */
    protected abstract void startHalOperation();

    /**
     * Invoked if the scheduler is unable to start the ClientMonitor (for example the HAL is null).
     * If such a problem is detected, the scheduler will not invoke
     * {@link #start(ClientMonitorCallback)}.
     */
    public abstract void unableToStart();
}
Loading