diff --git a/api/res/values/strings.xml b/api/res/values/strings.xml
index 8145ebc05..25eb24f78 100644
--- a/api/res/values/strings.xml
+++ b/api/res/values/strings.xml
@@ -151,6 +151,9 @@
Sync & backup
+
+ Sync now
+
Astrid.com, Google Tasks, saved data, local backup
diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java
index 8f4b1661f..f8c3a11c8 100644
--- a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java
+++ b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java
@@ -735,6 +735,7 @@ public class EditPeopleControlSet extends PopupControlSet {
} else if(userJson.optLong("id") == Task.USER_ID_UNASSIGNED) {
dirty = task.getValue(Task.USER_ID) == Task.USER_ID_UNASSIGNED ? dirty : true;
task.setValue(Task.USER_ID, Task.USER_ID_UNASSIGNED);
+ task.setValue(Task.USER, "{}");
} else {
String user = userJson.toString();
@@ -758,7 +759,6 @@ public class EditPeopleControlSet extends PopupControlSet {
task.setValue(Task.USER_ID, userJson.optLong("id", Task.USER_ID_EMAIL));
task.setValue(Task.USER, user);
- String assignedName = userJson.optString("name", userEmail);
}
JSONObject sharedWith = sharedWithContainer.parseSharedWithAndTags(activity, false);
diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java
index 104aa558e..5a1746812 100644
--- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java
+++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java
@@ -5,6 +5,8 @@
*/
package com.todoroo.astrid.actfm;
+import java.util.concurrent.atomic.AtomicBoolean;
+
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@@ -105,7 +107,9 @@ public class TagViewFragment extends TaskListFragment {
private boolean dataLoaded = false;
- private long currentId;
+ private long currentId = Task.USER_ID_IGNORE;
+
+ protected AtomicBoolean isBeingFiltered = new AtomicBoolean(false);
private Filter originalFilter;
@@ -443,6 +447,7 @@ public class TagViewFragment extends TaskListFragment {
else
filterByAssigned.setText(getString(R.string.actfm_TVA_filtered_by_assign, displayName));
}
+ isBeingFiltered.set(true);
setUpTaskList();
}
}
@@ -458,6 +463,7 @@ public class TagViewFragment extends TaskListFragment {
private void resetAssignedFilter() {
currentId = Task.USER_ID_IGNORE;
+ isBeingFiltered.set(false);
filter = originalFilter;
View filterAssigned = getView().findViewById(R.id.filter_assigned);
if (filterAssigned != null)
diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java
index 748c72a57..f516902d0 100644
--- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java
+++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java
@@ -1168,6 +1168,11 @@ public final class ActFmSyncService {
* @param done
*/
public void fetchUpdatesForTag(final TagData tagData, final boolean manual, Runnable done) {
+ if (tagData.getFlag(TagData.FLAGS, TagData.FLAG_FEATURED)) {
+ if (done != null)
+ done.run();
+ return;
+ }
invokeFetchList("activity", manual, null, new UpdateListItemProcessor(), done,
"updates:" + tagData.getId(), "tag_id", tagData.getValue(TagData.REMOTE_ID));
diff --git a/astrid/plugin-src/com/todoroo/astrid/alarms/AlarmControlSet.java b/astrid/plugin-src/com/todoroo/astrid/alarms/AlarmControlSet.java
index 0433f72e0..780f6dc04 100644
--- a/astrid/plugin-src/com/todoroo/astrid/alarms/AlarmControlSet.java
+++ b/astrid/plugin-src/com/todoroo/astrid/alarms/AlarmControlSet.java
@@ -58,12 +58,13 @@ public final class AlarmControlSet extends TaskEditControlSet {
@Override
protected void afterInflate() {
this.alertsContainer = (LinearLayout) getView().findViewById(R.id.alert_container);
- getView().findViewById(R.id.alarms_add).setOnClickListener(new View.OnClickListener() {
+ View.OnClickListener addAlarmListener = new View.OnClickListener() {
@Override
public void onClick(View arg0) {
addAlarm(new Date());
}
- });
+ };
+ getView().findViewById(R.id.alarms_add).setOnClickListener(addAlarmListener);
pickerDialog = new DateAndTimeDialog(activity, 0);
}
diff --git a/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterActivity.java b/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterActivity.java
index 786d1914d..008cfed1f 100644
--- a/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterActivity.java
+++ b/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterActivity.java
@@ -158,7 +158,7 @@ public class CustomFilterActivity extends FragmentActivity {
ab.setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.custom_filter_activity);
- setTitle(R.string.CFA_title);
+ setTitle(R.string.FLA_new_filter);
listView = (ListView) findViewById(android.R.id.list);
diff --git a/astrid/plugin-src/com/todoroo/astrid/gtasks/auth/ModernAuthManager.java b/astrid/plugin-src/com/todoroo/astrid/gtasks/auth/ModernAuthManager.java
index fe8fc6e0d..34567788b 100644
--- a/astrid/plugin-src/com/todoroo/astrid/gtasks/auth/ModernAuthManager.java
+++ b/astrid/plugin-src/com/todoroo/astrid/gtasks/auth/ModernAuthManager.java
@@ -212,12 +212,16 @@ public class ModernAuthManager implements AuthManager {
}
public static String[] getAccounts(Activity activity) {
- GoogleAccountManager accountManager = new GoogleAccountManager(activity);
- Account[] accounts = accountManager.getAccounts();
- ArrayList accountNames = new ArrayList();
- for (Account a : accounts) {
- accountNames.add(a.name);
+ try {
+ GoogleAccountManager accountManager = new GoogleAccountManager(activity);
+ Account[] accounts = accountManager.getAccounts();
+ ArrayList accountNames = new ArrayList();
+ for (Account a : accounts) {
+ accountNames.add(a.name);
+ }
+ return accountNames.toArray(new String[accountNames.size()]);
+ } catch (Exception e) {
+ return new String[] {}; // Empty array on failure
}
- return accountNames.toArray(new String[accountNames.size()]);
}
}
diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/OrderedMetadataListFragmentHelper.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/OrderedMetadataListFragmentHelper.java
index 4a5adb173..54048d2ed 100644
--- a/astrid/plugin-src/com/todoroo/astrid/subtasks/OrderedMetadataListFragmentHelper.java
+++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/OrderedMetadataListFragmentHelper.java
@@ -13,15 +13,12 @@ import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
import android.app.Activity;
-import android.content.Context;
import android.database.Cursor;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewGroup.MarginLayoutParams;
import android.widget.ListView;
import com.commonsware.cwac.tlv.TouchListView.DropListener;
@@ -228,25 +225,6 @@ public class OrderedMetadataListFragmentHelper implements OrderedListFragm
return (ViewHolder)((View)v.getParent()).getTag();
}
- @Override
- public View newView(Context context, Cursor cursor, ViewGroup parent) {
- View view = super.newView(context, cursor, parent);
- view.getLayoutParams().height = Math.round(45 * metrics.density);
-
- ViewHolder vh = (ViewHolder) view.getTag();
-
- MarginLayoutParams rowParams = (MarginLayoutParams) vh.rowBody.getLayoutParams();
- rowParams.topMargin = rowParams.bottomMargin = 0;
-
- ViewGroup.LayoutParams pictureParams = vh.picture.getLayoutParams();
- pictureParams.width = pictureParams.height = Math.round(38 * metrics.density);
-
- pictureParams = vh.pictureBorder.getLayoutParams();
- pictureParams.width = pictureParams.height = Math.round(38 * metrics.density);
-
- return view;
- }
-
@Override
public synchronized void setFieldContentsAndVisibility(View view) {
super.setFieldContentsAndVisibility(view);
diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksTagListFragment.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksTagListFragment.java
index 8ae8db831..2707bf38f 100644
--- a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksTagListFragment.java
+++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksTagListFragment.java
@@ -21,7 +21,7 @@ public class SubtasksTagListFragment extends TagViewFragment {
public SubtasksTagListFragment() {
super();
- helper = new AstridOrderedListFragmentHelper(this, new SubtasksTagUpdater());
+ helper = new AstridOrderedListFragmentHelper(this, new SubtasksTagUpdater(isBeingFiltered));
}
@Override
diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksTagUpdater.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksTagUpdater.java
index 77341f0d7..17ad2c080 100644
--- a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksTagUpdater.java
+++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksTagUpdater.java
@@ -1,13 +1,21 @@
package com.todoroo.astrid.subtasks;
+import java.util.concurrent.atomic.AtomicBoolean;
+
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.data.TagData;
public class SubtasksTagUpdater extends SubtasksUpdater {
+ private final AtomicBoolean isBeingFiltered;
+
+ public SubtasksTagUpdater(AtomicBoolean isBeingFiltered) {
+ this.isBeingFiltered = isBeingFiltered;
+ }
+
@Override
protected String getSerializedTree(TagData list, Filter filter) {
- if (list == null)
+ if (list == null || isBeingFiltered.get())
return "[]"; //$NON-NLS-1$
String order = list.getValue(TagData.TAG_ORDERING);
if (order == null || "null".equals(order)) //$NON-NLS-1$
@@ -18,10 +26,19 @@ public class SubtasksTagUpdater extends SubtasksUpdater {
@Override
protected void writeSerialization(TagData list, String serialized, boolean shouldQueueSync) {
- list.setValue(TagData.TAG_ORDERING, serialized);
- tagDataService.save(list);
- if (shouldQueueSync)
- actFmSyncService.pushTagOrderingOnSave(list.getId());
+ if (!isBeingFiltered.get()) {
+ list.setValue(TagData.TAG_ORDERING, serialized);
+ tagDataService.save(list);
+ if (shouldQueueSync)
+ actFmSyncService.pushTagOrderingOnSave(list.getId());
+ }
+ }
+
+ @Override
+ public int getIndentForTask(long targetTaskId) {
+ if (isBeingFiltered.get())
+ return 0;
+ return super.getIndentForTask(targetTaskId);
}
}
diff --git a/astrid/res/drawable-hdpi/trashcan.png b/astrid/res/drawable-hdpi/trashcan.png
new file mode 100644
index 000000000..417fbf7b9
Binary files /dev/null and b/astrid/res/drawable-hdpi/trashcan.png differ
diff --git a/astrid/res/drawable-xhdpi/trashcan.png b/astrid/res/drawable-xhdpi/trashcan.png
new file mode 100644
index 000000000..d1af42a65
Binary files /dev/null and b/astrid/res/drawable-xhdpi/trashcan.png differ
diff --git a/astrid/res/drawable/trashcan.png b/astrid/res/drawable/trashcan.png
new file mode 100644
index 000000000..54ba462ca
Binary files /dev/null and b/astrid/res/drawable/trashcan.png differ
diff --git a/astrid/res/layout-land/share_activity.xml b/astrid/res/layout-land/share_activity.xml
index e8dec7ca4..c5d8628b2 100644
--- a/astrid/res/layout-land/share_activity.xml
+++ b/astrid/res/layout-land/share_activity.xml
@@ -3,7 +3,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
- android:background="#aaa" >
+ android:background="#eee" >
-