Fix for AST-219 - synchronization auto-updates task list when it is completed

pull/14/head
Tim Su 16 years ago
parent 0fead5c0d5
commit 375276b696

@ -180,6 +180,11 @@ public class AstridApiConstants {
// --- Events API // --- Events API
/**
* Action name for broadcast intent notifying task list to refresh
*/
public static final String BROADCAST_EVENT_REFRESH = PACKAGE + ".REFRESH";
/** /**
* Action name for broadcast intent notifying that task was completed * Action name for broadcast intent notifying that task was completed
* @extra EXTRAS_TASK_ID id of the task * @extra EXTRAS_TASK_ID id of the task

@ -30,6 +30,7 @@ import com.todoroo.andlib.service.ExceptionService;
import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.TaskContainer; import com.todoroo.astrid.api.TaskContainer;
import com.todoroo.astrid.common.SyncProvider; import com.todoroo.astrid.common.SyncProvider;
import com.todoroo.astrid.model.Metadata; import com.todoroo.astrid.model.Metadata;
@ -241,6 +242,9 @@ public class ProducteevSyncProvider extends SyncProvider<ProducteevTaskContainer
Preferences.setString(ProducteevUtilities.PREF_SERVER_LAST_SYNC, invoker.time()); Preferences.setString(ProducteevUtilities.PREF_SERVER_LAST_SYNC, invoker.time());
preferences.recordSuccessfulSync(); preferences.recordSuccessfulSync();
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH);
ContextManager.getContext().sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ);
FlurryAgent.onEvent("pdv-sync-finished"); //$NON-NLS-1$ FlurryAgent.onEvent("pdv-sync-finished"); //$NON-NLS-1$
} catch (IllegalStateException e) { } catch (IllegalStateException e) {
// occurs when application was closed // occurs when application was closed

@ -30,26 +30,27 @@ import com.todoroo.andlib.service.ExceptionService;
import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.TaskContainer; import com.todoroo.astrid.api.TaskContainer;
import com.todoroo.astrid.common.SyncProvider; import com.todoroo.astrid.common.SyncProvider;
import com.todoroo.astrid.model.Metadata; import com.todoroo.astrid.model.Metadata;
import com.todoroo.astrid.model.Task; import com.todoroo.astrid.model.Task;
import com.todoroo.astrid.rmilk.MilkLoginActivity; import com.todoroo.astrid.rmilk.MilkLoginActivity;
import com.todoroo.astrid.rmilk.MilkLoginActivity.SyncLoginCallback;
import com.todoroo.astrid.rmilk.MilkPreferences; import com.todoroo.astrid.rmilk.MilkPreferences;
import com.todoroo.astrid.rmilk.MilkUtilities; import com.todoroo.astrid.rmilk.MilkUtilities;
import com.todoroo.astrid.rmilk.MilkLoginActivity.SyncLoginCallback;
import com.todoroo.astrid.rmilk.api.ApplicationInfo; import com.todoroo.astrid.rmilk.api.ApplicationInfo;
import com.todoroo.astrid.rmilk.api.ServiceImpl; import com.todoroo.astrid.rmilk.api.ServiceImpl;
import com.todoroo.astrid.rmilk.api.ServiceInternalException; import com.todoroo.astrid.rmilk.api.ServiceInternalException;
import com.todoroo.astrid.rmilk.api.data.RtmAuth.Perms;
import com.todoroo.astrid.rmilk.api.data.RtmList; import com.todoroo.astrid.rmilk.api.data.RtmList;
import com.todoroo.astrid.rmilk.api.data.RtmLists; import com.todoroo.astrid.rmilk.api.data.RtmLists;
import com.todoroo.astrid.rmilk.api.data.RtmTask; import com.todoroo.astrid.rmilk.api.data.RtmTask;
import com.todoroo.astrid.rmilk.api.data.RtmTask.Priority;
import com.todoroo.astrid.rmilk.api.data.RtmTaskList; import com.todoroo.astrid.rmilk.api.data.RtmTaskList;
import com.todoroo.astrid.rmilk.api.data.RtmTaskNote; import com.todoroo.astrid.rmilk.api.data.RtmTaskNote;
import com.todoroo.astrid.rmilk.api.data.RtmTaskSeries; import com.todoroo.astrid.rmilk.api.data.RtmTaskSeries;
import com.todoroo.astrid.rmilk.api.data.RtmTasks; import com.todoroo.astrid.rmilk.api.data.RtmTasks;
import com.todoroo.astrid.rmilk.api.data.RtmAuth.Perms;
import com.todoroo.astrid.rmilk.api.data.RtmTask.Priority;
import com.todoroo.astrid.rmilk.data.MilkDataService; import com.todoroo.astrid.rmilk.data.MilkDataService;
import com.todoroo.astrid.rmilk.data.MilkNote; import com.todoroo.astrid.rmilk.data.MilkNote;
import com.todoroo.astrid.service.AstridDependencyInjector; import com.todoroo.astrid.service.AstridDependencyInjector;
@ -285,6 +286,8 @@ public class RTMSyncProvider extends SyncProvider<RTMTaskContainer> {
} }
MilkUtilities.recordSuccessfulSync(); MilkUtilities.recordSuccessfulSync();
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH);
ContextManager.getContext().sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ);
FlurryAgent.onEvent("rtm-sync-finished"); //$NON-NLS-1$ FlurryAgent.onEvent("rtm-sync-finished"); //$NON-NLS-1$
} catch (IllegalStateException e) { } catch (IllegalStateException e) {

@ -3,6 +3,8 @@ package com.todoroo.astrid.activity;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import android.app.AlertDialog; import android.app.AlertDialog;
@ -22,25 +24,25 @@ import android.text.Editable;
import android.text.TextUtils; import android.text.TextUtils;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.view.ContextMenu; import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.Window;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
import android.view.View.OnKeyListener; import android.view.View.OnKeyListener;
import android.view.Window;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
import android.widget.AbsListView; import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.EditText; import android.widget.EditText;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.ListView; import android.widget.ListView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.TextView.OnEditorActionListener; import android.widget.TextView.OnEditorActionListener;
import android.widget.Toast;
import com.flurry.android.FlurryAgent; import com.flurry.android.FlurryAgent;
import com.timsu.astrid.R; import com.timsu.astrid.R;
@ -142,13 +144,15 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
protected TaskAdapter taskAdapter = null; protected TaskAdapter taskAdapter = null;
protected DetailReceiver detailReceiver = new DetailReceiver(); protected DetailReceiver detailReceiver = new DetailReceiver();
protected RefreshReceiver refreshReceiver = new RefreshReceiver();
ImageButton quickAddButton; private ImageButton quickAddButton;
EditText quickAddBox; private EditText quickAddBox;
Filter filter; private Filter filter;
int sortFlags; private int sortFlags;
int sortSort; private int sortSort;
AtomicReference<String> sqlQueryTemplate = new AtomicReference<String>(); private final AtomicReference<String> sqlQueryTemplate = new AtomicReference<String>();
private Timer backgroundTimer;
/* ====================================================================== /* ======================================================================
* ======================================================= initialization * ======================================================= initialization
@ -188,7 +192,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
if(Constants.DEBUG) if(Constants.DEBUG)
setTitle("[D] " + filter.title); //$NON-NLS-1$ setTitle("[D] " + filter.title); //$NON-NLS-1$
// cache some stuff // perform caching
new Thread(new Runnable() { new Thread(new Runnable() {
public void run() { public void run() {
loadContextMenuIntents(); loadContextMenuIntents();
@ -360,6 +364,26 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
sortSort= Preferences.getInt(SortSelectionActivity.PREF_SORT_SORT, 0); sortSort= Preferences.getInt(SortSelectionActivity.PREF_SORT_SORT, 0);
} }
private void setUpBackgroundJobs() {
backgroundTimer = new Timer();
// start a thread to refresh periodically
backgroundTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// refresh if conditions match
Flags.checkAndClear(Flags.REFRESH);
runOnUiThread(new Runnable() {
@Override
public void run() {
loadTaskListContent(true);
}
});
System.err.println("timer trigger REFRESH");
}
}, 120000L, 120000L);
}
/* ====================================================================== /* ======================================================================
* ============================================================ lifecycle * ============================================================ lifecycle
* ====================================================================== */ * ====================================================================== */
@ -385,12 +409,36 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
new IntentFilter(AstridApiConstants.BROADCAST_SEND_DECORATIONS)); new IntentFilter(AstridApiConstants.BROADCAST_SEND_DECORATIONS));
registerReceiver(detailReceiver, registerReceiver(detailReceiver,
new IntentFilter(AstridApiConstants.BROADCAST_SEND_ACTIONS)); new IntentFilter(AstridApiConstants.BROADCAST_SEND_ACTIONS));
registerReceiver(refreshReceiver,
new IntentFilter(AstridApiConstants.BROADCAST_EVENT_REFRESH));
setUpBackgroundJobs();
} }
@Override @Override
protected void onPause() { protected void onPause() {
super.onPause(); super.onPause();
unregisterReceiver(detailReceiver); unregisterReceiver(detailReceiver);
unregisterReceiver(refreshReceiver);
backgroundTimer.cancel();
}
/**
* Receiver which receives refresh intents
*
* @author Tim Su <tim@todoroo.com>
*
*/
protected class RefreshReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
runOnUiThread(new Runnable() {
@Override
public void run() {
taskAdapter.flushCaches();
loadTaskListContent(true);
}
});
}
} }
/** /**

Loading…
Cancel
Save