ankidroid / Anki-Android

AnkiDroid: Anki flashcards on Android. Your secret trick to achieve superhuman information retention.
GNU General Public License v3.0
8.59k stars 2.23k forks source link

Improve "discard changes" dialog options #15594

Closed user1823 closed 8 months ago

user1823 commented 8 months ago

If you click Add note and type something and then close the window without saving the changes, the following message pops up.

This pop up also appears at other places (for e.g. when leaving the Deck Options page without clicking Save).

The issue with this pop up is that "OK" and "Cancel" don't seem to be the correct responses to a message that says "Close and lose current input".

What about using the following instead?

criticalAY commented 8 months ago

Will use TR from backend

criticalAY commented 8 months ago

Good first issue, I have fixed it if anyone wants to drop a PR here's the patch

Subject: [PATCH] string from backend
---
Index: AnkiDroid/src/main/java/com/ichi2/anki/dialogs/EditDeckDescriptionDialog.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/EditDeckDescriptionDialog.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/EditDeckDescriptionDialog.kt
--- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/EditDeckDescriptionDialog.kt   (revision 906dd02571179f3096af4cdf32a924385c2af4b2)
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/EditDeckDescriptionDialog.kt   (date 1708346927147)
@@ -24,6 +24,7 @@
 import androidx.fragment.app.DialogFragment
 import com.google.android.material.appbar.MaterialToolbar
 import com.google.android.material.textfield.TextInputEditText
+import com.ichi2.anki.CollectionManager
 import com.ichi2.anki.CollectionManager.withCol
 import com.ichi2.anki.R
 import com.ichi2.anki.StudyOptionsFragment
@@ -106,7 +107,7 @@
         }

         Timber.i("asking if user should discard changes")
-        DiscardChangesDialog.showDialog(requireContext()) {
+        DiscardChangesDialog.showDialog(requireContext(),getString(R.string.discard), CollectionManager.TR.addingKeepEditing(), CollectionManager.TR.addingDiscardCurrentInput()) {
             closeWithoutSaving()
         }
     }
Index: AnkiDroid/src/main/java/com/ichi2/anki/CardTemplateBrowserAppearanceEditor.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/CardTemplateBrowserAppearanceEditor.kt b/AnkiDroid/src/main/java/com/ichi2/anki/CardTemplateBrowserAppearanceEditor.kt
--- a/AnkiDroid/src/main/java/com/ichi2/anki/CardTemplateBrowserAppearanceEditor.kt (revision 906dd02571179f3096af4cdf32a924385c2af4b2)
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/CardTemplateBrowserAppearanceEditor.kt (date 1708345145742)
@@ -98,7 +98,9 @@
     }

     private fun showDiscardChangesDialog() {
-        DiscardChangesDialog.showDialog(this, ::discardChangesAndClose)
+        DiscardChangesDialog.showDialog(this,getString(R.string.discard), CollectionManager.TR.addingKeepEditing(), CollectionManager.TR.addingDiscardCurrentInput()){
+            discardChangesAndClose()
+        }
     }

     private fun showRestoreDefaultDialog() {
Index: AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DiscardChangesDialog.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DiscardChangesDialog.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DiscardChangesDialog.kt
--- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DiscardChangesDialog.kt    (revision 906dd02571179f3096af4cdf32a924385c2af4b2)
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DiscardChangesDialog.kt    (date 1708344904076)
@@ -23,15 +23,16 @@
 import com.ichi2.utils.positiveButton
 import com.ichi2.utils.show

-class DiscardChangesDialog {
-    companion object {
+object DiscardChangesDialog {
         fun showDialog(
             context: Context,
+            positiveButtonText:String,
+            negativeButtonText:String,
+            message:String,
             positiveMethod: () -> Unit
         ) = AlertDialog.Builder(context).show {
-            message(R.string.discard_unsaved_changes)
-            positiveButton(R.string.dialog_ok) { positiveMethod() }
-            negativeButton(R.string.dialog_cancel)
+            message(text = message)
+            positiveButton(text = positiveButtonText) { positiveMethod() }
+            negativeButton(text = negativeButtonText)
         }
-    }
 }
Index: AnkiDroid/src/main/res/values/02-strings.xml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/AnkiDroid/src/main/res/values/02-strings.xml b/AnkiDroid/src/main/res/values/02-strings.xml
--- a/AnkiDroid/src/main/res/values/02-strings.xml  (revision 906dd02571179f3096af4cdf32a924385c2af4b2)
+++ b/AnkiDroid/src/main/res/values/02-strings.xml  (date 1708345145711)
@@ -94,7 +94,7 @@

     <!-- Card editor -->
     <string name="cardeditor_title_edit_card">Edit note</string>
-    <string name="discard_unsaved_changes">Close and lose current input?</string>
+    <string name="discard">Discard</string>
     <string name="note_editor_no_cards_created">No cards created. Please fill in more fields</string>
     <string name="note_editor_no_first_field">The first field is empty</string>
     <string name="note_editor_no_cloze_delations">This note type must contain cloze deletions</string>
Index: AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt b/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt
--- a/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt  (revision 906dd02571179f3096af4cdf32a924385c2af4b2)
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt  (date 1708345145736)
@@ -1260,7 +1260,7 @@
     }

     private fun showDiscardChangesDialog() {
-        DiscardChangesDialog.showDialog(this) {
+        DiscardChangesDialog.showDialog(this,getString(R.string.discard), TR.addingKeepEditing(), TR.addingDiscardCurrentInput()) {
             Timber.i("NoteEditor:: OK button pressed to confirm discard changes")
             closeNoteEditor()
         }
Index: AnkiDroid/src/main/java/com/ichi2/anki/CardTemplateEditor.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/CardTemplateEditor.kt b/AnkiDroid/src/main/java/com/ichi2/anki/CardTemplateEditor.kt
--- a/AnkiDroid/src/main/java/com/ichi2/anki/CardTemplateEditor.kt  (revision 906dd02571179f3096af4cdf32a924385c2af4b2)
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/CardTemplateEditor.kt  (date 1708345145724)
@@ -197,7 +197,7 @@
         return tempModel != null && tempModel!!.notetype.toString() != oldModel.toString()
     }

-    private fun showDiscardChangesDialog() = DiscardChangesDialog.showDialog(this) {
+    private fun showDiscardChangesDialog() = DiscardChangesDialog.showDialog(this,getString(R.string.discard), CollectionManager.TR.addingKeepEditing(), CollectionManager.TR.addingDiscardCurrentInput()) {
         Timber.i("TemplateEditor:: OK button pressed to confirm discard changes")
         // Clear the edited model from any cache files, and clear it from this objects memory to discard changes
         CardTemplateNotetype.clearTempModelFiles()
Index: AnkiDroid/src/test/java/com/ichi2/anki/CardTemplateEditorTest.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/CardTemplateEditorTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/CardTemplateEditorTest.kt
--- a/AnkiDroid/src/test/java/com/ichi2/anki/CardTemplateEditorTest.kt  (revision 906dd02571179f3096af4cdf32a924385c2af4b2)
+++ b/AnkiDroid/src/test/java/com/ichi2/anki/CardTemplateEditorTest.kt  (date 1708345337078)
@@ -78,14 +78,14 @@
         // Make sure we get a confirmation dialog if we hit the back button
         assertTrue("Unable to click?", shadowTestEditor.clickMenuItem(android.R.id.home))
         advanceRobolectricLooperWithSleep()
-        assertEquals("Wrong dialog shown?", getAlertDialogText(true), getResourceString(R.string.discard_unsaved_changes))
+        assertEquals("Wrong dialog shown?", getAlertDialogText(true), "Discard current input?")
         clickAlertDialogButton(DialogInterface.BUTTON_NEGATIVE, false)
         advanceRobolectricLooperWithSleep()
         assertTrue("model change not preserved despite canceling back button?", testEditor.modelHasChanged())

         // Make sure we things are cleared out after a cancel
         assertTrue("Unable to click?", shadowTestEditor.clickMenuItem(android.R.id.home))
-        assertEquals("Wrong dialog shown?", getAlertDialogText(true), getResourceString(R.string.discard_unsaved_changes))
+        assertEquals("Wrong dialog shown?", getAlertDialogText(true), "Discard current input?")
         clickAlertDialogButton(DialogInterface.BUTTON_POSITIVE, false)
         advanceRobolectricLooperWithSleep()
         assertFalse("model change not cleared despite discarding changes?", testEditor.modelHasChanged())
Index: AnkiDroid/src/main/java/com/ichi2/anki/pages/DeckOptions.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/pages/DeckOptions.kt b/AnkiDroid/src/main/java/com/ichi2/anki/pages/DeckOptions.kt
--- a/AnkiDroid/src/main/java/com/ichi2/anki/pages/DeckOptions.kt   (revision 906dd02571179f3096af4cdf32a924385c2af4b2)
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/pages/DeckOptions.kt   (date 1708345145717)
@@ -55,7 +55,7 @@
     private val onBackSaveCallback = object : OnBackPressedCallback(true) {
         override fun handleOnBackPressed() {
             Timber.v("DeckOptions: showing 'discard changes'")
-            DiscardChangesDialog.showDialog(requireContext()) {
+            DiscardChangesDialog.showDialog(requireContext(),getString(R.string.discard), CollectionManager.TR.addingKeepEditing(), CollectionManager.TR.addingDiscardCurrentInput()) {
                 Timber.i("OK button pressed to confirm discard changes")
                 this.isEnabled = false
                 requireActivity().onBackPressedDispatcher.onBackPressed()
Giyutomioka-SS commented 8 months ago

working on it