Loading core/java/android/hardware/fingerprint/FingerprintManager.java +16 −8 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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()) { Loading @@ -651,7 +651,7 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing } final int sensorId = fingerprintSensorProperties.get(0).sensorId; generateChallenge(sensorId, callback); generateChallenge(sensorId, userId, callback); } /** Loading @@ -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); } /** Loading @@ -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(); } Loading core/java/android/hardware/fingerprint/IFingerprintService.aidl +2 −2 Original line number Diff line number Diff line Loading @@ -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); Loading services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java +7 −6 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); } Loading services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java +2 −2 Original line number Diff line number Diff line Loading @@ -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, Loading services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintGenerateChallengeClient.java +16 −22 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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) { Loading @@ -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
core/java/android/hardware/fingerprint/FingerprintManager.java +16 −8 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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()) { Loading @@ -651,7 +651,7 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing } final int sensorId = fingerprintSensorProperties.get(0).sensorId; generateChallenge(sensorId, callback); generateChallenge(sensorId, userId, callback); } /** Loading @@ -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); } /** Loading @@ -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(); } Loading
core/java/android/hardware/fingerprint/IFingerprintService.aidl +2 −2 Original line number Diff line number Diff line Loading @@ -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); Loading
services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java +7 −6 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); } Loading
services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java +2 −2 Original line number Diff line number Diff line Loading @@ -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, Loading
services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintGenerateChallengeClient.java +16 −22 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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) { Loading @@ -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 */); } } }