Use google task API to clear completed

pull/384/head
Alex Baker 10 years ago
parent d6269f0bf0
commit 69ec971719

@ -5,16 +5,10 @@
*/
package com.todoroo.astrid.gtasks;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.MenuItem;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.StoreObjectDao;
import com.todoroo.astrid.dao.TaskAttachmentDao;
@ -23,12 +17,14 @@ import com.todoroo.astrid.service.SyncV2Service;
import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.subtasks.OrderedListFragmentHelperInterface;
import com.todoroo.astrid.subtasks.SubtasksListFragment;
import com.todoroo.astrid.sync.SyncResultCallback;
import org.tasks.Broadcaster;
import org.tasks.R;
import org.tasks.dialogs.DialogBuilder;
import org.tasks.injection.ForActivity;
import org.tasks.preferences.ActivityPreferences;
import org.tasks.sync.IndeterminateProgressBarSyncResultCallback;
import org.tasks.sync.RecordSyncStatusCallback;
import org.tasks.sync.SyncThrottle;
import javax.inject.Inject;
@ -41,14 +37,13 @@ public class GtasksListFragment extends SubtasksListFragment {
@Inject MetadataDao metadataDao;
@Inject StoreObjectDao storeObjectDao;
@Inject GtasksTaskListUpdater gtasksTaskListUpdater;
@Inject GtasksMetadataService gtasksMetadataService;
@Inject GtasksPreferenceService gtasksPreferenceService;
@Inject SyncV2Service syncService;
@Inject @ForActivity Context context;
@Inject TaskAttachmentDao taskAttachmentDao;
@Inject ActivityPreferences preferences;
@Inject SyncThrottle syncThrottle;
@Inject DialogBuilder dialogBuilder;
@Inject Broadcaster broadcaster;
private GtasksList list;
@ -69,21 +64,12 @@ public class GtasksListFragment extends SubtasksListFragment {
@Override
protected void initiateAutomaticSyncImpl() {
if (list != null && syncThrottle.canSync(list.getId())) {
refreshData(false);
syncData();
}
}
private void refreshData(final boolean manual) {
syncService.synchronizeList(list, new IndeterminateProgressBarSyncResultCallback(gtasksPreferenceService, getActivity(), new Runnable() {
@Override
public void run() {
if (manual) {
context.sendBroadcast(new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH));
} else {
refresh();
}
}
}));
private void syncData() {
syncService.synchronizeList(list, new IndeterminateProgressBarSyncResultCallback(this, gtasksPreferenceService, broadcaster));
}
@Override
@ -103,44 +89,19 @@ public class GtasksListFragment extends SubtasksListFragment {
}
private void clearCompletedTasks() {
final TodorooCursor<Task> tasks = taskService.fetchFiltered(filter.getSqlQuery(),
null, Task.ID, Task.COMPLETION_DATE);
new AsyncTask<Void, Void, Void>() {
syncService.clearCompleted(list, new SyncResultCallback() {
@Override
protected void onPreExecute() {
public void started() {
setSyncOngoing(true);
}
@Override
protected Void doInBackground(Void... params) {
String listId = null;
try {
for (tasks.moveToFirst(); !tasks.isAfterLast(); tasks.moveToNext()) {
Task t = new Task(tasks);
if (t.isCompleted()) {
if (listId == null) {
listId = gtasksMetadataService.getTaskMetadata(
t.getId()).getValue(GtasksMetadata.LIST_ID);
}
t.setDeletionDate(DateUtilities.now());
taskService.save(t);
}
}
} finally {
tasks.close();
}
if (listId != null) {
gtasksTaskListUpdater.correctMetadataForList(listId);
}
return null;
}
public void finished() {
setSyncOngoing(false);
@Override
protected void onPostExecute(Void aVoid) {
loadTaskListContent();
syncData();
}
}.execute();
});
}
@Override

@ -42,17 +42,15 @@ public class GtasksTaskListUpdater extends OrderedMetadataListUpdater<GtasksList
final HashMap<Long, String> localToRemoteIdMap =
new HashMap<>();
private final GtasksListService gtasksListService;
private final GtasksMetadataService gtasksMetadataService;
private final GtasksSyncService gtasksSyncService;
private final MetadataDao metadataDao;
private final GtasksMetadata gtasksMetadata;
@Inject
public GtasksTaskListUpdater(GtasksListService gtasksListService, GtasksMetadataService gtasksMetadataService,
GtasksSyncService gtasksSyncService, MetadataDao metadataDao, GtasksMetadata gtasksMetadata) {
public GtasksTaskListUpdater(GtasksMetadataService gtasksMetadataService, GtasksSyncService gtasksSyncService,
MetadataDao metadataDao, GtasksMetadata gtasksMetadata) {
super(metadataDao);
this.gtasksListService = gtasksListService;
this.gtasksMetadataService = gtasksMetadataService;
this.gtasksSyncService = gtasksSyncService;
this.metadataDao = metadataDao;
@ -104,42 +102,6 @@ public class GtasksTaskListUpdater extends OrderedMetadataListUpdater<GtasksList
// --- used during synchronization
/**
* Update order, parent, and indentation fields for all tasks in the given list
*/
public void correctMetadataForList(String listId) {
GtasksList list = gtasksListService.getList(listId);
if(list == null) {
return;
}
updateParentSiblingMapsFor(list);
final AtomicLong order = new AtomicLong(0);
final AtomicInteger previousIndent = new AtomicInteger(-1);
gtasksMetadataService.iterateThroughList(list, new OrderedListIterator() {
@Override
public void processTask(long taskId, Metadata metadata) {
metadata.setValue(GtasksMetadata.ORDER, order.getAndAdd(1));
int indent = metadata.getValue(GtasksMetadata.INDENT);
if(indent > previousIndent.get() + 1) {
indent = previousIndent.get() + 1;
}
metadata.setValue(GtasksMetadata.INDENT, indent);
Long parent = parents.get(taskId);
if(parent == null || parent < 0) {
parent = Task.NO_ID;
}
metadata.setValue(GtasksMetadata.PARENT_TASK, parent);
metadataDao.persist(metadata);
previousIndent.set(indent);
}
});
}
public void correctOrderAndIndentForList(String listId) {
orderAndIndentHelper(listId, new AtomicLong(0L), Task.NO_ID, 0,
new HashSet<Long>());

@ -116,6 +116,12 @@ public class GtasksInvoker {
.setPrevious(previousId));
}
public void clearCompleted(String listId) throws IOException {
execute(service
.tasks()
.clear(listId));
}
public void deleteGtask(String listId, String taskId) throws IOException {
execute(service
.tasks()

@ -45,7 +45,7 @@ public class GtasksSyncService {
private final TaskDao taskDao;
private final GtasksPreferenceService gtasksPreferenceService;
private final GtasksMetadata gtasksMetadataFactory;
private GtasksInvoker gtasksInvoker;
private final GtasksInvoker gtasksInvoker;
private final LinkedBlockingQueue<SyncOnSaveOperation> operationQueue = new LinkedBlockingQueue<>();
@Inject
@ -94,6 +94,19 @@ public class GtasksSyncService {
}
}
private class ClearOp extends SyncOnSaveOperation {
private final String listId;
public ClearOp(String listId) {
this.listId = listId;
}
@Override
public void op(GtasksInvoker invoker) throws IOException {
invoker.clearCompleted(listId);
}
}
private class NotifyOp extends SyncOnSaveOperation {
private final Semaphore sema;
@ -186,6 +199,9 @@ public class GtasksSyncService {
return false;
}
public void clearCompleted(String listId) {
operationQueue.offer(new ClearOp(listId));
}
public void triggerMoveForMetadata(final Metadata metadata) {
if (metadata == null) {

@ -187,6 +187,21 @@ public class GtasksSyncV2Provider {
}
}
public void clearCompleted(final GtasksList list, final SyncResultCallback callback) {
executor.execute(callback, new Runnable() {
@Override
public void run() {
callback.started();
try {
gtasksSyncService.clearCompleted(list.getRemoteId());
} finally {
callback.finished();
}
}
});
}
public void synchronizeList(final GtasksList gtasksList, final SyncResultCallback callback) {
executor.execute(callback, new Runnable() {
@Override

@ -173,10 +173,18 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr
}
}
public void setSyncOngoing(boolean ongoing) {
public void setSyncOngoing(final boolean ongoing) {
Activity activity = getActivity();
if (activity != null) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
swipeRefreshLayout.setRefreshing(ongoing);
emptyView.setRefreshing(ongoing);
}
});
}
}
/**
* Container Activity must implement this interface and we ensure that it

@ -5,18 +5,15 @@
*/
package com.todoroo.astrid.helper;
import android.app.Activity;
import android.content.Intent;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import com.todoroo.astrid.service.SyncV2Service;
import com.todoroo.astrid.sync.SyncResultCallback;
import org.tasks.Broadcaster;
import org.tasks.preferences.Preferences;
import org.tasks.sync.IndeterminateProgressBarSyncResultCallback;
import org.tasks.sync.RecordSyncStatusCallback;
import javax.inject.Inject;
@ -42,15 +39,11 @@ public class SyncActionHelper {
// --- boilerplate
@Inject
public SyncActionHelper(GtasksPreferenceService gtasksPreferenceService, SyncV2Service syncService, final Activity activity, Preferences preferences) {
public SyncActionHelper(GtasksPreferenceService gtasksPreferenceService, SyncV2Service syncService,
Preferences preferences, Broadcaster broadcaster) {
this.syncService = syncService;
this.preferences = preferences;
syncResultCallback = new IndeterminateProgressBarSyncResultCallback(gtasksPreferenceService, activity, new Runnable() {
@Override
public void run() {
activity.sendBroadcast(new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH));
}
});
syncResultCallback = new RecordSyncStatusCallback(gtasksPreferenceService, broadcaster);
}
// --- automatic sync logic

@ -63,4 +63,10 @@ public class SyncV2Service {
provider.synchronizeList(list, callback);
}
}
public void clearCompleted(GtasksList list, SyncResultCallback callback) {
if (provider.isActive()) {
provider.clearCompleted(list, callback);
}
}
}

@ -1,36 +1,32 @@
package org.tasks.sync;
import android.app.Activity;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import timber.log.Timber;
import org.tasks.Broadcaster;
public class IndeterminateProgressBarSyncResultCallback extends RecordSyncStatusCallback {
private final Activity activity;
private Runnable onFinished;
private final TaskListFragment taskListFragment;
private final GtasksPreferenceService gtasksPreferenceService;
public IndeterminateProgressBarSyncResultCallback(TaskListFragment taskListFragment, GtasksPreferenceService gtasksPreferenceService, Broadcaster broadcaster) {
super(gtasksPreferenceService, broadcaster);
this.taskListFragment = taskListFragment;
this.gtasksPreferenceService = gtasksPreferenceService;
}
public IndeterminateProgressBarSyncResultCallback(GtasksPreferenceService gtasksPreferenceService, Activity activity, Runnable onFinished) {
super(gtasksPreferenceService);
@Override
public void started() {
super.started();
this.activity = activity;
this.onFinished = onFinished;
taskListFragment.setSyncOngoing(gtasksPreferenceService.isOngoing());
}
@Override
public void finished() {
super.finished();
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
onFinished.run();
} catch (IllegalStateException e) {
Timber.e(e, e.getMessage());
}
}
});
taskListFragment.setSyncOngoing(gtasksPreferenceService.isOngoing());
}
}

@ -10,10 +10,6 @@ public class RecordSyncStatusCallback implements SyncResultCallback {
private GtasksPreferenceService gtasksPreferenceService;
private Broadcaster broadcaster;
public RecordSyncStatusCallback(GtasksPreferenceService gtasksPreferenceService) {
this(gtasksPreferenceService, null);
}
public RecordSyncStatusCallback(GtasksPreferenceService gtasksPreferenceService, Broadcaster broadcaster) {
this.gtasksPreferenceService = gtasksPreferenceService;
this.broadcaster = broadcaster;
@ -27,8 +23,6 @@ public class RecordSyncStatusCallback implements SyncResultCallback {
@Override
public void finished() {
gtasksPreferenceService.stopOngoing();
if (broadcaster != null) {
broadcaster.refresh();
}
}
}

Loading…
Cancel
Save