diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/browser/RepositionCardFragment.kt b/AnkiDroid/src/main/java/com/ichi2/anki/browser/RepositionCardFragment.kt index 6373165a512c..deb46d99d0ad 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/browser/RepositionCardFragment.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/browser/RepositionCardFragment.kt @@ -71,7 +71,7 @@ class RepositionCardFragment : DialogFragment() { title(text = title) customView(binding.root) negativeButton(R.string.dialog_cancel) - positiveButton(R.string.dialog_ok) { + positiveButton(R.string.reposition) { val position = binding.startInputEditText.textAsIntOrNull() ?: return@positiveButton val step = @@ -88,6 +88,30 @@ class RepositionCardFragment : DialogFragment() { } } + // Disable OK button if either field is empty + val positiveButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE) + val updateButtonState = { + val startText = binding.startInputEditText.text?.toString() ?: "" + val stepText = binding.stepInputEditText.text?.toString() ?: "" + positiveButton.isEnabled = startText.isNotEmpty() && stepText.isNotEmpty() + } + + binding.startInputEditText.addTextChangedListener(object : android.text.TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} + override fun afterTextChanged(s: android.text.Editable?) { + updateButtonState() + } + }) + + binding.stepInputEditText.addTextChangedListener(object : android.text.TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} + override fun afterTextChanged(s: android.text.Editable?) { + updateButtonState() + } + }) + // Only automatically show the keyboard in portrait mode // In landscape mode, the keyboard would take up too much screen space and hide the dialog val isPortrait = resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT @@ -95,6 +119,11 @@ class RepositionCardFragment : DialogFragment() { dialog.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE) } + // Initial button state check + dialog.setOnShowListener { + updateButtonState() + } + return dialog } diff --git a/AnkiDroid/src/main/res/layout/fragment_reposition_card.xml b/AnkiDroid/src/main/res/layout/fragment_reposition_card.xml index 265eabe6fb52..7d17920b042a 100644 --- a/AnkiDroid/src/main/res/layout/fragment_reposition_card.xml +++ b/AnkiDroid/src/main/res/layout/fragment_reposition_card.xml @@ -43,6 +43,7 @@ android:inputType="number" android:text="0" android:maxLines="1" + android:maxLength="10" tools:ignore="HardcodedText" /> @@ -68,6 +69,7 @@ android:inputType="number" android:text="1" android:maxLines="1" + android:maxLength="10" tools:ignore="HardcodedText" /> diff --git a/AnkiDroid/src/main/res/values/03-dialogs.xml b/AnkiDroid/src/main/res/values/03-dialogs.xml index f2173c5cc6ed..30a6fbb0f816 100644 --- a/AnkiDroid/src/main/res/values/03-dialogs.xml +++ b/AnkiDroid/src/main/res/values/03-dialogs.xml @@ -62,6 +62,7 @@ Cancel OK + Reposition Confirm No Yes