diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java index 22c5b97ce..d9b12fc36 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java @@ -22,7 +22,6 @@ import android.support.v4.view.Menu; import android.support.v4.view.MenuItem; import android.text.TextUtils; import android.util.DisplayMetrics; -import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; @@ -324,37 +323,33 @@ public class TagViewFragment extends TaskListFragment { if (tagData != null) { long lastAutoSync = Preferences.getLong(LAST_FETCH_KEY + tagData.getId(), 0); if(DateUtilities.now() - lastAutoSync > DateUtilities.ONE_HOUR) - refreshData(false); + refreshData(); } } /** refresh the list with latest data from the web */ - private void refreshData(final boolean manual) { + private void refreshData() { if (actFmPreferenceService.isLoggedIn()) { ((TextView)taskListView.findViewById(android.R.id.empty)).setText(R.string.DLG_loading); Runnable callback = new Runnable() { @Override public void run() { - Log.e("TagViewFragment", "Refresh data callback"); + Activity activity = getActivity(); + if (activity != null) { + activity.runOnUiThread(new Runnable() { + @Override + public void run() { + reloadTagData(false); + refresh(); + ((TextView)taskListView.findViewById(android.R.id.empty)).setText(R.string.TLA_no_items); + } + }); + } } }; ActFmSyncThread.getInstance().enqueueMessage(new BriefMe(TagData.class, tagData.getValue(TagData.UUID), tagData.getValue(TagData.PUSHED_AT)), callback); - // TODO: Refresh and reload tagData - -// syncService.synchronizeList(tagData, manual, new ProgressBarSyncResultCallback(getActivity(), this, -// R.id.progressBar, new Runnable() { -// @Override -// public void run() { -// if (manual) -// ContextManager.getContext().sendBroadcast(new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH)); -// else -// refresh(); -// ((TextView)taskListView.findViewById(android.R.id.empty)).setText(R.string.TLA_no_items); -// } -// })); -// Preferences.setLong(LAST_FETCH_KEY + tagData.getId(), DateUtilities.now()); } } @@ -388,6 +383,10 @@ public class TagViewFragment extends TaskListFragment { .where(Criterion.and(TagMetadataCriteria.byTagAndWithKey(tagData.getUuid(), TagMemberMetadata.KEY), TagMetadata.DELETION_DATE.eq(0)))))); try { addedMembers = users.getCount() > 0; + if (addedMembers) { + membersView.setOnClickListener(null); + membersView.removeAllViews(); + } User user = new User(); for (users.moveToFirst(); !users.isAfterLast(); users.moveToNext()) { user.clear(); @@ -404,6 +403,10 @@ public class TagViewFragment extends TaskListFragment { .where(Criterion.and(TagMetadataCriteria.byTagAndWithKey(tagData.getUuid(), TagMemberMetadata.KEY), TagMemberMetadata.USER_UUID.like("%@%"), TagMetadata.DELETION_DATE.eq(0)))); //$NON-NLS-1$ try { + if (!addedMembers && byEmail.getCount() > 0) { + membersView.setOnClickListener(null); + membersView.removeAllViews(); + } addedMembers = addedMembers || byEmail.getCount() > 0; TagMetadata tm = new TagMetadata(); for (byEmail.moveToFirst(); !byEmail.isAfterLast(); byEmail.moveToNext()) { @@ -419,11 +422,6 @@ public class TagViewFragment extends TaskListFragment { } finally { byEmail.close(); } - - if (addedMembers) { - membersView.setOnClickListener(null); - membersView.removeAllViews(); - } } } catch (JSONException e) { e.printStackTrace(); @@ -491,7 +489,7 @@ public class TagViewFragment extends TaskListFragment { final JSONObject memberToUse = member; final String memberName = displayName(memberToUse); - if (memberToUse.has("picture")) { + if (memberToUse.has("picture") && !TextUtils.isEmpty(memberToUse.getString("picture"))) { image.setUrl(memberToUse.getString("picture")); } image.setOnClickListener(listenerForImage(memberToUse, id, memberName)); @@ -596,7 +594,7 @@ public class TagViewFragment extends TaskListFragment { //refreshUpdatesList(); } }); - refreshData(false); + refreshData(); NotificationManager nm = new AndroidNotificationManager(ContextManager.getContext()); try { @@ -637,7 +635,7 @@ public class TagViewFragment extends TaskListFragment { AndroidUtilities.tryUnregisterReceiver(getActivity(), notifyReceiver); } - protected void reloadTagData() { + protected void reloadTagData(boolean onActivityResult) { tagData = tagDataService.fetchById(tagData.getId(), TagData.PROPERTIES); // refetch if (tagData == null) { // This can happen if a tag has been deleted as part of a sync @@ -653,8 +651,12 @@ public class TagViewFragment extends TaskListFragment { if (activity instanceof TaskListActivity) { ((TaskListActivity) activity).setListsTitle(filter.title); FilterListFragment flf = ((TaskListActivity) activity).getFilterListFragment(); - if (flf != null) - flf.clear(); + if (flf != null) { + if (!onActivityResult) + flf.refresh(); + else + flf.clear(); + } } taskAdapter = null; Flags.set(Flags.REFRESH); @@ -663,7 +665,7 @@ public class TagViewFragment extends TaskListFragment { @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_SETTINGS && resultCode == Activity.RESULT_OK) { - reloadTagData(); + reloadTagData(true); } else { super.onActivityResult(requestCode, resultCode, data); } @@ -674,7 +676,7 @@ public class TagViewFragment extends TaskListFragment { // handle my own menus switch (id) { case MENU_REFRESH_ID: - refreshData(true); + refreshData(); return true; case MENU_LIST_SETTINGS_ID: settingsListener.onClick(null); diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncThread.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncThread.java index 5ac0bc1b8..953186c0a 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncThread.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncThread.java @@ -8,10 +8,12 @@ import java.util.List; import org.json.JSONArray; import org.json.JSONObject; +import android.content.Intent; import android.util.Log; 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.sql.Query; import com.todoroo.andlib.utility.AndroidUtilities; @@ -21,6 +23,7 @@ import com.todoroo.astrid.actfm.sync.messages.ClientToServerMessage; import com.todoroo.astrid.actfm.sync.messages.NameMaps; import com.todoroo.astrid.actfm.sync.messages.ReplayOutstandingEntries; import com.todoroo.astrid.actfm.sync.messages.ServerToClientMessage; +import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.core.PluginServices; import com.todoroo.astrid.dao.OutstandingEntryDao; import com.todoroo.astrid.dao.RemoteModelDao; @@ -38,7 +41,6 @@ import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.TaskOutstanding; import com.todoroo.astrid.data.UserActivity; import com.todoroo.astrid.data.UserActivityOutstanding; -import com.todoroo.astrid.utility.Flags; public class ActFmSyncThread { @@ -171,15 +173,21 @@ public class ActFmSyncThread { messageBatch.add(message); } - while (callbackBatch.size() < batchSize && !callbackBatch.isEmpty()) { + while (callbackBatch.size() < batchSize && !pendingCallbacks.isEmpty()) { Runnable callback = pendingCallbacks.remove(0); callbackBatch.add(callback); } if (messageBatch.isEmpty() && timeForBackgroundSync()) { - Flags.checkAndClear(Flags.BG_SYNC); messageBatch.add(BriefMe.instantiateBriefMeForClass(Task.class, NameMaps.PUSHED_AT_TASKS)); messageBatch.add(BriefMe.instantiateBriefMeForClass(TagData.class, NameMaps.PUSHED_AT_TAGS)); + callbackBatch.add(new Runnable() { + @Override + public void run() { + Intent refresh = new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH); + ContextManager.getContext().sendBroadcast(refresh); + } + }); } if (!messageBatch.isEmpty() && checkForToken()) { @@ -228,8 +236,6 @@ public class ActFmSyncThread { messageBatch = new LinkedList>(); callbackBatch = new LinkedList(); -// Intent refresh = new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH); -// ContextManager.getContext().sendBroadcast(refresh); } } } catch (Exception e) { @@ -250,7 +256,7 @@ public class ActFmSyncThread { } private boolean timeForBackgroundSync() { - return Flags.check(Flags.BG_SYNC); + return false; } private void repopulateQueueFromOutstandingTables() { diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncV2Provider.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncV2Provider.java index 7b224800a..d93cd5277 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncV2Provider.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncV2Provider.java @@ -14,6 +14,8 @@ import java.util.concurrent.atomic.AtomicInteger; import org.json.JSONException; import org.json.JSONObject; +import android.content.Intent; + import com.timsu.astrid.GCMIntentService; import com.timsu.astrid.R; import com.todoroo.andlib.data.AbstractModel; @@ -24,6 +26,9 @@ import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Functions; import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.utility.Preferences; +import com.todoroo.astrid.actfm.sync.messages.BriefMe; +import com.todoroo.astrid.actfm.sync.messages.NameMaps; +import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.billing.BillingConstants; import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; @@ -42,7 +47,6 @@ import com.todoroo.astrid.sync.SyncResultCallback; import com.todoroo.astrid.sync.SyncV2Provider; import com.todoroo.astrid.tags.TagService; import com.todoroo.astrid.tags.TaskToTagMetadata; -import com.todoroo.astrid.utility.Flags; /** * Exposes sync action @@ -176,10 +180,16 @@ public class ActFmSyncV2Provider extends SyncV2Provider { actFmPreferenceService.recordSyncStart(); updateUserStatus(); - Flags.set(Flags.BG_SYNC); - synchronized(ActFmSyncMonitor.getInstance()) { - ActFmSyncMonitor.getInstance().notifyAll(); - } + Runnable refreshCallback = new Runnable() { + @Override + public void run() { + Intent refresh = new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH); + ContextManager.getContext().sendBroadcast(refresh); + } + }; + + ActFmSyncThread.getInstance().enqueueMessage(BriefMe.instantiateBriefMeForClass(Task.class, NameMaps.PUSHED_AT_TASKS), null); + ActFmSyncThread.getInstance().enqueueMessage(BriefMe.instantiateBriefMeForClass(TagData.class, NameMaps.PUSHED_AT_TAGS), refreshCallback); // startUsersSync(callback, finisher); // diff --git a/astrid/src/com/todoroo/astrid/utility/Flags.java b/astrid/src/com/todoroo/astrid/utility/Flags.java index c024c4d76..1d3a0d0e4 100644 --- a/astrid/src/com/todoroo/astrid/utility/Flags.java +++ b/astrid/src/com/todoroo/astrid/utility/Flags.java @@ -36,8 +36,6 @@ public class Flags { */ public static final int TLFP_NO_INTERCEPT_TOUCH = 1 << 7; - public static final int BG_SYNC = 1 << 8; - public static boolean checkAndClear(int flag) { boolean set = (state & flag) > 0; state &= ~flag;