93 lines
3.3 KiB
Kotlin
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
|
|
|
|
}
|
|
} |