Ensure progress indicator shutoff

See #155
pull/189/head
Alex Baker 10 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.Task;
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.RenameTagActivity;
import com.todoroo.astrid.tags.TagFilterExposer;
@ -58,6 +60,7 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList
@Inject TagDataDao tagDataDao;
@Inject ActivityPreferences preferences;
@Inject GtasksPreferenceService gtasksPreferenceService;
MenuDrawer menuDrawer;
@ -147,6 +150,13 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList
}
}
@Override
protected void onResume() {
super.onResume();
setSupportProgressBarIndeterminateVisibility(gtasksPreferenceService.isOngoing());
}
@Override
public boolean onCreateOptionsMenu(Menu 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.TaskAttachment;
import com.todoroo.astrid.data.TaskListMetadata;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import com.todoroo.astrid.helper.SyncActionHelper;
import com.todoroo.astrid.service.SyncV2Service;
import com.todoroo.astrid.service.TaskDeleter;
@ -137,6 +138,7 @@ public class TaskListFragment extends InjectingListFragment implements OnSortSel
@Inject NotificationManager notificationManager;
@Inject TaskAttachmentDao taskAttachmentDao;
@Inject Injector injector;
@Inject GtasksPreferenceService gtasksPreferenceService;
protected Resources resources;
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.
resources = getResources();
setHasOptionsMenu(true);
syncActionHelper = new SyncActionHelper(syncService, getActivity(), preferences, this);
syncActionHelper = new SyncActionHelper(gtasksPreferenceService, syncService, getActivity(), preferences, this);
setUpUiComponents();
initializeData();
setupQuickAddBar();

@ -5,19 +5,17 @@
*/
package com.todoroo.astrid.gtasks;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.astrid.api.AstridApiConstants;
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.LoggerFactory;
import org.tasks.Broadcaster;
import org.tasks.injection.InjectingService;
import org.tasks.sync.RecordSyncStatusCallback;
import java.util.concurrent.atomic.AtomicBoolean;
@ -29,6 +27,7 @@ public class GtasksBackgroundService extends InjectingService {
@Inject GtasksPreferenceService gtasksPreferenceService;
@Inject GtasksSyncV2Provider gtasksSyncV2Provider;
@Inject Broadcaster broadcaster;
private final AtomicBoolean started = new AtomicBoolean(false);
@ -37,41 +36,17 @@ public class GtasksBackgroundService extends InjectingService {
public void onStart(Intent intent, int startId) {
try {
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) {
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
public IBinder onBind(Intent intent) {
return null;

@ -46,6 +46,7 @@ public class GtasksListFragment extends SubtasksListFragment {
@Inject StoreObjectDao storeObjectDao;
@Inject GtasksTaskListUpdater gtasksTaskListUpdater;
@Inject GtasksMetadataService gtasksMetadataService;
@Inject GtasksPreferenceService gtasksPreferenceService;
@Inject SyncV2Service syncService;
@Inject @ForActivity Context context;
@Inject TaskAttachmentDao taskAttachmentDao;
@ -90,7 +91,7 @@ public class GtasksListFragment extends SubtasksListFragment {
private void refreshData(final boolean manual) {
((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
public void run() {
if (manual) {

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

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

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

@ -52,6 +52,10 @@ public class Broadcaster {
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) {
sendOrderedBroadcast(intent, null);
}

@ -2,50 +2,56 @@ package org.tasks.sync;
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.LoggerFactory;
public class IndeterminateProgressBarSyncResultCallback implements SyncResultCallback {
public class IndeterminateProgressBarSyncResultCallback extends RecordSyncStatusCallback {
private static final Logger log = LoggerFactory.getLogger(IndeterminateProgressBarSyncResultCallback.class);
private final FragmentActivity activity;
private Runnable onFinished;
public IndeterminateProgressBarSyncResultCallback(FragmentActivity activity, Runnable onFinished) {
public IndeterminateProgressBarSyncResultCallback(SyncProviderUtilities syncProviderUtilities, FragmentActivity activity, Runnable onFinished) {
super(syncProviderUtilities);
this.activity = activity;
this.onFinished = onFinished;
}
@Override
public void finished() {
public void started() {
super.started();
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
activity.setProgressBarIndeterminateVisibility(false);
onFinished.run();
activity.setProgressBarIndeterminateVisibility(true);
} catch (IllegalStateException e) {
log.error(e.getMessage(), e);
}
}
});
}
@Override
public void started() {
public void finished() {
super.finished();
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
activity.setProgressBarIndeterminateVisibility(true);
activity.setProgressBarIndeterminateVisibility(false);
onFinished.run();
} catch (IllegalStateException 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