From 73a0345fe4264cad26be2bb1024dc35ba8efe7df Mon Sep 17 00:00:00 2001 From: PhilKes Date: Fri, 18 Apr 2025 15:41:45 +0200 Subject: [PATCH] Fix ListItem deletion order and repair broken parent check state --- .../note/listitem/ListItemCollectionExtensions.kt | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/philkes/notallyx/presentation/view/note/listitem/ListItemCollectionExtensions.kt b/app/src/main/java/com/philkes/notallyx/presentation/view/note/listitem/ListItemCollectionExtensions.kt index c1331a53..e3435cee 100644 --- a/app/src/main/java/com/philkes/notallyx/presentation/view/note/listitem/ListItemCollectionExtensions.kt +++ b/app/src/main/java/com/philkes/notallyx/presentation/view/note/listitem/ListItemCollectionExtensions.kt @@ -5,6 +5,8 @@ import com.philkes.notallyx.data.model.ListItem import com.philkes.notallyx.data.model.deepCopy import com.philkes.notallyx.data.model.findChild import com.philkes.notallyx.data.model.plus +import com.philkes.notallyx.data.model.shouldParentBeChecked +import com.philkes.notallyx.data.model.shouldParentBeUnchecked import com.philkes.notallyx.utils.filter import com.philkes.notallyx.utils.forEach import com.philkes.notallyx.utils.indices @@ -149,9 +151,20 @@ fun List.getOrNull(index: Int) = if (lastIndex >= index) this[index] else fun Collection.init(resetIds: Boolean = true): List { val initializedItems = deepCopy() initList(initializedItems, resetIds) + checkBrokenList(initializedItems) return initializedItems } +private fun checkBrokenList(list: List) { + list.forEach { listItem -> + if (listItem.shouldParentBeChecked()) { + listItem.checked = true + } else if (listItem.shouldParentBeUnchecked()) { + listItem.checked = false + } + } +} + private fun initList(list: List, resetIds: Boolean) { if (resetIds) { list.forEachIndexed { index, item -> item.id = index } @@ -250,7 +263,7 @@ fun SortedList.findParentsByChecked(checked: Boolean): List fun SortedList.deleteCheckedItems() { mapIndexed { index, listItem -> Pair(index, listItem) } .filter { it.second.checked } - .sortedBy { it.second.isChild } + .sortedBy { !it.second.isChild } .forEach { remove(it.second) } }