mirror of https://github.com/tasks/tasks
Convert filters to data classes (#2569)
parent
68fd36b14d
commit
ee500c24b1
@ -1,59 +1,36 @@
|
||||
package com.todoroo.astrid.api
|
||||
|
||||
import android.os.Parcel
|
||||
import android.os.Parcelable
|
||||
import com.todoroo.andlib.utility.AndroidUtilities
|
||||
import org.tasks.R
|
||||
import com.todoroo.astrid.api.Filter.Companion.NO_COUNT
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import org.tasks.themes.CustomIcons
|
||||
|
||||
class CustomFilter : Filter {
|
||||
var criterion: String? = null
|
||||
private set
|
||||
|
||||
constructor(filter: org.tasks.data.Filter) : super(
|
||||
filter.title,
|
||||
filter.sql!!,
|
||||
AndroidUtilities.mapFromSerializedString(filter.values)
|
||||
) {
|
||||
id = filter.id
|
||||
criterion = filter.criterion
|
||||
tint = filter.color ?: 0
|
||||
icon = filter.icon ?: CustomIcons.FILTER
|
||||
order = filter.order
|
||||
}
|
||||
|
||||
private constructor(parcel: Parcel) {
|
||||
readFromParcel(parcel)
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
override fun writeToParcel(dest: Parcel, flags: Int) {
|
||||
super.writeToParcel(dest, flags)
|
||||
dest.writeString(criterion)
|
||||
}
|
||||
|
||||
override fun readFromParcel(source: Parcel) {
|
||||
super.readFromParcel(source)
|
||||
criterion = source.readString()
|
||||
}
|
||||
|
||||
override val menu: Int
|
||||
get() = if (id > 0) R.menu.menu_custom_filter else 0
|
||||
|
||||
override fun areContentsTheSame(other: FilterListItem): Boolean {
|
||||
return super.areContentsTheSame(other) && criterion == (other as CustomFilter).criterion
|
||||
}
|
||||
|
||||
companion object {
|
||||
@JvmField
|
||||
val CREATOR: Parcelable.Creator<CustomFilter> = object : Parcelable.Creator<CustomFilter> {
|
||||
override fun createFromParcel(source: Parcel): CustomFilter? {
|
||||
return CustomFilter(source)
|
||||
}
|
||||
|
||||
override fun newArray(size: Int): Array<CustomFilter?> {
|
||||
return arrayOfNulls(size)
|
||||
}
|
||||
}
|
||||
@Parcelize
|
||||
data class CustomFilter(
|
||||
val filter: org.tasks.data.Filter,
|
||||
override var count: Int = NO_COUNT,
|
||||
) : Filter {
|
||||
override val title: String?
|
||||
get() = filter.title
|
||||
override val sql: String
|
||||
get() = filter.sql!!
|
||||
|
||||
override val valuesForNewTasks: String?
|
||||
get() = filter.values
|
||||
|
||||
val criterion: String?
|
||||
get() = filter.criterion
|
||||
|
||||
override val order: Int
|
||||
get() = filter.order
|
||||
|
||||
val id: Long
|
||||
get() = filter.id
|
||||
override val icon: Int
|
||||
get() = filter.icon ?: CustomIcons.FILTER
|
||||
override val tint: Int
|
||||
get() = filter.color ?: 0
|
||||
|
||||
override fun areItemsTheSame(other: FilterListItem): Boolean {
|
||||
return other is CustomFilter && id == other.id
|
||||
}
|
||||
}
|
||||
|
@ -1,173 +1,57 @@
|
||||
package com.todoroo.astrid.api
|
||||
|
||||
import android.os.Parcel
|
||||
import android.os.Parcelable
|
||||
import androidx.annotation.MenuRes
|
||||
import com.todoroo.andlib.sql.QueryTemplate
|
||||
|
||||
open class Filter : FilterListItem, Parcelable {
|
||||
var valuesForNewTasks: Map<String, Any> = HashMap()
|
||||
var sql: String? = null
|
||||
@Deprecated("for astrid manual order") var filterOverride: String? = null
|
||||
var id = 0L
|
||||
var icon = -1
|
||||
var title: String? = null
|
||||
var tint = 0
|
||||
var count = -1
|
||||
var order = NO_ORDER
|
||||
|
||||
/**
|
||||
* Utility constructor for creating a Filter object
|
||||
*
|
||||
* @param title Title of this item as displayed on the lists page, e.g. Inbox
|
||||
* @param sql SQL query for this list (see [.sqlQuery] for examples).
|
||||
*/
|
||||
constructor(
|
||||
title: String?,
|
||||
sql: QueryTemplate,
|
||||
valuesForNewTasks: Map<String, Any> = emptyMap(),
|
||||
) : this(title, sql.toString(), valuesForNewTasks)
|
||||
|
||||
/**
|
||||
* Utility constructor for creating a Filter object
|
||||
*
|
||||
* @param title Title of this item as displayed on the lists page, e.g. Inbox
|
||||
* @param sql SQL query for this list (see [.sqlQuery] for examples).
|
||||
*/
|
||||
internal constructor(
|
||||
title: String?,
|
||||
sql: String,
|
||||
valuesForNewTasks: Map<String, Any>
|
||||
) {
|
||||
this.title = title
|
||||
this.sql = sql
|
||||
this.valuesForNewTasks = valuesForNewTasks
|
||||
}
|
||||
|
||||
protected constructor()
|
||||
|
||||
fun getSqlQuery(): String {
|
||||
return filterOverride ?: sql!!
|
||||
}
|
||||
|
||||
override val itemType = FilterListItem.Type.ITEM
|
||||
|
||||
/** {@inheritDoc} */
|
||||
override fun writeToParcel(dest: Parcel, flags: Int) {
|
||||
dest.writeLong(id)
|
||||
dest.writeInt(icon)
|
||||
dest.writeString(title)
|
||||
dest.writeInt(tint)
|
||||
dest.writeInt(count)
|
||||
dest.writeInt(order)
|
||||
dest.writeString(sql)
|
||||
dest.writeMap(valuesForNewTasks)
|
||||
}
|
||||
|
||||
open fun readFromParcel(source: Parcel) {
|
||||
id = source.readLong()
|
||||
icon = source.readInt()
|
||||
title = source.readString()
|
||||
tint = source.readInt()
|
||||
count = source.readInt()
|
||||
order = source.readInt()
|
||||
sql = source.readString()
|
||||
source.readMap(valuesForNewTasks, javaClass.classLoader)
|
||||
}
|
||||
|
||||
open fun supportsAstridSorting() = false
|
||||
|
||||
open fun supportsManualSort() = false
|
||||
|
||||
open fun supportsHiddenTasks() = true
|
||||
|
||||
open fun supportsSubtasks() = true
|
||||
|
||||
open fun supportsSorting() = true
|
||||
|
||||
open val isReadOnly: Boolean = false
|
||||
|
||||
import com.todoroo.astrid.api.Filter.Companion.NO_COUNT
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
||||
interface Filter : FilterListItem, Parcelable {
|
||||
val valuesForNewTasks: String?
|
||||
get() = null
|
||||
val sql: String?
|
||||
val icon: Int
|
||||
get() = -1
|
||||
val title: String?
|
||||
val tint: Int
|
||||
get() = 0
|
||||
@Deprecated("Remove this")
|
||||
var count: Int
|
||||
val order: Int
|
||||
get() = NO_ORDER
|
||||
override val itemType: FilterListItem.Type
|
||||
get() = FilterListItem.Type.ITEM
|
||||
val isReadOnly: Boolean
|
||||
get() = false
|
||||
val isWritable: Boolean
|
||||
get() = !isReadOnly
|
||||
|
||||
fun hasBeginningMenu(): Boolean {
|
||||
return beginningMenu != 0
|
||||
}
|
||||
|
||||
@get:MenuRes
|
||||
open val beginningMenu: Int
|
||||
get() = 0
|
||||
fun supportsManualSort(): Boolean = false
|
||||
fun supportsHiddenTasks(): Boolean = true
|
||||
fun supportsSubtasks(): Boolean = true
|
||||
fun supportsSorting(): Boolean = true
|
||||
|
||||
fun hasMenu(): Boolean {
|
||||
return menu != 0
|
||||
companion object {
|
||||
const val NO_ORDER = -1
|
||||
const val NO_COUNT = -1
|
||||
}
|
||||
}
|
||||
|
||||
@get:MenuRes
|
||||
open val menu: Int
|
||||
get() = 0
|
||||
@Deprecated("Use manual ordering")
|
||||
interface AstridOrderingFilter : Filter {
|
||||
var filterOverride: String?
|
||||
|
||||
override fun describeContents() = 0
|
||||
fun getSqlQuery(): String = filterOverride ?: sql!!
|
||||
}
|
||||
|
||||
@Parcelize
|
||||
data class FilterImpl(
|
||||
override val title: String? = null,
|
||||
override val sql: String? = null,
|
||||
override val valuesForNewTasks: String? = null,
|
||||
override val icon: Int = -1,
|
||||
override val tint: Int = 0,
|
||||
override var count: Int = NO_COUNT,
|
||||
) : Filter {
|
||||
override fun areItemsTheSame(other: FilterListItem): Boolean {
|
||||
return other is Filter && id == other.id && sql == other.sql
|
||||
}
|
||||
|
||||
override fun areContentsTheSame(other: FilterListItem): Boolean {
|
||||
return this == other
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return "Filter(valuesForNewTasks=$valuesForNewTasks, sql=$sql, filterOverride=$filterOverride, id=$id, icon=$icon, title=$title, tint=$tint, count=$count, order=$order)"
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (javaClass != other?.javaClass) return false
|
||||
|
||||
other as Filter
|
||||
|
||||
if (valuesForNewTasks != other.valuesForNewTasks) return false
|
||||
if (sql != other.sql) return false
|
||||
if (filterOverride != other.filterOverride) return false
|
||||
if (id != other.id) return false
|
||||
if (icon != other.icon) return false
|
||||
if (title != other.title) return false
|
||||
if (tint != other.tint) return false
|
||||
if (count != other.count) return false
|
||||
if (order != other.order) return false
|
||||
return isReadOnly == other.isReadOnly
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
var result = valuesForNewTasks.hashCode()
|
||||
result = 31 * result + (sql?.hashCode() ?: 0)
|
||||
result = 31 * result + (filterOverride?.hashCode() ?: 0)
|
||||
result = 31 * result + id.hashCode()
|
||||
result = 31 * result + icon
|
||||
result = 31 * result + (title?.hashCode() ?: 0)
|
||||
result = 31 * result + tint
|
||||
result = 31 * result + count
|
||||
result = 31 * result + order
|
||||
result = 31 * result + isReadOnly.hashCode()
|
||||
return result
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val NO_ORDER = -1
|
||||
|
||||
@JvmField
|
||||
val CREATOR: Parcelable.Creator<Filter> = object : Parcelable.Creator<Filter> {
|
||||
/** {@inheritDoc} */
|
||||
override fun createFromParcel(source: Parcel): Filter {
|
||||
val item = Filter()
|
||||
item.readFromParcel(source)
|
||||
return item
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
override fun newArray(size: Int): Array<Filter?> {
|
||||
return arrayOfNulls(size)
|
||||
}
|
||||
}
|
||||
return other is Filter && sql == other.sql
|
||||
}
|
||||
}
|
||||
|
@ -1,77 +1,58 @@
|
||||
package com.todoroo.astrid.api
|
||||
|
||||
import android.os.Parcel
|
||||
import android.os.Parcelable
|
||||
import androidx.core.os.ParcelCompat
|
||||
import com.todoroo.andlib.sql.Criterion.Companion.and
|
||||
import com.todoroo.andlib.sql.Join.Companion.left
|
||||
import com.todoroo.andlib.sql.QueryTemplate
|
||||
import com.todoroo.andlib.utility.AndroidUtilities
|
||||
import com.todoroo.astrid.api.Filter.Companion.NO_COUNT
|
||||
import com.todoroo.astrid.data.Task
|
||||
import org.tasks.R
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import org.tasks.data.CaldavCalendar
|
||||
import org.tasks.data.CaldavTask
|
||||
import org.tasks.data.GoogleTask
|
||||
import org.tasks.data.TaskDao.TaskCriteria.activeAndVisible
|
||||
|
||||
class GtasksFilter(
|
||||
val list: CaldavCalendar
|
||||
) : Filter(list.name, getQueryTemplate(list), getValuesForNewTasks(list)) {
|
||||
@Parcelize
|
||||
data class GtasksFilter(
|
||||
val list: CaldavCalendar,
|
||||
override var count: Int = NO_COUNT,
|
||||
) : Filter {
|
||||
override val title: String?
|
||||
get() = list.name
|
||||
|
||||
override val sql: String
|
||||
get() = QueryTemplate()
|
||||
.join(left(CaldavTask.TABLE, Task.ID.eq(CaldavTask.TASK)))
|
||||
.where(
|
||||
and(
|
||||
activeAndVisible(),
|
||||
CaldavTask.DELETED.eq(0),
|
||||
CaldavTask.CALENDAR.eq(list.uuid)
|
||||
)
|
||||
)
|
||||
.toString()
|
||||
|
||||
init {
|
||||
id = list.id
|
||||
tint = list.color
|
||||
icon = list.getIcon()!!
|
||||
order = list.order
|
||||
}
|
||||
override val valuesForNewTasks: String
|
||||
get() = AndroidUtilities.mapToSerializedString(mapOf(GoogleTask.KEY to list.uuid!!))
|
||||
|
||||
override val order: Int
|
||||
get() = list.order
|
||||
|
||||
override val icon: Int
|
||||
get() = list.getIcon()!!
|
||||
|
||||
override val tint: Int
|
||||
get() = list.color
|
||||
|
||||
val account: String
|
||||
get() = list.account!!
|
||||
|
||||
override fun supportsManualSort() = true
|
||||
|
||||
override fun writeToParcel(dest: Parcel, flags: Int) {
|
||||
dest.writeParcelable(list, 0)
|
||||
}
|
||||
|
||||
val remoteId: String
|
||||
get() = list.uuid!!
|
||||
|
||||
override val menu = R.menu.menu_gtasks_list_fragment
|
||||
|
||||
override fun areContentsTheSame(other: FilterListItem): Boolean {
|
||||
return super.areContentsTheSame(other) && list == (other as GtasksFilter).list
|
||||
}
|
||||
|
||||
companion object {
|
||||
@JvmField
|
||||
val CREATOR: Parcelable.Creator<GtasksFilter> = object : Parcelable.Creator<GtasksFilter> {
|
||||
override fun createFromParcel(source: Parcel): GtasksFilter {
|
||||
return GtasksFilter(
|
||||
ParcelCompat.readParcelable(source, javaClass.classLoader, CaldavCalendar::class.java)!!
|
||||
)
|
||||
}
|
||||
|
||||
override fun newArray(size: Int): Array<GtasksFilter?> {
|
||||
return arrayOfNulls(size)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getQueryTemplate(list: CaldavCalendar): QueryTemplate {
|
||||
return QueryTemplate()
|
||||
.join(left(CaldavTask.TABLE, Task.ID.eq(CaldavTask.TASK)))
|
||||
.where(
|
||||
and(
|
||||
activeAndVisible(),
|
||||
CaldavTask.DELETED.eq(0),
|
||||
CaldavTask.CALENDAR.eq(list.uuid)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private fun getValuesForNewTasks(list: CaldavCalendar): Map<String, Any> {
|
||||
val values: MutableMap<String, Any> = HashMap()
|
||||
values[GoogleTask.KEY] = list.uuid!!
|
||||
return values
|
||||
}
|
||||
override fun areItemsTheSame(other: FilterListItem): Boolean {
|
||||
return other is GtasksFilter && list.id == other.list.id
|
||||
}
|
||||
}
|
||||
|
@ -1,48 +0,0 @@
|
||||
package com.todoroo.astrid.api
|
||||
|
||||
import android.os.Parcel
|
||||
import android.os.Parcelable
|
||||
import com.google.common.primitives.Longs
|
||||
import com.todoroo.andlib.sql.Join.Companion.left
|
||||
import com.todoroo.andlib.sql.QueryTemplate
|
||||
import com.todoroo.astrid.data.Task
|
||||
import org.tasks.data.Tag
|
||||
|
||||
class IdListFilter : Filter {
|
||||
private var ids: List<Long?>? = null
|
||||
|
||||
constructor(ids: List<Long?>) : super("", getQueryTemplate(ids)) {
|
||||
this.ids = ids
|
||||
}
|
||||
|
||||
private constructor(source: Parcel) {
|
||||
readFromParcel(source)
|
||||
}
|
||||
|
||||
override fun writeToParcel(dest: Parcel, flags: Int) {
|
||||
super.writeToParcel(dest, flags)
|
||||
dest.writeLongArray(Longs.toArray(ids!!))
|
||||
}
|
||||
|
||||
override fun readFromParcel(source: Parcel) {
|
||||
super.readFromParcel(source)
|
||||
val ids = LongArray(source.readInt())
|
||||
source.setDataPosition(source.dataPosition() - 1)
|
||||
source.readLongArray(ids)
|
||||
this.ids = Longs.asList(*ids)
|
||||
}
|
||||
|
||||
companion object {
|
||||
@JvmField val CREATOR: Parcelable.Creator<IdListFilter> = object : Parcelable.Creator<IdListFilter> {
|
||||
override fun createFromParcel(source: Parcel) = IdListFilter(source)
|
||||
|
||||
override fun newArray(size: Int): Array<IdListFilter?> = arrayOfNulls(size)
|
||||
}
|
||||
|
||||
private fun getQueryTemplate(ids: List<Long?>): QueryTemplate {
|
||||
return QueryTemplate()
|
||||
.join(left(Tag.TABLE, Tag.TASK.eq(Task.ID)))
|
||||
.where(Task.ID.`in`(ids))
|
||||
}
|
||||
}
|
||||
}
|
@ -1,67 +1,46 @@
|
||||
package com.todoroo.astrid.api
|
||||
|
||||
import android.os.Parcel
|
||||
import android.os.Parcelable
|
||||
import androidx.core.os.ParcelCompat
|
||||
import com.todoroo.andlib.sql.Criterion.Companion.and
|
||||
import com.todoroo.andlib.sql.Join.Companion.inner
|
||||
import com.todoroo.andlib.sql.QueryTemplate
|
||||
import com.todoroo.andlib.utility.AndroidUtilities
|
||||
import com.todoroo.astrid.api.Filter.Companion.NO_COUNT
|
||||
import com.todoroo.astrid.data.Task
|
||||
import org.tasks.R
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import org.tasks.data.Tag
|
||||
import org.tasks.data.TagData
|
||||
import org.tasks.data.TaskDao.TaskCriteria.activeAndVisible
|
||||
|
||||
class TagFilter(
|
||||
val tagData: TagData
|
||||
) : Filter(tagData.name, queryTemplate(tagData.remoteId), getValuesForNewTask(tagData)) {
|
||||
@Parcelize
|
||||
data class TagFilter(
|
||||
val tagData: TagData,
|
||||
override var count: Int = NO_COUNT,
|
||||
override var filterOverride: String? = null,
|
||||
) : AstridOrderingFilter {
|
||||
override val title: String?
|
||||
get() = tagData.name
|
||||
override val sql: String
|
||||
get() = QueryTemplate()
|
||||
.join(inner(Tag.TABLE, Task.ID.eq(Tag.TASK)))
|
||||
.where(and(Tag.TAG_UID.eq(uuid), activeAndVisible()))
|
||||
.toString()
|
||||
|
||||
init {
|
||||
id = tagData.id!!
|
||||
tint = tagData.getColor()!!
|
||||
icon = tagData.getIcon()!!
|
||||
order = tagData.order
|
||||
}
|
||||
|
||||
val uuid: String
|
||||
get() = tagData.remoteId!!
|
||||
override val order: Int
|
||||
get() = tagData.order
|
||||
|
||||
override fun writeToParcel(dest: Parcel, flags: Int) {
|
||||
dest.writeParcelable(tagData, 0)
|
||||
}
|
||||
override val valuesForNewTasks: String
|
||||
get() = AndroidUtilities.mapToSerializedString(mapOf(Tag.KEY to tagData.name!!))
|
||||
|
||||
override fun supportsAstridSorting() = true
|
||||
override val icon: Int
|
||||
get() = tagData.getIcon()!!
|
||||
|
||||
override val menu = R.menu.menu_tag_view_fragment
|
||||
override val tint: Int
|
||||
get() = tagData.getColor()!!
|
||||
|
||||
override fun areContentsTheSame(other: FilterListItem): Boolean {
|
||||
return tagData == (other as TagFilter).tagData
|
||||
}
|
||||
|
||||
companion object {
|
||||
@JvmField
|
||||
val CREATOR: Parcelable.Creator<TagFilter> = object : Parcelable.Creator<TagFilter> {
|
||||
override fun createFromParcel(source: Parcel): TagFilter {
|
||||
return TagFilter(
|
||||
ParcelCompat.readParcelable(source, javaClass.classLoader, TagData::class.java)!!
|
||||
)
|
||||
}
|
||||
|
||||
override fun newArray(size: Int): Array<TagFilter?> {
|
||||
return arrayOfNulls(size)
|
||||
}
|
||||
}
|
||||
|
||||
private fun queryTemplate(uuid: String?): QueryTemplate {
|
||||
return QueryTemplate()
|
||||
.join(inner(Tag.TABLE, Task.ID.eq(Tag.TASK)))
|
||||
.where(and(Tag.TAG_UID.eq(uuid), activeAndVisible()))
|
||||
}
|
||||
val uuid: String
|
||||
get() = tagData.remoteId!!
|
||||
|
||||
private fun getValuesForNewTask(tagData: TagData): Map<String, Any> {
|
||||
val values: MutableMap<String, Any> = HashMap()
|
||||
values[Tag.KEY] = tagData.name!!
|
||||
return values
|
||||
}
|
||||
override fun areItemsTheSame(other: FilterListItem): Boolean {
|
||||
return other is TagFilter && tagData.id!! == other.tagData.id
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,33 @@
|
||||
package org.tasks.filters
|
||||
|
||||
import com.todoroo.andlib.sql.Criterion
|
||||
import com.todoroo.andlib.sql.QueryTemplate
|
||||
import com.todoroo.astrid.api.AstridOrderingFilter
|
||||
import com.todoroo.astrid.api.Filter.Companion.NO_COUNT
|
||||
import com.todoroo.astrid.api.FilterListItem
|
||||
import com.todoroo.astrid.data.Task
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import org.tasks.data.TaskDao
|
||||
import org.tasks.themes.CustomIcons
|
||||
|
||||
@Parcelize
|
||||
data class MyTasksFilter(
|
||||
override val title: String,
|
||||
override var filterOverride: String? = null,
|
||||
override var count: Int = NO_COUNT,
|
||||
) : AstridOrderingFilter {
|
||||
override val icon: Int
|
||||
get() = CustomIcons.ALL_INBOX
|
||||
override val sql: String
|
||||
get() = QueryTemplate()
|
||||
.where(
|
||||
Criterion.and(
|
||||
TaskDao.TaskCriteria.activeAndVisible(),
|
||||
Task.PARENT.eq(0)
|
||||
)
|
||||
).toString()
|
||||
|
||||
override fun areItemsTheSame(other: FilterListItem): Boolean {
|
||||
return other is MyTasksFilter
|
||||
}
|
||||
}
|
@ -1,36 +1,30 @@
|
||||
package org.tasks.filters
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Parcel
|
||||
import android.os.Parcelable
|
||||
import com.todoroo.andlib.sql.Join
|
||||
import com.todoroo.andlib.sql.QueryTemplate
|
||||
import com.todoroo.astrid.api.Filter
|
||||
import com.todoroo.astrid.api.Filter.Companion.NO_COUNT
|
||||
import com.todoroo.astrid.api.FilterListItem
|
||||
import com.todoroo.astrid.data.Task
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import org.tasks.R
|
||||
import org.tasks.notifications.Notification
|
||||
|
||||
class NotificationsFilter : Filter {
|
||||
constructor(context: Context) : super(context.getString(R.string.notifications), queryTemplate)
|
||||
|
||||
private constructor()
|
||||
@Parcelize
|
||||
data class NotificationsFilter(
|
||||
override val title: String,
|
||||
override var count: Int = NO_COUNT,
|
||||
) : Filter {
|
||||
override val icon: Int
|
||||
get() = R.drawable.ic_outline_notifications_24px
|
||||
override val sql: String
|
||||
get() = QueryTemplate()
|
||||
.join(Join.inner(Notification.TABLE, Task.ID.eq(Notification.TASK)))
|
||||
.toString()
|
||||
|
||||
override fun supportsHiddenTasks(): Boolean = false
|
||||
|
||||
companion object {
|
||||
@JvmField val CREATOR: Parcelable.Creator<NotificationsFilter> = object : Parcelable.Creator<NotificationsFilter> {
|
||||
/** {@inheritDoc} */
|
||||
override fun createFromParcel(source: Parcel): NotificationsFilter =
|
||||
NotificationsFilter().apply {
|
||||
readFromParcel(source)
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
override fun newArray(size: Int): Array<NotificationsFilter?> = arrayOfNulls(size)
|
||||
}
|
||||
|
||||
private val queryTemplate: QueryTemplate
|
||||
get() = QueryTemplate()
|
||||
.join(Join.inner(Notification.TABLE, Task.ID.eq(Notification.TASK)))
|
||||
override fun areItemsTheSame(other: FilterListItem): Boolean {
|
||||
return other is NotificationsFilter
|
||||
}
|
||||
}
|
@ -1,39 +1,38 @@
|
||||
package org.tasks.filters
|
||||
|
||||
import android.os.Parcel
|
||||
import android.os.Parcelable
|
||||
import com.todoroo.andlib.sql.Criterion.Companion.and
|
||||
import com.todoroo.andlib.sql.Join.Companion.inner
|
||||
import com.todoroo.andlib.sql.QueryTemplate
|
||||
import com.todoroo.astrid.api.Filter
|
||||
import com.todoroo.astrid.api.Filter.Companion.NO_COUNT
|
||||
import com.todoroo.astrid.api.FilterListItem
|
||||
import com.todoroo.astrid.data.Task
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import org.tasks.R
|
||||
import org.tasks.data.Alarm
|
||||
|
||||
class SnoozedFilter : Filter {
|
||||
constructor(title: String?) : super(title, queryTemplate)
|
||||
private constructor()
|
||||
@Parcelize
|
||||
data class SnoozedFilter(
|
||||
override val title: String,
|
||||
override var count: Int = NO_COUNT,
|
||||
) : Filter {
|
||||
override val icon: Int
|
||||
get() = R.drawable.ic_snooze_white_24dp
|
||||
|
||||
override fun supportsHiddenTasks(): Boolean {
|
||||
return false
|
||||
}
|
||||
override val sql: String
|
||||
get() = QueryTemplate()
|
||||
.join(inner(Alarm.TABLE, Task.ID.eq(Alarm.TASK)))
|
||||
.where(
|
||||
and(
|
||||
Task.DELETION_DATE.lte(0),
|
||||
Alarm.TYPE.eq(Alarm.TYPE_SNOOZE)
|
||||
)
|
||||
)
|
||||
.toString()
|
||||
|
||||
companion object {
|
||||
@JvmField
|
||||
val CREATOR: Parcelable.Creator<SnoozedFilter> =
|
||||
object : Parcelable.Creator<SnoozedFilter> {
|
||||
override fun createFromParcel(source: Parcel): SnoozedFilter {
|
||||
val item = SnoozedFilter()
|
||||
item.readFromParcel(source)
|
||||
return item
|
||||
}
|
||||
override fun supportsHiddenTasks() = false
|
||||
|
||||
override fun newArray(size: Int): Array<SnoozedFilter?> {
|
||||
return arrayOfNulls(size)
|
||||
}
|
||||
}
|
||||
private val queryTemplate: QueryTemplate
|
||||
get() = QueryTemplate()
|
||||
.join(inner(Alarm.TABLE, Task.ID.eq(Alarm.TASK)))
|
||||
.where(and(Task.DELETION_DATE.lte(0), Alarm.TYPE.eq(Alarm.TYPE_SNOOZE)))
|
||||
override fun areItemsTheSame(other: FilterListItem): Boolean {
|
||||
return other is SnoozedFilter
|
||||
}
|
||||
}
|
||||
|
@ -1,37 +0,0 @@
|
||||
package org.tasks.filters
|
||||
|
||||
import android.os.Parcel
|
||||
import android.os.Parcelable
|
||||
import com.todoroo.andlib.sql.QueryTemplate
|
||||
import com.todoroo.astrid.api.Filter
|
||||
|
||||
class SortableFilter : Filter {
|
||||
constructor(title: String?, sql: QueryTemplate) : super(title, sql)
|
||||
constructor(
|
||||
title: String?, sql: QueryTemplate, valuesForNewTasks: Map<String, Any>
|
||||
) : super(title, sql, valuesForNewTasks)
|
||||
|
||||
private constructor()
|
||||
|
||||
override fun supportsAstridSorting(): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
companion object {
|
||||
@JvmField
|
||||
val CREATOR: Parcelable.Creator<SortableFilter> =
|
||||
object : Parcelable.Creator<SortableFilter> {
|
||||
/** {@inheritDoc} */
|
||||
override fun createFromParcel(source: Parcel): SortableFilter {
|
||||
val item = SortableFilter()
|
||||
item.readFromParcel(source)
|
||||
return item
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
override fun newArray(size: Int): Array<SortableFilter?> {
|
||||
return arrayOfNulls(size)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
package org.tasks.filters
|
||||
|
||||
import com.todoroo.andlib.sql.Criterion
|
||||
import com.todoroo.andlib.sql.QueryTemplate
|
||||
import com.todoroo.andlib.utility.AndroidUtilities
|
||||
import com.todoroo.astrid.api.AstridOrderingFilter
|
||||
import com.todoroo.astrid.api.Filter.Companion.NO_COUNT
|
||||
import com.todoroo.astrid.api.FilterListItem
|
||||
import com.todoroo.astrid.api.PermaSql
|
||||
import com.todoroo.astrid.data.Task
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import org.tasks.data.TaskDao
|
||||
import org.tasks.themes.CustomIcons
|
||||
|
||||
@Parcelize
|
||||
data class TodayFilter(
|
||||
override val title: String,
|
||||
override var filterOverride: String? = null,
|
||||
override var count: Int = NO_COUNT,
|
||||
) : AstridOrderingFilter {
|
||||
override val sql: String
|
||||
get() = QueryTemplate()
|
||||
.where(
|
||||
Criterion.and(
|
||||
TaskDao.TaskCriteria.activeAndVisible(),
|
||||
Task.DUE_DATE.gt(0),
|
||||
Task.DUE_DATE.lte(PermaSql.VALUE_EOD)
|
||||
)
|
||||
)
|
||||
.toString()
|
||||
override val icon: Int
|
||||
get() = CustomIcons.TODAY
|
||||
|
||||
override val valuesForNewTasks: String
|
||||
get() = AndroidUtilities.mapToSerializedString(mapOf(Task.DUE_DATE.name to PermaSql.VALUE_NOON))
|
||||
|
||||
override fun areItemsTheSame(other: FilterListItem): Boolean {
|
||||
return other is TodayFilter
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue