From 6511d7e594b28f2af077c8407b63ca6df877745c Mon Sep 17 00:00:00 2001 From: Arne Jans Date: Tue, 10 Jan 2012 01:12:59 +0100 Subject: [PATCH] merged master into unifiedtabletphone-ui fixed NotificationActivity to be shown, also for landscape --- api/ant.properties | 2 - api/src/com/todoroo/andlib/sql/Field.java | 4 ++ api/src/com/todoroo/andlib/sql/Functions.java | 5 ++ .../todoroo/andlib/sql/UnaryCriterion.java | 4 ++ .../andlib/utility/AndroidUtilities.java | 13 ++++ api/src/com/todoroo/astrid/data/TagData.java | 5 ++ api/src/com/todoroo/astrid/data/Task.java | 1 + .../com/todoroo/astrid/data/TaskApiDao.java | 18 +++++ .../astrid/sync/SyncMetadataService.java | 6 +- astrid/.classpath | 2 +- astrid/AndroidManifest.xml | 7 +- .../astrid/actfm/ActFmLoginActivity.java | 16 ++++- .../astrid/actfm/EditPeopleControlSet.java | 16 +++++ .../astrid/actfm/TagSettingsActivity.java | 15 +++- .../astrid/actfm/TagUpdatesActivity.java | 4 +- .../astrid/actfm/sync/ActFmSyncService.java | 22 ++++-- .../astrid/core/CoreFilterExposer.java | 2 +- .../astrid/core/CustomFilterActivity.java | 2 +- .../astrid/core/CustomFilterExposer.java | 34 ++++----- .../com/todoroo/astrid/gcal/Calendars.java | 9 ++- .../reminders/NotificationActivity.java | 9 +++ .../NotificationWrapperActivity.java | 21 ++++++ .../astrid/reminders/Notifications.java | 2 +- .../astrid/reminders/ReminderService.java | 3 +- .../astrid/repeats/RepeatControlSet.java | 3 +- .../todoroo/astrid/tags/TagFilterExposer.java | 19 +++-- .../com/todoroo/astrid/tags/TagService.java | 3 +- .../deadline_timepicker_button_bl_off.xml | 10 +++ .../deadline_timepicker_button_bl_on.xml | 11 +++ .../deadline_timepicker_button_br_off.xml | 10 +++ .../deadline_timepicker_button_br_on.xml | 11 +++ .../res/drawable-v14/importance_title_1.xml | 8 +++ .../res/drawable-v14/importance_title_2.xml | 8 +++ .../res/drawable-v14/importance_title_3.xml | 8 +++ .../res/drawable-v14/importance_title_4.xml | 8 +++ .../res/drawable-v14/importance_title_5.xml | 8 +++ .../res/drawable-v14/importance_title_6.xml | 8 +++ .../drawable-v14/timepicker_am_btn_off.xml | 11 +++ .../res/drawable-v14/timepicker_am_btn_on.xml | 12 ++++ .../drawable-v14/timepicker_pm_btn_off.xml | 11 +++ .../res/drawable-v14/timepicker_pm_btn_on.xml | 12 ++++ astrid/res/drawable/filter_assigned.png | Bin 0 -> 1635 bytes astrid/res/drawable/ic_sort.png | Bin 0 -> 2040 bytes astrid/res/drawable/reminder_popup.9.png | Bin 3099 -> 3403 bytes astrid/res/layout/contact_adapter_row.xml | 2 +- .../res/layout/control_set_notes_display.xml | 2 +- astrid/res/layout/control_set_repeat.xml | 18 +++-- .../layout/notification_wrapper_activity.xml | 8 +++ astrid/res/layout/tag_settings_activity.xml | 68 ++++++++++++++---- astrid/res/layout/task_list_activity.xml | 30 ++++---- astrid/res/layout/task_list_body_standard.xml | 17 +++-- astrid/res/values/strings-actfm.xml | 21 ++++++ astrid/res/values/strings-core.xml | 2 +- astrid/res/values/strings-filters.xml | 3 + astrid/res/values/strings-intro.xml | 2 +- .../activity/DraggableTaskListActivity.java | 6 ++ .../astrid/activity/FilterListActivity.java | 6 +- .../astrid/activity/TaskEditActivity.java | 15 +++- .../astrid/activity/TaskListActivity.java | 65 ++++++++++++++--- .../src/com/todoroo/astrid/dao/Database.java | 8 ++- .../src/com/todoroo/astrid/dao/TaskDao.java | 18 ----- .../astrid/service/UpgradeService.java | 33 ++++++++- .../todoroo/astrid/ui/AstridTimePicker.java | 5 +- .../com/todoroo/astrid/ui/CalendarView.java | 6 +- .../astrid/ui/DeadlineNumberPicker.java | 4 ++ .../astrid/ui/EditNotesControlSet.java | 29 +++++++- .../com/todoroo/astrid/ui/NumberPicker.java | 31 ++++++-- .../ui/TextViewWithMeasureListener.java | 35 +++++++++ .../astrid/welcome/HelpInfoPopover.java | 6 +- facebook/facebook/ant.properties | 2 - greendroid/GreenDroid/ant.properties | 2 - 71 files changed, 677 insertions(+), 150 deletions(-) delete mode 100644 api/ant.properties create mode 100644 astrid/plugin-src/com/todoroo/astrid/reminders/NotificationWrapperActivity.java create mode 100644 astrid/res/drawable-v14/deadline_timepicker_button_bl_off.xml create mode 100644 astrid/res/drawable-v14/deadline_timepicker_button_bl_on.xml create mode 100644 astrid/res/drawable-v14/deadline_timepicker_button_br_off.xml create mode 100644 astrid/res/drawable-v14/deadline_timepicker_button_br_on.xml create mode 100644 astrid/res/drawable-v14/importance_title_1.xml create mode 100644 astrid/res/drawable-v14/importance_title_2.xml create mode 100644 astrid/res/drawable-v14/importance_title_3.xml create mode 100644 astrid/res/drawable-v14/importance_title_4.xml create mode 100644 astrid/res/drawable-v14/importance_title_5.xml create mode 100644 astrid/res/drawable-v14/importance_title_6.xml create mode 100644 astrid/res/drawable-v14/timepicker_am_btn_off.xml create mode 100644 astrid/res/drawable-v14/timepicker_am_btn_on.xml create mode 100644 astrid/res/drawable-v14/timepicker_pm_btn_off.xml create mode 100644 astrid/res/drawable-v14/timepicker_pm_btn_on.xml create mode 100644 astrid/res/drawable/filter_assigned.png create mode 100644 astrid/res/drawable/ic_sort.png create mode 100644 astrid/res/layout/notification_wrapper_activity.xml create mode 100644 astrid/src/com/todoroo/astrid/ui/TextViewWithMeasureListener.java delete mode 100644 facebook/facebook/ant.properties delete mode 100644 greendroid/GreenDroid/ant.properties diff --git a/api/ant.properties b/api/ant.properties deleted file mode 100644 index bab71f6cc..000000000 --- a/api/ant.properties +++ /dev/null @@ -1,2 +0,0 @@ -# output files and apk -out.dir=antbuild diff --git a/api/src/com/todoroo/andlib/sql/Field.java b/api/src/com/todoroo/andlib/sql/Field.java index caa321a05..7bc503fc6 100644 --- a/api/src/com/todoroo/andlib/sql/Field.java +++ b/api/src/com/todoroo/andlib/sql/Field.java @@ -49,6 +49,10 @@ public class Field extends DBObject { return UnaryCriterion.gt(this, value); } + public Criterion gte(Object value) { + return UnaryCriterion.gte(this, value); + } + public Criterion lt(final Object value) { return UnaryCriterion.lt(this, value); } diff --git a/api/src/com/todoroo/andlib/sql/Functions.java b/api/src/com/todoroo/andlib/sql/Functions.java index 88f6a9d21..9770fcfdc 100644 --- a/api/src/com/todoroo/andlib/sql/Functions.java +++ b/api/src/com/todoroo/andlib/sql/Functions.java @@ -1,5 +1,6 @@ package com.todoroo.andlib.sql; +import com.todoroo.andlib.data.Property.IntegerProperty; import com.todoroo.andlib.data.Property.StringProperty; @@ -50,4 +51,8 @@ public final class Functions { return new Field("LENGTH(" + field.toString() + ")"); } + public static Field bitwiseAnd(IntegerProperty field, int value) { + return new Field(field.toString() + " & " + value); + } + } diff --git a/api/src/com/todoroo/andlib/sql/UnaryCriterion.java b/api/src/com/todoroo/andlib/sql/UnaryCriterion.java index 0dcff2bd5..f2c816561 100644 --- a/api/src/com/todoroo/andlib/sql/UnaryCriterion.java +++ b/api/src/com/todoroo/andlib/sql/UnaryCriterion.java @@ -59,6 +59,10 @@ public class UnaryCriterion extends Criterion { return new UnaryCriterion(field, Operator.gt, value); } + public static Criterion gte(Field field, Object value) { + return new UnaryCriterion(field, Operator.gte, value); + } + public static Criterion lt(Field field, Object value) { return new UnaryCriterion(field, Operator.lt, value); } diff --git a/api/src/com/todoroo/andlib/utility/AndroidUtilities.java b/api/src/com/todoroo/andlib/utility/AndroidUtilities.java index 925c7e8ca..9a231a5a6 100644 --- a/api/src/com/todoroo/andlib/utility/AndroidUtilities.java +++ b/api/src/com/todoroo/andlib/utility/AndroidUtilities.java @@ -38,6 +38,7 @@ import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; import android.widget.TextView; import com.todoroo.andlib.data.Property; @@ -684,4 +685,16 @@ public class AndroidUtilities { return string.substring(0, 1).toUpperCase() + string.substring(1); } + /** + * Dismiss the keyboard if it is displayed by any of the listed views + * @param context + * @param views - a list of views that might potentially be displaying the keyboard + */ + public static void hideSoftInputForViews(Context context, View...views) { + InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE); + for (View v : views) { + imm.hideSoftInputFromWindow(v.getWindowToken(), 0); + } + } + } diff --git a/api/src/com/todoroo/astrid/data/TagData.java b/api/src/com/todoroo/astrid/data/TagData.java index 481df99f3..9ce7b5de6 100644 --- a/api/src/com/todoroo/astrid/data/TagData.java +++ b/api/src/com/todoroo/astrid/data/TagData.java @@ -110,6 +110,10 @@ public final class TagData extends RemoteModel { public static final IntegerProperty TASK_COUNT = new IntegerProperty( TABLE, "taskCount"); + /** Tag Desription */ + public static final StringProperty TAG_DESCRIPTION = new StringProperty( + TABLE, "tagDescription"); + /** List of all properties for this model */ public static final Property[] PROPERTIES = generateProperties(TagData.class); @@ -146,6 +150,7 @@ public final class TagData extends RemoteModel { defaultValues.put(LAST_ACTIVITY_DATE.name, 0); defaultValues.put(IS_UNREAD.name, 0); defaultValues.put(TASK_COUNT.name, 0); + defaultValues.put(TAG_DESCRIPTION.name, ""); } @Override diff --git a/api/src/com/todoroo/astrid/data/Task.java b/api/src/com/todoroo/astrid/data/Task.java index da79064ef..8e30856bd 100644 --- a/api/src/com/todoroo/astrid/data/Task.java +++ b/api/src/com/todoroo/astrid/data/Task.java @@ -251,6 +251,7 @@ public final class Task extends RemoteModel { defaultValues.put(LAST_SYNC.name, 0); defaultValues.put(REMOTE_ID.name, 0); defaultValues.put(USER_ID.name, 0); + defaultValues.put(CREATOR_ID.name, 0); defaultValues.put(USER.name, "{}"); defaultValues.put(SHARED_WITH.name, "{}"); } diff --git a/api/src/com/todoroo/astrid/data/TaskApiDao.java b/api/src/com/todoroo/astrid/data/TaskApiDao.java index a00b4c19f..c09237eb5 100644 --- a/api/src/com/todoroo/astrid/data/TaskApiDao.java +++ b/api/src/com/todoroo/astrid/data/TaskApiDao.java @@ -8,6 +8,7 @@ import com.todoroo.andlib.data.ContentResolverDao; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.sql.Criterion; +import com.todoroo.andlib.sql.Field; import com.todoroo.andlib.sql.Functions; import com.todoroo.andlib.sql.Query; import com.todoroo.astrid.api.AstridApiConstants; @@ -91,6 +92,23 @@ public class TaskApiDao extends ContentResolverDao { return Criterion.or(Task.TITLE.isNull(), Task.TITLE.eq("")); } + /** @return tasks that have not yet been completed or deleted */ + public static Criterion activeVisibleMine() { + return Criterion.and(Task.COMPLETION_DATE.eq(0), + Task.DELETION_DATE.eq(0), + Task.HIDE_UNTIL.lt(Functions.now()), + Field.field(Task.FLAGS.name + " & " + //$NON-NLS-1$ + Task.FLAG_IS_READONLY).eq(0), + Task.USER_ID.eq(0)); + } + + /** Check if a given task belongs to someone else & is read-only */ + public static Criterion ownedByMe() { + return Criterion.and(Field.field(Task.FLAGS.name+ " & " + //$NON-NLS-1$ + Task.FLAG_IS_READONLY).eq(0), + Task.USER_ID.eq(0)); + } + } /** diff --git a/api/src/com/todoroo/astrid/sync/SyncMetadataService.java b/api/src/com/todoroo/astrid/sync/SyncMetadataService.java index 6bfda336a..bef3a3b4c 100644 --- a/api/src/com/todoroo/astrid/sync/SyncMetadataService.java +++ b/api/src/com/todoroo/astrid/sync/SyncMetadataService.java @@ -81,7 +81,7 @@ abstract public class SyncMetadataService { */ public TodorooCursor getLocallyCreated(Property... properties) { TodorooCursor tasks = taskDao.query(Query.select(Task.ID).where( - TaskCriteria.isActive()).orderBy(Order.asc(Task.ID))); + Criterion.and(TaskCriteria.isActive(), TaskCriteria.ownedByMe())).orderBy(Order.asc(Task.ID))); return joinWithMetadata(tasks, false, properties); } @@ -97,8 +97,8 @@ abstract public class SyncMetadataService { if(lastSyncDate == 0) tasks = taskDao.query(Query.select(Task.ID).where(Criterion.none)); else - tasks = taskDao.query(Query.select(Task.ID).where( - Task.MODIFICATION_DATE.gt(lastSyncDate)).orderBy(Order.asc(Task.ID))); + tasks = taskDao.query(Query.select(Task.ID).where(Criterion.and(TaskCriteria.ownedByMe(), Task.MODIFICATION_DATE.gt(lastSyncDate))) + .orderBy(Order.asc(Task.ID))); tasks = filterLocallyUpdated(tasks, lastSyncDate); return joinWithMetadata(tasks, true, properties); diff --git a/astrid/.classpath b/astrid/.classpath index 4bfa66fd5..40651759a 100644 --- a/astrid/.classpath +++ b/astrid/.classpath @@ -6,6 +6,7 @@ + @@ -26,7 +27,6 @@ - diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml index 5ff6b9e6a..6fd374941 100644 --- a/astrid/AndroidManifest.xml +++ b/astrid/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionName="3.9.1.1" + android:versionCode="206"> @@ -547,9 +547,8 @@ - diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java index 4baac9a35..0897a5b53 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java @@ -65,6 +65,7 @@ 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.utility.AndroidUtilities; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.andlib.utility.Preferences; @@ -101,6 +102,9 @@ public class ActFmLoginActivity extends Activity implements AuthListener { private TextView errors; protected boolean noSync = false; + public static final String SHOW_TOAST = "show_toast"; + private boolean showToast; + // --- ui initialization private static final int REQUEST_CODE_GOOGLE_ACCOUNTS = 1; @@ -137,6 +141,8 @@ public class ActFmLoginActivity extends Activity implements AuthListener { rand = new Random(DateUtilities.now()); noSync = getIntent().getBooleanExtra(EXTRA_DO_NOT_SYNC, false); + showToast = getIntent().getBooleanExtra(SHOW_TOAST, true); + facebook = new Facebook(APP_ID); facebookRunner = new AsyncFacebookRunner(facebook); @@ -287,6 +293,7 @@ public class ActFmLoginActivity extends Activity implements AuthListener { public void onClick(DialogInterface dlg, int which) { String nameString = isNew.get() ? name.getText().toString() : null; + AndroidUtilities.hideSoftInputForViews(ActFmLoginActivity.this, name, email, password); authenticate(email.getText().toString(), nameString, ActFmInvoker.PROVIDER_PASSWORD, password.getText().toString()); @@ -296,7 +303,12 @@ public class ActFmLoginActivity extends Activity implements AuthListener { else StatisticsService.reportEvent(StatisticsConstants.ACTFM_SIGNUP_PW); } - }).setNegativeButton(android.R.string.cancel, null).show()); + }).setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dlg, int which) { + AndroidUtilities.hideSoftInputForViews(ActFmLoginActivity.this, name, email, password); + } + }).show()); dialog.get().setOwnerActivity(ActFmLoginActivity.this); } @@ -471,7 +483,7 @@ public class ActFmLoginActivity extends Activity implements AuthListener { finish(); if (!noSync) { - new ActFmSyncProvider().synchronize(ActFmLoginActivity.this); + new ActFmSyncProvider().synchronize(ActFmLoginActivity.this, showToast); } try { diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java index a16fb8d16..98518bc14 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java @@ -100,6 +100,8 @@ public class EditPeopleControlSet extends PopupControlSet { private final int loginRequestCode; + private boolean assignedToMe = false; + static { AstridDependencyInjector.initialize(); } @@ -494,6 +496,8 @@ public class EditPeopleControlSet extends PopupControlSet { task.setValue(Task.USER_ID, Task.USER_ID_SELF); if(!TextUtils.isEmpty(task.getValue(Task.USER))) task.setValue(Task.USER, ""); + + assignedToMe = true; } 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); @@ -685,6 +689,18 @@ public class EditPeopleControlSet extends PopupControlSet { return values.toArray(new Object[values.size()]); } + /** + * Warning - only valid after a call to saveSharingSettings + * @return + */ + public boolean isAssignedToMe() { + return assignedToMe; + } + + public String getAssignedToString() { + return assignedDisplay.getText().toString(); + } + /** Resume save * @param data */ public void onActivityResult(int requestCode, int resultCode, Intent data) { diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java index 870194a89..3188b28db 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java @@ -61,6 +61,7 @@ public class TagSettingsActivity extends Activity { private PeopleContainer tagMembers; private AsyncImageView picture; private EditText tagName; + private EditText tagDescription; private CheckBox isSilent; boolean isNewTag = false; @@ -111,11 +112,14 @@ public class TagSettingsActivity extends Activity { protected void setUpSettingsPage() { tagMembers = (PeopleContainer) findViewById(R.id.members_container); tagName = (EditText) findViewById(R.id.tag_name); + tagDescription = (EditText) findViewById(R.id.tag_description); picture = (AsyncImageView) findViewById(R.id.picture); isSilent = (CheckBox) findViewById(R.id.tag_silenced); + isSilent.setChecked(tagData.getFlag(TagData.FLAGS, TagData.FLAG_SILENT)); if(actFmPreferenceService.isLoggedIn()) { picture.setVisibility(View.VISIBLE); + findViewById(R.id.picture_label).setVisibility(View.VISIBLE); findViewById(R.id.listSettingsMore).setVisibility(View.VISIBLE); } @@ -146,7 +150,7 @@ public class TagSettingsActivity extends Activity { private void saveSettings() { setResult(RESULT_OK); String oldName = tagData.getValue(TagData.NAME); - String newName = tagName.getText().toString(); + String newName = tagName.getText().toString().trim(); if (TextUtils.isEmpty(newName)) { return; @@ -171,6 +175,10 @@ public class TagSettingsActivity extends Activity { } } } + //handles description part + String newDesc = tagDescription.getText().toString(); + + tagData.setValue(TagData.TAG_DESCRIPTION, newDesc); JSONArray members = tagMembers.toJSONArray(); @@ -210,6 +218,8 @@ public class TagSettingsActivity extends Activity { return; } + + refreshSettingsPage(); finish(); } @@ -256,6 +266,9 @@ public class TagSettingsActivity extends Activity { String peopleJson = tagData.getValue(TagData.MEMBERS); updateMembers(peopleJson); + + tagDescription.setText(tagData.getValue(TagData.TAG_DESCRIPTION)); + } @SuppressWarnings("nls") diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagUpdatesActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagUpdatesActivity.java index 600480a88..cd4570b12 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagUpdatesActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagUpdatesActivity.java @@ -234,13 +234,15 @@ public class TagUpdatesActivity extends ListActivity { updateDao.createNew(update); final long updateId = update.getId(); + final Bitmap tempPicture = picture; new Thread() { @Override public void run() { - actFmSyncService.pushUpdate(updateId, picture); + actFmSyncService.pushUpdate(updateId, tempPicture); } }.start(); addCommentField.setText(""); //$NON-NLS-1$ + picture = null; pictureButton.setImageResource(R.drawable.icn_camera); refreshUpdatesList(); 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 7f9e03e3d..4382389d3 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java @@ -195,8 +195,10 @@ public final class ActFmSyncService { } if(failedPushes.size() > 0) { // Copy into a second queue so we don't end up infinitely retrying in the same loop - Queue toTry = new LinkedList(failedPushes); - failedPushes.clear(); + Queue toTry = new LinkedList(); + while (failedPushes.size() > 0) { + toTry.add(failedPushes.remove(0)); + } while(!toTry.isEmpty() && !actFmPreferenceService.isOngoing()) { FailedPush pushOp = toTry.remove(); switch(pushOp.pushType) { @@ -410,7 +412,8 @@ public final class ActFmSyncService { */ public void pushTask(long taskId) { Task task = taskService.fetchById(taskId, Task.PROPERTIES); - pushTaskOnSave(task, task.getMergedValues()); + if (task != null) + pushTaskOnSave(task, task.getMergedValues()); } /** @@ -419,7 +422,8 @@ public final class ActFmSyncService { */ public void pushTag(long tagId) { TagData tagData = tagDataService.fetchById(tagId, TagData.PROPERTIES); - pushTagDataOnSave(tagData, tagData.getMergedValues()); + if (tagData != null) + pushTagDataOnSave(tagData, tagData.getMergedValues()); } /** @@ -428,7 +432,8 @@ public final class ActFmSyncService { */ public void pushUpdate(long updateId) { Update update = updateDao.fetch(updateId, Update.PROPERTIES); - pushUpdateOnSave(update, update.getMergedValues(), null); + if (update != null) + pushUpdateOnSave(update, update.getMergedValues(), null); } /** @@ -466,6 +471,10 @@ public final class ActFmSyncService { params.add("deleted_at"); params.add(tagData.getValue(TagData.DELETION_DATE)); } + if(values.containsKey(TagData.TAG_DESCRIPTION.name)) { + params.add("description"); params.add(tagData.getValue(TagData.TAG_DESCRIPTION)); + } + if(values.containsKey(TagData.MEMBERS.name)) { params.add("members"); try { @@ -991,6 +1000,9 @@ public final class ActFmSyncService { if(json.has("emergent")) model.setFlag(TagData.FLAGS, TagData.FLAG_EMERGENT,json.getBoolean("emergent")); + if(!json.isNull("description")) + model.setValue(TagData.TAG_DESCRIPTION, json.getString("description")); + if(json.has("members")) { JSONArray members = json.getJSONArray("members"); model.setValue(TagData.MEMBERS, members.toString()); diff --git a/astrid/plugin-src/com/todoroo/astrid/core/CoreFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/core/CoreFilterExposer.java index 78a7209a9..703a792ba 100644 --- a/astrid/plugin-src/com/todoroo/astrid/core/CoreFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/core/CoreFilterExposer.java @@ -20,9 +20,9 @@ import com.todoroo.astrid.api.AstridFilterExposer; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.FilterListItem; import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; -import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.data.TaskApiDao.TaskCriteria; import com.todoroo.astrid.tags.TagService; /** diff --git a/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterActivity.java b/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterActivity.java index 4a9655b7a..90b359f63 100644 --- a/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterActivity.java @@ -47,8 +47,8 @@ import com.todoroo.astrid.api.MultipleSelectCriterion; import com.todoroo.astrid.api.PermaSql; import com.todoroo.astrid.api.TextInputCriterion; import com.todoroo.astrid.dao.Database; -import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.data.TaskApiDao.TaskCriteria; import com.todoroo.astrid.service.StatisticsService; /** diff --git a/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterExposer.java index 74eb3af26..95e7a3631 100644 --- a/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterExposer.java @@ -24,6 +24,7 @@ import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.DialogUtilities; +import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; import com.todoroo.astrid.activity.FilterListActivity; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.AstridFilterExposer; @@ -31,12 +32,11 @@ import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.FilterListItem; import com.todoroo.astrid.api.PermaSql; import com.todoroo.astrid.dao.StoreObjectDao; -import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.data.StoreObject; import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.data.TaskApiDao.TaskCriteria; import com.todoroo.astrid.gtasks.GtasksPreferenceService; import com.todoroo.astrid.service.TagDataService; -import com.todoroo.astrid.tags.TagService; /** * Exposes Astrid's built in filters to the {@link FilterListActivity} @@ -66,18 +66,7 @@ public final class CustomFilterExposer extends BroadcastReceiver implements Astr DependencyInjectionService.getInstance().inject(this); Resources r = context.getResources(); - //PendingIntent customFilterIntent = PendingIntent.getActivity(context, 0, - // new Intent(context, CustomFilterActivity.class), 0); - Filter[] savedFilters = buildSavedFilters(context, r); - - //FilterCategoryWithNewButton heading = new FilterCategoryWithNewButton(r.getString(R.string.BFE_Saved), savedFilters); - //heading.label = r.getString(R.string.tag_FEx_add_new); - //heading.intent = customFilterIntent; - - - //FilterListItem[] list = new FilterListItem[1]; - //list[0] = heading; return savedFilters; } @@ -109,13 +98,7 @@ public final class CustomFilterExposer extends BroadcastReceiver implements Astr null); list[1].listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.filter_pencil)).getBitmap(); - int untaggedLabel = gtasksPreferenceService.isLoggedIn() ? - R.string.tag_FEx_untagged_w_astrid : R.string.tag_FEx_untagged; - list[2] = new Filter(r.getString(untaggedLabel), - r.getString(R.string.tag_FEx_untagged), - TagService.untaggedTemplate(), - null);; - list[2].listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.gl_lists)).getBitmap(); + list[2] = getAssignedByMeFilter(r); StoreObject savedFilter = new StoreObject(); for(int i = 3; i < list.length; i++) { @@ -137,6 +120,17 @@ public final class CustomFilterExposer extends BroadcastReceiver implements Astr } } + public static Filter getAssignedByMeFilter(Resources r) { + Filter f = new Filter(r.getString(R.string.BFE_Assigned), + r.getString(R.string.BFE_Assigned), + new QueryTemplate().where(Criterion.and(TaskCriteria.isActive(), + Criterion.or(Task.CREATOR_ID.eq(0), Task.CREATOR_ID.eq(ActFmPreferenceService.userId())), + Task.USER_ID.neq(0))), + null); + f.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.filter_assigned)).getBitmap(); + return f; + } + /** * Simple activity for deleting stuff * diff --git a/astrid/plugin-src/com/todoroo/astrid/gcal/Calendars.java b/astrid/plugin-src/com/todoroo/astrid/gcal/Calendars.java index f61ec6594..73bad36b0 100644 --- a/astrid/plugin-src/com/todoroo/astrid/gcal/Calendars.java +++ b/astrid/plugin-src/com/todoroo/astrid/gcal/Calendars.java @@ -25,14 +25,13 @@ public class Calendars { private static final String ID_COLUMN_NAME = "_id"; private static final boolean USE_ICS_NAMES = AndroidUtilities.getSdkVersion() >= 14; - private static final String ICS_CALENDAR_PREFIX = "calendar_"; - private static final String DISPLAY_COLUMN_NAME = (USE_ICS_NAMES ? ICS_CALENDAR_PREFIX : "") + "displayName"; - private static final String ACCES_LEVEL_COLUMN_NAME = (USE_ICS_NAMES ? ICS_CALENDAR_PREFIX : "") + "access_level"; + private static final String DISPLAY_COLUMN_NAME = (USE_ICS_NAMES ? CalendarContract.Calendars.CALENDAR_DISPLAY_NAME : "displayName"); + private static final String ACCES_LEVEL_COLUMN_NAME = (USE_ICS_NAMES ? CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL : "access_level"); private static final String[] CALENDARS_PROJECTION = new String[] { - ID_COLUMN_NAME, // Calendars._ID, - DISPLAY_COLUMN_NAME // Calendars.DISPLAY_NAME + ID_COLUMN_NAME, + DISPLAY_COLUMN_NAME, }; // Only show calendars that the user can modify. Access level 500 diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationActivity.java b/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationActivity.java index 2cfc14698..207329b41 100644 --- a/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationActivity.java @@ -77,6 +77,15 @@ public class NotificationActivity extends TaskListActivity implements OnTimeSetL StartupService.bypassInitialization(); super.onCreate(savedInstanceState); + } + + /* (non-Javadoc) + * @see com.todoroo.astrid.activity.TaskListActivity#onActivityCreated(android.os.Bundle) + */ + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + displayNotificationPopup(); } diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationWrapperActivity.java b/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationWrapperActivity.java new file mode 100644 index 000000000..a53ab3778 --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationWrapperActivity.java @@ -0,0 +1,21 @@ +package com.todoroo.astrid.reminders; + +import android.os.Bundle; + +import com.timsu.astrid.R; +import com.todoroo.astrid.activity.AstridWrapperActivity; +import com.todoroo.astrid.service.ThemeService; + +public class NotificationWrapperActivity extends AstridWrapperActivity { + + /* (non-Javadoc) + * @see com.todoroo.astrid.activity.AstridWrapperActivity#onCreate(android.os.Bundle) + */ + @Override + protected void onCreate(Bundle savedInstanceState) { + ThemeService.applyTheme(this); + super.onCreate(savedInstanceState); + setContentView(R.layout.notification_wrapper_activity); + } + +} diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/Notifications.java b/astrid/plugin-src/com/todoroo/astrid/reminders/Notifications.java index bf4eed71b..22b18463c 100644 --- a/astrid/plugin-src/com/todoroo/astrid/reminders/Notifications.java +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/Notifications.java @@ -162,7 +162,7 @@ public class Notifications extends BroadcastReceiver { String title = context.getString(R.string.app_name); String text = reminder + " " + taskTitle; //$NON-NLS-1$ - Intent notifyIntent = new Intent(context, NotificationActivity.class); + Intent notifyIntent = new Intent(context, NotificationWrapperActivity.class); notifyIntent.setAction("NOTIFY" + id); //$NON-NLS-1$ notifyIntent.putExtra(NotificationActivity.TOKEN_ID, id); notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderService.java b/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderService.java index 6975e4b35..b6f65fae3 100644 --- a/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderService.java +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderService.java @@ -25,6 +25,7 @@ import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.data.TaskApiDao; import com.todoroo.astrid.utility.Constants; @@ -483,7 +484,7 @@ public final class ReminderService { private TodorooCursor getTasksWithReminders(Property... properties) { return taskDao.query(Query.select(properties).where(Criterion.and( TaskCriteria.isActive(), - TaskCriteria.ownedByMe(), + TaskApiDao.TaskCriteria.ownedByMe(), Criterion.or(Task.REMINDER_FLAGS.gt(0), Task.REMINDER_PERIOD.gt(0))))); } diff --git a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatControlSet.java b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatControlSet.java index 3bf22f059..881732467 100644 --- a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatControlSet.java @@ -98,7 +98,6 @@ public class RepeatControlSet extends PopupControlSet { LinearLayout.LayoutParams textLp = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1.0f/14); for(int i = 0; i < 7; i++) { CheckBox checkBox = new CheckBox(activity); - checkBox.setTextColor(activity.getResources().getColor(android.R.color.white)); int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); checkBox.setPadding(0, 0, 0, 0); checkBox.setLayoutParams(lp); @@ -107,7 +106,7 @@ public class RepeatControlSet extends PopupControlSet { checkBox.setButtonDrawable(R.drawable.btn_check_small); TextView label = new TextView(activity); - label.setTextAppearance(activity, android.R.style.TextAppearance); + label.setTextAppearance(activity, R.style.TextAppearance_GEN_EditLabel); label.setLayoutParams(textLp); label.setTextSize(14); label.setText(dfs.getShortWeekdays()[dayOfWeek].substring(0, 1)); diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java index d85c84242..9e9e4285e 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java @@ -14,6 +14,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.res.Resources; import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.widget.EditText; import android.widget.Toast; @@ -128,7 +129,6 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE ArrayList list = new ArrayList(); - // --- untagged addTags(list); // transmit filter list @@ -143,12 +143,23 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE } private FilterCategory filterFromTags(Tag[] tags, int name) { - Filter[] filters = new Filter[tags.length]; - Resources r = ContextManager.getContext().getResources(); + Filter[] filters = new Filter[tags.length + 1]; Context context = ContextManager.getContext(); + Resources r = context.getResources(); + + // --- untagged + int untaggedLabel = gtasksPreferenceService.isLoggedIn() ? + R.string.tag_FEx_untagged_w_astrid : R.string.tag_FEx_untagged; + Filter untagged = new Filter(r.getString(untaggedLabel), + r.getString(R.string.tag_FEx_untagged), + TagService.untaggedTemplate(), + null); + untagged.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.gl_lists)).getBitmap(); + filters[0] = untagged; + for(int i = 0; i < tags.length; i++) - filters[i] = filterFromTag(context, tags[i], TaskCriteria.activeAndVisible()); + filters[i+1] = filterFromTag(context, tags[i], TaskCriteria.activeAndVisible()); FilterCategory filter = new FilterCategory(context.getString(name), filters); return filter; } diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java index 85cfbce82..1140edb74 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java @@ -30,6 +30,7 @@ import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.data.TaskApiDao; import com.todoroo.astrid.data.Update; import com.todoroo.astrid.service.MetadataService; import com.todoroo.astrid.service.TagDataService; @@ -145,7 +146,7 @@ public final class TagService { return new QueryTemplate().where(Criterion.and( Criterion.not(Task.ID.in(Query.select(Metadata.TASK).from(Metadata.TABLE).where(MetadataCriteria.withKey(KEY)))), TaskCriteria.isActive(), - TaskCriteria.ownedByMe(), + TaskApiDao.TaskCriteria.ownedByMe(), TaskCriteria.isVisible())); } diff --git a/astrid/res/drawable-v14/deadline_timepicker_button_bl_off.xml b/astrid/res/drawable-v14/deadline_timepicker_button_bl_off.xml new file mode 100644 index 000000000..8dfcbdbd4 --- /dev/null +++ b/astrid/res/drawable-v14/deadline_timepicker_button_bl_off.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/astrid/res/drawable-v14/deadline_timepicker_button_bl_on.xml b/astrid/res/drawable-v14/deadline_timepicker_button_bl_on.xml new file mode 100644 index 000000000..b9106ed45 --- /dev/null +++ b/astrid/res/drawable-v14/deadline_timepicker_button_bl_on.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/astrid/res/drawable-v14/deadline_timepicker_button_br_off.xml b/astrid/res/drawable-v14/deadline_timepicker_button_br_off.xml new file mode 100644 index 000000000..201a8f62a --- /dev/null +++ b/astrid/res/drawable-v14/deadline_timepicker_button_br_off.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/astrid/res/drawable-v14/deadline_timepicker_button_br_on.xml b/astrid/res/drawable-v14/deadline_timepicker_button_br_on.xml new file mode 100644 index 000000000..1d1fdecc1 --- /dev/null +++ b/astrid/res/drawable-v14/deadline_timepicker_button_br_on.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/astrid/res/drawable-v14/importance_title_1.xml b/astrid/res/drawable-v14/importance_title_1.xml new file mode 100644 index 000000000..7f73c1240 --- /dev/null +++ b/astrid/res/drawable-v14/importance_title_1.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/astrid/res/drawable-v14/importance_title_2.xml b/astrid/res/drawable-v14/importance_title_2.xml new file mode 100644 index 000000000..acc85388b --- /dev/null +++ b/astrid/res/drawable-v14/importance_title_2.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/astrid/res/drawable-v14/importance_title_3.xml b/astrid/res/drawable-v14/importance_title_3.xml new file mode 100644 index 000000000..e78825011 --- /dev/null +++ b/astrid/res/drawable-v14/importance_title_3.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/astrid/res/drawable-v14/importance_title_4.xml b/astrid/res/drawable-v14/importance_title_4.xml new file mode 100644 index 000000000..ed9130d61 --- /dev/null +++ b/astrid/res/drawable-v14/importance_title_4.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/astrid/res/drawable-v14/importance_title_5.xml b/astrid/res/drawable-v14/importance_title_5.xml new file mode 100644 index 000000000..4f22045e8 --- /dev/null +++ b/astrid/res/drawable-v14/importance_title_5.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/astrid/res/drawable-v14/importance_title_6.xml b/astrid/res/drawable-v14/importance_title_6.xml new file mode 100644 index 000000000..0d03753de --- /dev/null +++ b/astrid/res/drawable-v14/importance_title_6.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/astrid/res/drawable-v14/timepicker_am_btn_off.xml b/astrid/res/drawable-v14/timepicker_am_btn_off.xml new file mode 100644 index 000000000..7c31677db --- /dev/null +++ b/astrid/res/drawable-v14/timepicker_am_btn_off.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/astrid/res/drawable-v14/timepicker_am_btn_on.xml b/astrid/res/drawable-v14/timepicker_am_btn_on.xml new file mode 100644 index 000000000..7ae789e1b --- /dev/null +++ b/astrid/res/drawable-v14/timepicker_am_btn_on.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/astrid/res/drawable-v14/timepicker_pm_btn_off.xml b/astrid/res/drawable-v14/timepicker_pm_btn_off.xml new file mode 100644 index 000000000..b0e2847f6 --- /dev/null +++ b/astrid/res/drawable-v14/timepicker_pm_btn_off.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/astrid/res/drawable-v14/timepicker_pm_btn_on.xml b/astrid/res/drawable-v14/timepicker_pm_btn_on.xml new file mode 100644 index 000000000..92914f342 --- /dev/null +++ b/astrid/res/drawable-v14/timepicker_pm_btn_on.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/astrid/res/drawable/filter_assigned.png b/astrid/res/drawable/filter_assigned.png new file mode 100644 index 0000000000000000000000000000000000000000..51bd7ecf3eba5c644a14f110ebcfa8f28a5f23fe GIT binary patch literal 1635 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 IhmfRy0H^hLv;Y7A literal 0 HcmV?d00001 diff --git a/astrid/res/drawable/reminder_popup.9.png b/astrid/res/drawable/reminder_popup.9.png index fb9ef3f579c4878106aa7efe3214041c8829b620..96f44aacd2382d986dd03780eb3f6c2842b1564e 100644 GIT binary patch literal 3403 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 diff --git a/astrid/res/layout/control_set_notes_display.xml b/astrid/res/layout/control_set_notes_display.xml index 178782bf1..5dd2dea93 100644 --- a/astrid/res/layout/control_set_notes_display.xml +++ b/astrid/res/layout/control_set_notes_display.xml @@ -21,7 +21,7 @@ android:layout_marginRight="15dip" android:text="@string/TEA_note_label" style="@style/TextAppearance.GEN_EditLabel" /> - - +