From e37b462d52e210bf54c5d60bdcda0391848c3d7e Mon Sep 17 00:00:00 2001 From: IAmJaishree Date: Sat, 20 Mar 2021 10:19:53 +0530 Subject: [PATCH] Added option to change default automatic answer This commit provides functionality of choosing the default answer for automatic display answer" scenario and by default "Good" is selected instead of "Again" as the answer. Fixes #2609 --- .../ichi2/anki/AbstractFlashcardViewer.java | 53 +++++++++++++++++-- .../src/main/res/values/10-preferences.xml | 1 + AnkiDroid/src/main/res/values/11-arrays.xml | 4 ++ AnkiDroid/src/main/res/values/constants.xml | 12 +++++ .../main/res/xml/preferences_reviewing.xml | 7 +++ 5 files changed, 74 insertions(+), 3 deletions(-) diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.java b/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.java index 11fc1c88dfd2..cdea1dc045b0 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.java +++ b/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.java @@ -272,6 +272,9 @@ public abstract class AbstractFlashcardViewer extends NavigationDrawerActivity i private boolean mInAnswer = false; private boolean mAnswerSoundsAdded = false; + /** Preferred option that should be selected in "Automatic answer" scenario **/ + private int mAutomaticAnswerSelection; + private CardTemplate mCardTemplate; /** @@ -1798,6 +1801,8 @@ protected void initControls() { protected SharedPreferences restorePreferences() { SharedPreferences preferences = AnkiDroidApp.getSharedPrefs(getBaseContext()); + + mAutomaticAnswerSelection = Integer.parseInt(preferences.getString("automaticAnswer", "3")); mUseInputTag = preferences.getBoolean("useInputTag", false); mDoNotUseCodeFormatting = preferences.getBoolean("noCodeFormatting", false); // On newer Androids, ignore this setting, which should be hidden in the prefs anyway. @@ -1927,9 +1932,51 @@ protected void updateDeckName() { protected final Runnable mShowQuestionTask = new Runnable() { @Override public void run() { - // Assume hitting the "Again" button when auto next question - if (mEase1Layout.isEnabled() && mEase1Layout.getVisibility() == View.VISIBLE) { - mEase1Layout.performClick(); + // Hitting button based on the user preference for "automaticdisplayanswer" scenario + switch (mAutomaticAnswerSelection) { + // Again + case 1: { + // "Again" is always present as the first button + if (mEase1Layout.isEnabled() && mEase1Layout.getVisibility() == View.VISIBLE) { + mEase1Layout.performClick(); + } + break; + } + // Hard(or Good if Hard is not an option) + case 2: { + // Second button can either be "Hard" or "Good" + // If "hard "is present it will be second button otherwise "Good" will be the second button + if (mEase2Layout.isEnabled() && mEase2Layout.getVisibility() == View.VISIBLE) { + mEase2Layout.performClick(); + } + break; + } + // "Good" + case 3: { + if (getAnswerButtonCount() == 2 && mEase2Layout.isEnabled() && mEase2Layout.getVisibility() == View.VISIBLE) { + // In case of only two buttons "Good" is the Second option + mEase2Layout.performClick(); + } else if (mEase3Layout.isEnabled() && mEase3Layout.getVisibility() == View.VISIBLE) { + // If more than two buttons are present then "Good" is the third option + mEase3Layout.performClick(); + } + break; + } + // "Easy (or Good if Easy is not an option )" + case 4: { + if (getAnswerButtonCount() == 4 && mEase4Layout.isEnabled() && mEase4Layout.getVisibility() == View.VISIBLE) { + // In case of All 4 buttons are present "Easy" is the 4th button + mEase4Layout.performClick(); + } else if (getAnswerButtonCount() == 3 && mEase3Layout.isEnabled() && mEase3Layout.getVisibility() == View.VISIBLE) { + // If 3 buttons are present then if "Easy" is present it is the third option + // or if "Easy" is not present then "Good" is the third option + mEase3Layout.performClick(); + } else if (mEase2Layout.isEnabled() && mEase2Layout.getVisibility() == View.VISIBLE) { + // If only two buttons are present then "Good" is the second option + mEase2Layout.performClick(); + } + break; + } } } }; diff --git a/AnkiDroid/src/main/res/values/10-preferences.xml b/AnkiDroid/src/main/res/values/10-preferences.xml index 84321f58aebe..1f80ed7854d4 100644 --- a/AnkiDroid/src/main/res/values/10-preferences.xml +++ b/AnkiDroid/src/main/res/values/10-preferences.xml @@ -128,6 +128,7 @@ Vibrate Blink light Automatic display answer + Timeout answer Show answer automatically without user input. Delay includes time for automatically played audio files. Time to show answer XXX s diff --git a/AnkiDroid/src/main/res/values/11-arrays.xml b/AnkiDroid/src/main/res/values/11-arrays.xml index e8884056db5f..4b2d860a00d5 100644 --- a/AnkiDroid/src/main/res/values/11-arrays.xml +++ b/AnkiDroid/src/main/res/values/11-arrays.xml @@ -95,5 +95,9 @@ Toggle Whiteboard Record Voice Replay Voice + Again + Hard (or Good if Hard is not an option) + Good (Default) + Easy (or Good if Easy is not an option) diff --git a/AnkiDroid/src/main/res/values/constants.xml b/AnkiDroid/src/main/res/values/constants.xml index 6d3ecb42cf95..4e9efad14c33 100644 --- a/AnkiDroid/src/main/res/values/constants.xml +++ b/AnkiDroid/src/main/res/values/constants.xml @@ -234,6 +234,18 @@ 1 2 + + @string/automatic_answer_option_1 + @string/automatic_answer_option_2 + @string/automatic_answer_option_3 + @string/automatic_answer_option_4 + + + 1 + 2 + 3 + 4 + 0 1 diff --git a/AnkiDroid/src/main/res/xml/preferences_reviewing.xml b/AnkiDroid/src/main/res/xml/preferences_reviewing.xml index 45e9ba4bd455..0c43360588db 100644 --- a/AnkiDroid/src/main/res/xml/preferences_reviewing.xml +++ b/AnkiDroid/src/main/res/xml/preferences_reviewing.xml @@ -145,6 +145,13 @@ android:key="timeoutAnswer" android:summary="@string/timeout_answer_summ" android:title="@string/timeout_answer_text" /> +