Fix some filter stability issues

pull/3390/head
Alex Baker 10 months ago
parent 0d2bf1a3ff
commit 1608aaeb54

@ -1,23 +1,9 @@
package org.tasks.compose.drawer
import androidx.compose.runtime.Stable
import co.touchlab.kermit.Logger
import org.tasks.data.UUIDHelper
import org.tasks.filters.CaldavFilter
import org.tasks.filters.CustomFilter
import org.tasks.filters.MyTasksFilter
import org.tasks.filters.NavigationDrawerSubheader
import org.tasks.filters.NotificationsFilter
import org.tasks.filters.PlaceFilter
import org.tasks.filters.RecentlyModifiedFilter
import org.tasks.filters.SnoozedFilter
import org.tasks.filters.TagFilter
import org.tasks.filters.TimerFilter
import org.tasks.filters.TodayFilter
import org.tasks.filters.key
@Stable
sealed class DrawerItem {
@Stable
data class Filter(
val title: String,
val icon: String?,
@ -27,25 +13,9 @@ sealed class DrawerItem {
val selected: Boolean = false,
val filter: org.tasks.filters.Filter,
) : DrawerItem() {
override fun key() = when (filter) {
is CustomFilter -> "custom_${filter.id}"
is CaldavFilter -> "list_${filter.account.id}_${filter.calendar.id}"
is PlaceFilter -> "place_${filter.place.id}"
is TagFilter -> "tag_${filter.tagData.id}"
is MyTasksFilter -> "builtin_my_tasks"
is TodayFilter -> "builtin_today"
is RecentlyModifiedFilter -> "builtin_recently_modified"
is TimerFilter -> "builtin_timer"
is SnoozedFilter -> "builtin_snoozed"
is NotificationsFilter -> "builtin_notifications"
else -> {
Logger.w { "Unexpected filter type: ${filter.javaClass.name}" }
UUIDHelper.newUUID()
}
}
override fun key() = filter.key()
}
@Stable
data class Header(
val title: String,
val collapsed: Boolean,

@ -1,5 +1,6 @@
package org.tasks.filters
import org.tasks.CommonParcelize
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.entity.CaldavTask
@ -10,9 +11,20 @@ import org.tasks.data.sql.Join
import org.tasks.data.sql.QueryTemplate
import org.tasks.themes.TasksIcons
@CommonParcelize
data class DebugFilter(
override val title: String,
override val sql: String?,
override val icon: String?,
) : Filter() {
override fun areItemsTheSame(other: FilterListItem): Boolean {
return other is Filter && sql == other.sql
}
}
object DebugFilters {
fun getNoListFilter() =
FilterImpl(
DebugFilter(
title = "No list",
sql = QueryTemplate()
.join(Join.left(CaldavTask.TABLE, CaldavTask.TASK.eq(Task.ID)))
@ -22,14 +34,14 @@ object DebugFilters {
)
fun getDeleted() =
FilterImpl(
DebugFilter(
title = "Deleted",
sql = QueryTemplate().where(Task.DELETION_DATE.gt(0)).toString(),
icon = TasksIcons.DELETE,
)
fun getMissingListFilter() =
FilterImpl(
DebugFilter(
title = "Missing list",
sql = QueryTemplate()
.join(Join.left(CaldavTask.TABLE, CaldavTask.TASK.eq(Task.ID)))
@ -45,7 +57,7 @@ object DebugFilters {
)
fun getMissingAccountFilter() =
FilterImpl(
DebugFilter(
title = "Missing account",
sql = QueryTemplate()
.join(
@ -63,21 +75,21 @@ object DebugFilters {
)
fun getNoTitleFilter() =
FilterImpl(
DebugFilter(
title = "No title",
sql = QueryTemplate().where(or(Task.TITLE.eq(null), Task.TITLE.eq(""))).toString(),
icon = TasksIcons.CLEAR,
)
fun getNoCreateDateFilter() =
FilterImpl(
DebugFilter(
title = "No create time",
sql = QueryTemplate().where(Task.CREATION_DATE.eq(0)).toString(),
icon = TasksIcons.ADD,
)
fun getNoModificationDateFilter() =
FilterImpl(
DebugFilter(
title = "No modify time",
sql = QueryTemplate().where(Task.MODIFICATION_DATE.eq(0)).toString(),
icon = TasksIcons.EDIT,

@ -3,7 +3,7 @@ package org.tasks.filters
import org.tasks.CommonParcelize
@CommonParcelize
class EmptyFilter(
data class EmptyFilter(
override val sql: String? = "WHERE 0",
override val title: String? = null
) : Filter() {

@ -1,9 +1,12 @@
package org.tasks.filters
import androidx.compose.runtime.Stable
import co.touchlab.kermit.Logger
import org.tasks.CommonParcelable
import org.tasks.data.NO_COUNT
import org.tasks.data.NO_ORDER
import org.tasks.data.UUIDHelper
@Stable
abstract class Filter : FilterListItem, CommonParcelable {
@ -32,4 +35,30 @@ abstract class Filter : FilterListItem, CommonParcelable {
open fun supportsSubtasks(): Boolean = true
open fun supportsSorting(): Boolean = true
open fun disableHeaders(): Boolean = !supportsSorting()
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other !is Filter) return false
return areItemsTheSame(other)
}
override fun hashCode(): Int = key().hashCode()
}
fun Filter.key(): String = when (this) {
is CustomFilter -> "custom_${id}"
is CaldavFilter -> "list_${account.id}_${calendar.id}"
is PlaceFilter -> "place_${place.id}"
is TagFilter -> "tag_${tagData.id}"
is MyTasksFilter -> "builtin_my_tasks"
is TodayFilter -> "builtin_today"
is RecentlyModifiedFilter -> "builtin_recently_modified"
is TimerFilter -> "builtin_timer"
is SnoozedFilter -> "builtin_snoozed"
is NotificationsFilter -> "builtin_notifications"
is DebugFilter -> title
else -> {
Logger.w { "Unexpected filter type: ${javaClass.name}" }
UUIDHelper.newUUID()
}
}

Loading…
Cancel
Save