Add sorting to google task lists

pull/467/head
Alex Baker 9 years ago
parent 691c90404c
commit 3b4aae4473

@ -0,0 +1,12 @@
package com.todoroo.astrid.gtasks;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.api.GtasksFilter;
import org.tasks.tasklist.GtasksListFragment;
public class GtasksSubtaskListFragment extends GtasksListFragment {
public static TaskListFragment newGtasksSubtaskListFragment(GtasksFilter gtasksFilter, GtasksList list) {
return null;
}
}

@ -1,12 +1,10 @@
package com.todoroo.astrid.gtasks;
package org.tasks.tasklist;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.subtasks.SubtasksListFragment;
public class GtasksListFragment extends SubtasksListFragment {
public static final String TOKEN_STORE_ID = "storeId";
import com.todoroo.astrid.gtasks.GtasksList;
public class GtasksListFragment extends TaskListFragment {
public static TaskListFragment newGtasksListFragment(GtasksFilter gtasksFilter, GtasksList list) {
return null;
}

@ -0,0 +1,12 @@
package com.todoroo.astrid.gtasks;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.api.GtasksFilter;
import org.tasks.tasklist.GtasksListFragment;
public class GtasksSubtaskListFragment extends GtasksListFragment {
public static TaskListFragment newGtasksSubtaskListFragment(GtasksFilter gtasksFilter, GtasksList list) {
return null;
}
}

@ -1,12 +1,10 @@
package com.todoroo.astrid.gtasks;
package org.tasks.tasklist;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.subtasks.SubtasksListFragment;
public class GtasksListFragment extends SubtasksListFragment {
public static final String TOKEN_STORE_ID = "storeId";
import com.todoroo.astrid.gtasks.GtasksList;
public class GtasksListFragment extends TaskListFragment {
public static TaskListFragment newGtasksListFragment(GtasksFilter gtasksFilter, GtasksList list) {
return null;
}

@ -8,8 +8,6 @@ package com.todoroo.astrid.gtasks;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
@ -21,10 +19,7 @@ import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.TaskAttachmentDao;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.StoreObject;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.SyncV2Service;
import com.todoroo.astrid.sync.SyncResultCallback;
import com.todoroo.astrid.tags.TagService;
import org.tasks.R;
@ -32,6 +27,7 @@ import org.tasks.dialogs.DialogBuilder;
import org.tasks.injection.ForApplication;
import org.tasks.injection.FragmentComponent;
import org.tasks.preferences.Preferences;
import org.tasks.tasklist.GtasksListFragment;
import org.tasks.themes.Theme;
import org.tasks.themes.ThemeCache;
import org.tasks.ui.CheckBoxes;
@ -41,21 +37,18 @@ import java.util.Arrays;
import javax.inject.Inject;
public class GtasksSubtaskListFragment extends TaskListFragment {
public class GtasksSubtaskListFragment extends GtasksListFragment {
public static TaskListFragment newGtasksListFragment(GtasksFilter filter, GtasksList list) {
public static TaskListFragment newGtasksSubtaskListFragment(GtasksFilter filter, GtasksList list) {
GtasksSubtaskListFragment fragment = new GtasksSubtaskListFragment();
fragment.filter = filter;
fragment.list = list;
return fragment;
}
private static final String EXTRA_STORE_OBJECT = "extra_store_object";
@Inject TaskDao taskDao;
@Inject MetadataDao metadataDao;
@Inject GtasksTaskListUpdater gtasksTaskListUpdater;
@Inject SyncV2Service syncService;
@Inject TaskAttachmentDao taskAttachmentDao;
@Inject Preferences preferences;
@Inject DialogBuilder dialogBuilder;
@ -65,7 +58,6 @@ public class GtasksSubtaskListFragment extends TaskListFragment {
@Inject @ForApplication Context context;
@Inject Theme theme;
private GtasksList list;
protected OrderedMetadataListFragmentHelper helper;
private int lastVisibleIndex = -1;
@ -73,59 +65,15 @@ public class GtasksSubtaskListFragment extends TaskListFragment {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
StoreObject storeObject = savedInstanceState.getParcelable(EXTRA_STORE_OBJECT);
list = new GtasksList(storeObject);
}
helper.setList(list);
}
@Override
protected void inflateMenu(Toolbar toolbar) {
super.inflateMenu(toolbar);
toolbar.inflateMenu(R.menu.menu_gtasks_list_fragment);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(EXTRA_STORE_OBJECT, list.getStoreObject());
}
@Override
protected void onTaskDelete(Task task) {
super.onTaskDelete(task);
helper.onDeleteTask(task);
}
@Override
public boolean onMenuItemClick(MenuItem item) {
switch(item.getItemId()) {
case R.id.menu_clear_completed:
clearCompletedTasks();
return true;
default:
return super.onMenuItemClick(item);
}
}
private void clearCompletedTasks() {
syncService.clearCompleted(list, new SyncResultCallback() {
@Override
public void started() {
setSyncOngoing(true);
}
@Override
public void finished() {
setSyncOngoing(false);
onRefresh();
}
});
}
@Override
public Property<?>[] taskProperties() {
Property<?>[] baseProperties = TaskAdapter.PROPERTIES;
@ -157,6 +105,7 @@ public class GtasksSubtaskListFragment extends TaskListFragment {
@Override
public void setTaskAdapter() {
helper.setList(list);
helper.beforeSetUpTaskList(filter);
super.setTaskAdapter();

@ -9,7 +9,9 @@ import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Functions;
import com.todoroo.andlib.sql.Order;
import com.todoroo.andlib.sql.Query;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gtasks.sync.GtasksSyncService;
@ -47,6 +49,16 @@ public class GtasksTaskListUpdater {
this.metadataDao = metadataDao;
}
public void initialize(Filter filter) {
String query = filter.getSqlQuery();
query = query.replaceAll("ORDER BY .*", "");
query = query + String.format(" ORDER BY %s", Order.asc(Functions.cast(GtasksMetadata.ORDER, "LONG")));
query = query.replace(
TaskDao.TaskCriteria.activeAndVisible().toString(),
TaskDao.TaskCriteria.notDeleted().toString());
filter.setFilterQueryOverride(query);
}
// --- overrides
Metadata getTaskMetadata(long taskId) {

@ -105,6 +105,7 @@ class OrderedMetadataListFragmentHelper {
}
public void beforeSetUpTaskList(Filter filter) {
updater.initialize(filter);
}
private final DropListener dropListener = new DropListener() {

@ -0,0 +1,92 @@
package org.tasks.tasklist;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.data.StoreObject;
import com.todoroo.astrid.gtasks.GtasksList;
import com.todoroo.astrid.service.SyncV2Service;
import com.todoroo.astrid.sync.SyncResultCallback;
import org.tasks.R;
import org.tasks.injection.FragmentComponent;
import javax.inject.Inject;
public class GtasksListFragment extends TaskListFragment {
public static TaskListFragment newGtasksListFragment(GtasksFilter filter, GtasksList list) {
GtasksListFragment fragment = new GtasksListFragment();
fragment.filter = filter;
fragment.list = list;
return fragment;
}
private static final String EXTRA_STORE_OBJECT = "extra_store_object";
@Inject SyncV2Service syncService;
protected GtasksList list;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
StoreObject storeObject = savedInstanceState.getParcelable(EXTRA_STORE_OBJECT);
list = new GtasksList(storeObject);
}
}
@Override
protected void inflateMenu(Toolbar toolbar) {
super.inflateMenu(toolbar);
toolbar.inflateMenu(R.menu.menu_gtasks_list_fragment);
}
@Override
public boolean onMenuItemClick(MenuItem item) {
switch(item.getItemId()) {
case R.id.menu_clear_completed:
clearCompletedTasks();
return true;
default:
return super.onMenuItemClick(item);
}
}
private void clearCompletedTasks() {
syncService.clearCompleted(list, new SyncResultCallback() {
@Override
public void started() {
setSyncOngoing(true);
}
@Override
public void finished() {
setSyncOngoing(false);
onRefresh();
}
});
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(EXTRA_STORE_OBJECT, list.getStoreObject());
}
@Override
protected boolean hasDraggableOption() {
return list != null;
}
@Override
public void inject(FragmentComponent component) {
component.inject(this);
}
}

@ -54,6 +54,7 @@ import org.tasks.intents.TaskIntents;
import org.tasks.preferences.DefaultFilterProvider;
import org.tasks.preferences.Preferences;
import org.tasks.receivers.RepeatConfirmationReceiver;
import org.tasks.tasklist.GtasksListFragment;
import org.tasks.tasklist.TagListFragment;
import org.tasks.themes.Theme;
import org.tasks.themes.ThemeCache;
@ -298,7 +299,9 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
GtasksFilter gtasksFilter = (GtasksFilter) filter;
GtasksList list = gtasksListService.getList(gtasksFilter.getStoreId());
if (list != null) {
return GtasksSubtaskListFragment.newGtasksListFragment(gtasksFilter, list);
return preferences.getBoolean(R.string.p_manual_sort, false)
? GtasksSubtaskListFragment.newGtasksSubtaskListFragment(gtasksFilter, list)
: GtasksListFragment.newGtasksListFragment(gtasksFilter, list);
}
} else if (filter != null) {
return subtasksHelper.shouldUseSubtasksFragmentForFilter(filter)

@ -262,7 +262,6 @@ public class TaskListFragment extends InjectingListFragment implements
completed.setChecked(true);
}
if (this instanceof GtasksSubtaskListFragment) {
menu.findItem(R.id.menu_sort).setVisible(false);
completed.setChecked(true);
completed.setEnabled(false);
}

@ -6,9 +6,7 @@ import android.os.Parcelable;
import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Functions;
import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.Order;
import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.TaskDao;
@ -40,12 +38,12 @@ public class GtasksFilter extends Filter {
}
private static QueryTemplate getQueryTemplate(GtasksList list) {
return new QueryTemplate().join(
Join.left(Metadata.TABLE, Task.ID.eq(Metadata.TASK))).where(Criterion.and(
Criterion fullCriterion = Criterion.and(
MetadataDao.MetadataCriteria.withKey(GtasksMetadata.METADATA_KEY),
TaskDao.TaskCriteria.notDeleted(),
GtasksMetadata.LIST_ID.eq(list.getRemoteId()))).orderBy(
Order.asc(Functions.cast(GtasksMetadata.ORDER, "LONG")));
TaskDao.TaskCriteria.activeAndVisible(),
GtasksMetadata.LIST_ID.eq(list.getRemoteId()));
return new QueryTemplate().join(Join.left(Metadata.TABLE, Task.ID.eq(Metadata.TASK)))
.where(fullCriterion);
}
private static ContentValues getValuesForNewTasks(GtasksList list) {

@ -68,8 +68,7 @@ public class TaskListDataProvider {
String groupedQuery;
if (sqlQueryTemplate.get().contains("GROUP BY")) {
groupedQuery = sqlQueryTemplate.get();
} else if (sqlQueryTemplate.get().contains("ORDER BY")) //$NON-NLS-1$
{
} else if (sqlQueryTemplate.get().contains("ORDER BY")) {
groupedQuery = sqlQueryTemplate.get().replace("ORDER BY", "GROUP BY " + Task.ID + " ORDER BY"); //$NON-NLS-1$
} else {
groupedQuery = sqlQueryTemplate.get() + " GROUP BY " + Task.ID;

@ -14,6 +14,7 @@ import com.todoroo.astrid.ui.HideUntilControlSet;
import com.todoroo.astrid.ui.ReminderControlSet;
import org.tasks.fragments.CommentBarFragment;
import org.tasks.tasklist.GtasksListFragment;
import org.tasks.tasklist.TagListFragment;
import org.tasks.ui.CalendarControlSet;
import org.tasks.ui.DeadlineControlSet;
@ -69,4 +70,6 @@ public interface FragmentComponent {
void inject(SubtasksTagListFragment subtasksTagListFragment);
void inject(GoogleTaskListFragment googleTaskListFragment);
void inject(GtasksListFragment gtasksListFragment);
}

Loading…
Cancel
Save