Add 'Astrid manual sort' mode

pull/1004/head
Alex Baker 4 years ago
parent 72d6bf1620
commit cfb8a4d2fb

@ -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
}

@ -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)
}

@ -181,6 +181,10 @@ public class Filter extends FilterListItem {
source.readMap(valuesForNewTasks, getClass().getClassLoader());
}
public boolean supportsAstridSorting() {
return false;
}
public boolean supportsManualSort() {
return false;
}

@ -82,7 +82,7 @@ public class TagFilter extends Filter {
}
@Override
public boolean supportsManualSort() {
public boolean supportsAstridSorting() {
return true;
}

@ -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)

@ -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) {

@ -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<String> {
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)

@ -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);
}
}

@ -38,7 +38,7 @@ public class SortableFilter extends Filter {
private SortableFilter() {}
@Override
public boolean supportsManualSort() {
public boolean supportsAstridSorting() {
return true;
}
}

@ -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);
}

@ -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())

@ -53,7 +53,9 @@ public class TaskListViewModel extends ViewModel implements Observer<PagedList<T
tasks = new MutableLiveData<>();
invalidate();
}
manualSortFilter = filter.supportsManualSort() && preferences.isManualSort();
manualSortFilter =
(filter.supportsManualSort() && preferences.isManualSort())
|| (filter.supportsAstridSorting() && preferences.isAstridSort());
}
public void observe(LifecycleOwner owner, Observer<List<TaskContainer>> observer) {

@ -246,6 +246,8 @@
<string name="p_temporarily_show_completed_tasks">temporarily_show_completed_tasks</string>
<string name="p_reverse_sort">reverse_sort</string>
<string name="p_manual_sort">manual_sort</string>
<string name="p_astrid_sort">astrid_sort</string>
<string name="p_astrid_sort_enabled">astrid_sort_enabled</string>
<string-array name="TEA_control_sets_prefs">
<item>@string/TEA_ctrl_when_pref</item>

@ -33,6 +33,8 @@ File %1$s contained %2$s.\n\n
<string name="action_call">Call</string>
<string name="action_open">Open</string>
<string name="SSD_sort_my_order">My order</string>
<string name="astrid_sort_order">Astrid manual sorting</string>
<string name="astrid_sort_order_summary">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</string>
<string name="SSD_sort_auto">Smart sort</string>
<string name="SSD_sort_alpha">By title</string>
<string name="SSD_sort_due">By due date</string>

@ -8,6 +8,12 @@
android:summary="@string/improve_performance_summary"
android:title="@string/improve_performance" />
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="@string/p_astrid_sort_enabled"
android:title="@string/astrid_sort_order"
android:summary="@string/astrid_sort_order_summary" />
<Preference
android:icon="@drawable/ic_outline_attachment_24px"
android:key="@string/p_attachment_dir"

Loading…
Cancel
Save