From 26c22295fc76b3c93a7773c8dfea351e2accdc8f Mon Sep 17 00:00:00 2001 From: Patrick Honkonen <1883101+SaintPatrck@users.noreply.github.com> Date: Wed, 1 May 2024 21:20:29 -0400 Subject: [PATCH] Use valid authenticators on Android Q and below (#77) --- .../biometrics/BiometricsManagerImpl.kt | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/bitwarden/authenticator/ui/platform/manager/biometrics/BiometricsManagerImpl.kt b/app/src/main/kotlin/com/bitwarden/authenticator/ui/platform/manager/biometrics/BiometricsManagerImpl.kt index e152c136a3..0bee4214ba 100644 --- a/app/src/main/kotlin/com/bitwarden/authenticator/ui/platform/manager/biometrics/BiometricsManagerImpl.kt +++ b/app/src/main/kotlin/com/bitwarden/authenticator/ui/platform/manager/biometrics/BiometricsManagerImpl.kt @@ -1,6 +1,7 @@ package com.bitwarden.authenticator.ui.platform.manager.biometrics import android.app.Activity +import android.os.Build import androidx.biometric.BiometricManager import androidx.biometric.BiometricManager.Authenticators import androidx.biometric.BiometricPrompt @@ -18,8 +19,20 @@ class BiometricsManagerImpl( private val fragmentActivity: FragmentActivity get() = activity as FragmentActivity + private val allowedAuthenticators: Int + get() { + // [Authenticators.DEVICE_CREDENTIAL or Authenticators.BIOMETRIC_STRONG] is not a valid + // combination prior to SDK version 30 so we use + // [Authenticators.DEVICE_CREDENTIAL or Authenticators.BIOMETRIC_WEAK] instead. + return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) { + Authenticators.DEVICE_CREDENTIAL or Authenticators.BIOMETRIC_WEAK + } else { + Authenticators.DEVICE_CREDENTIAL or Authenticators.BIOMETRIC_STRONG + } + } + override val isBiometricsSupported: Boolean - get() = when (biometricManager.canAuthenticate(Authenticators.BIOMETRIC_STRONG)) { + get() = when (biometricManager.canAuthenticate(allowedAuthenticators)) { BiometricManager.BIOMETRIC_SUCCESS -> true BiometricManager.BIOMETRIC_STATUS_UNKNOWN, BiometricManager.BIOMETRIC_ERROR_UNSUPPORTED, @@ -78,9 +91,7 @@ class BiometricsManagerImpl( val promptInfo = BiometricPrompt.PromptInfo.Builder() .setTitle(activity.getString(R.string.bitwarden_authenticator)) .setDescription(activity.getString(R.string.biometrics_direction)) - .setAllowedAuthenticators( - Authenticators.BIOMETRIC_STRONG or Authenticators.DEVICE_CREDENTIAL - ) + .setAllowedAuthenticators(allowedAuthenticators) .build() biometricPrompt.authenticate(promptInfo)