Brought the drag goodness to google tasks fragment

pull/14/head
Tim Su 14 years ago
parent ec23d5b5d1
commit a8ea63ed30

@ -7,41 +7,31 @@ import android.support.v4.view.Menu;
import android.support.v4.view.MenuItem;
import android.view.MenuInflater;
import com.commonsware.cwac.tlv.TouchListView;
import com.commonsware.cwac.tlv.TouchListView.DropListener;
import com.commonsware.cwac.tlv.TouchListView.SwipeListener;
import com.timsu.astrid.R;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.Property.IntegerProperty;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.activity.DraggableTaskListFragment;
import com.todoroo.astrid.adapter.TaskAdapter.OnCompletedTaskListener;
import com.todoroo.astrid.dao.StoreObjectDao;
import com.todoroo.astrid.data.StoreObject;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gtasks.sync.GtasksSyncService;
import com.todoroo.astrid.service.SyncV2Service;
import com.todoroo.astrid.subtasks.SubtasksListFragment;
public class GtasksListFragment extends DraggableTaskListFragment {
public class GtasksListFragment extends SubtasksListFragment {
protected static final int MENU_CLEAR_COMPLETED_ID = MENU_ADDON_INTENT_ID + 1;
public static final String TOKEN_STORE_ID = "storeId";
public static final String TOKEN_STORE_ID = "storeId"; //$NON-NLS-1$
protected static final int MENU_REFRESH_ID = MENU_SUPPORT_ID + 1;
private static final String LAST_FETCH_KEY_GTASKS = "gtasksLastFetch";
@Autowired private StoreObjectDao storeObjectDao;
@Autowired private GtasksTaskListUpdater gtasksTaskListUpdater;
@Autowired private GtasksSyncService gtasksSyncService;
@Autowired private GtasksMetadataService gtasksMetadataService;
@Autowired private GtasksPreferenceService gtasksPreferenceService;
@ -50,11 +40,6 @@ public class GtasksListFragment extends DraggableTaskListFragment {
private StoreObject list;
@Override
protected IntegerProperty getIndentProperty() {
return GtasksMetadata.INDENT;
}
private static final Property<?>[] LIST_PROPERTIES = new Property<?>[] {
StoreObject.ID,
StoreObject.TYPE,
@ -68,9 +53,6 @@ public class GtasksListFragment extends DraggableTaskListFragment {
public void onActivityCreated(Bundle icicle) {
super.onActivityCreated(icicle);
getTouchListView().setDropListener(dropListener);
getTouchListView().setSwipeListener(swipeListener);
if(!Preferences.getBoolean(GtasksPreferenceService.PREF_SHOWN_LIST_HELP, false)) {
Preferences.setBoolean(GtasksPreferenceService.PREF_SHOWN_LIST_HELP, true);
DialogUtilities.okDialog(getActivity(),
@ -79,50 +61,10 @@ public class GtasksListFragment extends DraggableTaskListFragment {
getString(R.string.gtasks_help_body), null);
}
taskAdapter.addOnCompletedTaskListener(new OnCompletedTaskListener() {
@Override
public void onCompletedTask(Task item, boolean newState) {
setCompletedForItemAndSubtasks(item, newState);
}
});
long storeObjectId = getActivity().getIntent().getLongExtra(TOKEN_STORE_ID, 0);
list = storeObjectDao.fetch(storeObjectId, LIST_PROPERTIES);
}
private final TouchListView.DropListener dropListener = new DropListener() {
@Override
public void drop(int from, int to) {
long targetTaskId = taskAdapter.getItemId(from);
long destinationTaskId = taskAdapter.getItemId(to);
if(to == getListView().getCount() - 1)
gtasksTaskListUpdater.moveTo(filter, list, targetTaskId, -1);
else
gtasksTaskListUpdater.moveTo(filter, list, targetTaskId, destinationTaskId);
gtasksSyncService.triggerMoveForMetadata(gtasksMetadataService.getTaskMetadata(targetTaskId));
loadTaskListContent(true);
}
};
private final TouchListView.SwipeListener swipeListener = new SwipeListener() {
@Override
public void swipeRight(int which) {
long targetTaskId = taskAdapter.getItemId(which);
gtasksTaskListUpdater.indent(filter, list, targetTaskId, 1);
gtasksSyncService.triggerMoveForMetadata(gtasksMetadataService.getTaskMetadata(targetTaskId));
loadTaskListContent(true);
}
@Override
public void swipeLeft(int which) {
long targetTaskId = taskAdapter.getItemId(which);
gtasksTaskListUpdater.indent(filter, list, targetTaskId, -1);
gtasksSyncService.triggerMoveForMetadata(gtasksMetadataService.getTaskMetadata(targetTaskId));
loadTaskListContent(true);
}
};
@Override
protected void initiateAutomaticSync() {
if (list != null && DateUtilities.now() - list.getValue(GtasksList.LAST_SYNC) > DateUtilities.ONE_HOUR) {
@ -153,9 +95,9 @@ public class GtasksListFragment extends DraggableTaskListFragment {
}
private void clearCompletedTasks() {
final ProgressDialog pd = new ProgressDialog(getActivity());
final TodorooCursor<Task> tasks = taskService.fetchFiltered(filter.sqlQuery, null, Task.ID, Task.COMPLETION_DATE);
final TodorooCursor<Task> tasks = taskService.fetchFiltered(filter.sqlQuery,
null, Task.ID, Task.COMPLETION_DATE);
pd.setMessage(this.getString(R.string.gtasks_GTA_clearing));
pd.show();
@ -168,7 +110,8 @@ public class GtasksListFragment extends DraggableTaskListFragment {
Task t = new Task(tasks);
if (t.isCompleted()) {
if (listId == null) {
listId = gtasksMetadataService.getTaskMetadata(t.getId()).getValue(GtasksMetadata.LIST_ID);
listId = gtasksMetadataService.getTaskMetadata(
t.getId()).getValue(GtasksMetadata.LIST_ID);
}
t.setValue(Task.DELETION_DATE, DateUtilities.now());
taskService.save(t);
@ -204,45 +147,4 @@ public class GtasksListFragment extends DraggableTaskListFragment {
}
}
private void setCompletedForItemAndSubtasks(Task item, boolean completedState) {
final TodorooCursor<Task> tasks = taskService.fetchFiltered(filter.sqlQuery, null, Task.ID, Task.COMPLETION_DATE);
final long itemId = item.getId();
final boolean completed = completedState;
new Thread() {
@Override
public void run() {
try {
for (tasks.moveToFirst(); !tasks.isAfterLast(); tasks.moveToNext()) {
Task curr = new Task(tasks);
if (curr.getId() == itemId) {
int itemIndent = gtasksMetadataService.getTaskMetadata(curr.getId()).getValue(GtasksMetadata.INDENT);
tasks.moveToNext();
while (!tasks.isAfterLast()) {
Task next = new Task(tasks);
int currIndent = gtasksMetadataService.getTaskMetadata(next.getId()).getValue(GtasksMetadata.INDENT);
if (currIndent > itemIndent) {
if (completed)
next.setValue(Task.COMPLETION_DATE, DateUtilities.now());
else
next.setValue(Task.COMPLETION_DATE, 0L);
taskService.save(next);
} else break;
tasks.moveToNext();
}
break;
}
}
} finally {
tasks.close();
}
getActivity().runOnUiThread(new Runnable() {
public void run() {
taskAdapter.notifyDataSetInvalidated();
}
});
}
}.start();
}
}

@ -20,6 +20,7 @@ import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.StoreObject;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gtasks.sync.GtasksSyncService;
import com.todoroo.astrid.subtasks.OrderedListUpdater;
public class GtasksTaskListUpdater extends OrderedListUpdater<StoreObject> {
@ -35,6 +36,7 @@ public class GtasksTaskListUpdater extends OrderedListUpdater<StoreObject> {
@Autowired private GtasksListService gtasksListService;
@Autowired private GtasksMetadataService gtasksMetadataService;
@Autowired private GtasksSyncService gtasksSyncService;
@Autowired private MetadataDao metadataDao;
public GtasksTaskListUpdater() {
@ -74,6 +76,11 @@ public class GtasksTaskListUpdater extends OrderedListUpdater<StoreObject> {
updateParentSiblingMapsFor(list);
}
@Override
public void onMetadataChanged(long taskId) {
gtasksSyncService.triggerMoveForMetadata(gtasksMetadataService.getTaskMetadata(taskId));
}
@Override
protected void iterateThroughList(Filter filter, StoreObject list, OrderedListIterator iterator) {
gtasksMetadataService.iterateThroughList(list, iterator);

@ -89,8 +89,8 @@ public class OrderedListFragmentHelper<LIST> {
public Property<?>[] taskProperties() {
ArrayList<Property<?>> properties = new ArrayList<Property<?>>(Arrays.asList(TaskAdapter.PROPERTIES));
properties.add(SubtasksMetadata.INDENT);
properties.add(SubtasksMetadata.ORDER);
properties.add(updater.indentProperty());
properties.add(updater.orderProperty());
return properties.toArray(new Property<?>[properties.size()]);
}
@ -107,6 +107,7 @@ public class OrderedListFragmentHelper<LIST> {
updater.moveTo(getFilter(), list, targetTaskId, destinationTaskId);
fragment.loadTaskListContent(true);
updater.onMetadataChanged(targetTaskId);
}
};
@ -116,6 +117,7 @@ public class OrderedListFragmentHelper<LIST> {
long targetTaskId = taskAdapter.getItemId(which);
updater.indent(getFilter(), list, targetTaskId, 1);
fragment.loadTaskListContent(true);
updater.onMetadataChanged(targetTaskId);
}
@Override
@ -123,6 +125,7 @@ public class OrderedListFragmentHelper<LIST> {
long targetTaskId = taskAdapter.getItemId(which);
updater.indent(getFilter(), list, targetTaskId, -1);
fragment.loadTaskListContent(true);
updater.onMetadataChanged(targetTaskId);
}
};
@ -200,7 +203,7 @@ public class OrderedListFragmentHelper<LIST> {
super.setFieldContentsAndVisibility(view);
ViewHolder vh = (ViewHolder) view.getTag();
int indent = vh.task.getValue(SubtasksMetadata.INDENT);
int indent = vh.task.getValue(updater.indentProperty());
vh.rowBody.setPadding(Math.round(indent * 20 * metrics.density), 0, 0, 0);
}

@ -47,6 +47,13 @@ abstract public class OrderedListUpdater<LIST> {
//
}
/**
* @param taskId
*/
public void onMetadataChanged(long taskId) {
//
}
/**
* @param list
*/

@ -18,10 +18,14 @@ import com.todoroo.astrid.data.Task;
*/
public class SubtasksListFragment extends TaskListFragment {
private final OrderedListFragmentHelper<String> helper;
protected OrderedListFragmentHelper<String> helper;
public SubtasksListFragment() {
super();
createFragmentHelper();
}
protected void createFragmentHelper() {
helper = new OrderedListFragmentHelper<String>(this, new SubtasksUpdater());
helper.setList(SubtasksMetadata.LIST_ACTIVE_TASKS);
}

Loading…
Cancel
Save