Bring back a menu item for synchronizing with Astrid.com from task list activity. Modified the abstract provider class to make that happen

pull/14/head
Tim Su 13 years ago
parent 84a0311f23
commit 8ffe684d94

@ -3,7 +3,6 @@
*/
package com.todoroo.astrid.actfm;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@ -38,11 +37,8 @@ public class ActFmSyncActionExposer extends BroadcastReceiver {
if(!actFmPreferenceService.isLoggedIn())
return;
Intent syncIntent = new Intent(null, null,
context, ActFmBackgroundService.class);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, syncIntent, PendingIntent.FLAG_UPDATE_CURRENT);
SyncAction syncAction = new SyncAction(context.getString(R.string.actfm_APr_header),
pendingIntent);
null);
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_SYNC_ACTIONS);
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_ADDON, ActFmPreferenceService.IDENTIFIER);

@ -8,8 +8,10 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.json.JSONException;
import com.timsu.astrid.R;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.service.ExceptionService;
import com.todoroo.andlib.sql.Criterion;
@ -29,7 +31,7 @@ import com.todoroo.astrid.tags.TagService;
* Exposes sync action
*
*/
public class ActFmSyncV2Provider implements SyncV2Provider {
public class ActFmSyncV2Provider extends SyncV2Provider {
@Autowired ActFmPreferenceService actFmPreferenceService;
@ -47,6 +49,11 @@ public class ActFmSyncV2Provider implements SyncV2Provider {
DependencyInjectionService.getInstance().inject(this);
}
@Override
public String getName() {
return ContextManager.getString(R.string.actfm_APr_header);
}
@Override
public boolean isActive() {
return actFmPreferenceService.isLoggedIn();

@ -105,6 +105,8 @@ import com.todoroo.astrid.service.StartupService;
import com.todoroo.astrid.service.StatisticsConstants;
import com.todoroo.astrid.service.StatisticsService;
import com.todoroo.astrid.service.SyncV2Service;
import com.todoroo.astrid.service.SyncV2Service.SyncResultCallback;
import com.todoroo.astrid.service.SyncV2Service.SyncV2Provider;
import com.todoroo.astrid.service.TagDataService;
import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.service.ThemeService;
@ -204,6 +206,8 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
private boolean isFilter;
private final TaskListContextMenuExtensionLoader contextMenuExtensionLoader = new TaskListContextMenuExtensionLoader();
private SyncResultCallback syncResultCallback;
private VoiceInputAssistant voiceInputAssistant;
/* ======================================================================
@ -498,6 +502,14 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
// dithering
getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);
syncResultCallback = new ProgressBarSyncResultCallback(this,
R.id.progressBar, new Runnable() {
@Override
public void run() {
ContextManager.getContext().sendBroadcast(new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH));
}
});
}
// Subclasses can override these to customize extras in quickadd intent
@ -514,9 +526,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
}
public void transitionForTaskEdit() {
AndroidUtilities.callApiMethod(5, this, "overridePendingTransition",
new Class<?>[] { Integer.TYPE, Integer.TYPE },
R.anim.slide_left_in, R.anim.slide_left_out);
overridePendingTransition(R.anim.slide_left_in, R.anim.slide_left_out);
}
private void setUpBackgroundJobs() {
@ -618,9 +628,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
public void finish() {
super.finish();
if (overrideFinishAnim) {
AndroidUtilities.callApiMethod(5, this, "overridePendingTransition",
new Class<?>[] { Integer.TYPE, Integer.TYPE },
R.anim.slide_right_in, R.anim.slide_right_out);
overridePendingTransition(R.anim.slide_right_in, R.anim.slide_right_out);
}
}
@ -1138,18 +1146,15 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
}
protected void performSyncServiceV2Sync(boolean manual) {
syncService.synchronizeActiveTasks(manual, new ProgressBarSyncResultCallback(this,
R.id.progressBar, new Runnable() {
@Override
public void run() {
ContextManager.getContext().sendBroadcast(new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH));
}
}));
syncService.synchronizeActiveTasks(manual, syncResultCallback);
Preferences.setLong(PREF_LAST_AUTO_SYNC, DateUtilities.now());
}
protected void performSyncAction() {
if (syncActions.size() == 0 && !syncService.isActive()) {
List<SyncV2Provider> activeV2Providers = syncService.activeProviders();
int activeSyncs = syncActions.size() + activeV2Providers.size();
if (activeSyncs == 0) {
String desiredCategory = getString(R.string.SyP_label);
// Get a list of all sync plugins and bring user to the prefs pane
@ -1189,21 +1194,35 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
};
showSyncOptionMenu(actions, listener);
}
else {
performSyncServiceV2Sync(true);
if(syncActions.size() > 0) {
for(SyncAction syncAction : syncActions) {
try {
syncAction.intent.send();
} catch (CanceledException e) {
//
} else {
// We have sync actions, pop up a dialogue so the user can
// select just one of them (only sync one at a time)
final Object[] actions = new Object[activeSyncs];
int i;
for(i = 0; i < activeV2Providers.size(); i++)
actions[i] = activeV2Providers.get(i);
for(SyncAction syncAction : syncActions)
actions[i++] = syncAction;
DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface click, int which) {
if(actions[which] instanceof SyncAction) {
try {
((SyncAction)actions[which]).intent.send();
Toast.makeText(TaskListActivity.this, R.string.SyP_progress_toast,
Toast.LENGTH_LONG).show();
} catch (CanceledException e) {
//
}
} else {
((SyncV2Provider)actions[which]).synchronizeActiveTasks(true, syncResultCallback);
}
}
Toast.makeText(TaskListActivity.this, R.string.SyP_progress_toast,
Toast.LENGTH_LONG).show();
}
};
showSyncOptionMenu(actions, listener);
}
}
@ -1215,6 +1234,11 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
* @param listener
*/
private <TYPE> void showSyncOptionMenu(TYPE[] items, DialogInterface.OnClickListener listener) {
if(items.length == 1) {
listener.onClick(null, 0);
return;
}
ArrayAdapter<TYPE> adapter = new ArrayAdapter<TYPE>(this,
android.R.layout.simple_spinner_dropdown_item, items);

@ -16,7 +16,6 @@ import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.media.AudioManager;
import android.util.Log;
import android.widget.Toast;
@ -37,7 +36,6 @@ import com.todoroo.astrid.backup.BackupConstants;
import com.todoroo.astrid.backup.BackupService;
import com.todoroo.astrid.backup.TasksXmlImporter;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import com.todoroo.astrid.gtasks.sync.GtasksSyncOnSaveService;
import com.todoroo.astrid.opencrx.OpencrxCoreUtils;
@ -139,9 +137,9 @@ public class StartupService {
int defaultTheme = abChooser.getChoiceForOption(ABOptions.AB_THEME_KEY);
if (defaultTheme == 0)
Preferences.setString(R.string.p_theme, "white");
Preferences.setString(R.string.p_theme, "white"); //$NON-NLS-1$
else
Preferences.setString(R.string.p_theme, "black");
Preferences.setString(R.string.p_theme, "black"); //$NON-NLS-1$
} else {
abChooser.setChoiceForOption(ABOptions.AB_THEME_KEY, 0);
Preferences.setLong(AstridPreferences.P_FIRST_LAUNCH, 0);
@ -170,10 +168,6 @@ public class StartupService {
}
AstridPreferences.setCurrentVersion(version);
}
//Startup tasks
// if(latestSetVersion == 0) {
// onFirstTime();
// }
upgradeService.performSecondaryUpgrade(context);
@ -224,49 +218,7 @@ public class StartupService {
hasStartedUp = true;
}
/**
* Create tasks for first time users
*/
private void onFirstTime() {
final Resources r = ContextManager.getResources();
try {
new Thread(new Runnable() {
@Override
public void run() {
database.openForWriting();
if(taskService.countTasks() > 0)
return;
for(int i = 0; i < INTRO_TASKS.length; i += 3)
addIntroTask(r, INTRO_TASKS[i], INTRO_TASKS[i + 1], INTRO_TASKS[i + 2]);
Preferences.setBoolean(AstridPreferences.P_FIRST_ACTION, true);
Preferences.setBoolean(AstridPreferences.P_FIRST_LIST, true);
}
}).start();
} catch (Exception e) {
exceptionService.reportError("on-first-time", e); //$NON-NLS-1$
}
}
private static final int[] INTRO_TASKS = new int[] {
R.string.intro_task_2_summary,
R.string.intro_task_2_note,
Task.URGENCY_DAY_AFTER,
R.string.intro_task_3_summary,
R.string.intro_task_3_note,
Task.URGENCY_NONE,
};
public static final int INTRO_TASK_SIZE = INTRO_TASKS.length / 3;
private void addIntroTask(Resources r, int summary, int note, int dueSetting) {
Task task = new Task();
task.setValue(Task.TITLE, r.getString(summary));
task.setValue(Task.NOTES, r.getString(note));
long dueDate = Task.createDueDate(dueSetting, 0);
task.setValue(Task.DUE_DATE, dueDate);
taskService.save(task);
}
public static final int INTRO_TASK_SIZE = 0;
/**
* If database exists, no tasks but metadata, and a backup file exists, restore it

@ -1,5 +1,9 @@
package com.todoroo.astrid.service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.todoroo.astrid.actfm.sync.ActFmSyncV2Provider;
/**
@ -35,10 +39,36 @@ public class SyncV2Service {
public void finished();
}
public interface SyncV2Provider {
public boolean isActive();
public void synchronizeActiveTasks(boolean manual, SyncResultCallback callback);
public void synchronizeList(Object list, boolean manual, SyncResultCallback callback);
abstract public static class SyncV2Provider {
/**
* @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);
@Override
public String toString() {
return getName();
}
}
/*
@ -51,16 +81,17 @@ public class SyncV2Service {
};
/**
* Determine if synchronization is available
* Returns active sync providers
*
* @param callback
*/
public boolean isActive() {
public List<SyncV2Provider> activeProviders() {
ArrayList<SyncV2Provider> actives = new ArrayList<SyncV2Provider>();
for(SyncV2Provider provider : providers) {
if(provider.isActive())
return true;
actives.add(provider);
}
return false;
return Collections.unmodifiableList(actives);
}
/**

Loading…
Cancel
Save