Skip to content

Commit 490c6d5

Browse files
david-allisonmikehardy
authored andcommitted
fix(card-browser): 'all columns' selected
If 'loadSampleRow' crashed, preferences were written using the sample row, which was all columns Fixes 19885 Assisted-by: Claude Opus 4.7 - diagnostics & code
1 parent 514d0a4 commit 490c6d5

2 files changed

Lines changed: 30 additions & 26 deletions

File tree

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

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -62,34 +62,22 @@ class ColumnWithSample(
6262
): BrowserRow? {
6363
if (id == null) return null
6464

65-
// save the current columns
66-
val originalColumns =
65+
val originalKeys =
6766
BrowserColumnCollection
68-
.replace(
69-
AnkiDroidApp.sharedPrefs(),
70-
cardsOrNotes,
71-
CardBrowserColumn.entries,
72-
).let { result ->
73-
CollectionManager.withCol { backend.setActiveBrowserColumns(result.newColumns.backendKeys) }
74-
result.originalColumns
75-
}
67+
.load(AnkiDroidApp.sharedPrefs(), cardsOrNotes)
68+
.backendKeys
69+
.toList()
7670

77-
// obtain a sample row
78-
val sampleRow: BrowserRow =
79-
CollectionManager.withCol { browserRowForId(id.cardOrNoteId) }
80-
Timber.d("got sample row")
81-
82-
// restore the past values
83-
BrowserColumnCollection
84-
.replace(
85-
AnkiDroidApp.sharedPrefs(),
86-
cardsOrNotes,
87-
originalColumns,
88-
).also { result ->
89-
CollectionManager.withCol { backend.setActiveBrowserColumns(result.newColumns.backendKeys) }
90-
}
91-
92-
return sampleRow
71+
return try {
72+
val allKeys = CardBrowserColumn.entries.map { it.ankiColumnKey }
73+
CollectionManager
74+
.withCol {
75+
backend.setActiveBrowserColumns(allKeys)
76+
browserRowForId(id.cardOrNoteId)
77+
}.also { Timber.d("got sample row") }
78+
} finally {
79+
CollectionManager.withCol { backend.setActiveBrowserColumns(originalKeys) }
80+
}
9381
}
9482
}
9583
}

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ import com.ichi2.anki.browser.RepositionCardsRequest.RepositionData
6262
import com.ichi2.anki.browser.search.SavedSearch
6363
import com.ichi2.anki.export.ExportDialogFragment
6464
import com.ichi2.anki.flagCardForNote
65+
import com.ichi2.anki.libanki.BrowserConfig
6566
import com.ichi2.anki.libanki.Card
6667
import com.ichi2.anki.libanki.CardId
6768
import com.ichi2.anki.libanki.CardType
@@ -1245,6 +1246,21 @@ class CardBrowserViewModelTest : JvmTest() {
12451246
}
12461247
}
12471248

1249+
@Test
1250+
fun `preview does not write to SharedPreferences - issue 19885`() =
1251+
runViewModelTest(notes = 1) {
1252+
// A crash/close here caused all columns to be visible.
1253+
sharedPrefs().edit { remove(BrowserConfig.ACTIVE_CARD_COLUMNS_KEY) }
1254+
1255+
previewColumnHeadings(CardsOrNotes.CARDS)
1256+
1257+
assertThat(
1258+
"activeCols must not be written during preview",
1259+
sharedPrefs().contains(BrowserConfig.ACTIVE_CARD_COLUMNS_KEY),
1260+
equalTo(false),
1261+
)
1262+
}
1263+
12481264
@Suppress("SpellCheckingInspection") // German
12491265
@Test
12501266
fun `columns headings - language change`() =

0 commit comments

Comments
 (0)