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

108 lines
3.6 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.Button
import android.widget.EditText
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))
val nameEt = findViewById<EditText>(R.id.nameEt)
var name = nameEt.text.toString()
val intent = Intent(this@MainActivity, SecretActivity::class.java)
intent.putExtra("Name", name)
startActivity(intent)
}
}
@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("Odcisk Palca")
.setSubtitle("Autoryzacja wymagana")
.setDescription("Ta aplikacja używa Odcisku Palca do ochrony wiadomości")
.setNegativeButton("Anuluj",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
}
}