BiometricPromptActivity.kt (2171B) - raw


      1 package me.rhunk.snapenhance.bridge
      2 
      3 import android.content.Intent
      4 import android.hardware.biometrics.BiometricManager
      5 import android.hardware.biometrics.BiometricPrompt
      6 import android.os.Build
      7 import android.os.Bundle
      8 import android.os.CancellationSignal
      9 import androidx.activity.ComponentActivity
     10 import androidx.activity.compose.setContent
     11 import me.rhunk.snapenhance.SharedContextHolder
     12 import java.util.concurrent.Executors
     13 
     14 class BiometricPromptActivity: ComponentActivity() {
     15     override fun onCreate(savedInstanceState: Bundle?) {
     16         super.onCreate(savedInstanceState)
     17 
     18         fun cancel() {
     19             setResult(RESULT_CANCELED, Intent())
     20             finish()
     21         }
     22 
     23         val remoteSideContext = SharedContextHolder.remote(this)
     24 
     25         BiometricPrompt.Builder(this@BiometricPromptActivity)
     26             .setTitle(remoteSideContext.translation["biometric_auth.title"])
     27             .setSubtitle(remoteSideContext.translation["biometric_auth.subtitle"])
     28             .apply {
     29                 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
     30                     setAllowedAuthenticators(BiometricManager.Authenticators.BIOMETRIC_WEAK or BiometricManager.Authenticators.DEVICE_CREDENTIAL)
     31                 } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
     32                     @Suppress("DEPRECATION")
     33                     setDeviceCredentialAllowed(true)
     34                 }
     35             }
     36             .build().authenticate(
     37                 CancellationSignal().apply {
     38                     setOnCancelListener {
     39                         cancel()
     40                     }
     41                 },
     42                 Executors.newSingleThreadExecutor(),
     43                 object: BiometricPrompt.AuthenticationCallback() {
     44                     override fun onAuthenticationError(errorCode: Int, errString: CharSequence?) {
     45                         cancel()
     46                     }
     47 
     48                     override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult?) {
     49                         setResult(RESULT_OK, Intent())
     50                         finish()
     51                     }
     52                 }
     53             )
     54 
     55         setContent {}
     56     }
     57 }