mirror of
https://github.com/home-assistant/android
synced 2024-10-15 12:32:54 +00:00
Allow device credential for app lock setup (#3340)
This commit is contained in:
parent
c8cc70ca84
commit
88a7f61643
|
@ -2,6 +2,7 @@ package io.homeassistant.companion.android.authenticator
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import androidx.biometric.BiometricManager.Authenticators
|
||||||
import androidx.biometric.BiometricPrompt
|
import androidx.biometric.BiometricPrompt
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.fragment.app.FragmentActivity
|
import androidx.fragment.app.FragmentActivity
|
||||||
|
@ -11,6 +12,8 @@ class Authenticator(context: Context, fragmentActivity: FragmentActivity, callba
|
||||||
const val CANCELED = 2
|
const val CANCELED = 2
|
||||||
const val SUCCESS = 1
|
const val SUCCESS = 1
|
||||||
const val ERROR = 0
|
const val ERROR = 0
|
||||||
|
|
||||||
|
const val AUTH_TYPES = Authenticators.DEVICE_CREDENTIAL or Authenticators.BIOMETRIC_WEAK
|
||||||
}
|
}
|
||||||
|
|
||||||
private val executor = ContextCompat.getMainExecutor(context)
|
private val executor = ContextCompat.getMainExecutor(context)
|
||||||
|
@ -42,7 +45,7 @@ class Authenticator(context: Context, fragmentActivity: FragmentActivity, callba
|
||||||
val promptDialog = BiometricPrompt.PromptInfo.Builder()
|
val promptDialog = BiometricPrompt.PromptInfo.Builder()
|
||||||
.setTitle(title)
|
.setTitle(title)
|
||||||
.setConfirmationRequired(false)
|
.setConfirmationRequired(false)
|
||||||
.setDeviceCredentialAllowed(true)
|
.setAllowedAuthenticators(AUTH_TYPES)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
biometricPrompt.authenticate(promptDialog)
|
biometricPrompt.authenticate(promptDialog)
|
||||||
|
|
|
@ -41,6 +41,7 @@ import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
||||||
import com.fasterxml.jackson.module.kotlin.readValue
|
import com.fasterxml.jackson.module.kotlin.readValue
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import io.homeassistant.companion.android.R
|
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.prefs.PrefsRepository
|
||||||
import io.homeassistant.companion.android.common.data.servers.ServerManager
|
import io.homeassistant.companion.android.common.data.servers.ServerManager
|
||||||
import io.homeassistant.companion.android.common.notifications.DeviceCommandData
|
import io.homeassistant.companion.android.common.notifications.DeviceCommandData
|
||||||
|
@ -1701,7 +1702,7 @@ class MessagingManager @Inject constructor(
|
||||||
val appLockTimeoutValue = data[APP_LOCK_TIMEOUT]?.toIntOrNull()
|
val appLockTimeoutValue = data[APP_LOCK_TIMEOUT]?.toIntOrNull()
|
||||||
val homeBypassEnableValue = data[HOME_BYPASS_ENABLED]?.lowercase()?.toBooleanStrictOrNull()
|
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()
|
val serverId = data[THIS_SERVER_ID]!!.toInt()
|
||||||
if (canAuth) {
|
if (canAuth) {
|
||||||
if (appLockEnableValue != null) {
|
if (appLockEnableValue != null) {
|
||||||
|
|
|
@ -204,7 +204,7 @@ class SettingsActivity : BaseActivity() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun requestAuthentication(title: String, callback: (Int) -> Boolean): Boolean {
|
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
|
false
|
||||||
} else {
|
} else {
|
||||||
externalAuthCallback = callback
|
externalAuthCallback = callback
|
||||||
|
|
Loading…
Reference in a new issue