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
|
package com.todoroo.astrid.api
|
||||||
|
|
||||||
import android.os.Parcel
|
import com.todoroo.astrid.api.Filter.Companion.NO_COUNT
|
||||||
import android.os.Parcelable
|
import kotlinx.parcelize.Parcelize
|
||||||
import com.todoroo.andlib.utility.AndroidUtilities
|
|
||||||
import org.tasks.R
|
|
||||||
import org.tasks.themes.CustomIcons
|
import org.tasks.themes.CustomIcons
|
||||||
|
|
||||||
class CustomFilter : Filter {
|
@Parcelize
|
||||||
var criterion: String? = null
|
data class CustomFilter(
|
||||||
private set
|
val filter: org.tasks.data.Filter,
|
||||||
|
override var count: Int = NO_COUNT,
|
||||||
constructor(filter: org.tasks.data.Filter) : super(
|
) : Filter {
|
||||||
filter.title,
|
override val title: String?
|
||||||
filter.sql!!,
|
get() = filter.title
|
||||||
AndroidUtilities.mapFromSerializedString(filter.values)
|
override val sql: String
|
||||||
) {
|
get() = filter.sql!!
|
||||||
id = filter.id
|
|
||||||
criterion = filter.criterion
|
override val valuesForNewTasks: String?
|
||||||
tint = filter.color ?: 0
|
get() = filter.values
|
||||||
icon = filter.icon ?: CustomIcons.FILTER
|
|
||||||
order = filter.order
|
val criterion: String?
|
||||||
}
|
get() = filter.criterion
|
||||||
|
|
||||||
private constructor(parcel: Parcel) {
|
override val order: Int
|
||||||
readFromParcel(parcel)
|
get() = filter.order
|
||||||
}
|
|
||||||
|
val id: Long
|
||||||
/** {@inheritDoc} */
|
get() = filter.id
|
||||||
override fun writeToParcel(dest: Parcel, flags: Int) {
|
override val icon: Int
|
||||||
super.writeToParcel(dest, flags)
|
get() = filter.icon ?: CustomIcons.FILTER
|
||||||
dest.writeString(criterion)
|
override val tint: Int
|
||||||
}
|
get() = filter.color ?: 0
|
||||||
|
|
||||||
override fun readFromParcel(source: Parcel) {
|
override fun areItemsTheSame(other: FilterListItem): Boolean {
|
||||||
super.readFromParcel(source)
|
return other is CustomFilter && id == other.id
|
||||||
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,173 +1,57 @@
|
|||||||
package com.todoroo.astrid.api
|
package com.todoroo.astrid.api
|
||||||
|
|
||||||
import android.os.Parcel
|
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import androidx.annotation.MenuRes
|
import com.todoroo.astrid.api.Filter.Companion.NO_COUNT
|
||||||
import com.todoroo.andlib.sql.QueryTemplate
|
import kotlinx.parcelize.Parcelize
|
||||||
|
|
||||||
open class Filter : FilterListItem, Parcelable {
|
interface Filter : FilterListItem, Parcelable {
|
||||||
var valuesForNewTasks: Map<String, Any> = HashMap()
|
val valuesForNewTasks: String?
|
||||||
var sql: String? = null
|
get() = null
|
||||||
@Deprecated("for astrid manual order") var filterOverride: String? = null
|
val sql: String?
|
||||||
var id = 0L
|
val icon: Int
|
||||||
var icon = -1
|
get() = -1
|
||||||
var title: String? = null
|
val title: String?
|
||||||
var tint = 0
|
val tint: Int
|
||||||
var count = -1
|
get() = 0
|
||||||
var order = NO_ORDER
|
@Deprecated("Remove this")
|
||||||
|
var count: Int
|
||||||
/**
|
val order: Int
|
||||||
* Utility constructor for creating a Filter object
|
get() = NO_ORDER
|
||||||
*
|
override val itemType: FilterListItem.Type
|
||||||
* @param title Title of this item as displayed on the lists page, e.g. Inbox
|
get() = FilterListItem.Type.ITEM
|
||||||
* @param sql SQL query for this list (see [.sqlQuery] for examples).
|
val isReadOnly: Boolean
|
||||||
*/
|
get() = false
|
||||||
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
|
|
||||||
|
|
||||||
val isWritable: Boolean
|
val isWritable: Boolean
|
||||||
get() = !isReadOnly
|
get() = !isReadOnly
|
||||||
|
|
||||||
fun hasBeginningMenu(): Boolean {
|
fun supportsManualSort(): Boolean = false
|
||||||
return beginningMenu != 0
|
fun supportsHiddenTasks(): Boolean = true
|
||||||
}
|
fun supportsSubtasks(): Boolean = true
|
||||||
|
fun supportsSorting(): Boolean = true
|
||||||
@get:MenuRes
|
|
||||||
open val beginningMenu: Int
|
|
||||||
get() = 0
|
|
||||||
|
|
||||||
fun hasMenu(): Boolean {
|
companion object {
|
||||||
return menu != 0
|
const val NO_ORDER = -1
|
||||||
|
const val NO_COUNT = -1
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@get:MenuRes
|
@Deprecated("Use manual ordering")
|
||||||
open val menu: Int
|
interface AstridOrderingFilter : Filter {
|
||||||
get() = 0
|
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 {
|
override fun areItemsTheSame(other: FilterListItem): Boolean {
|
||||||
return other is Filter && id == other.id && sql == other.sql
|
return other is Filter && 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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,77 +1,58 @@
|
|||||||
package com.todoroo.astrid.api
|
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.Criterion.Companion.and
|
||||||
import com.todoroo.andlib.sql.Join.Companion.left
|
import com.todoroo.andlib.sql.Join.Companion.left
|
||||||
import com.todoroo.andlib.sql.QueryTemplate
|
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 com.todoroo.astrid.data.Task
|
||||||
import org.tasks.R
|
import kotlinx.parcelize.Parcelize
|
||||||
import org.tasks.data.CaldavCalendar
|
import org.tasks.data.CaldavCalendar
|
||||||
import org.tasks.data.CaldavTask
|
import org.tasks.data.CaldavTask
|
||||||
import org.tasks.data.GoogleTask
|
import org.tasks.data.GoogleTask
|
||||||
import org.tasks.data.TaskDao.TaskCriteria.activeAndVisible
|
import org.tasks.data.TaskDao.TaskCriteria.activeAndVisible
|
||||||
|
|
||||||
class GtasksFilter(
|
@Parcelize
|
||||||
val list: CaldavCalendar
|
data class GtasksFilter(
|
||||||
) : Filter(list.name, getQueryTemplate(list), getValuesForNewTasks(list)) {
|
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 {
|
override val valuesForNewTasks: String
|
||||||
id = list.id
|
get() = AndroidUtilities.mapToSerializedString(mapOf(GoogleTask.KEY to list.uuid!!))
|
||||||
tint = list.color
|
|
||||||
icon = list.getIcon()!!
|
override val order: Int
|
||||||
order = list.order
|
get() = list.order
|
||||||
}
|
|
||||||
|
override val icon: Int
|
||||||
|
get() = list.getIcon()!!
|
||||||
|
|
||||||
|
override val tint: Int
|
||||||
|
get() = list.color
|
||||||
|
|
||||||
val account: String
|
val account: String
|
||||||
get() = list.account!!
|
get() = list.account!!
|
||||||
|
|
||||||
override fun supportsManualSort() = true
|
override fun supportsManualSort() = true
|
||||||
|
|
||||||
override fun writeToParcel(dest: Parcel, flags: Int) {
|
|
||||||
dest.writeParcelable(list, 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
val remoteId: String
|
val remoteId: String
|
||||||
get() = list.uuid!!
|
get() = list.uuid!!
|
||||||
|
|
||||||
override val menu = R.menu.menu_gtasks_list_fragment
|
override fun areItemsTheSame(other: FilterListItem): Boolean {
|
||||||
|
return other is GtasksFilter && list.id == other.list.id
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
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.Criterion.Companion.and
|
||||||
import com.todoroo.andlib.sql.Join.Companion.inner
|
import com.todoroo.andlib.sql.Join.Companion.inner
|
||||||
import com.todoroo.andlib.sql.QueryTemplate
|
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 com.todoroo.astrid.data.Task
|
||||||
import org.tasks.R
|
import kotlinx.parcelize.Parcelize
|
||||||
import org.tasks.data.Tag
|
import org.tasks.data.Tag
|
||||||
import org.tasks.data.TagData
|
import org.tasks.data.TagData
|
||||||
import org.tasks.data.TaskDao.TaskCriteria.activeAndVisible
|
import org.tasks.data.TaskDao.TaskCriteria.activeAndVisible
|
||||||
|
|
||||||
class TagFilter(
|
@Parcelize
|
||||||
val tagData: TagData
|
data class TagFilter(
|
||||||
) : Filter(tagData.name, queryTemplate(tagData.remoteId), getValuesForNewTask(tagData)) {
|
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 {
|
override val order: Int
|
||||||
id = tagData.id!!
|
get() = tagData.order
|
||||||
tint = tagData.getColor()!!
|
|
||||||
icon = tagData.getIcon()!!
|
|
||||||
order = tagData.order
|
|
||||||
}
|
|
||||||
|
|
||||||
val uuid: String
|
|
||||||
get() = tagData.remoteId!!
|
|
||||||
|
|
||||||
override fun writeToParcel(dest: Parcel, flags: Int) {
|
override val valuesForNewTasks: String
|
||||||
dest.writeParcelable(tagData, 0)
|
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 {
|
val uuid: String
|
||||||
return tagData == (other as TagFilter).tagData
|
get() = tagData.remoteId!!
|
||||||
}
|
|
||||||
|
|
||||||
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()))
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getValuesForNewTask(tagData: TagData): Map<String, Any> {
|
override fun areItemsTheSame(other: FilterListItem): Boolean {
|
||||||
val values: MutableMap<String, Any> = HashMap()
|
return other is TagFilter && tagData.id!! == other.tagData.id
|
||||||
values[Tag.KEY] = tagData.name!!
|
|
||||||
return values
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
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.Join
|
||||||
import com.todoroo.andlib.sql.QueryTemplate
|
import com.todoroo.andlib.sql.QueryTemplate
|
||||||
import com.todoroo.astrid.api.Filter
|
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 com.todoroo.astrid.data.Task
|
||||||
|
import kotlinx.parcelize.Parcelize
|
||||||
import org.tasks.R
|
import org.tasks.R
|
||||||
import org.tasks.notifications.Notification
|
import org.tasks.notifications.Notification
|
||||||
|
|
||||||
class NotificationsFilter : Filter {
|
@Parcelize
|
||||||
constructor(context: Context) : super(context.getString(R.string.notifications), queryTemplate)
|
data class NotificationsFilter(
|
||||||
|
override val title: String,
|
||||||
private constructor()
|
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
|
override fun supportsHiddenTasks(): Boolean = false
|
||||||
|
|
||||||
companion object {
|
override fun areItemsTheSame(other: FilterListItem): Boolean {
|
||||||
@JvmField val CREATOR: Parcelable.Creator<NotificationsFilter> = object : Parcelable.Creator<NotificationsFilter> {
|
return other is 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)))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,39 +1,38 @@
|
|||||||
package org.tasks.filters
|
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.Criterion.Companion.and
|
||||||
import com.todoroo.andlib.sql.Join.Companion.inner
|
import com.todoroo.andlib.sql.Join.Companion.inner
|
||||||
import com.todoroo.andlib.sql.QueryTemplate
|
import com.todoroo.andlib.sql.QueryTemplate
|
||||||
import com.todoroo.astrid.api.Filter
|
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 com.todoroo.astrid.data.Task
|
||||||
|
import kotlinx.parcelize.Parcelize
|
||||||
|
import org.tasks.R
|
||||||
import org.tasks.data.Alarm
|
import org.tasks.data.Alarm
|
||||||
|
|
||||||
class SnoozedFilter : Filter {
|
@Parcelize
|
||||||
constructor(title: String?) : super(title, queryTemplate)
|
data class SnoozedFilter(
|
||||||
private constructor()
|
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 {
|
override val sql: String
|
||||||
return false
|
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 {
|
override fun supportsHiddenTasks() = false
|
||||||
@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 newArray(size: Int): Array<SnoozedFilter?> {
|
override fun areItemsTheSame(other: FilterListItem): Boolean {
|
||||||
return arrayOfNulls(size)
|
return other is SnoozedFilter
|
||||||
}
|
|
||||||
}
|
|
||||||
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)))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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