Ensure progress indicator shutoff

See #155
pull/189/head
Alex Baker 12 years ago
parent ff04b7cdb5
commit ad586e1b0b

@ -39,6 +39,8 @@ import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gtasks.GtasksListFragment; import com.todoroo.astrid.gtasks.GtasksListFragment;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import com.todoroo.astrid.gtasks.GtasksPreferences;
import com.todoroo.astrid.tags.DeleteTagActivity; import com.todoroo.astrid.tags.DeleteTagActivity;
import com.todoroo.astrid.tags.RenameTagActivity; import com.todoroo.astrid.tags.RenameTagActivity;
import com.todoroo.astrid.tags.TagFilterExposer; import com.todoroo.astrid.tags.TagFilterExposer;
@ -58,6 +60,7 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList
@Inject TagDataDao tagDataDao; @Inject TagDataDao tagDataDao;
@Inject ActivityPreferences preferences; @Inject ActivityPreferences preferences;
@Inject GtasksPreferenceService gtasksPreferenceService;
MenuDrawer menuDrawer; MenuDrawer menuDrawer;
@ -147,6 +150,13 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList
} }
} }
@Override
protected void onResume() {
super.onResume();
setSupportProgressBarIndeterminateVisibility(gtasksPreferenceService.isOngoing());
}
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.task_list_activity, menu); getMenuInflater().inflate(R.menu.task_list_activity, menu);

@ -58,6 +58,7 @@ import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.TaskAttachment; import com.todoroo.astrid.data.TaskAttachment;
import com.todoroo.astrid.data.TaskListMetadata; import com.todoroo.astrid.data.TaskListMetadata;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import com.todoroo.astrid.helper.SyncActionHelper; import com.todoroo.astrid.helper.SyncActionHelper;
import com.todoroo.astrid.service.SyncV2Service; import com.todoroo.astrid.service.SyncV2Service;
import com.todoroo.astrid.service.TaskDeleter; import com.todoroo.astrid.service.TaskDeleter;
@ -137,6 +138,7 @@ public class TaskListFragment extends InjectingListFragment implements OnSortSel
@Inject NotificationManager notificationManager; @Inject NotificationManager notificationManager;
@Inject TaskAttachmentDao taskAttachmentDao; @Inject TaskAttachmentDao taskAttachmentDao;
@Inject Injector injector; @Inject Injector injector;
@Inject GtasksPreferenceService gtasksPreferenceService;
protected Resources resources; protected Resources resources;
protected TaskAdapter taskAdapter = null; protected TaskAdapter taskAdapter = null;
@ -269,7 +271,7 @@ public class TaskListFragment extends InjectingListFragment implements OnSortSel
// We have a menu item to show in action bar. // We have a menu item to show in action bar.
resources = getResources(); resources = getResources();
setHasOptionsMenu(true); setHasOptionsMenu(true);
syncActionHelper = new SyncActionHelper(syncService, getActivity(), preferences, this); syncActionHelper = new SyncActionHelper(gtasksPreferenceService, syncService, getActivity(), preferences, this);
setUpUiComponents(); setUpUiComponents();
initializeData(); initializeData();
setupQuickAddBar(); setupQuickAddBar();

@ -5,19 +5,17 @@
*/ */
package com.todoroo.astrid.gtasks; package com.todoroo.astrid.gtasks;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.IBinder; import android.os.IBinder;
import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.ContextManager;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.gtasks.sync.GtasksSyncV2Provider; import com.todoroo.astrid.gtasks.sync.GtasksSyncV2Provider;
import com.todoroo.astrid.sync.SyncResultCallback;
import com.todoroo.astrid.sync.SyncV2Provider;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.tasks.Broadcaster;
import org.tasks.injection.InjectingService; import org.tasks.injection.InjectingService;
import org.tasks.sync.RecordSyncStatusCallback;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
@ -29,6 +27,7 @@ public class GtasksBackgroundService extends InjectingService {
@Inject GtasksPreferenceService gtasksPreferenceService; @Inject GtasksPreferenceService gtasksPreferenceService;
@Inject GtasksSyncV2Provider gtasksSyncV2Provider; @Inject GtasksSyncV2Provider gtasksSyncV2Provider;
@Inject Broadcaster broadcaster;
private final AtomicBoolean started = new AtomicBoolean(false); private final AtomicBoolean started = new AtomicBoolean(false);
@ -37,41 +36,17 @@ public class GtasksBackgroundService extends InjectingService {
public void onStart(Intent intent, int startId) { public void onStart(Intent intent, int startId) {
try { try {
if(intent != null && !started.getAndSet(true)) { if(intent != null && !started.getAndSet(true)) {
startSynchronization(this); ContextManager.setContext(this);
if(gtasksPreferenceService.isLoggedIn() && gtasksSyncV2Provider.isActive()) {
gtasksSyncV2Provider.synchronizeActiveTasks(new RecordSyncStatusCallback(gtasksPreferenceService, broadcaster));
}
} }
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} }
} }
/** Start the actual synchronization */
private void startSynchronization(final Context context) {
if(context == null || context.getResources() == null) {
return;
}
ContextManager.setContext(context);
if(!gtasksPreferenceService.isLoggedIn()) {
return;
}
SyncV2Provider provider = gtasksSyncV2Provider;
if (provider.isActive()) {
provider.synchronizeActiveTasks(new SyncResultCallback() {
@Override
public void started() {
}
@Override
public void finished() {
gtasksPreferenceService.recordSuccessfulSync();
context.sendBroadcast(new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH));
}
});
}
}
@Override @Override
public IBinder onBind(Intent intent) { public IBinder onBind(Intent intent) {
return null; return null;

@ -46,6 +46,7 @@ public class GtasksListFragment extends SubtasksListFragment {
@Inject StoreObjectDao storeObjectDao; @Inject StoreObjectDao storeObjectDao;
@Inject GtasksTaskListUpdater gtasksTaskListUpdater; @Inject GtasksTaskListUpdater gtasksTaskListUpdater;
@Inject GtasksMetadataService gtasksMetadataService; @Inject GtasksMetadataService gtasksMetadataService;
@Inject GtasksPreferenceService gtasksPreferenceService;
@Inject SyncV2Service syncService; @Inject SyncV2Service syncService;
@Inject @ForActivity Context context; @Inject @ForActivity Context context;
@Inject TaskAttachmentDao taskAttachmentDao; @Inject TaskAttachmentDao taskAttachmentDao;
@ -90,7 +91,7 @@ public class GtasksListFragment extends SubtasksListFragment {
private void refreshData(final boolean manual) { private void refreshData(final boolean manual) {
((TextView)getView().findViewById(android.R.id.empty)).setText(R.string.DLG_loading); ((TextView)getView().findViewById(android.R.id.empty)).setText(R.string.DLG_loading);
syncService.synchronizeList(list, new IndeterminateProgressBarSyncResultCallback(getActivity(), new Runnable() { syncService.synchronizeList(list, new IndeterminateProgressBarSyncResultCallback(gtasksPreferenceService, getActivity(), new Runnable() {
@Override @Override
public void run() { public void run() {
if (manual) { if (manual) {

@ -35,6 +35,7 @@ import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.sync.SyncResultCallback; import com.todoroo.astrid.sync.SyncResultCallback;
import com.todoroo.astrid.sync.SyncV2Provider; import com.todoroo.astrid.sync.SyncV2Provider;
import org.joda.time.DateTime;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.tasks.R; import org.tasks.R;
@ -113,13 +114,11 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
@Override @Override
public void synchronizeActiveTasks(final SyncResultCallback callback) { public void synchronizeActiveTasks(final SyncResultCallback callback) {
callback.started();
gtasksPreferenceService.recordSyncStart();
executor.execute(callback, new Runnable() { executor.execute(callback, new Runnable() {
@Override @Override
public void run() { public void run() {
callback.started();
String authToken = getValidatedAuthToken(); String authToken = getValidatedAuthToken();
final GtasksInvoker invoker = new GtasksInvoker(gtasksTokenValidator, authToken); final GtasksInvoker invoker = new GtasksInvoker(gtasksTokenValidator, authToken);
try { try {
@ -187,11 +186,11 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
return; return;
} }
callback.started();
executor.execute(callback, new Runnable() { executor.execute(callback, new Runnable() {
@Override @Override
public void run() { public void run() {
callback.started();
try { try {
String authToken = getValidatedAuthToken(); String authToken = getValidatedAuthToken();
gtasksSyncService.waitUntilEmpty(); gtasksSyncService.waitUntilEmpty();

@ -24,7 +24,9 @@ import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.activity.TaskListFragment; import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.SyncAction; import com.todoroo.astrid.api.SyncAction;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import com.todoroo.astrid.service.SyncV2Service; import com.todoroo.astrid.service.SyncV2Service;
import com.todoroo.astrid.sync.SyncProviderUtilities;
import com.todoroo.astrid.sync.SyncResultCallback; import com.todoroo.astrid.sync.SyncResultCallback;
import com.todoroo.astrid.sync.SyncV2Provider; import com.todoroo.astrid.sync.SyncV2Provider;
@ -68,12 +70,12 @@ public class SyncActionHelper {
// --- boilerplate // --- boilerplate
public SyncActionHelper(SyncV2Service syncService, final FragmentActivity activity, Preferences preferences, Fragment fragment) { public SyncActionHelper(SyncProviderUtilities syncProviderUtilities, SyncV2Service syncService, final FragmentActivity activity, Preferences preferences, Fragment fragment) {
this.syncService = syncService; this.syncService = syncService;
this.activity = activity; this.activity = activity;
this.preferences = preferences; this.preferences = preferences;
this.fragment = fragment; this.fragment = fragment;
syncResultCallback = new IndeterminateProgressBarSyncResultCallback(activity, new Runnable() { syncResultCallback = new IndeterminateProgressBarSyncResultCallback(syncProviderUtilities, activity, new Runnable() {
@Override @Override
public void run() { public void run() {
activity.sendBroadcast( activity.sendBroadcast(

@ -34,7 +34,6 @@ abstract public class SyncV2Provider {
/** /**
* Synchronize all of user's active tasks * Synchronize all of user's active tasks
* @param manual whether manually triggered
* @param callback callback object * @param callback callback object
*/ */
abstract public void synchronizeActiveTasks(SyncResultCallback callback); abstract public void synchronizeActiveTasks(SyncResultCallback callback);
@ -52,12 +51,8 @@ abstract public class SyncV2Provider {
abstract protected SyncProviderUtilities getUtilities(); abstract protected SyncProviderUtilities getUtilities();
protected void finishSync(SyncResultCallback callback) { protected void finishSync(SyncResultCallback callback) {
SyncProviderUtilities utilities = getUtilities(); getUtilities().recordSuccessfulSync();
utilities.recordSuccessfulSync(); callback.finished();
utilities.stopOngoing();
if (callback != null) {
callback.finished();
}
} }
@Override @Override

@ -52,6 +52,10 @@ public class Broadcaster {
sendOrderedBroadcast(new Intent(AstridApiConstants.BROADCAST_EVENT_FILTER_LIST_UPDATED)); sendOrderedBroadcast(new Intent(AstridApiConstants.BROADCAST_EVENT_FILTER_LIST_UPDATED));
} }
public void eventRefresh() {
context.sendBroadcast(new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH));
}
private void sendOrderedBroadcast(Intent intent) { private void sendOrderedBroadcast(Intent intent) {
sendOrderedBroadcast(intent, null); sendOrderedBroadcast(intent, null);
} }

@ -2,50 +2,56 @@ package org.tasks.sync;
import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentActivity;
import com.todoroo.astrid.sync.SyncResultCallback; import com.todoroo.astrid.sync.SyncProviderUtilities;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
public class IndeterminateProgressBarSyncResultCallback implements SyncResultCallback { public class IndeterminateProgressBarSyncResultCallback extends RecordSyncStatusCallback {
private static final Logger log = LoggerFactory.getLogger(IndeterminateProgressBarSyncResultCallback.class); private static final Logger log = LoggerFactory.getLogger(IndeterminateProgressBarSyncResultCallback.class);
private final FragmentActivity activity; private final FragmentActivity activity;
private Runnable onFinished; private Runnable onFinished;
public IndeterminateProgressBarSyncResultCallback(FragmentActivity activity, Runnable onFinished) { public IndeterminateProgressBarSyncResultCallback(SyncProviderUtilities syncProviderUtilities, FragmentActivity activity, Runnable onFinished) {
super(syncProviderUtilities);
this.activity = activity; this.activity = activity;
this.onFinished = onFinished; this.onFinished = onFinished;
} }
@Override @Override
public void finished() { public void started() {
super.started();
activity.runOnUiThread(new Runnable() { activity.runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
try { try {
activity.setProgressBarIndeterminateVisibility(false); activity.setProgressBarIndeterminateVisibility(true);
onFinished.run();
} catch (IllegalStateException e) { } catch (IllegalStateException e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} }
} }
}); });
} }
@Override @Override
public void started() { public void finished() {
super.finished();
activity.runOnUiThread(new Runnable() { activity.runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
try { try {
activity.setProgressBarIndeterminateVisibility(true); activity.setProgressBarIndeterminateVisibility(false);
onFinished.run();
} catch (IllegalStateException e) { } catch (IllegalStateException e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} }
} }
}); });
} }
} }

@ -0,0 +1,34 @@
package org.tasks.sync;
import com.todoroo.astrid.sync.SyncProviderUtilities;
import com.todoroo.astrid.sync.SyncResultCallback;
import org.tasks.Broadcaster;
public class RecordSyncStatusCallback implements SyncResultCallback {
private SyncProviderUtilities syncProviderUtilities;
private Broadcaster broadcaster;
public RecordSyncStatusCallback(SyncProviderUtilities syncProviderUtilities) {
this(syncProviderUtilities, null);
}
public RecordSyncStatusCallback(SyncProviderUtilities syncProviderUtilities, Broadcaster broadcaster) {
this.syncProviderUtilities = syncProviderUtilities;
this.broadcaster = broadcaster;
}
@Override
public void started() {
syncProviderUtilities.recordSyncStart();
}
@Override
public void finished() {
syncProviderUtilities.stopOngoing();
if (broadcaster != null) {
broadcaster.eventRefresh();
}
}
}
Loading…
Cancel
Save