diff --git a/src/amazon/java/com/todoroo/astrid/gtasks/GtasksSubtaskListFragment.java b/src/amazon/java/com/todoroo/astrid/gtasks/GtasksSubtaskListFragment.java new file mode 100644 index 000000000..e431b9b64 --- /dev/null +++ b/src/amazon/java/com/todoroo/astrid/gtasks/GtasksSubtaskListFragment.java @@ -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; + } +} diff --git a/src/amazon/java/com/todoroo/astrid/gtasks/GtasksListFragment.java b/src/amazon/java/org/tasks/tasklist/GtasksListFragment.java similarity index 51% rename from src/amazon/java/com/todoroo/astrid/gtasks/GtasksListFragment.java rename to src/amazon/java/org/tasks/tasklist/GtasksListFragment.java index 29aecedfa..4a73b504c 100644 --- a/src/amazon/java/com/todoroo/astrid/gtasks/GtasksListFragment.java +++ b/src/amazon/java/org/tasks/tasklist/GtasksListFragment.java @@ -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; } diff --git a/src/generic/java/com/todoroo/astrid/gtasks/GtasksSubtaskListFragment.java b/src/generic/java/com/todoroo/astrid/gtasks/GtasksSubtaskListFragment.java new file mode 100644 index 000000000..e431b9b64 --- /dev/null +++ b/src/generic/java/com/todoroo/astrid/gtasks/GtasksSubtaskListFragment.java @@ -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; + } +} diff --git a/src/generic/java/com/todoroo/astrid/gtasks/GtasksListFragment.java b/src/generic/java/org/tasks/tasklist/GtasksListFragment.java similarity index 51% rename from src/generic/java/com/todoroo/astrid/gtasks/GtasksListFragment.java rename to src/generic/java/org/tasks/tasklist/GtasksListFragment.java index 29aecedfa..4a73b504c 100644 --- a/src/generic/java/com/todoroo/astrid/gtasks/GtasksListFragment.java +++ b/src/generic/java/org/tasks/tasklist/GtasksListFragment.java @@ -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; } diff --git a/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksSubtaskListFragment.java b/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksSubtaskListFragment.java index fc61c24e2..5ebb05471 100644 --- a/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksSubtaskListFragment.java +++ b/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksSubtaskListFragment.java @@ -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(); diff --git a/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java b/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java index acfb5523f..7e03e79a5 100644 --- a/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java +++ b/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java @@ -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) { diff --git a/src/googleplay/java/com/todoroo/astrid/gtasks/OrderedMetadataListFragmentHelper.java b/src/googleplay/java/com/todoroo/astrid/gtasks/OrderedMetadataListFragmentHelper.java index a34d5baaf..115710eea 100644 --- a/src/googleplay/java/com/todoroo/astrid/gtasks/OrderedMetadataListFragmentHelper.java +++ b/src/googleplay/java/com/todoroo/astrid/gtasks/OrderedMetadataListFragmentHelper.java @@ -105,6 +105,7 @@ class OrderedMetadataListFragmentHelper { } public void beforeSetUpTaskList(Filter filter) { + updater.initialize(filter); } private final DropListener dropListener = new DropListener() { diff --git a/src/googleplay/java/org/tasks/tasklist/GtasksListFragment.java b/src/googleplay/java/org/tasks/tasklist/GtasksListFragment.java new file mode 100644 index 000000000..5fa83bf29 --- /dev/null +++ b/src/googleplay/java/org/tasks/tasklist/GtasksListFragment.java @@ -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); + } +} diff --git a/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java b/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java index 64489c022..24c450216 100644 --- a/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java +++ b/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java @@ -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) diff --git a/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java b/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java index add486d47..26f7d0e75 100644 --- a/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java +++ b/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java @@ -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); } diff --git a/src/main/java/com/todoroo/astrid/api/GtasksFilter.java b/src/main/java/com/todoroo/astrid/api/GtasksFilter.java index 26f31eb00..b7914ada7 100644 --- a/src/main/java/com/todoroo/astrid/api/GtasksFilter.java +++ b/src/main/java/com/todoroo/astrid/api/GtasksFilter.java @@ -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) { diff --git a/src/main/java/org/tasks/data/TaskListDataProvider.java b/src/main/java/org/tasks/data/TaskListDataProvider.java index 9b6b669dd..d89348cbd 100644 --- a/src/main/java/org/tasks/data/TaskListDataProvider.java +++ b/src/main/java/org/tasks/data/TaskListDataProvider.java @@ -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; diff --git a/src/main/java/org/tasks/injection/FragmentComponent.java b/src/main/java/org/tasks/injection/FragmentComponent.java index 2f134a2c3..40957f25c 100644 --- a/src/main/java/org/tasks/injection/FragmentComponent.java +++ b/src/main/java/org/tasks/injection/FragmentComponent.java @@ -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); }