diff --git a/app/src/main/java/org/thoughtcrime/securesms/BiometricDeviceAuthentication.kt b/app/src/main/java/org/thoughtcrime/securesms/BiometricDeviceAuthentication.kt index ffc4363ba7..ea29d878c9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/BiometricDeviceAuthentication.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/BiometricDeviceAuthentication.kt @@ -35,6 +35,10 @@ class BiometricDeviceAuthentication( private val DISALLOWED_BIOMETRIC_VERSIONS = setOf(28, 29) } + fun canAuthenticate(): Boolean { + return biometricManager.canAuthenticate(ALLOWED_AUTHENTICATORS) == BiometricManager.BIOMETRIC_SUCCESS + } + fun authenticate(context: Context, force: Boolean, showConfirmDeviceCredentialIntent: () -> Unit): Boolean { val isKeyGuardSecure = ServiceUtil.getKeyguardManager(context).isKeyguardSecure diff --git a/app/src/main/java/org/thoughtcrime/securesms/linkdevice/AddLinkDeviceFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/linkdevice/AddLinkDeviceFragment.kt index 70a20d21ba..01676a5c12 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/linkdevice/AddLinkDeviceFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/linkdevice/AddLinkDeviceFragment.kt @@ -113,7 +113,11 @@ class AddLinkDeviceFragment : ComposeFragment() { onQrCodeScanned = { data -> viewModel.onQrCodeScanned(data) }, onQrCodeApproved = { viewModel.onQrCodeApproved() - biometricAuth.authenticate(requireContext(), true) { biometricDeviceLockLauncher.launch(getString(R.string.BiometricDeviceAuthentication__signal)) } + if (biometricAuth.canAuthenticate()) { + biometricAuth.authenticate(requireContext(), true) { biometricDeviceLockLauncher.launch(getString(R.string.BiometricDeviceAuthentication__signal)) } + } else { + viewModel.addDevice() + } }, onQrCodeDismissed = { viewModel.onQrCodeDismissed() }, onQrCodeRetry = { viewModel.onQrCodeScanned(state.url) },