diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/reviewer/ViewerAction.kt b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/reviewer/ViewerAction.kt index 7136d4fcc6ed..a0f38966e42d 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/reviewer/ViewerAction.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/reviewer/ViewerAction.kt @@ -96,6 +96,7 @@ enum class ViewerAction( FLIP_OR_ANSWER_EASE4, SHOW_HINT, SHOW_ALL_HINTS, + EXIT, ; override val preferenceKey: String get() = "binding_$name" @@ -151,6 +152,7 @@ enum class ViewerAction( SHOW_ANSWER, DELETE, CARD_INFO, + EXIT, USER_ACTION_1, USER_ACTION_2, USER_ACTION_3, diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/ui/windows/reviewer/ReviewerFragment.kt b/AnkiDroid/src/main/java/com/ichi2/anki/ui/windows/reviewer/ReviewerFragment.kt index 1ae139bf3218..9b7b76e159ce 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/ui/windows/reviewer/ReviewerFragment.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/ui/windows/reviewer/ReviewerFragment.kt @@ -50,7 +50,6 @@ import com.google.android.material.card.MaterialCardView import com.google.android.material.shape.ShapeAppearanceModel import com.google.android.material.textfield.TextInputEditText import com.google.android.material.textview.MaterialTextView -import com.ichi2.anki.AbstractFlashcardViewer.Companion.RESULT_NO_MORE_CARDS import com.ichi2.anki.CollectionManager import com.ichi2.anki.DispatchKeyEventListener import com.ichi2.anki.NoteEditor @@ -87,7 +86,6 @@ import com.ichi2.anki.utils.ext.removeSubMenu import com.ichi2.anki.utils.ext.sharedPrefs import com.ichi2.anki.utils.ext.window import com.ichi2.libanki.sched.Counts -import kotlinx.coroutines.launch class ReviewerFragment : CardViewerFragment(R.layout.reviewer2), @@ -141,12 +139,10 @@ class ReviewerFragment : showSnackbar(message, duration = 500) } - viewModel.isQueueFinishedFlow.collectIn(lifecycleScope) { isQueueFinished -> - if (isQueueFinished) { - requireActivity().run { - setResult(RESULT_NO_MORE_CARDS) - finish() - } + viewModel.finishResultFlow.collectIn(lifecycleScope) { result -> + requireActivity().run { + setResult(result) + finish() } } diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/ui/windows/reviewer/ReviewerViewModel.kt b/AnkiDroid/src/main/java/com/ichi2/anki/ui/windows/reviewer/ReviewerViewModel.kt index 6df70945de3a..66d93efc9df0 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/ui/windows/reviewer/ReviewerViewModel.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/ui/windows/reviewer/ReviewerViewModel.kt @@ -25,6 +25,8 @@ import androidx.lifecycle.viewmodel.initializer import androidx.lifecycle.viewmodel.viewModelFactory import anki.collection.OpChanges import anki.frontend.SetSchedulingStatesRequest +import com.ichi2.anki.AbstractFlashcardViewer +import com.ichi2.anki.AbstractFlashcardViewer.Companion.RESULT_NO_MORE_CARDS import com.ichi2.anki.CollectionManager import com.ichi2.anki.CollectionManager.withCol import com.ichi2.anki.Ease @@ -79,7 +81,7 @@ class ReviewerViewModel( asyncIO { queueState.await()!!.topCard } - var isQueueFinishedFlow = MutableSharedFlow() + var finishResultFlow = MutableSharedFlow() val isMarkedFlow = MutableStateFlow(false) val flagFlow = MutableStateFlow(Flag.NONE) val actionFeedbackFlow = MutableSharedFlow() @@ -434,7 +436,7 @@ class ReviewerViewModel( } val state = queueState.await() if (state == null) { - isQueueFinishedFlow.emit(true) + finishResultFlow.emit(RESULT_NO_MORE_CARDS) return } @@ -516,6 +518,7 @@ class ReviewerViewModel( ViewerAction.FLIP_OR_ANSWER_EASE4 -> flipOrAnswer(Ease.EASY) ViewerAction.SHOW_HINT -> eval.emit("ankidroid.showHint()") ViewerAction.SHOW_ALL_HINTS -> eval.emit("ankidroid.showAllHints()") + ViewerAction.EXIT -> finishResultFlow.emit(AbstractFlashcardViewer.RESULT_DEFAULT) ViewerAction.USER_ACTION_1 -> userAction(1) ViewerAction.USER_ACTION_2 -> userAction(2) ViewerAction.USER_ACTION_3 -> userAction(3)