diff --git a/app/src/androidTest/java/com/todoroo/astrid/adapter/NonRecursiveQueryTest.kt b/app/src/androidTest/java/com/todoroo/astrid/adapter/NonRecursiveQueryTest.kt index d6fa2f8cc..ce5a0e758 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/adapter/NonRecursiveQueryTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/adapter/NonRecursiveQueryTest.kt @@ -47,7 +47,7 @@ class NonRecursiveQueryTest : InjectingTestCase() { override fun setUp() { super.setUp() preferences.clear() - preferences.setBoolean(R.string.p_disable_subtasks, true) + preferences.setBoolean(R.string.p_use_paged_queries, true) tasks.clear() adapter = TaskAdapter(false, googleTaskDao, caldavDao, taskDao, localBroadcastManager) adapter.setDataSource(dataSource) diff --git a/app/src/androidTest/java/org/tasks/data/ManualGoogleTaskQueryTest.kt b/app/src/androidTest/java/org/tasks/data/ManualGoogleTaskQueryTest.kt index b1b8b0007..39f20b2dd 100644 --- a/app/src/androidTest/java/org/tasks/data/ManualGoogleTaskQueryTest.kt +++ b/app/src/androidTest/java/org/tasks/data/ManualGoogleTaskQueryTest.kt @@ -89,7 +89,7 @@ class ManualGoogleTaskQueryTest : InjectingTestCase() { @Test fun ignoreDisableSubtasksPreference() { - preferences.setBoolean(R.string.p_disable_subtasks, true) + preferences.setBoolean(R.string.p_use_paged_queries, true) newTask(1, 0, 0) newTask(2, 0, 1) diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt index e01ce008e..2083f9f21 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt @@ -275,7 +275,7 @@ class TaskListFragment : InjectingFragment(), OnRefreshListener, Toolbar.OnMenuI sortMenu.isEnabled = false sortMenu.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER) } - if (preferences.disableSubtasks() + if (preferences.usePagedQueries() || !filter.supportsSubtasks() || taskAdapter.supportsAstridSorting()) { menu.findItem(R.id.menu_collapse_subtasks).isVisible = false diff --git a/app/src/main/java/org/tasks/data/TaskListQuery.kt b/app/src/main/java/org/tasks/data/TaskListQuery.kt index 35cea8978..3f2908388 100644 --- a/app/src/main/java/org/tasks/data/TaskListQuery.kt +++ b/app/src/main/java/org/tasks/data/TaskListQuery.kt @@ -37,7 +37,7 @@ object TaskListQuery { getRecursiveQuery(filter, preferences, subtasks) } else if (filter.supportsAstridSorting() && preferences.isAstridSort) { getNonRecursiveQuery(filter, preferences) - } else if (filter.supportsSubtasks() && subtasks.usesSubtasks() && preferences.showSubtasks()) { + } else if (filter.supportsSubtasks() && subtasks.usesSubtasks() && !preferences.usePagedQueries()) { getRecursiveQuery(filter, preferences, subtasks) } else { getNonRecursiveQuery(filter, preferences) diff --git a/app/src/main/java/org/tasks/preferences/Preferences.java b/app/src/main/java/org/tasks/preferences/Preferences.java index ffe142674..4ad23604d 100644 --- a/app/src/main/java/org/tasks/preferences/Preferences.java +++ b/app/src/main/java/org/tasks/preferences/Preferences.java @@ -526,14 +526,6 @@ public class Preferences { return getIntegerFromString(R.string.p_default_importance_key, Priority.LOW); } - public boolean showSubtasks() { - return !disableSubtasks(); - } - - public boolean disableSubtasks() { - return getBoolean(R.string.p_disable_subtasks, false); - } - public int getThemeBase() { return getInt(R.string.p_theme, ThemeBase.DEFAULT_BASE_THEME); } @@ -549,4 +541,12 @@ public class Preferences { public int getDefaultThemeColor() { return getInt(R.string.p_theme_color, ColorProvider.BLUE_500); } + + public boolean usePagedQueries() { + return getBoolean(R.string.p_use_paged_queries, false); + } + + public boolean showGroupHeaders() { + return !usePagedQueries() && !getBoolean(R.string.p_disable_sort_groups, false); + } } diff --git a/app/src/main/java/org/tasks/preferences/fragments/Advanced.kt b/app/src/main/java/org/tasks/preferences/fragments/Advanced.kt index 92c137c73..fc1c376c4 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/Advanced.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/Advanced.kt @@ -47,7 +47,7 @@ class Advanced : InjectingPreferenceFragment() { override fun getPreferenceXml() = R.xml.preferences_advanced override fun setupPreferences(savedInstanceState: Bundle?) { - findPreference(R.string.p_disable_subtasks) + findPreference(R.string.p_use_paged_queries) .setOnPreferenceChangeListener { _: Preference?, _: Any? -> localBroadcastManager.broadcastRefresh() true diff --git a/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt b/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt index 76efab76c..3d6c832ae 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt @@ -10,6 +10,7 @@ import android.os.Bundle import android.os.Handler import androidx.annotation.StringRes import androidx.preference.Preference +import androidx.preference.SwitchPreferenceCompat import com.todoroo.astrid.api.Filter import org.tasks.BuildConfig import org.tasks.LocalBroadcastManager @@ -96,6 +97,13 @@ class LookAndFeel : InjectingPreferenceFragment() { true } + val sortGroups = findPreference(R.string.p_disable_sort_groups) as SwitchPreferenceCompat + sortGroups.isChecked = sortGroups.isChecked or preferences.usePagedQueries() + findPreference(R.string.p_use_paged_queries).setOnPreferenceChangeListener { _, value -> + sortGroups.isChecked = value as Boolean + true + } + val defaultList = findPreference(R.string.p_default_list) val filter: Filter? = defaultFilterProvider.defaultFilter defaultList.summary = filter?.listingTitle diff --git a/app/src/main/java/org/tasks/tasklist/DragAndDropRecyclerAdapter.kt b/app/src/main/java/org/tasks/tasklist/DragAndDropRecyclerAdapter.kt index 990a1c0ac..43663bd49 100644 --- a/app/src/main/java/org/tasks/tasklist/DragAndDropRecyclerAdapter.kt +++ b/app/src/main/java/org/tasks/tasklist/DragAndDropRecyclerAdapter.kt @@ -272,6 +272,7 @@ class DragAndDropRecyclerAdapter( init { val filter = taskList.getFilter() disableHeaders = !filter.supportsSorting() + || !preferences.showGroupHeaders() || (filter.supportsManualSort() && preferences.isManualSort) || (filter.supportsAstridSorting() && preferences.isAstridSort) itemTouchHelper = ItemTouchHelper(ItemTouchHelperCallback()) diff --git a/app/src/main/java/org/tasks/tasklist/TaskViewHolder.kt b/app/src/main/java/org/tasks/tasklist/TaskViewHolder.kt index e8cdac972..dff5f93e3 100644 --- a/app/src/main/java/org/tasks/tasklist/TaskViewHolder.kt +++ b/app/src/main/java/org/tasks/tasklist/TaskViewHolder.kt @@ -191,7 +191,7 @@ class TaskViewHolder internal constructor( } else { dueDate.setTextColor(textColorSecondary) } - val dateValue: String? = if (sortMode == SortHelper.SORT_DUE && task.sortGroup != null && !preferences.getBoolean(R.string.p_disable_subtasks, false)) { + val dateValue: String? = if (sortMode == SortHelper.SORT_DUE && task.sortGroup != null && preferences.showGroupHeaders()) { if (task.hasDueTime()) DateUtilities.getTimeString(context, newDateTime(task.dueDate)) else null } else { DateUtilities.getRelativeDateTime(context, task.dueDate, locale, FormatStyle.MEDIUM) diff --git a/app/src/main/java/org/tasks/ui/TaskListViewModel.java b/app/src/main/java/org/tasks/ui/TaskListViewModel.java index 508f99dec..30d3a1b63 100644 --- a/app/src/main/java/org/tasks/ui/TaskListViewModel.java +++ b/app/src/main/java/org/tasks/ui/TaskListViewModel.java @@ -88,7 +88,7 @@ public class TaskListViewModel extends ViewModel implements Observer { - if (manualSortFilter || preferences.showSubtasks()) { + if (manualSortFilter || !preferences.usePagedQueries()) { performNonPagedQuery(subtasks); } else { performPagedListQuery(); diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml index 6c6eb3bd1..f722bf1f2 100644 --- a/app/src/main/res/values/keys.xml +++ b/app/src/main/res/values/keys.xml @@ -351,7 +351,8 @@ Custom order synchronization fix Always perform a full synchronization to workaround https://issuetracker.google.com/issues/132432317 https://tasks.org/subscribe - disable_subtasks + disable_subtasks + disable_sort_groups wearable_notifications notified_oauth_error_%1$s_%2$s chip_style diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d4336ec69..3ccc818e4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -539,6 +539,7 @@ File %1$s contained %2$s.\n\n Enter title Improve performance Disable sort groups and collapsible subtasks to improve app performance + Disable sort groups Enter tag name Create \"%s\" Select a platform diff --git a/app/src/main/res/xml/preferences_advanced.xml b/app/src/main/res/xml/preferences_advanced.xml index 50f0c218f..83c357948 100644 --- a/app/src/main/res/xml/preferences_advanced.xml +++ b/app/src/main/res/xml/preferences_advanced.xml @@ -4,7 +4,7 @@ diff --git a/app/src/main/res/xml/preferences_look_and_feel.xml b/app/src/main/res/xml/preferences_look_and_feel.xml index b9f1e4117..32940fb2b 100644 --- a/app/src/main/res/xml/preferences_look_and_feel.xml +++ b/app/src/main/res/xml/preferences_look_and_feel.xml @@ -97,6 +97,20 @@ android:title="@string/EPr_temp_show_completed_tasks" app:singleLineTitle="false" /> + + + +