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

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

10/n: Add remainder of functionality to FingerprintProvider

Also makes classes package private where applicable.

1) Caches pointer to the HAL, similar to Fingerprint21
2) Finishes remaining work on FingerprintProvider class, namely
   A) authenticatorId-related stuff
   B) FingerprintDetectClient
   C) InternalCleanup
   D) rename, getEnrolledFingerprints, binderDied, dump
3) Fixes scheduleInternalCleanup parameter ordering

Remaining work in Sensor.java (plumbing callbacks, etc) will be in
the next CL

Bug: 170497736
Test: Builds
Change-Id: I82d7ceac3282deb3e13dd1f04eb4c37e3776cdba
parent ac579f8a
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ import java.util.ArrayList;
 * Fingerprint-specific authentication client supporting the
 * {@link android.hardware.biometrics.fingerprint.IFingerprint} AIDL interface.
 */
public class FingerprintAuthenticationClient extends AuthenticationClient<ISession> implements
class FingerprintAuthenticationClient extends AuthenticationClient<ISession> implements
        Udfps, LockoutConsumer {
    private static final String TAG = "FingerprintAuthenticationClient";

@@ -51,7 +51,7 @@ public class FingerprintAuthenticationClient extends AuthenticationClient<ISessi
    @Nullable private final IUdfpsOverlayController mUdfpsOverlayController;
    @Nullable private ICancellationSignal mCancellationSignal;

    public FingerprintAuthenticationClient(@NonNull Context context,
    FingerprintAuthenticationClient(@NonNull Context context,
            @NonNull LazyDaemon<ISession> lazyDaemon, @NonNull IBinder token,
            @NonNull ClientMonitorCallbackConverter listener, int targetUserId, long operationId,
            boolean restricted, @NonNull String owner, int cookie, boolean requireConfirmation,
+81 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.server.biometrics.sensors.fingerprint.aidl;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
import android.hardware.biometrics.BiometricsProtoEnums;
import android.hardware.biometrics.common.ICancellationSignal;
import android.hardware.biometrics.fingerprint.ISession;
import android.hardware.fingerprint.IUdfpsOverlayController;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Slog;

import com.android.server.biometrics.sensors.AcquisitionClient;
import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter;
import com.android.server.biometrics.sensors.fingerprint.UdfpsHelper;

/**
 * Performs fingerprint detection without exposing any matching information (e.g. accept/reject
 * have the same haptic, lockout counter is not increased).
 */
class FingerprintDetectClient extends AcquisitionClient<ISession> {

    private static final String TAG = "FingerprintDetectClient";

    private final boolean mIsStrongBiometric;
    @Nullable private final IUdfpsOverlayController mUdfpsOverlayController;

    @Nullable private ICancellationSignal mCancellationSignal;

    FingerprintDetectClient(@NonNull Context context, @NonNull LazyDaemon<ISession> lazyDaemon,
            @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId,
            @NonNull String owner, int sensorId,
            @Nullable IUdfpsOverlayController udfpsOverlayController, boolean isStrongBiometric,
            int statsClient) {
        super(context, lazyDaemon, token, listener, userId, owner, 0 /* cookie */, sensorId,
                BiometricsProtoEnums.MODALITY_FINGERPRINT, BiometricsProtoEnums.ACTION_AUTHENTICATE,
                statsClient);
        mIsStrongBiometric = isStrongBiometric;
        mUdfpsOverlayController = udfpsOverlayController;
    }

    @Override
    protected void stopHalOperation() {
        UdfpsHelper.hideUdfpsOverlay(getSensorId(), mUdfpsOverlayController);
        try {
            mCancellationSignal.cancel();
        } catch (RemoteException e) {
            Slog.e(TAG, "Remote exception", e);
            mCallback.onClientFinished(this, false /* success */);
        }
    }

    @Override
    protected void startHalOperation() {
        UdfpsHelper.showUdfpsOverlay(getSensorId(), mUdfpsOverlayController);
        try {
            mCancellationSignal = getFreshDaemon().detectInteraction(mSequentialId);
        } catch (RemoteException e) {
            Slog.e(TAG, "Remote exception when requesting finger detect", e);
            UdfpsHelper.hideUdfpsOverlay(getSensorId(), mUdfpsOverlayController);
            mCallback.onClientFinished(this, false /* success */);
        }
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -38,7 +38,7 @@ import com.android.server.biometrics.sensors.fingerprint.FingerprintUtils;
import com.android.server.biometrics.sensors.fingerprint.Udfps;
import com.android.server.biometrics.sensors.fingerprint.UdfpsHelper;

public class FingerprintEnrollClient extends EnrollClient<ISession> implements Udfps {
class FingerprintEnrollClient extends EnrollClient<ISession> implements Udfps {

    private static final String TAG = "FingerprintEnrollClient";

@@ -46,7 +46,7 @@ public class FingerprintEnrollClient extends EnrollClient<ISession> implements U
    @Nullable private ICancellationSignal mCancellationSignal;
    private final int mMaxTemplatesPerUser;

    public FingerprintEnrollClient(@NonNull Context context,
    FingerprintEnrollClient(@NonNull Context context,
            @NonNull LazyDaemon<ISession> lazyDaemon, @NonNull IBinder token,
            @NonNull ClientMonitorCallbackConverter listener, int userId,
            @NonNull byte[] hardwareAuthToken, @NonNull String owner,
+2 −2
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ import com.android.server.biometrics.sensors.GenerateChallengeClient;
/**
 * Fingerprint-specific generateChallenge client for the {@link IFingerprint} AIDL HAL interface.
 */
public class FingerprintGenerateChallengeClient extends GenerateChallengeClient<IFingerprint> {
class FingerprintGenerateChallengeClient extends GenerateChallengeClient<IFingerprint> {
    private static final String TAG = "FingerprintGenerateChallengeClient";
    private static final int CHALLENGE_TIMEOUT_SEC = 600; // 10 minutes

@@ -50,7 +50,7 @@ public class FingerprintGenerateChallengeClient extends GenerateChallengeClient<
        }
    };

    public FingerprintGenerateChallengeClient(@NonNull Context context,
    FingerprintGenerateChallengeClient(@NonNull Context context,
            @NonNull LazyDaemon<IFingerprint> lazyDaemon,
            @NonNull IBinder token,
            @NonNull ClientMonitorCallbackConverter listener,
+53 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.server.biometrics.sensors.fingerprint.aidl;

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

import com.android.server.biometrics.sensors.ClientMonitor;

class FingerprintGetAuthenticatorIdClient extends ClientMonitor<ISession> {

    private static final String TAG = "FingerprintGetAuthenticatorIdClient";

    FingerprintGetAuthenticatorIdClient(@NonNull Context context,
            @NonNull LazyDaemon<ISession> lazyDaemon, int userId, @NonNull String owner,
            int sensorId) {
        super(context, lazyDaemon, null /* token */, null /* listener */, userId, owner,
                0 /* cookie */, sensorId, BiometricsProtoEnums.MODALITY_FINGERPRINT,
                BiometricsProtoEnums.ACTION_UNKNOWN, BiometricsProtoEnums.CLIENT_UNKNOWN);
    }

    @Override
    public void unableToStart() {
        // Nothing to do here
    }

    @Override
    protected void startHalOperation() {
        try {
            getFreshDaemon().getAuthenticatorId(mSequentialId);
        } catch (RemoteException e) {
            Slog.e(TAG, "Remote exception", e);
        }
    }
}
Loading