@ -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)
@ -89,7 +89,7 @@ class ManualGoogleTaskQueryTest : InjectingTestCase() {
@Test
fun ignoreDisableSubtasksPreference() {
newTask(1, 0, 0)
newTask(2, 0, 1)
@ -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
@ -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()) {
} else {
@ -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);
@ -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
@ -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() {
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
val defaultList = findPreference(R.string.p_default_list)
val filter: Filter? = defaultFilterProvider.defaultFilter
defaultList.summary = filter?.listingTitle
@ -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())
@ -191,7 +191,7 @@ class TaskViewHolder internal constructor(
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
DateUtilities.getRelativeDateTime(context, task.dueDate, locale, FormatStyle.MEDIUM)
@ -88,7 +88,7 @@ public class TaskListViewModel extends ViewModel implements Observer<PagedList<T
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
subtasks -> {
if (manualSortFilter || preferences.showSubtasks()) {
if (manualSortFilter || !preferences.usePagedQueries()) {
performNonPagedQuery(subtasks);
performPagedListQuery();
@ -351,7 +351,8 @@
<string name="google_tasks_position_hack">Custom order synchronization fix</string>
<string name="google_tasks_position_hack_summary">Always perform a full synchronization to workaround https://issuetracker.google.com/issues/132432317</string>
<string name="subscription_help_url">https://tasks.org/subscribe</string>
<string name="p_disable_subtasks">disable_subtasks</string>
<string name="p_use_paged_queries">disable_subtasks</string>
<string name="p_disable_sort_groups">disable_sort_groups</string>
<string name="p_wearable_notifications">wearable_notifications</string>
<string name="p_notified_oauth_error">notified_oauth_error_%1$s_%2$s</string>
<string name="p_chip_style">chip_style</string>
@ -539,6 +539,7 @@ File %1$s contained %2$s.\n\n
<string name="enter_title_hint">Enter title</string>
<string name="improve_performance">Improve performance</string>
<string name="improve_performance_summary">Disable sort groups and collapsible subtasks to improve app performance</string>
<string name="disable_sort_groups">Disable sort groups</string>
<string name="enter_tag_name">Enter tag name</string>
<string name="create_new_tag">Create \"%s\"</string>
<string name="choose_synchronization_service">Select a platform</string>
@ -4,7 +4,7 @@
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="@string/p_disable_subtasks"
android:key="@string/p_use_paged_queries"
android:summary="@string/improve_performance_summary"
android:title="@string/improve_performance" />
@ -97,6 +97,20 @@
android:title="@string/EPr_temp_show_completed_tasks"
app:singleLineTitle="false" />
app:allowDividerAbove="true"
android:disableDependentsState="true"
android:dependency="@string/p_use_paged_queries"
android:key="@string/p_disable_sort_groups"
android:title="@string/disable_sort_groups" />
<PreferenceCategory
android:title="@string/chips">