/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.sync;
import java.io.IOException;
import android.app.Activity;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.service.ExceptionService;
abstract public class SyncV2Provider {
public class SyncExceptionHandler {
public void handleException(String tag, Exception e, String type) {
//TODO: When Crittercism supports it, report error to them
getUtilities().setLastError(e.toString(), type);
// occurs when application was closed
if(e instanceof IllegalStateException) {
exceptionService.reportError(tag + "-caught", e); //$NON-NLS-1$
}
// occurs when network error
else if(e instanceof IOException) {
exceptionService.reportError(tag + "-io", e); //$NON-NLS-1$
}
// unhandled error
else {
exceptionService.reportError(tag + "-unhandled", e); //$NON-NLS-1$
}
}
}
@Autowired
protected ExceptionService exceptionService;
protected final SyncExceptionHandler handler;
public SyncV2Provider() {
DependencyInjectionService.getInstance().inject(this);
handler = new SyncExceptionHandler();
}
/**
* @return sync provider name (displayed in sync menu)
*/
abstract public String getName();
/**
* @return true if this provider is logged in
*/
abstract public boolean isActive();
/**
* Synchronize all of user's active tasks
* @param manual whether manually triggered
* @param callback callback object
*/
abstract public void synchronizeActiveTasks(boolean manual, SyncResultCallback callback);
/**
* Synchronize a single list
* @param list object representing list (TaskListActivity-dependent)
* @param manual whether was manually triggered
* @param callback callback object
*/
abstract public void synchronizeList(Object list, boolean manual, SyncResultCallback callback);
/**
* Sign out of service, deleting all synchronization metadata
*/
abstract public void signOut(Activity activity);
/**
* @return sync utility instance
*/
abstract protected SyncProviderUtilities getUtilities();
protected void finishSync(SyncResultCallback callback) {
SyncProviderUtilities utilities = getUtilities();
utilities.recordSuccessfulSync();
utilities.reportLastError();
utilities.stopOngoing();
if (callback != null)
callback.finished();
}
@Override
public String toString() {
return getName();
}
}