Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class PeripheralKeymapTest : InstrumentedTest() {
assertThat<List<ViewerCommand>>(processed, hasSize(1))
assertThat(
processed[0],
equalTo(ViewerCommand.FLIP_OR_ANSWER_EASE1),
equalTo(ViewerCommand.ANSWER_AGAIN),
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1657,22 +1657,22 @@ abstract class AbstractFlashcardViewer :
true
}

ViewerCommand.FLIP_OR_ANSWER_EASE1 -> {
ViewerCommand.ANSWER_AGAIN -> {
flipOrAnswerCard(Rating.AGAIN)
true
}

ViewerCommand.FLIP_OR_ANSWER_EASE2 -> {
ViewerCommand.ANSWER_HARD -> {
flipOrAnswerCard(Rating.HARD)
true
}

ViewerCommand.FLIP_OR_ANSWER_EASE3 -> {
ViewerCommand.ANSWER_GOOD -> {
flipOrAnswerCard(Rating.GOOD)
true
}

ViewerCommand.FLIP_OR_ANSWER_EASE4 -> {
ViewerCommand.ANSWER_EASY -> {
flipOrAnswerCard(Rating.EASY)
true
}
Expand Down
1 change: 1 addition & 0 deletions AnkiDroid/src/main/java/com/ichi2/anki/DeckPicker.kt
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ import com.ichi2.anki.preferences.AdvancedSettingsFragment
import com.ichi2.anki.preferences.PreferencesActivity
import com.ichi2.anki.preferences.sharedPrefs
import com.ichi2.anki.receiver.SdCardReceiver
import com.ichi2.anki.servicelayer.PreferenceUpgradeService
import com.ichi2.anki.servicelayer.ScopedStorageService
import com.ichi2.anki.settings.Prefs
import com.ichi2.anki.snackbar.BaseSnackbarBuilderProvider
Expand Down
26 changes: 13 additions & 13 deletions AnkiDroid/src/main/java/com/ichi2/anki/cardviewer/ViewerCommand.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@ import com.ichi2.anki.reviewer.ReviewerBinding
/** Abstraction: Discuss moving many of these to 'Reviewer' */
enum class ViewerCommand : MappableAction<ReviewerBinding> {
SHOW_ANSWER,
FLIP_OR_ANSWER_EASE1,
FLIP_OR_ANSWER_EASE2,
FLIP_OR_ANSWER_EASE3,
FLIP_OR_ANSWER_EASE4,
ANSWER_AGAIN,
ANSWER_HARD,
ANSWER_GOOD,
ANSWER_EASY,
UNDO,
REDO,
EDIT,
Expand Down Expand Up @@ -92,31 +92,31 @@ enum class ViewerCommand : MappableAction<ReviewerBinding> {
val defaultValue: List<ReviewerBinding>
get() {
return when (this) {
FLIP_OR_ANSWER_EASE1 ->
ANSWER_AGAIN ->
listOf(
keyCode(KeyEvent.KEYCODE_BUTTON_Y, CardSide.BOTH),
keyCode(KeyEvent.KEYCODE_BUTTON_Y, CardSide.ANSWER),
keyCode(KeyEvent.KEYCODE_1, CardSide.ANSWER),
keyCode(KeyEvent.KEYCODE_NUMPAD_1, CardSide.ANSWER),
)
FLIP_OR_ANSWER_EASE2 ->
ANSWER_HARD ->
listOf(
keyCode(KeyEvent.KEYCODE_BUTTON_X, CardSide.BOTH),
keyCode(KeyEvent.KEYCODE_BUTTON_X, CardSide.ANSWER),
keyCode(KeyEvent.KEYCODE_2, CardSide.ANSWER),
keyCode(KeyEvent.KEYCODE_NUMPAD_2, CardSide.ANSWER),
)
FLIP_OR_ANSWER_EASE3 ->
ANSWER_GOOD ->
listOf(
keyCode(KeyEvent.KEYCODE_BUTTON_B, CardSide.BOTH),
keyCode(KeyEvent.KEYCODE_BUTTON_B, CardSide.ANSWER),
keyCode(KeyEvent.KEYCODE_3, CardSide.ANSWER),
keyCode(KeyEvent.KEYCODE_NUMPAD_3, CardSide.ANSWER),
keyCode(KeyEvent.KEYCODE_DPAD_CENTER, CardSide.BOTH),
keyCode(KeyEvent.KEYCODE_DPAD_CENTER, CardSide.ANSWER),
keyCode(KeyEvent.KEYCODE_SPACE, CardSide.ANSWER),
keyCode(KeyEvent.KEYCODE_ENTER, CardSide.ANSWER),
keyCode(KeyEvent.KEYCODE_NUMPAD_ENTER, CardSide.ANSWER),
)
FLIP_OR_ANSWER_EASE4 ->
ANSWER_EASY ->
listOf(
keyCode(KeyEvent.KEYCODE_BUTTON_A, CardSide.BOTH),
keyCode(KeyEvent.KEYCODE_BUTTON_A, CardSide.ANSWER),
keyCode(KeyEvent.KEYCODE_4, CardSide.ANSWER),
keyCode(KeyEvent.KEYCODE_NUMPAD_4, CardSide.ANSWER),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package com.ichi2.anki.preferences
import android.content.res.Configuration
import androidx.annotation.StringRes
import androidx.annotation.XmlRes
import androidx.appcompat.app.AlertDialog
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.withResumed
import androidx.lifecycle.withStarted
Expand All @@ -31,12 +32,15 @@ import com.ichi2.anki.cardviewer.ViewerCommand
import com.ichi2.anki.common.annotations.NeedsTest
import com.ichi2.anki.preferences.reviewer.ViewerAction
import com.ichi2.anki.previewer.PreviewerAction
import com.ichi2.anki.reviewer.CardSide
import com.ichi2.anki.reviewer.MappableAction
import com.ichi2.anki.reviewer.MappableBinding.Companion.toPreferenceString
import com.ichi2.anki.settings.Prefs
import com.ichi2.anki.ui.internationalization.toSentenceCase
import com.ichi2.anki.utils.ext.sharedPrefs
import com.ichi2.preferences.ControlPreference
import com.ichi2.preferences.ReviewerControlPreference
import com.ichi2.utils.show
import kotlinx.coroutines.launch
import timber.log.Timber

Expand Down Expand Up @@ -64,6 +68,7 @@ class ControlsSettingsFragment :
setControlPreferencesDefaultValues(initialScreen)
setDynamicTitle()
setupNewStudyScreenSettings()
setupAnswerCommands()
}

/**
Expand Down Expand Up @@ -198,6 +203,43 @@ class ControlsSettingsFragment :
}
}

private fun setupAnswerCommands() {
val showAnswerPref = (findPreference<ControlPreference>(R.string.show_answer_command_key) as? ReviewerControlPreference)

val answerCommandKeys =
listOf(
ViewerAction.ANSWER_AGAIN.preferenceKey,
ViewerAction.ANSWER_HARD.preferenceKey,
ViewerAction.ANSWER_GOOD.preferenceKey,
ViewerAction.ANSWER_EASY.preferenceKey,
)
for (key in answerCommandKeys) {
(findPreference<Preference>(key) as? ReviewerControlPreference)?.let { answerPref ->
val items =
arrayOf(
getString(R.string.only_answer),
getString(R.string.flip_and_answer),
)
answerPref.setOnBindingSelectedListener { binding ->
AlertDialog.Builder(requireContext()).show {
setTitle(answerPref.title)
setIcon(answerPref.icon)
setItems(items) { _, index ->
when (index) {
0 -> answerPref.addBinding(binding, CardSide.ANSWER)
1 -> {
answerPref.addBinding(binding, CardSide.ANSWER)
showAnswerPref?.addBinding(binding, CardSide.QUESTION)
}
}
}
}
true
}
}
}
}

companion object {
private val actionToScreenMap: Map<String, ControlPreferenceScreen> by lazy {
ControlPreferenceScreen.entries
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,10 +102,10 @@ enum class ViewerAction(

// Command only
SHOW_ANSWER,
FLIP_OR_ANSWER_EASE1,
FLIP_OR_ANSWER_EASE2,
FLIP_OR_ANSWER_EASE3,
FLIP_OR_ANSWER_EASE4,
ANSWER_AGAIN,
ANSWER_HARD,
ANSWER_GOOD,
ANSWER_EASY,
TOGGLE_FLAG_RED,
TOGGLE_FLAG_ORANGE,
TOGGLE_FLAG_GREEN,
Expand Down Expand Up @@ -183,36 +183,42 @@ enum class ViewerAction(
keycode(KeyEvent.KEYCODE_7, ctrl()),
keycode(KeyEvent.KEYCODE_NUMPAD_7, ctrl()),
)
FLIP_OR_ANSWER_EASE1 ->
ANSWER_AGAIN ->
listOf(
keycode(KeyEvent.KEYCODE_BUTTON_Y),
keycode(KeyEvent.KEYCODE_BUTTON_Y, side = CardSide.ANSWER),
keycode(KeyEvent.KEYCODE_1, side = CardSide.ANSWER),
keycode(KeyEvent.KEYCODE_NUMPAD_1, side = CardSide.ANSWER),
)
FLIP_OR_ANSWER_EASE2 ->
ANSWER_HARD ->
listOf(
keycode(KeyEvent.KEYCODE_BUTTON_X),
keycode(KeyEvent.KEYCODE_BUTTON_X, side = CardSide.ANSWER),
keycode(KeyEvent.KEYCODE_2, side = CardSide.ANSWER),
keycode(KeyEvent.KEYCODE_NUMPAD_2, side = CardSide.ANSWER),
)
FLIP_OR_ANSWER_EASE3 ->
ANSWER_GOOD ->
listOf(
keycode(KeyEvent.KEYCODE_BUTTON_B),
keycode(KeyEvent.KEYCODE_BUTTON_B, side = CardSide.ANSWER),
keycode(KeyEvent.KEYCODE_3, side = CardSide.ANSWER),
keycode(KeyEvent.KEYCODE_NUMPAD_3, side = CardSide.ANSWER),
keycode(KeyEvent.KEYCODE_DPAD_CENTER),
keycode(KeyEvent.KEYCODE_SPACE, side = CardSide.BOTH),
keycode(KeyEvent.KEYCODE_DPAD_CENTER, side = CardSide.ANSWER),
keycode(KeyEvent.KEYCODE_SPACE, side = CardSide.ANSWER),
keycode(KeyEvent.KEYCODE_ENTER, side = CardSide.ANSWER),
keycode(KeyEvent.KEYCODE_NUMPAD_ENTER, side = CardSide.ANSWER),
)
FLIP_OR_ANSWER_EASE4 ->
ANSWER_EASY ->
listOf(
keycode(KeyEvent.KEYCODE_BUTTON_A),
keycode(KeyEvent.KEYCODE_BUTTON_A, side = CardSide.ANSWER),
keycode(KeyEvent.KEYCODE_4, side = CardSide.ANSWER),
keycode(KeyEvent.KEYCODE_NUMPAD_4, side = CardSide.ANSWER),
)
SHOW_ANSWER -> {
listOf(
keycode(KeyEvent.KEYCODE_SPACE, side = CardSide.QUESTION),
keycode(KeyEvent.KEYCODE_ENTER, side = CardSide.QUESTION),
keycode(KeyEvent.KEYCODE_NUMPAD_ENTER, side = CardSide.QUESTION),
)
}
// No default gestures
SHOW_ANSWER,
DELETE,
CARD_INFO,
TAG,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,10 @@ enum class AnswerButtons {

fun toViewerCommand(): ViewerCommand =
when (this) {
AGAIN -> ViewerCommand.FLIP_OR_ANSWER_EASE1
HARD -> ViewerCommand.FLIP_OR_ANSWER_EASE2
GOOD -> ViewerCommand.FLIP_OR_ANSWER_EASE3
EASY -> ViewerCommand.FLIP_OR_ANSWER_EASE4
AGAIN -> ViewerCommand.ANSWER_AGAIN
HARD -> ViewerCommand.ANSWER_HARD
GOOD -> ViewerCommand.ANSWER_GOOD
EASY -> ViewerCommand.ANSWER_EASY
}

companion object {
Expand Down
Loading