Fingerprint/app/src/main/java/com/example/myapp1/MainActivity.kt

93 lines
3.3 KiB
Kotlin

package com.example.myapp1
import android.app.KeyguardManager
import android.content.Context
import android.content.DialogInterface
import android.content.Intent
import android.content.pm.PackageManager
import android.hardware.biometrics.BiometricPrompt
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.CancellationSignal
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.core.app.ActivityCompat
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
private var cancellationSignal: CancellationSignal? = null
private val authenticationCallback: BiometricPrompt.AuthenticationCallback
get() =
@RequiresApi(Build.VERSION_CODES.P)
object : BiometricPrompt.AuthenticationCallback() {
override fun onAuthenticationError(errorCode: Int, errString: CharSequence?) {
super.onAuthenticationError(errorCode, errString)
notifyUser("Autoryzacja Błędna: $errString")
}
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult?) {
super.onAuthenticationSucceeded(result)
notifyUser("Autoryzacja Poprawna")
startActivity(Intent(this@MainActivity, SecretActivity::class.java))
}
}
@RequiresApi(Build.VERSION_CODES.P)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
checkBiometricSupport()
btn_authenticate.setOnClickListener {
val biometricPrompt = BiometricPrompt.Builder(this)
.setTitle("Tytuł pytania")
.setSubtitle("Autoryzacja wymagana")
.setDescription("Ta aplikacja używa Odcisku Palca do ochrony wiadomości")
.setNegativeButton("Cancel",this.mainExecutor, DialogInterface.OnClickListener { dialog, which ->
notifyUser("Autoryzacja Anulowana")
} ).build()
biometricPrompt.authenticate(getCancellationSignal(),mainExecutor, authenticationCallback)
}
}
private fun notifyUser(message: String) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
}
private fun getCancellationSignal(): CancellationSignal {
cancellationSignal = CancellationSignal()
cancellationSignal?.setOnCancelListener {
notifyUser("Uwierzyytelnianie zablokowane dla uzytkownika")
}
return cancellationSignal as CancellationSignal
}
private fun checkBiometricSupport(): Boolean {
val keyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
if (!keyguardManager.isKeyguardSecure) {
notifyUser("Odcisk został wyłączony w ustawieniach")
return false
}
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.USE_BIOMETRIC) != PackageManager.PERMISSION_GRANTED) {
notifyUser("Uprawnienia do Odcisku nie są włączone")
return false
}
return if (packageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
true
} else true
}
}