Update filter fields

pull/2556/head
Alex Baker 8 months ago
parent da8467ac56
commit 60784c10b5

@ -184,11 +184,11 @@ class MainActivity : AppCompatActivity(), TaskListFragmentCallbackHandler {
broughtToFront: ${intent.broughtToFront}
isFromHistory: ${intent.isFromHistory}
flags: ${intent.flagsToString}
OPEN_FILTER: ${openFilter?.let { "${it.listingTitle}: $it" }}
OPEN_FILTER: ${openFilter?.let { "${it.title}: $it" }}
LOAD_FILTER: $loadFilter
OPEN_TASK: ${intent.getParcelableExtra<Task>(OPEN_TASK)}
CREATE_TASK: ${intent.hasExtra(CREATE_TASK)}
taskListFragment: ${taskListFragment?.getFilter()?.let { "${it.listingTitle}: $it" }}
taskListFragment: ${taskListFragment?.getFilter()?.let { "${it.title}: $it" }}
taskEditFragment: ${taskEditFragment?.editViewModel?.task}
**********"""
)
@ -306,7 +306,7 @@ class MainActivity : AppCompatActivity(), TaskListFragmentCallbackHandler {
private fun applyTheme() {
val filterColor = filterColor
filterColor.applyToNavigationBar(this)
filterColor.applyTaskDescription(this, filter?.listingTitle ?: getString(R.string.app_name))
filterColor.applyTaskDescription(this, filter?.title ?: getString(R.string.app_name))
theme.withThemeColor(filterColor).applyToContext(this)
}

@ -291,7 +291,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
}
setupRefresh(swipeRefreshLayout)
setupRefresh(emptyRefreshLayout)
binding.toolbar.title = filter.listingTitle
binding.toolbar.title = filter.title
binding.appbarlayout.addOnOffsetChangedListener { _, verticalOffset ->
if (verticalOffset == 0 && binding.bottomAppBar.isScrolledDown) {
binding.bottomAppBar.performShow()
@ -779,7 +779,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
val intent = ShareCompat
.IntentBuilder(requireContext())
.setType("text/plain")
.setSubject(filter.listingTitle)
.setSubject(filter.title)
.setText(output)
.createChooserIntent()
startActivity(intent)

@ -28,7 +28,7 @@ class ActionViewHolder internal constructor(
}
fun bind(filter: NavigationDrawerAction) {
text.text = filter.listingTitle
text.text = filter.title
icon.setImageDrawable(DrawableUtil.getWrapped(context, filter.icon))
row.setOnClickListener {
onClick.invoke(filter)

@ -67,7 +67,7 @@ class FilterViewHolder internal constructor(
val icon = getIcon(filter)
this.icon.setImageDrawable(DrawableUtil.getWrapped(context, icon))
this.icon.drawable.setTint(getColor(filter))
text.text = filter.listingTitle
text.text = filter.title
if (count == null || count == 0) {
size.visibility = View.INVISIBLE
} else {

@ -16,8 +16,6 @@ internal class SubheaderViewHolder(
private val clickHandler: ClickHandler,
): RecyclerView.ViewHolder(itemView) {
var listingTitle: String? = null
interface ClickHandler {
fun onClick(subheader: NavigationDrawerSubheader)
fun onAdd(subheader: NavigationDrawerSubheader)
@ -35,7 +33,7 @@ internal class SubheaderViewHolder(
fun bind(subheader: NavigationDrawerSubheader) {
add.isVisible = subheader.addIntent != null
this.subheader = subheader
text.text = subheader.listingTitle
text.text = subheader.title
when {
subheader.error || subheader.subheaderType == ETESYNC ->
with(errorIcon) {

@ -6,12 +6,12 @@ import androidx.annotation.MenuRes
import com.todoroo.andlib.sql.QueryTemplate
open class Filter : FilterListItem, Parcelable {
val valuesForNewTasks: MutableMap<String, Any> = HashMap()
var originalSqlQuery: String? = null
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 listingTitle: String? = null
var title: String? = null
var tint = 0
var count = -1
var order = NO_ORDER
@ -19,38 +19,35 @@ open class Filter : FilterListItem, Parcelable {
/**
* Utility constructor for creating a Filter object
*
* @param listingTitle Title of this item as displayed on the lists page, e.g. Inbox
* @param sqlQuery SQL query for this list (see [.sqlQuery] for examples).
* @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(
listingTitle: String?,
sqlQuery: QueryTemplate?,
valuesForNewTasks: Map<String, Any>? = emptyMap(),
) : this(listingTitle, sqlQuery?.toString(), valuesForNewTasks)
title: String?,
sql: QueryTemplate,
valuesForNewTasks: Map<String, Any> = emptyMap(),
) : this(title, sql.toString(), valuesForNewTasks)
/**
* Utility constructor for creating a Filter object
*
* @param listingTitle Title of this item as displayed on the lists page, e.g. Inbox
* @param sqlQuery SQL query for this list (see [.sqlQuery] for examples).
* @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(
listingTitle: String?,
sqlQuery: String?,
valuesForNewTasks: Map<String, Any>?
title: String?,
sql: String,
valuesForNewTasks: Map<String, Any>
) {
this.listingTitle = listingTitle
originalSqlQuery = sqlQuery
filterOverride = null
if (valuesForNewTasks != null) {
this.valuesForNewTasks.putAll(valuesForNewTasks)
}
this.title = title
this.sql = sql
this.valuesForNewTasks = valuesForNewTasks
}
protected constructor()
fun getSqlQuery(): String {
return filterOverride ?: originalSqlQuery!!
return filterOverride ?: sql!!
}
override val itemType = FilterListItem.Type.ITEM
@ -59,22 +56,22 @@ open class Filter : FilterListItem, Parcelable {
override fun writeToParcel(dest: Parcel, flags: Int) {
dest.writeLong(id)
dest.writeInt(icon)
dest.writeString(listingTitle)
dest.writeString(title)
dest.writeInt(tint)
dest.writeInt(count)
dest.writeInt(order)
dest.writeString(originalSqlQuery)
dest.writeString(sql)
dest.writeMap(valuesForNewTasks)
}
open fun readFromParcel(source: Parcel) {
id = source.readLong()
icon = source.readInt()
listingTitle = source.readString()
title = source.readString()
tint = source.readInt()
count = source.readInt()
order = source.readInt()
originalSqlQuery = source.readString()
sql = source.readString()
source.readMap(valuesForNewTasks, javaClass.classLoader)
}
@ -112,7 +109,7 @@ open class Filter : FilterListItem, Parcelable {
override fun describeContents() = 0
override fun areItemsTheSame(other: FilterListItem): Boolean {
return other is Filter && id == other.id && originalSqlQuery == other.originalSqlQuery
return other is Filter && id == other.id && sql == other.sql
}
override fun areContentsTheSame(other: FilterListItem): Boolean {
@ -120,7 +117,7 @@ open class Filter : FilterListItem, Parcelable {
}
override fun toString(): String {
return "Filter(valuesForNewTasks=$valuesForNewTasks, originalSqlQuery=$originalSqlQuery, filterOverride=$filterOverride, id=$id, icon=$icon, listingTitle=$listingTitle, tint=$tint, count=$count, order=$order)"
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 {
@ -130,11 +127,11 @@ open class Filter : FilterListItem, Parcelable {
other as Filter
if (valuesForNewTasks != other.valuesForNewTasks) return false
if (originalSqlQuery != other.originalSqlQuery) 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 (listingTitle != other.listingTitle) 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
@ -143,11 +140,11 @@ open class Filter : FilterListItem, Parcelable {
override fun hashCode(): Int {
var result = valuesForNewTasks.hashCode()
result = 31 * result + (originalSqlQuery?.hashCode() ?: 0)
result = 31 * result + (sql?.hashCode() ?: 0)
result = 31 * result + (filterOverride?.hashCode() ?: 0)
result = 31 * result + id.hashCode()
result = 31 * result + icon
result = 31 * result + (listingTitle?.hashCode() ?: 0)
result = 31 * result + (title?.hashCode() ?: 0)
result = 31 * result + tint
result = 31 * result + count
result = 31 * result + order

@ -45,7 +45,7 @@ class TaskDeleter @Inject constructor(
suspend fun clearCompleted(filter: Filter): Int {
val deleteFilter = Filter(
null,
QueryUtils.removeOrder(QueryUtils.showHiddenAndCompleted(filter.originalSqlQuery!!)),
QueryUtils.removeOrder(QueryUtils.showHiddenAndCompleted(filter.sql!!)),
emptyMap()
)
val completed = taskDao.fetchTasks(preferences, deleteFilter)

@ -32,7 +32,7 @@ class SubtasksHelper @Inject constructor(
): String {
var query = originalQuery
if (filter.supportsAstridSorting() && preferences.isAstridSort) {
val tagData = tagDataDao.getTagByName(filter.listingTitle!!)
val tagData = tagDataDao.getTagByName(filter.title!!)
val tlm = when {
tagData != null ->
taskListMetadataDao.fetchByTagOrFilter(tagData.remoteId!!)

@ -44,7 +44,7 @@ class Notifier @Inject constructor(
val intent = TaskIntents.getTaskListIntent(context, filter)
val pendingIntent = PendingIntent.getActivity(
context,
filter.listingTitle.hashCode(),
filter.title.hashCode(),
intent,
PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
@ -60,16 +60,16 @@ class Notifier @Inject constructor(
.setCategory(NotificationCompat.CATEGORY_REMINDER)
.setTicker(summaryTitle)
.setContentTitle(summaryTitle)
.setContentText(filter.listingTitle)
.setContentText(filter.title)
.setContentIntent(pendingIntent)
.setAutoCancel(true)
.setWhen(DateTimeUtils.currentTimeMillis())
.setShowWhen(true)
.setColor(colorProvider.getPriorityColor(maxPriority, true))
.setGroupSummary(true)
.setGroup(filter.listingTitle)
.setGroup(filter.title)
.setStyle(style)
notificationManager.notify(filter.listingTitle.hashCode().toLong(), builder, alert = true, nonstop = false, fiveTimes = false)
notificationManager.notify(filter.title.hashCode().toLong(), builder, alert = true, nonstop = false, fiveTimes = false)
}
suspend fun triggerNotifications(place: Long, geofences: List<Geofence>, arrival: Boolean) =

@ -74,7 +74,7 @@ class FilterSettingsActivity : BaseListSettingsActivity() {
if (savedInstanceState == null && filter != null) {
selectedColor = filter!!.tint
selectedIcon = filter!!.icon
name.setText(filter!!.listingTitle)
name.setText(filter!!.title)
}
when {
savedInstanceState != null -> lifecycleScope.launch {
@ -228,7 +228,7 @@ class FilterSettingsActivity : BaseListSettingsActivity() {
get() = filter == null
override val toolbarTitle: String?
get() = if (isNew) getString(R.string.FLA_new_filter) else filter!!.listingTitle
get() = if (isNew) getString(R.string.FLA_new_filter) else filter!!.title
override suspend fun save() {
val newName = newName
@ -271,12 +271,12 @@ class FilterSettingsActivity : BaseListSettingsActivity() {
return if (isNew) {
(!Strings.isNullOrEmpty(newName)
|| selectedColor != 0 || selectedIcon != -1 || criteria.size > 1)
} else newName != filter!!.listingTitle
} else newName != filter!!.title
|| selectedColor != filter!!.tint
|| selectedIcon != filter!!.icon
|| CriterionInstance.serialize(criteria) != filter!!.criterion!!.trim()
|| criteria.values != filter!!.valuesForNewTasks
|| criteria.sql != filter!!.originalSqlQuery
|| criteria.sql != filter!!.sql
}
override fun finish() {

@ -15,7 +15,7 @@ fun FilterChip(
) {
Chip(
CustomIcons.getIcon(filter.icon, defaultIcon),
filter.listingTitle,
filter.title,
filter.tint,
showText,
showIcon,

@ -41,7 +41,7 @@ fun FilterPicker(
when (filter) {
is NavigationDrawerSubheader -> {
CollapsibleRow(
text = filter.listingTitle!!,
text = filter.title!!,
collapsed = filter.isCollapsed,
onClick = { viewModel.onClick(filter) },
)
@ -55,7 +55,7 @@ fun FilterPicker(
) {
Row(verticalAlignment = CenterVertically) {
Text(
text = filter.listingTitle!!,
text = filter.title!!,
style = MaterialTheme.typography.body2.copy(
fontWeight = FontWeight.Medium
),

@ -63,7 +63,7 @@ class DashClockExtension : DashClockExtension() {
.icon(R.drawable.ic_check_white_24dp)
.status(count.toString())
.expandedTitle(resources.getQuantityString(R.plurals.task_count, count, count))
.expandedBody(filter.listingTitle)
.expandedBody(filter.title)
.clickIntent(clickIntent)
if (count == 1) {
val tasks = taskDao.fetchFiltered(filter)

@ -5,7 +5,6 @@ import androidx.room.Entity
import androidx.room.PrimaryKey
import com.todoroo.andlib.utility.AndroidUtilities
import com.todoroo.astrid.api.Filter.Companion.NO_ORDER
import org.tasks.Strings
import org.tasks.themes.CustomIcons.FILTER
@Entity(tableName = "filters")
@ -43,8 +42,8 @@ class Filter {
this.sql = sql
}
val valuesAsMap: Map<String, Any>?
get() = if (Strings.isNullOrEmpty(values)) null else AndroidUtilities.mapFromSerializedString(values)
val valuesAsMap: Map<String, Any>
get() = AndroidUtilities.mapFromSerializedString(values)
@Suppress("RedundantNullableReturnType")
fun getColor(): Int? = color ?: 0

@ -215,7 +215,7 @@ FROM recursive_tasks
}
suspend fun count(filter: Filter): Int {
val query = getQuery(filter.originalSqlQuery!!, Field.COUNT)
val query = getQuery(filter.sql!!, Field.COUNT)
val start = if (BuildConfig.DEBUG) now() else 0
val count = count(query)
Timber.v("%sms: %s", now() - start, query.sql)

@ -109,7 +109,7 @@ class AlphanumComparator<T>(private val getTitle: (T) -> String?) : Comparator<T
companion object {
@JvmField
val FILTER = AlphanumComparator(Filter::listingTitle)
val FILTER = AlphanumComparator(Filter::title)
val TAGDATA = AlphanumComparator(TagData::name)
}
}

@ -4,7 +4,7 @@ import android.content.Intent
import com.todoroo.astrid.api.FilterListItem
data class NavigationDrawerAction(
val listingTitle: String,
val title: String,
val icon: Int,
val requestCode: Int,
val intent: Intent? = null,

@ -4,7 +4,7 @@ import android.content.Intent
import com.todoroo.astrid.api.FilterListItem
data class NavigationDrawerSubheader(
val listingTitle: String?,
val title: String?,
val error: Boolean,
val isCollapsed: Boolean,
val subheaderType: SubheaderType,

@ -10,7 +10,7 @@ import com.todoroo.astrid.data.Task
import org.tasks.time.DateTime
class RecentlyModifiedFilter : Filter {
constructor(listingTitle: String?) : super(listingTitle, queryTemplate)
constructor(title: String?) : super(title, queryTemplate)
private constructor()
override fun supportsHiddenTasks() = false

@ -10,7 +10,7 @@ import com.todoroo.astrid.data.Task
import org.tasks.data.Alarm
class SnoozedFilter : Filter {
constructor(listingTitle: String?) : super(listingTitle, queryTemplate)
constructor(title: String?) : super(title, queryTemplate)
private constructor()
override fun supportsHiddenTasks(): Boolean {

@ -6,10 +6,10 @@ import com.todoroo.andlib.sql.QueryTemplate
import com.todoroo.astrid.api.Filter
class SortableFilter : Filter {
constructor(listingTitle: String?, sqlQuery: QueryTemplate?) : super(listingTitle, sqlQuery)
constructor(title: String?, sql: QueryTemplate) : super(title, sql)
constructor(
listingTitle: String?, sqlQuery: QueryTemplate?, valuesForNewTasks: Map<String, Any>?
) : super(listingTitle, sqlQuery, valuesForNewTasks)
title: String?, sql: QueryTemplate, valuesForNewTasks: Map<String, Any>
) : super(title, sql, valuesForNewTasks)
private constructor()

@ -44,7 +44,7 @@ class DashClock : InjectingPreferenceFragment() {
private suspend fun refreshPreferences() {
val filter = defaultFilterProvider.getFilterFromPreference(R.string.p_dashclock_filter)
findPreference(R.string.p_dashclock_filter).summary = filter.listingTitle
findPreference(R.string.p_dashclock_filter).summary = filter.title
}
companion object {

@ -58,7 +58,7 @@ class LookAndFeel : InjectingPreferenceFragment() {
super.onCreate(savedInstanceState)
childFragmentManager.setFilterPickerResultListener(this) {
defaultFilterProvider.setDefaultOpenFilter(it)
findPreference(R.string.p_default_open_filter).summary = it.listingTitle
findPreference(R.string.p_default_open_filter).summary = it.title
localBroadcastManager.broadcastRefresh()
}
}
@ -82,7 +82,7 @@ class LookAndFeel : InjectingPreferenceFragment() {
val defaultList = findPreference(R.string.p_default_open_filter)
val filter = defaultFilterProvider.getDefaultOpenFilter()
defaultList.summary = filter.listingTitle
defaultList.summary = filter.title
defaultList.onPreferenceClickListener = Preference.OnPreferenceClickListener {
lifecycleScope.launch {
newFilterPicker(defaultFilterProvider.getDefaultOpenFilter())

@ -49,7 +49,7 @@ class Notifications : InjectingPreferenceFragment() {
super.onCreate(savedInstanceState)
childFragmentManager.setFilterPickerResultListener(this) {
defaultFilterProvider.setBadgeFilter(it)
findPreference(R.string.p_badge_list).summary = it.listingTitle
findPreference(R.string.p_badge_list).summary = it.title
localBroadcastManager.broadcastRefresh()
}
}
@ -87,7 +87,7 @@ class Notifications : InjectingPreferenceFragment() {
val badgePreference: Preference = findPreference(R.string.p_badge_list)
val filter = defaultFilterProvider.getBadgeFilter()
badgePreference.summary = filter.listingTitle
badgePreference.summary = filter.title
badgePreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
lifecycleScope.launch {
newFilterPicker(defaultFilterProvider.getBadgeFilter())

@ -212,7 +212,7 @@ class ScrollableWidget : InjectingPreferenceFragment() {
}
private fun updateFilter() = lifecycleScope.launch {
findPreference(R.string.p_widget_filter).summary = getFilter().listingTitle
findPreference(R.string.p_widget_filter).summary = getFilter().title
updateSort()
}

@ -184,7 +184,7 @@ class TaskDefaults : InjectingPreferenceFragment() {
private fun updateRemoteListSummary() = lifecycleScope.launch {
val defaultFilter = defaultFilterProvider.getDefaultList()
findPreference(R.string.p_default_list).summary = defaultFilter.listingTitle
findPreference(R.string.p_default_list).summary = defaultFilter.title
}
private fun updateDefaultLocation() = lifecycleScope.launch {

@ -87,10 +87,10 @@ class TaskerListNotification : InjectingPreferenceFragment() {
}
private fun refreshPreferences() {
findPreference(R.string.filter).summary = filter.listingTitle
findPreference(R.string.filter).summary = filter.title
}
fun getResultBlurb(): String? = filter.listingTitle
fun getResultBlurb(): String? = filter.title
fun getBundle(): Bundle =
ListNotificationBundle.generateBundle(defaultFilterProvider.getFilterPreferenceValue(filter))

@ -52,7 +52,7 @@ class Widgets : InjectingPreferenceFragment() {
pref.tint = context?.getColor(R.color.icon_tint_with_alpha)
pref.iconVisible = true
val filter = defaultFilterProvider.getFilterFromPreference(widgetPrefs.filterId)
pref.title = filter.listingTitle
pref.title = filter.title
pref.summary = getString(R.string.widget_id, id)
val intent = Intent(context, WidgetConfigActivity::class.java)
intent.putExtra(android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_ID, id)

@ -154,7 +154,7 @@ class ChipProvider @Inject constructor(
tags.remove(filter.uuid)
}
tags.mapNotNull(lists::getTag)
.sortedBy(TagFilter::listingTitle)
.sortedBy(TagFilter::title)
}
.forEach {
FilterChip(

@ -99,7 +99,7 @@ class ChipProvider @Inject constructor(
}
return tags
.mapNotNull(chipListCache::getTag)
.sortedBy(TagFilter::listingTitle)
.sortedBy(TagFilter::title)
.mapNotNull { newChip(it, R.drawable.ic_outline_label_24px) }
}
@ -108,7 +108,7 @@ class ChipProvider @Inject constructor(
return null
}
val chip = newChip()
chip.setTextViewText(R.id.chip_text, filter.listingTitle)
chip.setTextViewText(R.id.chip_text, filter.title)
val icon = filter.icon
.takeIf { it >= 0 }
?.let { CustomIcons.getIconResId(it) }

@ -68,7 +68,7 @@ class ShortcutConfigActivity : ThemedInjectingAppCompatActivity(), ColorPaletteP
updateFilterAndTheme()
supportFragmentManager.setFilterPickerResultListener(this) {
if (selectedFilter != null && selectedFilter!!.listingTitle == getShortcutName()) {
if (selectedFilter != null && selectedFilter!!.title == getShortcutName()) {
shortcutName.text = null
}
selectedFilter = it
@ -101,10 +101,10 @@ class ShortcutConfigActivity : ThemedInjectingAppCompatActivity(), ColorPaletteP
private fun updateFilterAndTheme() {
if (isNullOrEmpty(getShortcutName()) && selectedFilter != null) {
shortcutName.setText(selectedFilter!!.listingTitle)
shortcutName.setText(selectedFilter!!.title)
}
if (selectedFilter != null) {
shortcutList.setText(selectedFilter!!.listingTitle)
shortcutList.setText(selectedFilter!!.title)
}
updateTheme()
}

@ -104,7 +104,7 @@ class TasksWidget : AppWidgetProvider() {
ColorUtils.setAlphaComponent(bgColor, widgetPreferences.footerOpacity))
val filter = runBlocking { defaultFilterProvider.getFilterFromPreference(filterId) }
remoteViews.setTextViewText(R.id.widget_title, if (widgetPreferences.showTitle()) {
filter.listingTitle
filter.title
} else {
null
})

Loading…
Cancel
Save