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