|
|
@ -62,12 +62,14 @@ class SectionedDataSource constructor(
|
|
|
|
for (i in tasks.indices) {
|
|
|
|
for (i in tasks.indices) {
|
|
|
|
val task = tasks[i]
|
|
|
|
val task = tasks[i]
|
|
|
|
val sortGroup = task.sortGroup ?: continue
|
|
|
|
val sortGroup = task.sortGroup ?: continue
|
|
|
|
val header = if (sortMode == SortHelper.SORT_IMPORTANCE || sortGroup == 0L) {
|
|
|
|
val header = if (task.isCompleted && !task.hasParent()) {
|
|
|
|
|
|
|
|
HEADER_COMPLETED
|
|
|
|
|
|
|
|
} else if (sortMode == SortHelper.SORT_IMPORTANCE || sortGroup == 0L) {
|
|
|
|
sortGroup
|
|
|
|
sortGroup
|
|
|
|
} else if (sortMode == SortHelper.SORT_DUE) {
|
|
|
|
} else if (sortMode == SortHelper.SORT_DUE) {
|
|
|
|
when {
|
|
|
|
when {
|
|
|
|
sortGroup == 0L -> 0
|
|
|
|
sortGroup == 0L -> 0
|
|
|
|
sortGroup < startOfToday -> -1
|
|
|
|
sortGroup < startOfToday -> HEADER_OVERDUE
|
|
|
|
else -> sortGroup.startOfDay()
|
|
|
|
else -> sortGroup.startOfDay()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
@ -77,14 +79,21 @@ class SectionedDataSource constructor(
|
|
|
|
if (i == 0) {
|
|
|
|
if (i == 0) {
|
|
|
|
sections.add(AdapterSection(i, header, 0, isCollapsed))
|
|
|
|
sections.add(AdapterSection(i, header, 0, isCollapsed))
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
val previous = tasks[i - 1].sortGroup
|
|
|
|
val previousTask = tasks[i - 1]
|
|
|
|
when (sortMode) {
|
|
|
|
val previous = previousTask.sortGroup
|
|
|
|
SortHelper.SORT_IMPORTANCE -> if (header != previous) {
|
|
|
|
when {
|
|
|
|
sections.add(AdapterSection(i, header, 0, isCollapsed))
|
|
|
|
task.isCompleted && !task.hasParent() -> {
|
|
|
|
|
|
|
|
if (!previousTask.isCompleted) {
|
|
|
|
|
|
|
|
sections.add(AdapterSection(i, header, 0, isCollapsed))
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
SortHelper.SORT_DUE -> {
|
|
|
|
sortMode == SortHelper.SORT_IMPORTANCE ->
|
|
|
|
|
|
|
|
if (header != previous) {
|
|
|
|
|
|
|
|
sections.add(AdapterSection(i, header, 0, isCollapsed))
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
sortMode == SortHelper.SORT_DUE -> {
|
|
|
|
val previousOverdue = previous < startOfToday
|
|
|
|
val previousOverdue = previous < startOfToday
|
|
|
|
val currentOverdue = header == -1L
|
|
|
|
val currentOverdue = header == HEADER_OVERDUE
|
|
|
|
if (previous > 0 &&
|
|
|
|
if (previous > 0 &&
|
|
|
|
((currentOverdue != previousOverdue) ||
|
|
|
|
((currentOverdue != previousOverdue) ||
|
|
|
|
(!currentOverdue && header != previous.startOfDay()))
|
|
|
|
(!currentOverdue && header != previous.startOfDay()))
|
|
|
@ -143,4 +152,9 @@ class SectionedDataSource constructor(
|
|
|
|
sections.forEach { _, header -> values.add(header.value) }
|
|
|
|
sections.forEach { _, header -> values.add(header.value) }
|
|
|
|
return values
|
|
|
|
return values
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
companion object {
|
|
|
|
|
|
|
|
const val HEADER_OVERDUE = -1L
|
|
|
|
|
|
|
|
const val HEADER_COMPLETED = -2L
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|