mirror of
https://github.com/ankidroid/Anki-Android.git
synced 2024-09-20 12:02:16 +02:00
Fix expand state not updating in V16
This regressed in 9644f5724c
+ Fix incorrect private find() implementation in CardContentProvider, and
move into shared file.
Closes #11999
This commit is contained in:
parent
cfb21276ad
commit
c69f273496
@ -99,7 +99,9 @@ import com.ichi2.libanki.*
|
||||
import com.ichi2.libanki.Collection.CheckDatabaseResult
|
||||
import com.ichi2.libanki.importer.AnkiPackageImporter
|
||||
import com.ichi2.libanki.sched.AbstractDeckTreeNode
|
||||
import com.ichi2.libanki.sched.DeckDueTreeNode
|
||||
import com.ichi2.libanki.sched.TreeNode
|
||||
import com.ichi2.libanki.sched.findInDeckTree
|
||||
import com.ichi2.libanki.sync.CustomSyncServerUrlException
|
||||
import com.ichi2.libanki.sync.Syncer.ConnectionResultType
|
||||
import com.ichi2.libanki.utils.TimeManager
|
||||
@ -1016,9 +1018,16 @@ open class DeckPicker :
|
||||
}
|
||||
|
||||
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
|
||||
@RustCleanup("make mDueTree a concrete DeckDueTreeNode")
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
fun toggleDeckExpand(did: DeckId) {
|
||||
if (!col.decks.children(did).isEmpty()) {
|
||||
// update DB
|
||||
col.decks.collapse(did)
|
||||
// update stored state
|
||||
findInDeckTree(mDueTree!! as List<TreeNode<DeckDueTreeNode>>, did)?.run {
|
||||
collapsed = !collapsed
|
||||
}
|
||||
renderPage()
|
||||
dismissAllDialogFragments()
|
||||
}
|
||||
|
@ -38,6 +38,7 @@ import com.ichi2.libanki.exception.EmptyMediaException
|
||||
import com.ichi2.libanki.sched.AbstractSched
|
||||
import com.ichi2.libanki.sched.DeckDueTreeNode
|
||||
import com.ichi2.libanki.sched.TreeNode
|
||||
import com.ichi2.libanki.sched.findInDeckTree
|
||||
import com.ichi2.libanki.utils.TimeManager
|
||||
import com.ichi2.utils.FileUtil.internalizeUri
|
||||
import com.ichi2.utils.JSONArray
|
||||
@ -390,16 +391,7 @@ class CardContentProvider : ContentProvider() {
|
||||
val rv = MatrixCursor(columns, 1)
|
||||
val allDecks = col.sched.deckDueTree()
|
||||
val desiredDeckId = uri.pathSegments[1].toLong()
|
||||
fun find(nodeList: List<TreeNode<DeckDueTreeNode>>, id: Long): DeckDueTreeNode? {
|
||||
for (node in nodeList) {
|
||||
if (node.value.did == id) {
|
||||
return node.value
|
||||
}
|
||||
return find(node.children, id)
|
||||
}
|
||||
return null
|
||||
}
|
||||
find(allDecks, desiredDeckId)?.let {
|
||||
findInDeckTree(allDecks, desiredDeckId)?.let {
|
||||
addDeckToCursor(it.did, it.fullDeckName, getDeckCountsFromDueTreeNode(it), rv, col, columns)
|
||||
}
|
||||
rv
|
||||
|
@ -117,3 +117,18 @@ class DeckDueTreeNode(
|
||||
return revCount > 0 || newCount > 0 || lrnCount > 0
|
||||
}
|
||||
}
|
||||
|
||||
/** Locate node with a given deck ID in a list of nodes.
|
||||
*
|
||||
* This could be converted into a method if AnkiDroid returned a top-level
|
||||
* node instead of a list of nodes.
|
||||
*/
|
||||
fun findInDeckTree(nodes: List<TreeNode<DeckDueTreeNode>>, deckId: Long): DeckDueTreeNode? {
|
||||
for (node in nodes) {
|
||||
if (node.value.did == deckId) {
|
||||
return node.value
|
||||
}
|
||||
return findInDeckTree(node.children, deckId) ?: continue
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user