Add CalDAV filter criteria

pull/685/merge
Alex Baker 8 years ago
parent 7585f9d0b6
commit 421aaca5e0

@ -52,7 +52,7 @@ public interface CaldavDao {
@Query("SELECT * FROM caldav_tasks WHERE task = :taskId") @Query("SELECT * FROM caldav_tasks WHERE task = :taskId")
List<CaldavTask> getTasks(long taskId); List<CaldavTask> getTasks(long taskId);
@Query("SELECT * FROM caldav_calendar") @Query("SELECT * FROM caldav_calendar ORDER BY name")
List<CaldavCalendar> getCalendars(); List<CaldavCalendar> getCalendars();
@Query("SELECT * FROM caldav_calendar WHERE account = :account ORDER BY name") @Query("SELECT * FROM caldav_calendar WHERE account = :account ORDER BY name")

@ -24,6 +24,9 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import javax.inject.Inject; import javax.inject.Inject;
import org.tasks.R; import org.tasks.R;
import org.tasks.data.CaldavCalendar;
import org.tasks.data.CaldavDao;
import org.tasks.data.CaldavTask;
import org.tasks.data.GoogleTask; import org.tasks.data.GoogleTask;
import org.tasks.data.GoogleTaskList; import org.tasks.data.GoogleTaskList;
import org.tasks.data.GoogleTaskListDao; import org.tasks.data.GoogleTaskListDao;
@ -38,6 +41,7 @@ public class FilterCriteriaProvider {
private static final String IDENTIFIER_IMPORTANCE = "importance"; // $NON-NLS-1$ private static final String IDENTIFIER_IMPORTANCE = "importance"; // $NON-NLS-1$
private static final String IDENTIFIER_DUEDATE = "dueDate"; // $NON-NLS-1$ private static final String IDENTIFIER_DUEDATE = "dueDate"; // $NON-NLS-1$
private static final String IDENTIFIER_GTASKS = "gtaskslist"; // $NON-NLS-1$ private static final String IDENTIFIER_GTASKS = "gtaskslist"; // $NON-NLS-1$
private static final String IDENTIFIER_CALDAV = "caldavlist"; // $NON-NLS-1$
private static final String IDENTIFIER_TAG_IS = "tag_is"; // $NON-NLS-1$ private static final String IDENTIFIER_TAG_IS = "tag_is"; // $NON-NLS-1$
private static final String IDENTIFIER_TAG_CONTAINS = "tag_contains"; // $NON-NLS-1$ private static final String IDENTIFIER_TAG_CONTAINS = "tag_contains"; // $NON-NLS-1$
@ -45,7 +49,7 @@ public class FilterCriteriaProvider {
private final TagService tagService; private final TagService tagService;
private final Resources r; private final Resources r;
private final GoogleTaskListDao googleTaskListDao; private final GoogleTaskListDao googleTaskListDao;
private final SyncAdapters syncAdapters; private final CaldavDao caldavDao;
@Inject @Inject
public FilterCriteriaProvider( public FilterCriteriaProvider(
@ -53,13 +57,14 @@ public class FilterCriteriaProvider {
TagService tagService, TagService tagService,
GtasksListService gtasksListService, GtasksListService gtasksListService,
SyncAdapters syncAdapters, SyncAdapters syncAdapters,
GoogleTaskListDao googleTaskListDao) { GoogleTaskListDao googleTaskListDao,
CaldavDao caldavDao) {
this.context = context; this.context = context;
this.tagService = tagService; this.tagService = tagService;
this.syncAdapters = syncAdapters;
r = context.getResources(); r = context.getResources();
this.googleTaskListDao = googleTaskListDao; this.googleTaskListDao = googleTaskListDao;
this.caldavDao = caldavDao;
} }
public List<CustomFilterCriterion> getAll() { public List<CustomFilterCriterion> getAll() {
@ -70,10 +75,12 @@ public class FilterCriteriaProvider {
result.add(getDueDateFilter()); result.add(getDueDateFilter());
result.add(getPriorityFilter()); result.add(getPriorityFilter());
result.add(getTaskTitleContainsFilter()); result.add(getTaskTitleContainsFilter());
if (syncAdapters.isGoogleTaskSyncEnabled()) { if (!googleTaskListDao.getAccounts().isEmpty()) {
result.add(getGtasksFilterCriteria()); result.add(getGtasksFilterCriteria());
} }
if (!caldavDao.getAccounts().isEmpty()) {
result.add(getCaldavFilterCriteria());
}
return result; return result;
} }
@ -216,4 +223,33 @@ public class FilterCriteriaProvider {
null, null,
context.getString(R.string.CFC_gtasks_list_name)); context.getString(R.string.CFC_gtasks_list_name));
} }
private CustomFilterCriterion getCaldavFilterCriteria() {
List<CaldavCalendar> calendars = caldavDao.getCalendars();
String[] names = new String[calendars.size()];
String[] ids = new String[calendars.size()];
for (int i = 0; i < calendars.size(); i++) {
names[i] = calendars.get(i).getName();
ids[i] = calendars.get(i).getUuid();
}
Map<String, Object> values = new HashMap<>();
values.put(CaldavTask.KEY, "?");
return new MultipleSelectCriterion(
IDENTIFIER_CALDAV,
context.getString(R.string.CFC_gtasks_list_text),
Query.select(Field.field("task"))
.from(CaldavTask.TABLE)
.join(Join.inner(Task.TABLE, Field.field("task").eq(Task.ID)))
.where(
Criterion.and(
TaskDao.TaskCriteria.activeAndVisible(), Field.field("calendar").eq("?")))
.toString(),
values,
names,
ids,
null,
context.getString(R.string.CFC_caldav_list_name));
}
} }

@ -412,7 +412,7 @@ File %1$s contained %2$s.\n\n
<string name="CFC_gtasks_list_text">In List: ?</string> <string name="CFC_gtasks_list_text">In List: ?</string>
<string name="CFC_gtasks_list_name">In GTasks List…</string> <string name="CFC_gtasks_list_name">In GTasks List…</string>
<string name="CFC_caldav_list_name">In CalDAV list…</string>
<!-- Label for clear completed menu item --> <!-- Label for clear completed menu item -->
<string name="gtasks_GTA_clear_completed">Clear Completed</string> <string name="gtasks_GTA_clear_completed">Clear Completed</string>

Loading…
Cancel
Save