From 9c98582dd6e46ba24823f3bb29a28da3eb8a32df Mon Sep 17 00:00:00 2001 From: Kevin Chyn Date: Wed, 27 Feb 2019 13:12:30 -0800 Subject: Check for hardware before authenticating On devices with no hardware, the service is null. We need to return the correct error in that case. Fixes: 126392276 Test: Builds Change-Id: I184bd6afce71bf36b659286cd7dd6aa17d490657 --- core/java/android/hardware/biometrics/BiometricPrompt.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/core/java/android/hardware/biometrics/BiometricPrompt.java b/core/java/android/hardware/biometrics/BiometricPrompt.java index baf972b26573..8629210c2a7b 100644 --- a/core/java/android/hardware/biometrics/BiometricPrompt.java +++ b/core/java/android/hardware/biometrics/BiometricPrompt.java @@ -616,8 +616,15 @@ public class BiometricPrompt implements BiometricAuthenticator, BiometricConstan mExecutor = executor; mAuthenticationCallback = callback; final long sessionId = crypto != null ? crypto.getOpId() : 0; - mService.authenticate(mToken, sessionId, userId, mBiometricServiceReceiver, - mContext.getOpPackageName(), mBundle); + if (BiometricManager.hasBiometrics(mContext)) { + mService.authenticate(mToken, sessionId, userId, mBiometricServiceReceiver, + mContext.getOpPackageName(), mBundle); + } else { + mExecutor.execute(() -> { + callback.onAuthenticationError(BiometricPrompt.BIOMETRIC_ERROR_HW_NOT_PRESENT, + mContext.getString(R.string.biometric_error_hw_unavailable)); + }); + } } catch (RemoteException e) { Log.e(TAG, "Remote exception while authenticating", e); mExecutor.execute(() -> { -- cgit v1.2.3-59-g8ed1b