Add done button for when creating new PINs

This commit is contained in:
Luna712 2023-10-31 23:48:33 -06:00
parent 8b73c35e43
commit 87e71b215d

View file

@ -4,12 +4,12 @@ import android.content.Context
import android.text.Editable import android.text.Editable
import android.text.TextWatcher import android.text.TextWatcher
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View
import android.view.inputmethod.EditorInfo import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager
import android.widget.TextView import android.widget.TextView
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.view.isVisible
import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.R
import com.lagradost.cloudstream3.databinding.LockPinDialogBinding import com.lagradost.cloudstream3.databinding.LockPinDialogBinding
import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe
@ -21,14 +21,18 @@ object AccountDialog {
context: Context, context: Context,
currentPin: String?, currentPin: String?,
editAccount: Boolean, editAccount: Boolean,
errorText: String? = null,
callback: (String?) -> Unit callback: (String?) -> Unit
) { ) {
fun TextView.visibleWithText(@StringRes textRes: Int) { fun TextView.visibleWithText(@StringRes textRes: Int) {
visibility = View.VISIBLE isVisible = true
setText(textRes) setText(textRes)
} }
fun View.isVisible() = visibility == View.VISIBLE fun TextView.visibleWithText(text: String?) {
isVisible = true
setText(text)
}
val binding = LockPinDialogBinding.inflate(LayoutInflater.from(context)) val binding = LockPinDialogBinding.inflate(LayoutInflater.from(context))
@ -38,7 +42,7 @@ object AccountDialog {
val titleRes = if (isEditPin) R.string.enter_current_pin else R.string.enter_pin val titleRes = if (isEditPin) R.string.enter_current_pin else R.string.enter_pin
val dialog = AlertDialog.Builder(context, R.style.AlertDialogCustom) val builder = AlertDialog.Builder(context, R.style.AlertDialogCustom)
.setView(binding.root) .setView(binding.root)
.setTitle(titleRes) .setTitle(titleRes)
.setNegativeButton(R.string.cancel) { _, _ -> .setNegativeButton(R.string.cancel) { _, _ ->
@ -48,11 +52,32 @@ object AccountDialog {
callback.invoke(null) callback.invoke(null)
} }
.setOnDismissListener { .setOnDismissListener {
if (binding.pinEditTextError.isVisible()) { if (binding.pinEditTextError.isVisible) {
callback.invoke(null) callback.invoke(null)
} }
} }
.create()
if (isNewPin) {
if (errorText != null) binding.pinEditTextError.visibleWithText(errorText)
builder.setPositiveButton(R.string.setup_done) { _, _ ->
if (binding.pinEditTextError.isVisible) {
// If the done button is pressed and there is an error,
// ask again, and mention the error that caused this.
showPinInputDialog(
context = binding.root.context,
currentPin = null,
editAccount = true,
errorText = binding.pinEditTextError.text.toString(),
callback = callback
)
} else {
val enteredPin = binding.pinEditText.text.toString()
callback.invoke(enteredPin)
}
}
}
val dialog = builder.create()
var isPinValid = false var isPinValid = false
@ -70,14 +95,14 @@ object AccountDialog {
binding.pinEditText.text = null binding.pinEditText.text = null
isPinValid = false isPinValid = false
} else { } else {
binding.pinEditTextError.visibility = View.GONE binding.pinEditTextError.isVisible = false
isPinValid = true isPinValid = true
callback.invoke(enteredPin) callback.invoke(enteredPin)
dialog.dismissSafe() dialog.dismissSafe()
} }
} else { } else {
binding.pinEditTextError.visibility = View.GONE binding.pinEditTextError.isVisible = false
isPinValid = true isPinValid = true
} }
} else if (isNewPin) { } else if (isNewPin) {