diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/protect/ProtectActivity.kt b/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/protect/ProtectActivity.kt index 8ad250394..9516a8447 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/protect/ProtectActivity.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/protect/ProtectActivity.kt @@ -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() + 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) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 227506ecd..a3ed043af 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -267,7 +267,7 @@ On hold Dropped Disable all - Use fingerprint if available + Use biometric if available Manga from your favourites Your recently read manga Report