From cfb8a4d2fba0db90cfa165ed0f367914eac1268e Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Wed, 3 Jun 2020 16:52:21 -0500 Subject: [PATCH] Add 'Astrid manual sort' mode --- .../astrid/activity/TaskListFragment.kt | 2 +- .../astrid/adapter/TaskAdapterProvider.kt | 17 +++++++----- .../java/com/todoroo/astrid/api/Filter.java | 4 +++ .../com/todoroo/astrid/api/TagFilter.java | 2 +- .../com/todoroo/astrid/service/Upgrader.kt | 5 +++- .../astrid/subtasks/SubtasksHelper.java | 10 +------ .../main/java/org/tasks/data/TaskListQuery.kt | 15 ++++------- .../java/org/tasks/dialogs/SortDialog.java | 27 +++++++++++++------ .../org/tasks/filters/SortableFilter.java | 2 +- .../org/tasks/preferences/Preferences.java | 4 +++ .../tasklist/DragAndDropRecyclerAdapter.kt | 4 ++- .../java/org/tasks/ui/TaskListViewModel.java | 4 ++- app/src/main/res/values/keys.xml | 2 ++ app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/preferences_advanced.xml | 6 +++++ 15 files changed, 66 insertions(+), 40 deletions(-) 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 3ff2c4142..2cfc4361e 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt @@ -323,7 +323,7 @@ class TaskListFragment : InjectingFragment(), OnRefreshListener, Toolbar.OnMenuI true } R.id.menu_sort -> { - SortDialog.newSortDialog(filter.supportsManualSort()) + SortDialog.newSortDialog(filter) .show(childFragmentManager, FRAG_TAG_SORT_DIALOG) true } diff --git a/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapterProvider.kt b/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapterProvider.kt index dcf8468c4..5e0f052ca 100644 --- a/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapterProvider.kt +++ b/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapterProvider.kt @@ -27,15 +27,12 @@ class TaskAdapterProvider @Inject constructor( private val taskDao: TaskDao, private val googleTaskDao: GoogleTaskDao, private val caldavDao: CaldavDao, - private val subtasksHelper: SubtasksHelper, private val localBroadcastManager: LocalBroadcastManager) { fun createTaskAdapter(filter: Filter): TaskAdapter { - if (preferences.isManualSort) { - when { - filter is TagFilter -> return createManualTagTaskAdapter(filter) - filter is GtasksFilter -> return GoogleTaskManualSortAdapter(googleTaskDao, caldavDao, taskDao, localBroadcastManager) - filter is CaldavFilter -> return CaldavManualSortTaskAdapter(googleTaskDao, caldavDao, taskDao, localBroadcastManager) - subtasksHelper.shouldUseSubtasksFragmentForFilter(filter) -> { + if (filter.supportsAstridSorting() && preferences.isAstridSort) { + when (filter) { + is TagFilter -> return createManualTagTaskAdapter(filter) + else -> { val adapter = createManualFilterTaskAdapter(filter) if (adapter != null) { return adapter @@ -43,6 +40,12 @@ class TaskAdapterProvider @Inject constructor( } } } + if (filter.supportsManualSort() && preferences.isManualSort) { + when (filter) { + is GtasksFilter -> return GoogleTaskManualSortAdapter(googleTaskDao, caldavDao, taskDao, localBroadcastManager) + is CaldavFilter -> return CaldavManualSortTaskAdapter(googleTaskDao, caldavDao, taskDao, localBroadcastManager) + } + } return TaskAdapter(preferences.addTasksToTop(), googleTaskDao, caldavDao, taskDao, localBroadcastManager) } diff --git a/app/src/main/java/com/todoroo/astrid/api/Filter.java b/app/src/main/java/com/todoroo/astrid/api/Filter.java index 69cfc1d3c..811c47659 100644 --- a/app/src/main/java/com/todoroo/astrid/api/Filter.java +++ b/app/src/main/java/com/todoroo/astrid/api/Filter.java @@ -181,6 +181,10 @@ public class Filter extends FilterListItem { source.readMap(valuesForNewTasks, getClass().getClassLoader()); } + public boolean supportsAstridSorting() { + return false; + } + public boolean supportsManualSort() { return false; } diff --git a/app/src/main/java/com/todoroo/astrid/api/TagFilter.java b/app/src/main/java/com/todoroo/astrid/api/TagFilter.java index e74e9e316..baaccd0f2 100644 --- a/app/src/main/java/com/todoroo/astrid/api/TagFilter.java +++ b/app/src/main/java/com/todoroo/astrid/api/TagFilter.java @@ -82,7 +82,7 @@ public class TagFilter extends Filter { } @Override - public boolean supportsManualSort() { + public boolean supportsAstridSorting() { return true; } diff --git a/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt b/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt index 5b37a0060..d53df9a75 100644 --- a/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt +++ b/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt @@ -59,7 +59,10 @@ class Upgrader @Inject constructor( run(from, V8_8) { preferences.setBoolean(R.string.p_linkify_task_edit, true) } run(from, V8_10) { migrateWidgets() } run(from, V9_3) { applyCaldavOrder() } - run(from, V9_6) { taskMover.migrateLocalTasks() } + run(from, V9_6) { + preferences.setBoolean(R.string.p_astrid_sort_enabled, true) + taskMover.migrateLocalTasks() + } preferences.setBoolean(R.string.p_just_updated, true) } preferences.setCurrentVersion(to) diff --git a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java b/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java index 8041e5bae..145ce54cb 100644 --- a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java +++ b/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java @@ -4,9 +4,7 @@ import static org.tasks.Strings.isNullOrEmpty; import static org.tasks.db.QueryUtils.showHiddenAndCompleted; import android.content.Context; -import androidx.annotation.NonNull; import com.todoroo.astrid.api.Filter; -import com.todoroo.astrid.api.TagFilter; import com.todoroo.astrid.core.BuiltInFilterExposer; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.data.Task; @@ -20,7 +18,6 @@ import org.tasks.data.TagData; import org.tasks.data.TagDataDao; import org.tasks.data.TaskListMetadata; import org.tasks.data.TaskListMetadataDao; -import org.tasks.filters.SortableFilter; import org.tasks.injection.ForApplication; import org.tasks.preferences.Preferences; import timber.log.Timber; @@ -127,13 +124,8 @@ public class SubtasksHelper { return map; } - public boolean shouldUseSubtasksFragmentForFilter(@NonNull Filter filter) { - return preferences.isManualSort() - && (filter instanceof SortableFilter || filter instanceof TagFilter); - } - public String applySubtasksToWidgetFilter(Filter filter, String query) { - if (shouldUseSubtasksFragmentForFilter(filter)) { + if (filter.supportsAstridSorting() && preferences.isAstridSort()) { TagData tagData = tagDataDao.getTagByName(filter.listingTitle); TaskListMetadata tlm = null; if (tagData != null) { diff --git a/app/src/main/java/org/tasks/data/TaskListQuery.kt b/app/src/main/java/org/tasks/data/TaskListQuery.kt index e2bcdfed8..35cea8978 100644 --- a/app/src/main/java/org/tasks/data/TaskListQuery.kt +++ b/app/src/main/java/org/tasks/data/TaskListQuery.kt @@ -4,9 +4,7 @@ import com.todoroo.andlib.sql.Criterion import com.todoroo.andlib.sql.Field.Companion.field import com.todoroo.andlib.sql.Join import com.todoroo.astrid.activity.TaskListFragment -import com.todoroo.astrid.api.CaldavFilter import com.todoroo.astrid.api.Filter -import com.todoroo.astrid.api.GtasksFilter import com.todoroo.astrid.data.Task import kotlinx.collections.immutable.persistentListOf import org.tasks.data.TaskListQueryNonRecursive.getNonRecursiveQuery @@ -35,14 +33,11 @@ object TaskListQuery { @JvmStatic fun getQuery(preferences: Preferences, filter: Filter, subtasks: SubtaskInfo): List { - if (filter.supportsManualSort() && preferences.isManualSort) { - return if (filter is GtasksFilter || filter is CaldavFilter) { - getRecursiveQuery(filter, preferences, subtasks) - } else { - getNonRecursiveQuery(filter, preferences) - } - } - return if (filter.supportsSubtasks() && subtasks.usesSubtasks() && preferences.showSubtasks()) { + return if (filter.supportsManualSort() && preferences.isManualSort) { + getRecursiveQuery(filter, preferences, subtasks) + } else if (filter.supportsAstridSorting() && preferences.isAstridSort) { + getNonRecursiveQuery(filter, preferences) + } else if (filter.supportsSubtasks() && subtasks.usesSubtasks() && preferences.showSubtasks()) { getRecursiveQuery(filter, preferences, subtasks) } else { getNonRecursiveQuery(filter, preferences) diff --git a/app/src/main/java/org/tasks/dialogs/SortDialog.java b/app/src/main/java/org/tasks/dialogs/SortDialog.java index 6ee71e435..8a9269ed1 100644 --- a/app/src/main/java/org/tasks/dialogs/SortDialog.java +++ b/app/src/main/java/org/tasks/dialogs/SortDialog.java @@ -7,6 +7,7 @@ import android.os.Bundle; import android.widget.Button; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; +import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.core.SortHelper; import java.util.ArrayList; import java.util.List; @@ -20,18 +21,21 @@ import timber.log.Timber; public class SortDialog extends InjectingDialogFragment { private static final String EXTRA_MANUAL_ENABLED = "extra_manual_enabled"; + private static final String EXTRA_ASTRID_ENABLED = "extra_astrid_enabled"; private static final String EXTRA_SELECTED_INDEX = "extra_selected_index"; @Inject Preferences preferences; @Inject DialogBuilder dialogBuilder; private boolean manualEnabled; + private boolean astridEnabled; private int selectedIndex; private AlertDialog alertDialog; private SortDialogCallback callback; - public static SortDialog newSortDialog(boolean manualEnabled) { + public static SortDialog newSortDialog(Filter filter) { SortDialog sortDialog = new SortDialog(); Bundle args = new Bundle(); - args.putBoolean(EXTRA_MANUAL_ENABLED, manualEnabled); + args.putBoolean(EXTRA_MANUAL_ENABLED, filter.supportsManualSort()); + args.putBoolean(EXTRA_ASTRID_ENABLED, filter.supportsAstridSorting()); sortDialog.setArguments(args); return sortDialog; } @@ -43,9 +47,9 @@ public class SortDialog extends InjectingDialogFragment { Bundle arguments = getArguments(); manualEnabled = arguments.getBoolean(EXTRA_MANUAL_ENABLED); + astridEnabled = arguments.getBoolean(EXTRA_ASTRID_ENABLED) && preferences.getBoolean(R.string.p_astrid_sort_enabled, false); if (savedInstanceState != null) { - manualEnabled = savedInstanceState.getBoolean(EXTRA_MANUAL_ENABLED); selectedIndex = savedInstanceState.getInt(EXTRA_SELECTED_INDEX); } else { selectedIndex = getIndex(preferences.getSortMode()); @@ -55,6 +59,8 @@ public class SortDialog extends InjectingDialogFragment { if (manualEnabled) { items.add(getString(R.string.SSD_sort_my_order)); + } else if (astridEnabled) { + items.add(getString(R.string.astrid_sort_order)); } items.add(getString(R.string.SSD_sort_auto)); @@ -68,6 +74,10 @@ public class SortDialog extends InjectingDialogFragment { if (preferences.isManualSort()) { selectedIndex = 0; } + } else if (astridEnabled) { + if (preferences.isAstridSort()) { + selectedIndex = 0; + } } else { selectedIndex -= 1; } @@ -103,7 +113,6 @@ public class SortDialog extends InjectingDialogFragment { public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); - outState.putBoolean(EXTRA_MANUAL_ENABLED, manualEnabled); outState.putInt(EXTRA_SELECTED_INDEX, selectedIndex); } @@ -118,14 +127,17 @@ public class SortDialog extends InjectingDialogFragment { preferences.setBoolean(R.string.p_reverse_sort, 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); - if (!isManual) { - preferences.setSortMode(getSortMode(manualEnabled ? selectedIndex : selectedIndex + 1)); + if (!isManual && !isAstrid) { + preferences.setSortMode(getSortMode(manualEnabled || astridEnabled ? selectedIndex : selectedIndex + 1)); } - callback.sortChanged(wasManual != isManual); + callback.sortChanged(wasManual != isManual || wasAstrid != isAstrid); } private int getIndex(int sortMode) { @@ -174,7 +186,6 @@ public class SortDialog extends InjectingDialogFragment { } public interface SortDialogCallback { - void sortChanged(boolean reload); } } diff --git a/app/src/main/java/org/tasks/filters/SortableFilter.java b/app/src/main/java/org/tasks/filters/SortableFilter.java index ffd666566..d4d91c569 100644 --- a/app/src/main/java/org/tasks/filters/SortableFilter.java +++ b/app/src/main/java/org/tasks/filters/SortableFilter.java @@ -38,7 +38,7 @@ public class SortableFilter extends Filter { private SortableFilter() {} @Override - public boolean supportsManualSort() { + public boolean supportsAstridSorting() { return true; } } diff --git a/app/src/main/java/org/tasks/preferences/Preferences.java b/app/src/main/java/org/tasks/preferences/Preferences.java index fe8e8f712..ffe142674 100644 --- a/app/src/main/java/org/tasks/preferences/Preferences.java +++ b/app/src/main/java/org/tasks/preferences/Preferences.java @@ -514,6 +514,10 @@ public class Preferences { return getBoolean(R.string.p_manual_sort, false); } + public boolean isAstridSort() { + return getBoolean(R.string.p_astrid_sort_enabled, false) && getBoolean(R.string.p_astrid_sort, false); + } + public boolean isReverseSort() { return getBoolean(R.string.p_reverse_sort, false); } diff --git a/app/src/main/java/org/tasks/tasklist/DragAndDropRecyclerAdapter.kt b/app/src/main/java/org/tasks/tasklist/DragAndDropRecyclerAdapter.kt index 3c58ea3dc..8f9c8498e 100644 --- a/app/src/main/java/org/tasks/tasklist/DragAndDropRecyclerAdapter.kt +++ b/app/src/main/java/org/tasks/tasklist/DragAndDropRecyclerAdapter.kt @@ -271,7 +271,9 @@ class DragAndDropRecyclerAdapter( init { val filter = taskList.getFilter() - disableHeaders = !filter.supportsSorting() || preferences.isManualSort && filter.supportsManualSort() + disableHeaders = !filter.supportsSorting() + || (filter.supportsManualSort() && preferences.isManualSort) + || (filter.supportsAstridSorting() && preferences.isAstridSort) itemTouchHelper = ItemTouchHelper(ItemTouchHelperCallback()) itemTouchHelper.attachToRecyclerView(recyclerView) list = SectionedDataSource(tasks, disableHeaders, preferences.sortMode, adapter.getCollapsed().toMutableSet()) diff --git a/app/src/main/java/org/tasks/ui/TaskListViewModel.java b/app/src/main/java/org/tasks/ui/TaskListViewModel.java index 05e190033..508f99dec 100644 --- a/app/src/main/java/org/tasks/ui/TaskListViewModel.java +++ b/app/src/main/java/org/tasks/ui/TaskListViewModel.java @@ -53,7 +53,9 @@ public class TaskListViewModel extends ViewModel implements Observer(); invalidate(); } - manualSortFilter = filter.supportsManualSort() && preferences.isManualSort(); + manualSortFilter = + (filter.supportsManualSort() && preferences.isManualSort()) + || (filter.supportsAstridSorting() && preferences.isAstridSort()); } public void observe(LifecycleOwner owner, Observer> observer) { diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml index d997ab445..6c6eb3bd1 100644 --- a/app/src/main/res/values/keys.xml +++ b/app/src/main/res/values/keys.xml @@ -246,6 +246,8 @@ temporarily_show_completed_tasks reverse_sort manual_sort + astrid_sort + astrid_sort_enabled @string/TEA_ctrl_when_pref diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cbded1f2c..d4336ec69 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -33,6 +33,8 @@ File %1$s contained %2$s.\n\n Call Open My order + Astrid manual sorting + Enable Astrid\'s manual sort mode for \'My Tasks\', \'Today\', and tags. This sort mode will be replaced by \'My order\' in a future update Smart sort By title By due date diff --git a/app/src/main/res/xml/preferences_advanced.xml b/app/src/main/res/xml/preferences_advanced.xml index 6f686606b..50f0c218f 100644 --- a/app/src/main/res/xml/preferences_advanced.xml +++ b/app/src/main/res/xml/preferences_advanced.xml @@ -8,6 +8,12 @@ android:summary="@string/improve_performance_summary" android:title="@string/improve_performance" /> + +