/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.gtasks;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import com.timsu.astrid.R;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity;
import com.todoroo.astrid.gtasks.sync.GtasksSyncV2Provider;
import com.todoroo.astrid.gtasks.sync.GtasksSyncV2Provider.GtasksImportCallback;
import com.todoroo.astrid.gtasks.sync.GtasksSyncV2Provider.GtasksImportTuple;
import com.todoroo.astrid.sync.SyncProviderPreferences;
import com.todoroo.astrid.sync.SyncProviderUtilities;
import com.todoroo.astrid.sync.SyncResultCallbackAdapter;
import com.todoroo.astrid.tags.TagService;
/**
* Displays synchronization preferences and an action panel so users can
* initiate actions from the menu.
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class GtasksPreferences extends SyncProviderPreferences {
@Autowired private GtasksPreferenceService gtasksPreferenceService;
@Autowired private ActFmPreferenceService actFmPreferenceService;
@Autowired private TagService tagService;
public GtasksPreferences() {
super();
DependencyInjectionService.getInstance().inject(this);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public int getPreferenceResource() {
return R.xml.preferences_gtasks;
}
@Override
public void startSync() {
if (!gtasksPreferenceService.isLoggedIn()) {
startLogin();
} else {
syncOrImport();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_LOGIN && resultCode == RESULT_OK) {
syncOrImport();
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
private void syncOrImport() {
if (actFmPreferenceService.isLoggedIn()) {
startBlockingImport();
} else {
setResultForSynchronize();
}
}
private void setResultForSynchronize() {
setResult(RESULT_CODE_SYNCHRONIZE);
finish();
}
private void startBlockingImport() {
final ProgressDialog pd = DialogUtilities.progressDialog(this, getString(R.string.gtasks_import_progress));
pd.setCancelable(false);
GtasksImportCallback callback = new GtasksImportCallback(new SyncResultCallbackAdapter() {/**/}) {
@Override
public void finished() {
super.finished();
for (GtasksImportTuple tuple : importConflicts) {
final GtasksImportTuple finalTuple = tuple;
String prompt = getString(R.string.gtasks_import_add_to_shared_list, tuple.tagName, tuple.taskName);
DialogUtilities.okCancelCustomDialog(GtasksPreferences.this,
getString(R.string.gtasks_import_dlg_title),
prompt,
R.string.gtasks_import_add_task_ok,
R.string.gtasks_import_add_task_cancel,
android.R.drawable.ic_dialog_alert,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Task task = new Task();
task.setId(finalTuple.taskId);
task.setUuid(finalTuple.taskUuid);
tagService.createLink(task, finalTuple.tagName, finalTuple.tagUuid);
}
},
null);
}
DialogUtilities.dismissDialog(GtasksPreferences.this, pd);
}
};
GtasksSyncV2Provider.getInstance().synchronizeActiveTasks(true, callback);
}
private void startLogin() {
Intent intent = new Intent(this, GtasksLoginActivity.class);
startActivityForResult(intent, REQUEST_LOGIN);
}
@Override
public void logOut() {
GtasksSyncV2Provider.getInstance().signOut(this);
}
@Override
public SyncProviderUtilities getUtilities() {
return gtasksPreferenceService;
}
@Override
protected void onPause() {
super.onPause();
new GtasksBackgroundService().scheduleService();
}
}