From 139eb7616800f439a61f00bd42d22302793260c5 Mon Sep 17 00:00:00 2001 From: jatinkumar2409 Date: Mon, 11 May 2026 17:08:57 +0530 Subject: [PATCH] providing the selected kind to launch custom study to provide user's intent --- .../dialogs/customstudy/CustomStudyDialog.kt | 4 ++-- .../dialogs/customstudy/CustomStudyViewModel.kt | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/customstudy/CustomStudyDialog.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/customstudy/CustomStudyDialog.kt index 285e4f060ec9..dba640f967dd 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/customstudy/CustomStudyDialog.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/customstudy/CustomStudyDialog.kt @@ -149,7 +149,7 @@ class CustomStudyDialog : AnalyticsDialogFragment() { val option = selectedSubDialog ?: return@setFragmentResultListener val selectedCardStateIndex = viewModel.selectedCardStateIndex if (selectedCardStateIndex == AdapterView.INVALID_POSITION) return@setFragmentResultListener - val kind = CustomStudyCardState.entries[selectedCardStateIndex].kind + val kind = viewModel.selectedKind val cardsAmount = userInputValue ?: 100 // the default value launchCustomStudy(option, cardsAmount, kind, tagsToInclude, emptyList()) } @@ -404,7 +404,7 @@ class CustomStudyDialog : AnalyticsDialogFragment() { } // skip tag selection if there's no tags to select if (nids.isEmpty()) { - launchCustomStudy(contextMenuOption, n) + launchCustomStudy(contextMenuOption, n, viewModel.selectedKind) return@launchCatchingTask } if (isAdded) { diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/customstudy/CustomStudyViewModel.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/customstudy/CustomStudyViewModel.kt index 9a6c779aa928..35b297924618 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/customstudy/CustomStudyViewModel.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/customstudy/CustomStudyViewModel.kt @@ -18,6 +18,9 @@ package com.ichi2.anki.dialogs.customstudy import android.widget.AdapterView import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel +import anki.scheduler.CustomStudyRequest.Cram.CramKind +import com.ichi2.anki.common.annotations.NeedsTest +import com.ichi2.anki.dialogs.customstudy.CustomStudyDialog.CustomStudyCardState import com.ichi2.anki.libanki.Deck import com.ichi2.anki.libanki.DeckId @@ -42,6 +45,20 @@ class CustomStudyViewModel( val deckId: DeckId get() = savedStateHandle.get(KEY_DID) ?: error("Deck id was not provided!") + /* + * Translates the user's selection into a specific study type. + * This prevents the app from "forgetting" user's choice (e.g., Due Cards) + * even if the tag selection screen is skipped. + */ + @NeedsTest("Verify that selectedCardStateIndex correctly maps to the corresponding CramKind") + val selectedKind: CramKind + get() = + if (selectedCardStateIndex != AdapterView.INVALID_POSITION) { + CustomStudyCardState.entries[selectedCardStateIndex].kind + } else { + CramKind.CRAM_KIND_NEW + } + companion object { /** * Required key for a [DeckId] which [CustomStudyDialog] expects to receive as an argument.