Add CaldavFilter

pull/645/head
Alex Baker 6 years ago
parent 5c6d10e4ef
commit cd6ffbee38

@ -0,0 +1,98 @@
package com.todoroo.astrid.api;
import android.os.Parcel;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Field;
import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task;
import org.tasks.R;
import org.tasks.data.CaldavTask;
import org.tasks.data.CaldavAccount;
import java.util.HashMap;
import java.util.Map;
public class CaldavFilter extends Filter {
private static final int TAG = R.drawable.ic_cloud_black_24dp;
private CaldavAccount account;
private CaldavFilter() {
super();
}
public CaldavFilter(CaldavAccount account) {
super(account.getName(), queryTemplate(account), getValuesForNewTask(account));
this.account = account;
tint = account.getColor();
icon = TAG;
}
public String getUuid() {
return account.getUuid();
}
private static QueryTemplate queryTemplate(CaldavAccount caldavAccount) {
return new QueryTemplate()
.join(Join.left(CaldavTask.TABLE, Task.ID.eq(Field.field("caldav_tasks.task"))))
.where(Criterion.and(
TaskDao.TaskCriteria.activeAndVisible(),
Field.field("account").eq(caldavAccount.getUuid())));
}
private static Map<String, Object> getValuesForNewTask(CaldavAccount caldavAccount) {
Map<String, Object> result = new HashMap<>();
result.put(CaldavTask.KEY, caldavAccount.getUuid());
return result;
}
/**
* {@inheritDoc}
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeParcelable(account, 0);
}
@Override
protected void readFromParcel(Parcel source) {
super.readFromParcel(source);
account = source.readParcelable(getClass().getClassLoader());
}
/**
* Parcelable Creator Object
*/
public static final Creator<CaldavFilter> CREATOR = new Creator<CaldavFilter>() {
/**
* {@inheritDoc}
*/
@Override
public CaldavFilter createFromParcel(Parcel source) {
CaldavFilter item = new CaldavFilter();
item.readFromParcel(source);
return item;
}
/**
* {@inheritDoc}
*/
@Override
public CaldavFilter[] newArray(int size) {
return new CaldavFilter[size];
}
};
@Override
public boolean supportsSubtasks() {
return true;
}
}

@ -19,6 +19,8 @@ import com.todoroo.astrid.utility.TitleParser;
import org.tasks.R; import org.tasks.R;
import org.tasks.analytics.Tracker; import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking; import org.tasks.analytics.Tracking;
import org.tasks.data.CaldavDao;
import org.tasks.data.CaldavTask;
import org.tasks.data.GoogleTask; import org.tasks.data.GoogleTask;
import org.tasks.data.GoogleTaskDao; import org.tasks.data.GoogleTaskDao;
import org.tasks.data.Tag; import org.tasks.data.Tag;
@ -45,6 +47,7 @@ public class TaskCreator {
private final GoogleTaskDao googleTaskDao; private final GoogleTaskDao googleTaskDao;
private final Tracker tracker; private final Tracker tracker;
private final DefaultFilterProvider defaultFilterProvider; private final DefaultFilterProvider defaultFilterProvider;
private final CaldavDao caldavDao;
private final TagDataDao tagDataDao; private final TagDataDao tagDataDao;
private final TaskDao taskDao; private final TaskDao taskDao;
private final TagService tagService; private final TagService tagService;
@ -52,7 +55,8 @@ public class TaskCreator {
@Inject @Inject
public TaskCreator(GCalHelper gcalHelper, Preferences preferences, TagDataDao tagDataDao, public TaskCreator(GCalHelper gcalHelper, Preferences preferences, TagDataDao tagDataDao,
TaskDao taskDao, TagService tagService, TagDao tagDao, TaskDao taskDao, TagService tagService, TagDao tagDao,
GoogleTaskDao googleTaskDao, Tracker tracker, DefaultFilterProvider defaultFilterProvider) { GoogleTaskDao googleTaskDao, Tracker tracker,
DefaultFilterProvider defaultFilterProvider, CaldavDao caldavDao) {
this.gcalHelper = gcalHelper; this.gcalHelper = gcalHelper;
this.preferences = preferences; this.preferences = preferences;
this.tagDataDao = tagDataDao; this.tagDataDao = tagDataDao;
@ -62,6 +66,7 @@ public class TaskCreator {
this.googleTaskDao = googleTaskDao; this.googleTaskDao = googleTaskDao;
this.tracker = tracker; this.tracker = tracker;
this.defaultFilterProvider = defaultFilterProvider; this.defaultFilterProvider = defaultFilterProvider;
this.caldavDao = caldavDao;
} }
public Task basicQuickAddTask(String title) { public Task basicQuickAddTask(String title) {
@ -80,6 +85,8 @@ public class TaskCreator {
if (task.hasTransitory(GoogleTask.KEY)) { if (task.hasTransitory(GoogleTask.KEY)) {
googleTaskDao.insert(new GoogleTask(task.getId(), task.getTransitory(GoogleTask.KEY))); googleTaskDao.insert(new GoogleTask(task.getId(), task.getTransitory(GoogleTask.KEY)));
} else if (task.hasTransitory(CaldavTask.KEY)) {
caldavDao.insert(new CaldavTask(task.getId(), task.getTransitory(CaldavTask.KEY)));
} else { } else {
Filter remoteList = defaultFilterProvider.getDefaultRemoteList(); Filter remoteList = defaultFilterProvider.getDefaultRemoteList();
if (remoteList != null && remoteList instanceof GtasksFilter) { if (remoteList != null && remoteList instanceof GtasksFilter) {
@ -123,6 +130,8 @@ public class TaskCreator {
tags.add((String) value); tags.add((String) value);
} else if (key.equals(GoogleTask.KEY)) { } else if (key.equals(GoogleTask.KEY)) {
task.putTransitory(key, value); task.putTransitory(key, value);
} else if (key.equals(CaldavTask.KEY)) {
task.putTransitory(key, value);
} else { } else {
if (value instanceof String) { if (value instanceof String) {
value = PermaSql.replacePlaceholders((String) value); value = PermaSql.replacePlaceholders((String) value);

@ -0,0 +1,37 @@
package org.tasks.caldav;
import com.todoroo.astrid.api.CaldavFilter;
import com.todoroo.astrid.api.Filter;
import org.tasks.data.CaldavAccount;
import org.tasks.data.CaldavDao;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
public class CalDAVFilterExposer {
private CaldavDao caldavDao;
@Inject
public CalDAVFilterExposer(CaldavDao caldavDao) {
this.caldavDao = caldavDao;
}
public List<Filter> getFilters() {
List<CaldavAccount> allOrderedByName = caldavDao.getAllOrderedByName();
List<Filter> result = new ArrayList<>();
for (CaldavAccount account : allOrderedByName) {
result.add(new CaldavFilter(account));
}
return result;
}
public Filter getFilterByUuid(String uuid) {
CaldavAccount caldavAccount = caldavDao.getByUuid(uuid);
return caldavAccount == null
? null
: new CaldavFilter(caldavAccount);
}
}

@ -7,7 +7,10 @@ import com.todoroo.astrid.gtasks.GtasksFilterExposer;
import com.todoroo.astrid.tags.TagFilterExposer; import com.todoroo.astrid.tags.TagFilterExposer;
import com.todoroo.astrid.timers.TimerFilterExposer; import com.todoroo.astrid.timers.TimerFilterExposer;
import org.tasks.caldav.CalDAVFilterExposer;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
@ -18,17 +21,18 @@ public class FilterProvider {
private final CustomFilterExposer customFilterExposer; private final CustomFilterExposer customFilterExposer;
private final TagFilterExposer tagFilterExposer; private final TagFilterExposer tagFilterExposer;
private final GtasksFilterExposer gtasksFilterExposer; private final GtasksFilterExposer gtasksFilterExposer;
private final CalDAVFilterExposer calDAVFilterExposer;
@Inject @Inject
public FilterProvider(BuiltInFilterExposer builtInFilterExposer, TimerFilterExposer timerFilterExposer, public FilterProvider(BuiltInFilterExposer builtInFilterExposer, TimerFilterExposer timerFilterExposer,
CustomFilterExposer customFilterExposer, TagFilterExposer tagFilterExposer, CustomFilterExposer customFilterExposer, TagFilterExposer tagFilterExposer,
GtasksFilterExposer gtasksFilterExposer) { GtasksFilterExposer gtasksFilterExposer, CalDAVFilterExposer calDAVFilterExposer) {
this.builtInFilterExposer = builtInFilterExposer; this.builtInFilterExposer = builtInFilterExposer;
this.timerFilterExposer = timerFilterExposer; this.timerFilterExposer = timerFilterExposer;
this.customFilterExposer = customFilterExposer; this.customFilterExposer = customFilterExposer;
this.tagFilterExposer = tagFilterExposer; this.tagFilterExposer = tagFilterExposer;
this.gtasksFilterExposer = gtasksFilterExposer; this.gtasksFilterExposer = gtasksFilterExposer;
this.calDAVFilterExposer = calDAVFilterExposer;
} }
public Filter getMyTasksFilter() { public Filter getMyTasksFilter() {
@ -50,4 +54,8 @@ public class FilterProvider {
public List<Filter> getGoogleTaskFilters() { public List<Filter> getGoogleTaskFilters() {
return gtasksFilterExposer.getFilters(); return gtasksFilterExposer.getFilters();
} }
public List<Filter> getCalDAVFilters() {
return calDAVFilterExposer.getFilters();
}
} }

@ -4,6 +4,7 @@ import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.todoroo.astrid.api.CaldavFilter;
import com.todoroo.astrid.api.CustomFilter; import com.todoroo.astrid.api.CustomFilter;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.GtasksFilter; import com.todoroo.astrid.api.GtasksFilter;
@ -16,6 +17,7 @@ import com.todoroo.astrid.tags.TagFilterExposer;
import org.tasks.R; import org.tasks.R;
import org.tasks.analytics.Tracker; import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking; import org.tasks.analytics.Tracking;
import org.tasks.caldav.CalDAVFilterExposer;
import org.tasks.injection.ForApplication; import org.tasks.injection.ForApplication;
import javax.inject.Inject; import javax.inject.Inject;
@ -37,6 +39,7 @@ public class DefaultFilterProvider {
private static final int TYPE_CUSTOM_FILTER = 1; private static final int TYPE_CUSTOM_FILTER = 1;
private static final int TYPE_TAG = 2; private static final int TYPE_TAG = 2;
private static final int TYPE_GOOGLE_TASKS = 3; private static final int TYPE_GOOGLE_TASKS = 3;
private static final int TYPE_CALDAV = 4;
private static final int FILTER_MY_TASKS = 0; private static final int FILTER_MY_TASKS = 0;
private static final int FILTER_TODAY = 1; private static final int FILTER_TODAY = 1;
@ -49,17 +52,20 @@ public class DefaultFilterProvider {
private final CustomFilterExposer customFilterExposer; private final CustomFilterExposer customFilterExposer;
private final TagFilterExposer tagFilterExposer; private final TagFilterExposer tagFilterExposer;
private final GtasksFilterExposer gtasksFilterExposer; private final GtasksFilterExposer gtasksFilterExposer;
private final CalDAVFilterExposer calDAVFilterExposer;
@Inject @Inject
public DefaultFilterProvider(@ForApplication Context context, Preferences preferences, public DefaultFilterProvider(@ForApplication Context context, Preferences preferences,
Tracker tracker, CustomFilterExposer customFilterExposer, Tracker tracker, CustomFilterExposer customFilterExposer,
TagFilterExposer tagFilterExposer, GtasksFilterExposer gtasksFilterExposer) { TagFilterExposer tagFilterExposer, GtasksFilterExposer gtasksFilterExposer,
CalDAVFilterExposer calDAVFilterExposer) {
this.context = context; this.context = context;
this.preferences = preferences; this.preferences = preferences;
this.tracker = tracker; this.tracker = tracker;
this.customFilterExposer = customFilterExposer; this.customFilterExposer = customFilterExposer;
this.tagFilterExposer = tagFilterExposer; this.tagFilterExposer = tagFilterExposer;
this.gtasksFilterExposer = gtasksFilterExposer; this.gtasksFilterExposer = gtasksFilterExposer;
this.calDAVFilterExposer = calDAVFilterExposer;
} }
public Filter getDashclockFilter() { public Filter getDashclockFilter() {
@ -111,6 +117,8 @@ public class DefaultFilterProvider {
return tagFilterExposer.getFilterByUuid(split[1]); return tagFilterExposer.getFilterByUuid(split[1]);
case TYPE_GOOGLE_TASKS: case TYPE_GOOGLE_TASKS:
return gtasksFilterExposer.getFilter(Long.parseLong(split[1])); return gtasksFilterExposer.getFilter(Long.parseLong(split[1]));
case TYPE_CALDAV:
return calDAVFilterExposer.getFilterByUuid(split[1]);
default: default:
return null; return null;
} }
@ -152,6 +160,8 @@ public class DefaultFilterProvider {
return getFilterPreference(filterType, ((TagFilter) filter).getUuid()); return getFilterPreference(filterType, ((TagFilter) filter).getUuid());
case TYPE_GOOGLE_TASKS: case TYPE_GOOGLE_TASKS:
return getFilterPreference(filterType, ((GtasksFilter) filter).getStoreId()); return getFilterPreference(filterType, ((GtasksFilter) filter).getStoreId());
case TYPE_CALDAV:
return getFilterPreference(filterType, ((CaldavFilter) filter).getUuid());
} }
return null; return null;
} }
@ -167,6 +177,8 @@ public class DefaultFilterProvider {
return TYPE_GOOGLE_TASKS; return TYPE_GOOGLE_TASKS;
} else if (filter instanceof CustomFilter) { } else if (filter instanceof CustomFilter) {
return TYPE_CUSTOM_FILTER; return TYPE_CUSTOM_FILTER;
} else if (filter instanceof CaldavFilter) {
return TYPE_CALDAV;
} }
return TYPE_FILTER; return TYPE_FILTER;
} }

Loading…
Cancel
Save