fix some regressions

This commit is contained in:
IndusAryan 2024-02-19 15:44:41 +05:30
parent b75441eb3a
commit 1369337a72
3 changed files with 28 additions and 28 deletions

View file

@ -1218,7 +1218,11 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricAu
false false
) )
BiometricAuthenticator.biometricPrompt.authenticate(BiometricAuthenticator.promptInfo) BiometricAuthenticator.promptInfo?.let {
BiometricAuthenticator.biometricPrompt?.authenticate(
it
)
}
// hide background while authenticating, Sorry moms & dads 🙏 // hide background while authenticating, Sorry moms & dads 🙏
binding?.navHostFragment?.isInvisible = true binding?.navHostFragment?.isInvisible = true

View file

@ -62,7 +62,9 @@ class AccountSelectActivity : AppCompatActivity(), BiometricAuthenticator.Biomet
R.string.biometric_authentication_title, R.string.biometric_authentication_title,
false false
) )
BiometricAuthenticator.biometricPrompt.authenticate(BiometricAuthenticator.promptInfo) BiometricAuthenticator.promptInfo?.let {
BiometricAuthenticator.biometricPrompt?.authenticate(it)
}
} }
} else { } else {
showToast(R.string.phone_not_secured, Toast.LENGTH_LONG) showToast(R.string.phone_not_secured, Toast.LENGTH_LONG)

View file

@ -13,8 +13,8 @@ import androidx.biometric.BiometricManager.Authenticators.BIOMETRIC_WEAK
import androidx.biometric.BiometricManager.Authenticators.DEVICE_CREDENTIAL import androidx.biometric.BiometricManager.Authenticators.DEVICE_CREDENTIAL
import androidx.biometric.BiometricPrompt import androidx.biometric.BiometricPrompt
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.fragment.app.FragmentActivity
import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.CommonActivity.showToast
import com.lagradost.cloudstream3.MainActivity
import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.R
object BiometricAuthenticator { object BiometricAuthenticator {
@ -23,41 +23,33 @@ object BiometricAuthenticator {
private var failedAttempts = 0 private var failedAttempts = 0
const val TAG = "cs3Auth" const val TAG = "cs3Auth"
private lateinit var biometricManager: BiometricManager private var biometricManager: BiometricManager? = null
lateinit var biometricPrompt: BiometricPrompt var biometricPrompt: BiometricPrompt? = null
lateinit var promptInfo: BiometricPrompt.PromptInfo var promptInfo: BiometricPrompt.PromptInfo? = null
var authCallback: BiometricAuthCallback? = null // listen to authentication success var authCallback: BiometricAuthCallback? = null // listen to authentication success
private fun initializeBiometrics(activity: Activity) { private fun initializeBiometrics(activity: Activity) {
val executor = ContextCompat.getMainExecutor(activity) val executor = ContextCompat.getMainExecutor(activity)
biometricManager = BiometricManager.from(activity) biometricManager = BiometricManager.from(activity)
if (!::promptInfo.isInitialized) {
initBiometricPrompt(
activity as AppCompatActivity,
R.string.biometric_authentication_title,
false
)
}
biometricPrompt = BiometricPrompt( biometricPrompt = BiometricPrompt(
activity as AppCompatActivity, activity as FragmentActivity,
executor, executor,
object : BiometricPrompt.AuthenticationCallback() { object : BiometricPrompt.AuthenticationCallback() {
override fun onAuthenticationError(errorCode: Int, errString: CharSequence) { override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
super.onAuthenticationError(errorCode, errString) super.onAuthenticationError(errorCode, errString)
showToast("$errString", LENGTH_SHORT) showToast("$errString", LENGTH_SHORT)
Log.i(TAG, "$errorCode") Log.e(TAG, "$errorCode")
activity.finish()
failedAttempts++ failedAttempts++
if (failedAttempts >= MAX_FAILED_ATTEMPTS) { if (failedAttempts >= MAX_FAILED_ATTEMPTS) {
failedAttempts = 0 failedAttempts = 0
activity.finish() activity.finish()
} else { } else {
failedAttempts = 0 failedAttempts = 0
MainActivity().finish() activity.finish()
} }
} }
@ -78,7 +70,8 @@ object BiometricAuthenticator {
}) })
} }
private fun initBiometricPrompt( // authentication dialog prompt builder
private fun authenticationDialog(
activity: Activity, activity: Activity,
title: Int, title: Int,
setDeviceCred: Boolean, setDeviceCred: Boolean,
@ -117,7 +110,7 @@ object BiometricAuthenticator {
var result = false var result = false
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
when (biometricManager.canAuthenticate( when (biometricManager?.canAuthenticate(
DEVICE_CREDENTIAL or BIOMETRIC_STRONG or BIOMETRIC_WEAK DEVICE_CREDENTIAL or BIOMETRIC_STRONG or BIOMETRIC_WEAK
)) { )) {
BiometricManager.BIOMETRIC_SUCCESS -> result = true BiometricManager.BIOMETRIC_SUCCESS -> result = true
@ -130,7 +123,7 @@ object BiometricAuthenticator {
} }
} else { } else {
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
when (biometricManager.canAuthenticate()) { when (biometricManager?.canAuthenticate()) {
BiometricManager.BIOMETRIC_SUCCESS -> result = true BiometricManager.BIOMETRIC_SUCCESS -> result = true
BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE -> result = false BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE -> result = false
BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE -> result = false BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE -> result = false
@ -144,26 +137,27 @@ object BiometricAuthenticator {
return result return result
} }
// only needed for Android 9 and below // checks if device is secured or not
fun deviceHasPasswordPinLock(context: Context?): Boolean { fun deviceHasPasswordPinLock(context: Context?): Boolean {
val keyMgr = val keyMgr =
context?.getSystemService(AppCompatActivity.KEYGUARD_SERVICE) as KeyguardManager context?.getSystemService(AppCompatActivity.KEYGUARD_SERVICE) as? KeyguardManager
return keyMgr.isKeyguardSecure return keyMgr?.isKeyguardSecure ?: false
} }
// function to start authentication in any fragment or activity
fun startBiometricAuthentication(activity: Activity, title: Int, setDeviceCred: Boolean) { fun startBiometricAuthentication(activity: Activity, title: Int, setDeviceCred: Boolean) {
initializeBiometrics(activity) initializeBiometrics(activity)
if (isBiometricHardWareAvailable()) { if (isBiometricHardWareAvailable()) {
authCallback = activity as? BiometricAuthCallback authCallback = activity as? BiometricAuthCallback
initBiometricPrompt(activity, title, setDeviceCred) authenticationDialog(activity, title, setDeviceCred)
biometricPrompt.authenticate(promptInfo) promptInfo?.let { biometricPrompt?.authenticate(it) }
} else { } else {
if (deviceHasPasswordPinLock(activity)) { if (deviceHasPasswordPinLock(activity)) {
authCallback = activity as? BiometricAuthCallback authCallback = activity as? BiometricAuthCallback
initBiometricPrompt(activity, R.string.password_pin_authentication_title, true) authenticationDialog(activity, R.string.password_pin_authentication_title, true)
biometricPrompt.authenticate(promptInfo) promptInfo?.let { biometricPrompt?.authenticate(it) }
} else { } else {
showToast(R.string.biometric_unsupported, LENGTH_SHORT) showToast(R.string.biometric_unsupported, LENGTH_SHORT)