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

Commit c9046a07 authored by Ilya Matyukhin's avatar Ilya Matyukhin Committed by Android (Google) Code Review
Browse files

Merge "Move generateChallenge/revokeChallenge to ISession"

parents 5e453226 1a77a3be
Loading
Loading
Loading
Loading
+16 −8
Original line number Diff line number Diff line
@@ -626,10 +626,10 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing
     * @hide
     */
    @RequiresPermission(MANAGE_FINGERPRINT)
    public void generateChallenge(int sensorId, GenerateChallengeCallback callback) {
    public void generateChallenge(int sensorId, int userId, GenerateChallengeCallback callback) {
        if (mService != null) try {
            mGenerateChallengeCallback = callback;
            mService.generateChallenge(mToken, sensorId, mServiceReceiver,
            mService.generateChallenge(mToken, sensorId, userId, mServiceReceiver,
                    mContext.getOpPackageName());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
@@ -642,7 +642,7 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing
     * @hide
     */
    @RequiresPermission(MANAGE_FINGERPRINT)
    public void generateChallenge(GenerateChallengeCallback callback) {
    public void generateChallenge(int userId, GenerateChallengeCallback callback) {
        final List<FingerprintSensorPropertiesInternal> fingerprintSensorProperties =
                getSensorPropertiesInternal();
        if (fingerprintSensorProperties.isEmpty()) {
@@ -651,7 +651,7 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing
        }

        final int sensorId = fingerprintSensorProperties.get(0).sensorId;
        generateChallenge(sensorId, callback);
        generateChallenge(sensorId, userId, callback);
    }

    /**
@@ -659,10 +659,10 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing
     * @hide
     */
    @RequiresPermission(MANAGE_FINGERPRINT)
    public void revokeChallenge() {
    public void revokeChallenge(int userId) {
        // On HALs with only single in-flight challenge such as IBiometricsFingerprint@2.1,
        // this parameter is ignored.
        revokeChallenge(0L);
        revokeChallenge(userId, 0L);
    }

    /**
@@ -670,9 +670,17 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing
     * @hide
     */
    @RequiresPermission(MANAGE_FINGERPRINT)
    public void revokeChallenge(long challenge) {
    public void revokeChallenge(int userId, long challenge) {
        if (mService != null) try {
            mService.revokeChallenge(mToken, mContext.getOpPackageName(), challenge);
            final List<FingerprintSensorPropertiesInternal> fingerprintSensorProperties =
                    getSensorPropertiesInternal();
            if (fingerprintSensorProperties.isEmpty()) {
                Slog.e(TAG, "No sensors");
                return;
            }
            final int sensorId = fingerprintSensorProperties.get(0).sensorId;
            mService.revokeChallenge(mToken, sensorId, userId, mContext.getOpPackageName(),
                    challenge);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
+2 −2
Original line number Diff line number Diff line
@@ -93,10 +93,10 @@ interface IFingerprintService {
    boolean isHardwareDetected(String opPackageName);

    // Get a pre-enrollment authentication token
    void generateChallenge(IBinder token, int sensorId, IFingerprintServiceReceiver receiver, String opPackageName);
    void generateChallenge(IBinder token, int sensorId, int userId, IFingerprintServiceReceiver receiver, String opPackageName);

    // Finish an enrollment sequence and invalidate the authentication token
    void revokeChallenge(IBinder token, String opPackageName, long challenge);
    void revokeChallenge(IBinder token, int sensorId, int userId, String opPackageName, long challenge);

    // Determine if a user has at least one enrolled fingerprint
    boolean hasEnrolledFingerprints(int userId, String opPackageName);
+7 −6
Original line number Diff line number Diff line
@@ -174,7 +174,7 @@ public class FingerprintService extends SystemService {
        }

        @Override // Binder call
        public void generateChallenge(IBinder token, int sensorId,
        public void generateChallenge(IBinder token, int sensorId, int userId,
                IFingerprintServiceReceiver receiver, String opPackageName) {
            Utils.checkPermission(getContext(), MANAGE_FINGERPRINT);

@@ -184,20 +184,21 @@ public class FingerprintService extends SystemService {
                return;
            }

            provider.scheduleGenerateChallenge(sensorId, token, receiver, opPackageName);
            provider.scheduleGenerateChallenge(sensorId, userId, token, receiver, opPackageName);
        }

        @Override // Binder call
        public void revokeChallenge(IBinder token, String opPackageName, long challenge) {
        public void revokeChallenge(IBinder token, int sensorId, int userId, String opPackageName,
                long challenge) {
            Utils.checkPermission(getContext(), MANAGE_FINGERPRINT);

            final Pair<Integer, ServiceProvider> provider = getSingleProvider();
            final ServiceProvider provider = getProviderForSensor(sensorId);
            if (provider == null) {
                Slog.w(TAG, "Null provider for revokeChallenge");
                Slog.w(TAG, "No matching sensor for revokeChallenge, sensorId: " + sensorId);
                return;
            }

            provider.second.scheduleRevokeChallenge(provider.first, token, opPackageName,
            provider.scheduleRevokeChallenge(sensorId, userId, token, opPackageName,
                    challenge);
        }

+2 −2
Original line number Diff line number Diff line
@@ -64,10 +64,10 @@ public interface ServiceProvider {

    void scheduleResetLockout(int sensorId, int userId, @Nullable byte[] hardwareAuthToken);

    void scheduleGenerateChallenge(int sensorId, @NonNull IBinder token,
    void scheduleGenerateChallenge(int sensorId, int userId, @NonNull IBinder token,
            @NonNull IFingerprintServiceReceiver receiver, String opPackageName);

    void scheduleRevokeChallenge(int sensorId, @NonNull IBinder token,
    void scheduleRevokeChallenge(int sensorId, int userId, @NonNull IBinder token,
            @NonNull String opPackageName, long challenge);

    void scheduleEnroll(int sensorId, @NonNull IBinder token, byte[] hardwareAuthToken, int userId,
+16 −22
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ package com.android.server.biometrics.sensors.fingerprint.aidl;
import android.annotation.NonNull;
import android.content.Context;
import android.hardware.biometrics.fingerprint.IFingerprint;
import android.hardware.biometrics.fingerprint.IGenerateChallengeCallback;
import android.hardware.biometrics.fingerprint.ISession;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Slog;
@@ -30,28 +30,12 @@ import com.android.server.biometrics.sensors.GenerateChallengeClient;
/**
 * Fingerprint-specific generateChallenge client for the {@link IFingerprint} AIDL HAL interface.
 */
class FingerprintGenerateChallengeClient extends GenerateChallengeClient<IFingerprint> {
class FingerprintGenerateChallengeClient extends GenerateChallengeClient<ISession> {
    private static final String TAG = "FingerprintGenerateChallengeClient";
    private static final int CHALLENGE_TIMEOUT_SEC = 600; // 10 minutes

    private final IGenerateChallengeCallback mGenerateChallengeCallback =
            new IGenerateChallengeCallback.Stub() {
        @Override
        public void onChallengeGenerated(int sensorId, int userId, long challenge) {
            try {
                getListener().onChallengeGenerated(sensorId, challenge);
                mCallback.onClientFinished(FingerprintGenerateChallengeClient.this,
                        true /* success */);
            } catch (RemoteException e) {
                Slog.e(TAG, "Unable to send challenge", e);
                mCallback.onClientFinished(FingerprintGenerateChallengeClient.this,
                        false /* success */);
            }
        }
    };

    FingerprintGenerateChallengeClient(@NonNull Context context,
            @NonNull LazyDaemon<IFingerprint> lazyDaemon,
            @NonNull LazyDaemon<ISession> lazyDaemon,
            @NonNull IBinder token,
            @NonNull ClientMonitorCallbackConverter listener,
            @NonNull String owner, int sensorId) {
@@ -61,11 +45,21 @@ class FingerprintGenerateChallengeClient extends GenerateChallengeClient<IFinger
    @Override
    protected void startHalOperation() {
        try {
            getFreshDaemon().generateChallenge(getSensorId(), getTargetUserId(),
                    CHALLENGE_TIMEOUT_SEC,
                    mGenerateChallengeCallback);
            getFreshDaemon().generateChallenge(mSequentialId, CHALLENGE_TIMEOUT_SEC);
        } catch (RemoteException e) {
            Slog.e(TAG, "Unable to generateChallenge", e);
        }
    }

    void onChallengeGenerated(int sensorId, int userId, long challenge) {
        try {
            getListener().onChallengeGenerated(sensorId, challenge);
            mCallback.onClientFinished(FingerprintGenerateChallengeClient.this,
                    true /* success */);
        } catch (RemoteException e) {
            Slog.e(TAG, "Unable to send challenge", e);
            mCallback.onClientFinished(FingerprintGenerateChallengeClient.this,
                    false /* success */);
        }
    }
}
Loading