Fixed up tags not working in custom filter, hooked it up to the rest of the application

pull/14/head
Tim Su 14 years ago
parent 8e7b96f78f
commit f33c456f89

@ -68,22 +68,22 @@ public final class CustomFilterCriterion implements Parcelable {
// --- instance variables
/**
* Criteria Title. If the title contains %s, this is replaced by the entry
* Criteria Title. If the title contains ?, this is replaced by the entry
* label string selected.
* <p>
* e.g "Due: %s"
* e.g "Due: ?"
*/
@CheckForNull
public String text;
/**
* Criterion SQL. This query should return task id's. If this contains
* %s, it will be replaced by the entry value
* ?, it will be replaced by the entry value
* <p>
* Examples:
* <ul>
* <li><code>SELECT _id FROM tasks WHERE dueDate <= %s</code>
* <li><code>SELECT task FROM metadata WHERE value = '%s'</code>
* <li><code>SELECT _id FROM tasks WHERE dueDate <= ?</code>
* <li><code>SELECT task FROM metadata WHERE value = '?'</code>
* </ul>
*/
@CheckForNull
@ -91,7 +91,7 @@ public final class CustomFilterCriterion implements Parcelable {
/**
* Values to apply to a task when quick-adding a task from a filter
* created from this criterion. %s will be replaced with the entry value.
* created from this criterion. ? will be replaced with the entry value.
* For example, when a user views tasks tagged 'ABC', the
* tasks they create should also be tagged 'ABC'. If set to null, no
* additional values will be stored for a task.

@ -120,14 +120,14 @@ public class CustomFilterActivity extends ListActivity {
CustomFilterCriterion.VALUE_EOD_NEXT_WEEK,
};
ContentValues values = new ContentValues();
values.put(Task.DUE_DATE.name, "%s");
values.put(Task.DUE_DATE.name, "?");
CustomFilterCriterion criterion = new CustomFilterCriterion(
getString(R.string.CFC_dueBefore_text),
Query.select(Task.ID).from(Task.TABLE).where(
Criterion.and(
TaskCriteria.activeAndVisible(),
Task.DUE_DATE.gt(0),
Task.DUE_DATE.lte("%s"))).toString(),
Task.DUE_DATE.lte("?"))).toString(),
values, r.getStringArray(R.array.CFC_dueBefore_entries),
entryValues, ((BitmapDrawable)r.getDrawable(R.drawable.tango_calendar)).getBitmap(),
getString(R.string.CFC_dueBefore_name));
@ -144,12 +144,12 @@ public class CustomFilterActivity extends ListActivity {
"!!!!", "!!!", "!!", "!"
};
values = new ContentValues();
values.put(Task.IMPORTANCE.name, "%s");
values.put(Task.IMPORTANCE.name, "?");
criterion = new CustomFilterCriterion(
getString(R.string.CFC_importance_text),
Query.select(Task.ID).from(Task.TABLE).where(
Criterion.and(TaskCriteria.activeAndVisible(),
Task.IMPORTANCE.lte("%s"))).toString(),
Task.IMPORTANCE.lte("?"))).toString(),
values, entries,
entryValues, ((BitmapDrawable)r.getDrawable(R.drawable.tango_warning)).getBitmap(),
getString(R.string.CFC_importance_name));
@ -162,14 +162,14 @@ public class CustomFilterActivity extends ListActivity {
tagNames[i] = tags[i].tag;
values = new ContentValues();
values.put(Metadata.KEY.name, TagService.KEY);
values.put(TagService.TAG.name, "%s");
values.put(TagService.TAG.name, "?");
criterion = new CustomFilterCriterion(
getString(R.string.CFC_tag_text),
Query.select(Metadata.TASK).from(Metadata.TABLE).join(Join.inner(
Task.TABLE, Metadata.TASK.eq(Task.ID))).where(Criterion.and(
TaskCriteria.activeAndVisible(),
MetadataCriteria.withKey(TagService.KEY),
TagService.TAG.eq("%s"))).toString(),
TagService.TAG.eq("?"))).toString(),
values, tagNames, tagNames,
((BitmapDrawable)r.getDrawable(R.drawable.filter_tags1)).getBitmap(),
getString(R.string.CFC_tag_name));
@ -280,7 +280,7 @@ public class CustomFilterActivity extends ListActivity {
if(instance.criterion.sql == null)
sql.append(TaskCriteria.activeAndVisible()).append(' ');
else {
String subSql = instance.criterion.sql.replaceAll("%s",
String subSql = instance.criterion.sql.replaceAll("?",
instance.criterion.entryValues[instance.selectedIndex]);
subSql = CustomFilterCriterion.replacePlaceholders(subSql);
sql.append(Task.ID).append(" IN (").append(subSql).append(") ");
@ -327,7 +327,7 @@ public class CustomFilterActivity extends ListActivity {
if(instance.criterion.entryTitles != null) {
entryTitle = instance.criterion.entryTitles[instance.selectedIndex];
}
String title = instance.criterion.text.replace("%s", entryTitle);
String title = instance.criterion.text.replace("?", entryTitle);
switch(instance.type) {
case CriterionInstance.TYPE_ADD:
@ -350,9 +350,10 @@ public class CustomFilterActivity extends ListActivity {
if(instance.criterion.sql == null)
sql.append(TaskCriteria.activeAndVisible()).append(' ');
else {
String subSql = instance.criterion.sql.replaceAll("%s",
String subSql = instance.criterion.sql.replace("?",
instance.criterion.entryValues[instance.selectedIndex]);
subSql = CustomFilterCriterion.replacePlaceholders(subSql);
System.err.println(subSql);
sql.append(Task.ID).append(" IN (").append(subSql).append(") ");
}

@ -130,7 +130,7 @@ public class CustomFilterAdapter extends ArrayAdapter<CriterionInstance> {
item.selectedIndex < item.criterion.entryTitles.length) {
entryTitle = item.criterion.entryTitles[item.selectedIndex];
}
String title = item.criterion.text.replace("%s", entryTitle);
String title = item.criterion.text.replace("?", entryTitle);
viewHolder.type.setVisibility(item.type == CriterionInstance.TYPE_UNIVERSE ?
View.GONE : View.VISIBLE);

@ -21,6 +21,14 @@
android:scrollbars="vertical"
android:cacheColorHint="#00000000"/>
<!-- help text -->
<TextView android:id="@+id/help"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="@string/CFA_help"/>
<!-- buttons -->
<LinearLayout
android:orientation="horizontal"

@ -47,6 +47,11 @@
<!-- Filter Criteria Context Menu: delete -->
<string name="CFA_context_delete">Delete Row</string>
<!-- Filter Screen Help Text -->
<string name="CFA_help">This screen let\'s you create a new filters. Add
criteria using the button below, short or long-press them to adjust, and
then click \"Save &amp; View\"!</string>
<!-- Filter Button: add new -->
<string name="CFA_button_add">Add Criteria</string>
@ -56,7 +61,7 @@
<!-- =========================================== CustomFilterCriteria == -->
<!-- Criteria: due by X - display text -->
<string name="CFC_dueBefore_text">Due By: %s</string>
<string name="CFC_dueBefore_text">Due By: ?</string>
<!-- Criteria: due by X - name of criteria -->
<string name="CFC_dueBefore_name">Due By...</string>
<string-array name="CFC_dueBefore_entries">
@ -69,12 +74,12 @@
</string-array>
<!-- Criteria: importance - display text -->
<string name="CFC_importance_text">Importance: %s</string>
<string name="CFC_importance_text">Importance: ?</string>
<!-- Criteria: importance - name of criteria -->
<string name="CFC_importance_name">Importance...</string>
<!-- Criteria: tag - display text -->
<string name="CFC_tag_text">Tagged: %s</string>
<string name="CFC_tag_text">Tagged: ?</string>
<!-- Criteria: tag - name of criteria -->
<string name="CFC_tag_name">Tagged...</string>

@ -6,6 +6,7 @@ package com.todoroo.astrid.activity;
import android.app.AlertDialog;
import android.app.ExpandableListActivity;
import android.app.SearchManager;
import android.app.PendingIntent.CanceledException;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
@ -42,6 +43,7 @@ import com.todoroo.astrid.adapter.FilterAdapter;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterCategory;
import com.todoroo.astrid.api.FilterListItem;
import com.todoroo.astrid.core.IntentFilter;
import com.todoroo.astrid.core.SearchFilter;
import com.todoroo.astrid.model.Task;
import com.todoroo.astrid.service.StartupService;
@ -202,6 +204,12 @@ public class FilterListActivity extends ExpandableListActivity {
return true;
} else if(item instanceof SearchFilter) {
onSearchRequested();
} else if(item instanceof IntentFilter) {
try {
((IntentFilter)item).intent.send();
} catch (CanceledException e) {
// ignore
}
}
return false;
}

Loading…
Cancel
Save