From d82e594043b228d603c8622a5e14e0dbbbf03206 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Tue, 22 Nov 2022 00:15:16 -0600 Subject: [PATCH] Limit sort order for astrid manual sorting Fix crash when sorting ~1000 tasks --- .../todoroo/astrid/subtasks/SubtasksFilterUpdater.kt | 12 +++++++----- .../com/todoroo/astrid/subtasks/SubtasksHelper.kt | 4 ++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksFilterUpdater.kt b/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksFilterUpdater.kt index 6c86848b6..baf51d0bd 100644 --- a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksFilterUpdater.kt +++ b/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksFilterUpdater.kt @@ -111,11 +111,11 @@ class SubtasksFilterUpdater @Inject constructor( return idToNode[taskId] } - private val orderedIds: Array + private val orderedIds: List get() { val ids = ArrayList() orderedIdHelper(treeRoot, ids) - return ids.toTypedArray() + return ids } private val orderString: String @@ -320,15 +320,17 @@ class SubtasksFilterUpdater @Inject constructor( companion object { const val ACTIVE_TASKS_ORDER = "active_tasks_order" // $NON-NLS-1$ const val TODAY_TASKS_ORDER = "today_tasks_order" // $NON-NLS-1$ + private const val MAX_ORDERED_TASKS = 900 - fun buildOrderString(ids: Array): String { + fun buildOrderString(ids: List): String { val builder = StringBuilder() if (ids.isEmpty()) { return "(1)" // $NON-NLS-1$ } - for (i in ids.indices.reversed()) { + val indices = ids.indices.reversed().take(MAX_ORDERED_TASKS) + indices.forEach { i -> builder.append(Task.UUID.eq(ids[i]).toString()) - if (i > 0) { + if (i != indices.last()) { builder.append(", ") // $NON-NLS-1$ } } diff --git a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.kt b/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.kt index 93e14e2ee..7c4a8bb65 100644 --- a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.kt +++ b/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.kt @@ -79,7 +79,7 @@ class SubtasksHelper @Inject constructor( return ids } - fun getStringIdArray(serializedTree: String?): Array { + fun getStringIdArray(serializedTree: String?): List { val ids = ArrayList() val values = serializedTree!!.split("""[\[\],"\s]""".toRegex()).toTypedArray() // Split on [ ] , or whitespace chars for (idString in values) { @@ -87,7 +87,7 @@ class SubtasksHelper @Inject constructor( ids.add(idString) } } - return ids.toTypedArray() + return ids } /** Takes a subtasks string containing local ids and remaps it to one containing UUIDs */