Allow to use biometric unlock manually (closes #999)
This commit is contained in:
@@ -17,6 +17,7 @@ import androidx.biometric.BiometricManager.BIOMETRIC_SUCCESS
|
||||
import androidx.biometric.BiometricPrompt
|
||||
import androidx.biometric.BiometricPrompt.AuthenticationCallback
|
||||
import androidx.core.graphics.Insets
|
||||
import com.google.android.material.textfield.TextInputLayout
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import org.koitharu.kotatsu.R
|
||||
import org.koitharu.kotatsu.core.ui.BaseActivity
|
||||
@@ -25,6 +26,7 @@ import org.koitharu.kotatsu.core.util.ext.getParcelableExtraCompat
|
||||
import org.koitharu.kotatsu.core.util.ext.observe
|
||||
import org.koitharu.kotatsu.core.util.ext.observeEvent
|
||||
import org.koitharu.kotatsu.databinding.ActivityProtectBinding
|
||||
import com.google.android.material.R as materialR
|
||||
|
||||
@AndroidEntryPoint
|
||||
class ProtectActivity :
|
||||
@@ -34,6 +36,7 @@ class ProtectActivity :
|
||||
View.OnClickListener {
|
||||
|
||||
private val viewModel by viewModels<ProtectViewModel>()
|
||||
private var canUseBiometric = false
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
@@ -61,7 +64,9 @@ class ProtectActivity :
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
if (!useFingerprint()) {
|
||||
canUseBiometric = useFingerprint()
|
||||
updateEndIcon()
|
||||
if (!canUseBiometric) {
|
||||
viewBinding.editPassword.requestFocus()
|
||||
}
|
||||
}
|
||||
@@ -80,6 +85,7 @@ class ProtectActivity :
|
||||
when (v.id) {
|
||||
R.id.button_next -> viewModel.tryUnlock(viewBinding.editPassword.text?.toString().orEmpty())
|
||||
R.id.button_cancel -> finish()
|
||||
materialR.id.text_input_end_icon -> useFingerprint()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,6 +105,7 @@ class ProtectActivity :
|
||||
override fun afterTextChanged(s: Editable?) {
|
||||
viewBinding.layoutPassword.error = null
|
||||
viewBinding.buttonNext.isEnabled = !s.isNullOrEmpty()
|
||||
updateEndIcon()
|
||||
}
|
||||
|
||||
private fun onError(e: Throwable) {
|
||||
@@ -127,6 +134,24 @@ class ProtectActivity :
|
||||
return true
|
||||
}
|
||||
|
||||
private fun updateEndIcon() = with(viewBinding.layoutPassword) {
|
||||
val isFingerprintIcon = canUseBiometric && viewBinding.editPassword.text.isNullOrEmpty()
|
||||
if (isFingerprintIcon == (endIconMode == TextInputLayout.END_ICON_CUSTOM)) {
|
||||
return@with
|
||||
}
|
||||
if (isFingerprintIcon) {
|
||||
endIconMode = TextInputLayout.END_ICON_CUSTOM
|
||||
setEndIconDrawable(androidx.biometric.R.drawable.fingerprint_dialog_fp_icon)
|
||||
endIconContentDescription = getString(androidx.biometric.R.string.use_biometric_label)
|
||||
setEndIconOnClickListener(this@ProtectActivity)
|
||||
} else {
|
||||
setEndIconOnClickListener(null)
|
||||
setEndIconDrawable(0)
|
||||
endIconContentDescription = null
|
||||
endIconMode = TextInputLayout.END_ICON_PASSWORD_TOGGLE
|
||||
}
|
||||
}
|
||||
|
||||
private inner class BiometricCallback : AuthenticationCallback() {
|
||||
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
|
||||
super.onAuthenticationSucceeded(result)
|
||||
|
||||
@@ -267,7 +267,7 @@
|
||||
<string name="status_on_hold">On hold</string>
|
||||
<string name="status_dropped">Dropped</string>
|
||||
<string name="disable_all">Disable all</string>
|
||||
<string name="use_fingerprint">Use fingerprint if available</string>
|
||||
<string name="use_fingerprint">Use biometric if available</string>
|
||||
<string name="appwidget_shelf_description">Manga from your favourites</string>
|
||||
<string name="appwidget_recent_description">Your recently read manga</string>
|
||||
<string name="report">Report</string>
|
||||
|
||||
Reference in New Issue
Block a user