From 91260e889275f2158f3c92d40d8c33ae0a3e13b8 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Wed, 7 Oct 2020 16:51:30 -0500 Subject: [PATCH] Add QueryPreferences interface --- .../com/todoroo/astrid/core/SortHelper.java | 14 ++++----- .../main/java/org/tasks/data/TaskListQuery.kt | 8 +++-- .../tasks/data/TaskListQueryNonRecursive.kt | 4 +-- .../org/tasks/data/TaskListQueryRecursive.kt | 8 +++-- .../java/org/tasks/dialogs/SortDialog.java | 7 +++-- .../java/org/tasks/preferences/Preferences.kt | 29 +++++++++++++++---- .../org/tasks/preferences/QueryPreferences.kt | 19 ++++++++++++ 7 files changed, 66 insertions(+), 23 deletions(-) create mode 100644 app/src/main/java/org/tasks/preferences/QueryPreferences.kt diff --git a/app/src/main/java/com/todoroo/astrid/core/SortHelper.java b/app/src/main/java/com/todoroo/astrid/core/SortHelper.java index 07fa2e373..fa7447854 100644 --- a/app/src/main/java/com/todoroo/astrid/core/SortHelper.java +++ b/app/src/main/java/com/todoroo/astrid/core/SortHelper.java @@ -15,8 +15,7 @@ import androidx.annotation.Nullable; import com.todoroo.andlib.sql.Functions; import com.todoroo.andlib.sql.Order; import com.todoroo.astrid.data.Task; -import org.tasks.R; -import org.tasks.preferences.Preferences; +import org.tasks.preferences.QueryPreferences; /** * Helpers for sorting a list of tasks @@ -45,7 +44,7 @@ public class SortHelper { /** Takes a SQL query, and if there isn't already an order, creates an order. */ public static String adjustQueryForFlagsAndSort( - Preferences preferences, String originalSql, int sort) { + QueryPreferences preferences, String originalSql, int sort) { // sort if (originalSql == null) { originalSql = ""; @@ -62,17 +61,16 @@ public class SortHelper { return adjustQueryForFlags(preferences, originalSql); } - public static String adjustQueryForFlags( - Preferences preferences, String originalSql) { + public static String adjustQueryForFlags(QueryPreferences preferences, String originalSql) { String adjustedSql = originalSql; // flags - if (preferences.getBoolean(R.string.p_show_completed_tasks, false)) { + if (preferences.getShowCompleted()) { adjustedSql = showCompleted(adjustedSql); - } else if (preferences.getBoolean(R.string.p_temporarily_show_completed_tasks, false)) { + } else if (preferences.getShowCompletedTemporarily()) { adjustedSql = showRecentlyCompleted(adjustedSql); } - if (preferences.getBoolean(R.string.p_show_hidden_tasks, false)) { + if (preferences.getShowHidden()) { adjustedSql = showHidden(adjustedSql); } diff --git a/app/src/main/java/org/tasks/data/TaskListQuery.kt b/app/src/main/java/org/tasks/data/TaskListQuery.kt index 5beffc944..4547b4ff6 100644 --- a/app/src/main/java/org/tasks/data/TaskListQuery.kt +++ b/app/src/main/java/org/tasks/data/TaskListQuery.kt @@ -9,7 +9,7 @@ import com.todoroo.astrid.data.Task import kotlinx.collections.immutable.persistentListOf import org.tasks.data.TaskListQueryNonRecursive.getNonRecursiveQuery import org.tasks.data.TaskListQueryRecursive.getRecursiveQuery -import org.tasks.preferences.Preferences +import org.tasks.preferences.QueryPreferences object TaskListQuery { private val JOIN_GTASK = Criterion.and( @@ -32,7 +32,11 @@ object TaskListQuery { field("places.*")) @JvmStatic - fun getQuery(preferences: Preferences, filter: Filter, subtasks: SubtaskInfo): MutableList { + fun getQuery( + preferences: QueryPreferences, + filter: Filter, + subtasks: SubtaskInfo + ): MutableList { return if (filter.supportsManualSort() && preferences.isManualSort) { getRecursiveQuery(filter, preferences, subtasks) } else if (filter.supportsAstridSorting() && preferences.isAstridSort) { diff --git a/app/src/main/java/org/tasks/data/TaskListQueryNonRecursive.kt b/app/src/main/java/org/tasks/data/TaskListQueryNonRecursive.kt index 74fde3618..db532b38a 100644 --- a/app/src/main/java/org/tasks/data/TaskListQueryNonRecursive.kt +++ b/app/src/main/java/org/tasks/data/TaskListQueryNonRecursive.kt @@ -8,7 +8,7 @@ import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.PermaSql import com.todoroo.astrid.core.SortHelper import com.todoroo.astrid.data.Task -import org.tasks.preferences.Preferences +import org.tasks.preferences.QueryPreferences internal object TaskListQueryNonRecursive { private val JOIN_TAGS = Task.ID.eq(field("${TaskListFragment.TAGS_METADATA_JOIN}.task")) @@ -21,7 +21,7 @@ internal object TaskListQueryNonRecursive { .`as`("tags") private val FIELDS = TaskListQuery.FIELDS.plus(TAGS).toTypedArray() - fun getNonRecursiveQuery(filter: Filter, preferences: Preferences): MutableList { + fun getNonRecursiveQuery(filter: Filter, preferences: QueryPreferences): MutableList { val joinedQuery = JOINS + filter.getSqlQuery() val sortMode = preferences.sortMode val sortGroup = field(SortHelper.getSortGroup(sortMode) ?: "NULL").`as`("sortGroup") diff --git a/app/src/main/java/org/tasks/data/TaskListQueryRecursive.kt b/app/src/main/java/org/tasks/data/TaskListQueryRecursive.kt index e7364d294..a24b624b7 100644 --- a/app/src/main/java/org/tasks/data/TaskListQueryRecursive.kt +++ b/app/src/main/java/org/tasks/data/TaskListQueryRecursive.kt @@ -13,7 +13,7 @@ import com.todoroo.astrid.api.PermaSql import com.todoroo.astrid.core.SortHelper import com.todoroo.astrid.data.Task import org.tasks.data.TaskDao.TaskCriteria.activeAndVisible -import org.tasks.preferences.Preferences +import org.tasks.preferences.QueryPreferences internal object TaskListQueryRecursive { private val RECURSIVE = Table("recursive_tasks") @@ -42,7 +42,11 @@ internal object TaskListQueryRecursive { .join(Join.left(GoogleTask.TABLE, Criterion.and(GoogleTask.TASK.eq(Task.ID), GoogleTask.DELETED.eq(0)))) .where(activeAndVisible()) - fun getRecursiveQuery(filter: Filter, preferences: Preferences, subtasks: SubtaskInfo): MutableList { + fun getRecursiveQuery( + filter: Filter, + preferences: QueryPreferences, + subtasks: SubtaskInfo + ): MutableList { var joinedQuery = JOINS var where = " WHERE recursive_tasks.hidden = 0" val parentQuery: String diff --git a/app/src/main/java/org/tasks/dialogs/SortDialog.java b/app/src/main/java/org/tasks/dialogs/SortDialog.java index d2223944b..3e41ab577 100644 --- a/app/src/main/java/org/tasks/dialogs/SortDialog.java +++ b/app/src/main/java/org/tasks/dialogs/SortDialog.java @@ -16,6 +16,7 @@ import java.util.List; import javax.inject.Inject; import org.tasks.R; import org.tasks.preferences.Preferences; +import org.tasks.preferences.QueryPreferences; import timber.log.Timber; @AndroidEntryPoint @@ -125,14 +126,14 @@ public class SortDialog extends DialogFragment { } private void setSelection(boolean reverse) { - preferences.setBoolean(R.string.p_reverse_sort, reverse); + preferences.setReverseSort(reverse); boolean wasManual = preferences.isManualSort(); boolean wasAstrid = preferences.isAstridSort(); boolean isManual = manualEnabled && selectedIndex == 0; boolean isAstrid = astridEnabled && selectedIndex == 0; - preferences.setBoolean(R.string.p_manual_sort, isManual); - preferences.setBoolean(R.string.p_astrid_sort, isAstrid); + preferences.setManualSort(isManual); + preferences.setAstridSort(isAstrid); if (!isManual && !isAstrid) { preferences.setSortMode(getSortMode(manualEnabled || astridEnabled ? selectedIndex : selectedIndex + 1)); diff --git a/app/src/main/java/org/tasks/preferences/Preferences.kt b/app/src/main/java/org/tasks/preferences/Preferences.kt index 9cfd8b789..b4a7ab1e5 100644 --- a/app/src/main/java/org/tasks/preferences/Preferences.kt +++ b/app/src/main/java/org/tasks/preferences/Preferences.kt @@ -30,7 +30,10 @@ import java.net.URI import java.util.* import java.util.concurrent.TimeUnit -class Preferences @JvmOverloads constructor(private val context: Context, name: String? = getSharedPreferencesName(context)) { +class Preferences @JvmOverloads constructor( + private val context: Context, + name: String? = getSharedPreferencesName(context) +) : QueryPreferences { private val prefs: SharedPreferences = context.getSharedPreferences(name, Context.MODE_PRIVATE) private val publicPrefs: SharedPreferences = context.getSharedPreferences(AstridApiConstants.PUBLIC_PREFS, Context.MODE_PRIVATE) @@ -318,12 +321,23 @@ class Preferences @JvmOverloads constructor(private val context: Context, name: setInt(R.string.p_current_version, version) } - var sortMode: Int + override var sortMode: Int get() = publicPrefs.getInt(PREF_SORT_SORT, SortHelper.SORT_AUTO) set(value) { setPublicPref(PREF_SORT_SORT, value) } + override var showHidden: Boolean + get() = getBoolean(R.string.p_show_hidden_tasks, false) + set(value) { setBoolean(R.string.p_show_hidden_tasks, value) } + + override var showCompleted: Boolean + get() = getBoolean(R.string.p_show_completed_tasks, false) + set(value) { setBoolean(R.string.p_show_completed_tasks, value) } + + override val showCompletedTemporarily: Boolean + get() = getBoolean(R.string.p_temporarily_show_completed_tasks, false) + private fun setPublicPref(key: String, value: Int) { val edit = publicPrefs.edit() edit?.putInt(key, value)?.apply() @@ -444,14 +458,17 @@ class Preferences @JvmOverloads constructor(private val context: Context, name: val isPositionHackEnabled: Boolean get() = getLong(R.string.p_google_tasks_position_hack, 0) > 0 - val isManualSort: Boolean + override var isManualSort: Boolean get() = getBoolean(R.string.p_manual_sort, false) + set(value) { setBoolean(R.string.p_manual_sort, value) } - val isAstridSort: Boolean + override var isAstridSort: Boolean get() = getBoolean(R.string.p_astrid_sort_enabled, false) && getBoolean(R.string.p_astrid_sort, false) + set(value) { setBoolean(R.string.p_astrid_sort, value) } - val isReverseSort: Boolean + override var isReverseSort: Boolean get() = getBoolean(R.string.p_reverse_sort, false) + set(value) { setBoolean(R.string.p_reverse_sort, value) } val defaultPriority: Int get() = getIntegerFromString(R.string.p_default_importance_key, Task.Priority.LOW) @@ -486,7 +503,7 @@ class Preferences @JvmOverloads constructor(private val context: Context, name: val defaultThemeColor: Int get() = getInt(R.string.p_theme_color, ColorProvider.BLUE_500) - fun usePagedQueries(): Boolean { + override fun usePagedQueries(): Boolean { return getBoolean(R.string.p_use_paged_queries, false) } diff --git a/app/src/main/java/org/tasks/preferences/QueryPreferences.kt b/app/src/main/java/org/tasks/preferences/QueryPreferences.kt new file mode 100644 index 000000000..03e0b2755 --- /dev/null +++ b/app/src/main/java/org/tasks/preferences/QueryPreferences.kt @@ -0,0 +1,19 @@ +package org.tasks.preferences + +interface QueryPreferences { + var sortMode: Int + + var isManualSort: Boolean + + var isAstridSort: Boolean + + var isReverseSort: Boolean + + val showHidden: Boolean + + val showCompleted: Boolean + + val showCompletedTemporarily: Boolean + + fun usePagedQueries(): Boolean +} \ No newline at end of file