Skip to content

Commit 991b3ac

Browse files
david-allisonlukstbit
authored andcommitted
refactor(card-browser): prefer 'SelectableDeck' class
Prep for another deck selection dialog when moving to a Chip control
1 parent a36ecde commit 991b3ac

File tree

4 files changed

+27
-22
lines changed

4 files changed

+27
-22
lines changed

AnkiDroid/src/main/java/com/ichi2/anki/CardBrowser.kt

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ import com.google.android.material.snackbar.Snackbar
5353
import com.ichi2.anim.ActivityTransitionAnimation.Direction
5454
import com.ichi2.anki.CollectionManager.TR
5555
import com.ichi2.anki.CollectionManager.withCol
56-
import com.ichi2.anki.DeckSpinnerSelection.Companion.ALL_DECKS_ID
5756
import com.ichi2.anki.browser.BrowserRowCollection
5857
import com.ichi2.anki.browser.CardBrowserFragment
5958
import com.ichi2.anki.browser.CardBrowserLaunchOptions
@@ -136,11 +135,7 @@ open class CardBrowser :
136135
}
137136

138137
override fun onDeckSelected(deck: SelectableDeck?) {
139-
when (deck) {
140-
is SelectableDeck.AllDecks -> launchCatchingTask { viewModel.setDeckId(ALL_DECKS_ID) }
141-
is SelectableDeck.Deck -> launchCatchingTask { viewModel.setDeckId(deck.deckId) }
142-
null -> {}
143-
}
138+
deck?.let { deck -> launchCatchingTask { viewModel.setSelectedDeck(deck) } }
144139
}
145140

146141
override var fragmented: Boolean
@@ -1297,7 +1292,7 @@ open class CardBrowser :
12971292
fun searchAllDecks() =
12981293
launchCatchingTask {
12991294
// all we need to do is select all decks
1300-
viewModel.setDeckId(DeckSpinnerSelection.ALL_DECKS_ID)
1295+
viewModel.setSelectedDeck(SelectableDeck.AllDecks)
13011296
}
13021297

13031298
/**

AnkiDroid/src/main/java/com/ichi2/anki/browser/CardBrowserViewModel.kt

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,14 @@ class CardBrowserViewModel(
285285
val lastDeckId: DeckId?
286286
get() = lastDeckIdRepository.lastDeckId
287287

288-
suspend fun setDeckId(deckId: DeckId) {
288+
suspend fun setSelectedDeck(deck: SelectableDeck) =
289+
when (deck) {
290+
is SelectableDeck.AllDecks -> setSelectedDeck(ALL_DECKS_ID)
291+
is SelectableDeck.Deck -> setSelectedDeck(deck.deckId)
292+
}
293+
294+
// TODO: Replace with setSelectedDeck(selectableDeck)
295+
suspend fun setSelectedDeck(deckId: DeckId) {
289296
Timber.i("setting deck: %d", deckId)
290297
lastDeckIdRepository.lastDeckId = deckId
291298
restrictOnDeck =
@@ -310,19 +317,22 @@ class CardBrowserViewModel(
310317

311318
suspend fun queryDataForCardEdit(id: CardOrNoteId): CardId = id.toCardId(cardsOrNotes)
312319

313-
private suspend fun getInitialDeck(): DeckId {
320+
private suspend fun getInitialDeck(): SelectableDeck {
314321
// TODO: Handle the launch intent
315322
val lastDeckId = lastDeckId
316323
if (lastDeckId == ALL_DECKS_ID) {
317-
return ALL_DECKS_ID
324+
return SelectableDeck.AllDecks
318325
}
319326

320327
// If a valid value for last deck exists then use it, otherwise use libanki selected deck
321-
return if (lastDeckId != null && withCol { decks.getLegacy(lastDeckId) != null }) {
322-
lastDeckId
323-
} else {
324-
withCol { decks.selected() }
325-
}
328+
val idToUse =
329+
if (lastDeckId != null && withCol { decks.getLegacy(lastDeckId) != null }) {
330+
lastDeckId
331+
} else {
332+
withCol { decks.selected() }
333+
}
334+
335+
return SelectableDeck.Deck(deckId = idToUse, name = withCol { decks.name(idToUse) })
326336
}
327337

328338
val flowOfInitCompleted = MutableStateFlow(false)
@@ -414,9 +424,9 @@ class CardBrowserViewModel(
414424
viewModelScope.launch {
415425
shouldIgnoreAccents = withCol { config.getBool(ConfigKey.Bool.IGNORE_ACCENTS_IN_SEARCH) }
416426

417-
val initialDeckId = if (selectAllDecks) ALL_DECKS_ID else getInitialDeck()
427+
val initialDeckId = if (selectAllDecks) SelectableDeck.AllDecks else getInitialDeck()
418428
// PERF: slightly inefficient if the source was lastDeckId
419-
setDeckId(initialDeckId)
429+
setSelectedDeck(initialDeckId)
420430
refreshBackendColumns()
421431

422432
val cardsOrNotes = withCol { CardsOrNotes.fromCollection(this@withCol) }

AnkiDroid/src/test/java/com/ichi2/anki/CardBrowserTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -520,7 +520,7 @@ class CardBrowserTest : RobolectricTest() {
520520
not(equalTo(targetDid)),
521521
)
522522

523-
b.viewModel.setDeckId(targetDid)
523+
b.viewModel.setSelectedDeck(targetDid)
524524

525525
assertThat("The target deck should be selected", b.lastDeckId, equalTo(targetDid))
526526

@@ -1169,7 +1169,7 @@ class CardBrowserTest : RobolectricTest() {
11691169
val secondDeckId = requireNotNull(col.decks.idForName("Second"))
11701170

11711171
browserWithNoNewCards.apply {
1172-
viewModel.setDeckId(secondDeckId)
1172+
viewModel.setSelectedDeck(secondDeckId)
11731173
assertThat(viewModel.deckId, equalTo(secondDeckId))
11741174
finish()
11751175
}

AnkiDroid/src/test/java/com/ichi2/anki/browser/CardBrowserViewModelTest.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import app.cash.turbine.test
2424
import com.ichi2.anki.AnkiDroidApp
2525
import com.ichi2.anki.CardBrowser
2626
import com.ichi2.anki.CollectionManager
27-
import com.ichi2.anki.DeckSpinnerSelection
2827
import com.ichi2.anki.Flag
2928
import com.ichi2.anki.NoteEditorActivity
3029
import com.ichi2.anki.NoteEditorFragment
@@ -66,6 +65,7 @@ import com.ichi2.anki.libanki.QueueType.ManuallyBuried
6665
import com.ichi2.anki.libanki.QueueType.New
6766
import com.ichi2.anki.libanki.testutils.AnkiTest
6867
import com.ichi2.anki.model.CardsOrNotes
68+
import com.ichi2.anki.model.SelectableDeck
6969
import com.ichi2.anki.model.SortType
7070
import com.ichi2.anki.model.SortType.NO_SORTING
7171
import com.ichi2.anki.model.SortType.SORT_FIELD
@@ -161,7 +161,7 @@ class CardBrowserViewModelTest : JvmTest() {
161161

162162
assertThat("All decks should not be selected", !hasSelectedAllDecks())
163163

164-
setDeckId(DeckSpinnerSelection.ALL_DECKS_ID)
164+
setSelectedDeck(SelectableDeck.AllDecks)
165165

166166
assertThat("All decks should be selected", hasSelectedAllDecks())
167167

@@ -1022,7 +1022,7 @@ class CardBrowserViewModelTest : JvmTest() {
10221022
fun `deck name with quotes is properly escaped in search query`() =
10231023
runViewModelTest {
10241024
val deckWithQuotes = addDeck("Test\"Quotes\"In\"Deck")
1025-
setDeckId(deckWithQuotes)
1025+
setSelectedDeck(deckWithQuotes)
10261026

10271027
assertThat(
10281028
"Quotes in deck name should be escaped with backslashes",

0 commit comments

Comments
 (0)