Use FilterWithUpdate when necessary when creating shortcuts so that filter comparison doesn't break

pull/14/head
Sam Bosley 13 years ago
parent 96e4255e2d
commit 3393ebb766

@ -33,6 +33,7 @@ import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterWithCustomIntent; import com.todoroo.astrid.api.FilterWithCustomIntent;
import com.todoroo.astrid.api.FilterWithUpdate;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
/** /**
@ -65,6 +66,9 @@ public class ShortcutActivity extends Activity {
/** token for passing a ComponentNameto launch */ /** token for passing a ComponentNameto launch */
public static final String TOKEN_CUSTOM_CLASS = "class"; //$NON-NLS-1$ 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 // --- implementation
@Override @Override
@ -126,6 +130,11 @@ public class ShortcutActivity extends Activity {
Filter filter; Filter filter;
if (extras.containsKey(TOKEN_CUSTOM_CLASS)) { if (extras.containsKey(TOKEN_CUSTOM_CLASS)) {
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); filter = new FilterWithCustomIntent(title, title, sql, values);
ComponentName customTaskList = ComponentName.unflattenFromString(extras.getString(TOKEN_CUSTOM_CLASS)); ComponentName customTaskList = ComponentName.unflattenFromString(extras.getString(TOKEN_CUSTOM_CLASS));
((FilterWithCustomIntent) filter).customTaskList = customTaskList; ((FilterWithCustomIntent) filter).customTaskList = customTaskList;
@ -155,6 +164,11 @@ public class ShortcutActivity extends Activity {
if(customFilter.customExtras != null) if(customFilter.customExtras != null)
shortcutIntent.putExtras(customFilter.customExtras); shortcutIntent.putExtras(customFilter.customExtras);
shortcutIntent.putExtra(TOKEN_CUSTOM_CLASS, customFilter.customTaskList.flattenToString()); 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); shortcutIntent.setAction(Intent.ACTION_VIEW);

@ -195,11 +195,24 @@ public class FilterAdapter extends ArrayAdapter<Filter> {
public int addOrLookup(Filter filter) { public int addOrLookup(Filter filter) {
int index = getPosition(filter); int index = getPosition(filter);
if (index >= 0) return index; if (index >= 0) {
Filter existing = getItem(index);
transferImageReferences(filter, existing);
return index;
}
add(filter); add(filter);
return getCount() - 1; 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) { public void setLastSelected(int lastSelected) {
mSelectedIndex = lastSelected; mSelectedIndex = lastSelected;
} }

Loading…
Cancel
Save