mirror of
https://github.com/recloudstream/cloudstream.git
synced 2024-08-15 01:53:11 +00:00
fix some regressions
This commit is contained in:
parent
b75441eb3a
commit
1369337a72
3 changed files with 28 additions and 28 deletions
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue