Allow device credential for app lock setup (#3340)

This commit is contained in:
Joris Pelgröm 2023-02-17 14:47:11 +01:00 committed by GitHub
parent c8cc70ca84
commit 88a7f61643
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 7 additions and 3 deletions

View file

@ -2,6 +2,7 @@ package io.homeassistant.companion.android.authenticator
import android.content.Context
import android.util.Log
import androidx.biometric.BiometricManager.Authenticators
import androidx.biometric.BiometricPrompt
import androidx.core.content.ContextCompat
import androidx.fragment.app.FragmentActivity
@ -11,6 +12,8 @@ class Authenticator(context: Context, fragmentActivity: FragmentActivity, callba
const val CANCELED = 2
const val SUCCESS = 1
const val ERROR = 0
const val AUTH_TYPES = Authenticators.DEVICE_CREDENTIAL or Authenticators.BIOMETRIC_WEAK
}
private val executor = ContextCompat.getMainExecutor(context)
@ -42,7 +45,7 @@ class Authenticator(context: Context, fragmentActivity: FragmentActivity, callba
val promptDialog = BiometricPrompt.PromptInfo.Builder()
.setTitle(title)
.setConfirmationRequired(false)
.setDeviceCredentialAllowed(true)
.setAllowedAuthenticators(AUTH_TYPES)
.build()
biometricPrompt.authenticate(promptDialog)

View file

@ -41,6 +41,7 @@ import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue
import dagger.hilt.android.qualifiers.ApplicationContext
import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.authenticator.Authenticator
import io.homeassistant.companion.android.common.data.prefs.PrefsRepository
import io.homeassistant.companion.android.common.data.servers.ServerManager
import io.homeassistant.companion.android.common.notifications.DeviceCommandData
@ -1701,7 +1702,7 @@ class MessagingManager @Inject constructor(
val appLockTimeoutValue = data[APP_LOCK_TIMEOUT]?.toIntOrNull()
val homeBypassEnableValue = data[HOME_BYPASS_ENABLED]?.lowercase()?.toBooleanStrictOrNull()
val canAuth = (BiometricManager.from(context).canAuthenticate() == BiometricManager.BIOMETRIC_SUCCESS)
val canAuth = (BiometricManager.from(context).canAuthenticate(Authenticator.AUTH_TYPES) == BiometricManager.BIOMETRIC_SUCCESS)
val serverId = data[THIS_SERVER_ID]!!.toInt()
if (canAuth) {
if (appLockEnableValue != null) {

View file

@ -204,7 +204,7 @@ class SettingsActivity : BaseActivity() {
}
fun requestAuthentication(title: String, callback: (Int) -> Boolean): Boolean {
return if (BiometricManager.from(this).canAuthenticate() != BiometricManager.BIOMETRIC_SUCCESS) {
return if (BiometricManager.from(this).canAuthenticate(Authenticator.AUTH_TYPES) != BiometricManager.BIOMETRIC_SUCCESS) {
false
} else {
externalAuthCallback = callback