From 3393ebb766f3feaf526eae7b31b82144824f9c18 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Fri, 4 May 2012 17:05:25 -0700 Subject: [PATCH] Use FilterWithUpdate when necessary when creating shortcuts so that filter comparison doesn't break --- .../astrid/activity/ShortcutActivity.java | 16 +++++++++++++++- .../todoroo/astrid/adapter/FilterAdapter.java | 15 ++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/astrid/src/com/todoroo/astrid/activity/ShortcutActivity.java b/astrid/src/com/todoroo/astrid/activity/ShortcutActivity.java index d7e4e23b0..02607f07b 100644 --- a/astrid/src/com/todoroo/astrid/activity/ShortcutActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/ShortcutActivity.java @@ -33,6 +33,7 @@ import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.FilterWithCustomIntent; +import com.todoroo.astrid.api.FilterWithUpdate; import com.todoroo.astrid.data.Task; /** @@ -65,6 +66,9 @@ public class ShortcutActivity extends Activity { /** token for passing a ComponentNameto launch */ public static final String TOKEN_CUSTOM_CLASS = "class"; //$NON-NLS-1$ + /** token for passing a image url*/ + public static final String TOKEN_IMAGE_URL = "imageUrl"; //$NON-NLS-1$ + // --- implementation @Override @@ -126,7 +130,12 @@ public class ShortcutActivity extends Activity { Filter filter; if (extras.containsKey(TOKEN_CUSTOM_CLASS)) { - filter = new FilterWithCustomIntent(title, title, sql, values); + if (extras.containsKey(TOKEN_IMAGE_URL)) { + filter = new FilterWithUpdate(title, title, sql, values); + ((FilterWithUpdate) filter).imageUrl = extras.getString(TOKEN_IMAGE_URL); + } + else + filter = new FilterWithCustomIntent(title, title, sql, values); ComponentName customTaskList = ComponentName.unflattenFromString(extras.getString(TOKEN_CUSTOM_CLASS)); ((FilterWithCustomIntent) filter).customTaskList = customTaskList; } else { @@ -155,6 +164,11 @@ public class ShortcutActivity extends Activity { if(customFilter.customExtras != null) shortcutIntent.putExtras(customFilter.customExtras); shortcutIntent.putExtra(TOKEN_CUSTOM_CLASS, customFilter.customTaskList.flattenToString()); + if (filter instanceof FilterWithUpdate) { + FilterWithUpdate filterWithUpdate = (FilterWithUpdate) filter; + if (filterWithUpdate.imageUrl != null) + shortcutIntent.putExtra(TOKEN_IMAGE_URL, filterWithUpdate.imageUrl); + } } shortcutIntent.setAction(Intent.ACTION_VIEW); diff --git a/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java b/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java index b26d2af61..06a69b2fb 100644 --- a/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java +++ b/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java @@ -195,11 +195,24 @@ public class FilterAdapter extends ArrayAdapter { public int addOrLookup(Filter filter) { int index = getPosition(filter); - if (index >= 0) return index; + if (index >= 0) { + Filter existing = getItem(index); + transferImageReferences(filter, existing); + return index; + } add(filter); return getCount() - 1; } + // Helper function: if a filter was created from serialized extras, it may not + // have the same image data we can get from the in-app broadcast + private void transferImageReferences(Filter from, Filter to) { + if (from instanceof FilterWithUpdate && to instanceof FilterWithUpdate) + ((FilterWithUpdate) to).imageUrl = ((FilterWithUpdate) from).imageUrl; + else + to.listingIcon = from.listingIcon; + } + public void setLastSelected(int lastSelected) { mSelectedIndex = lastSelected; }