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.analytics.Tracker;
import org.tasks.analytics.Tracking;
import org.tasks.data.CaldavDao;
import org.tasks.data.CaldavTask;
import org.tasks.data.GoogleTask;
import org.tasks.data.GoogleTaskDao;
import org.tasks.data.Tag;
@ -45,6 +47,7 @@ public class TaskCreator {
private final GoogleTaskDao googleTaskDao;
private final Tracker tracker;
private final DefaultFilterProvider defaultFilterProvider;
private final CaldavDao caldavDao;
private final TagDataDao tagDataDao;
private final TaskDao taskDao;
private final TagService tagService;
@ -52,7 +55,8 @@ public class TaskCreator {
@Inject
public TaskCreator(GCalHelper gcalHelper, Preferences preferences, TagDataDao tagDataDao,
TaskDao taskDao, TagService tagService, TagDao tagDao,
GoogleTaskDao googleTaskDao, Tracker tracker, DefaultFilterProvider defaultFilterProvider) {
GoogleTaskDao googleTaskDao, Tracker tracker,
DefaultFilterProvider defaultFilterProvider, CaldavDao caldavDao) {
this.gcalHelper = gcalHelper;
this.preferences = preferences;
this.tagDataDao = tagDataDao;
@ -62,6 +66,7 @@ public class TaskCreator {
this.googleTaskDao = googleTaskDao;
this.tracker = tracker;
this.defaultFilterProvider = defaultFilterProvider;
this.caldavDao = caldavDao;
}
public Task basicQuickAddTask(String title) {
@ -80,6 +85,8 @@ public class TaskCreator {
if (task.hasTransitory(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 {
Filter remoteList = defaultFilterProvider.getDefaultRemoteList();
if (remoteList != null && remoteList instanceof GtasksFilter) {
@ -123,6 +130,8 @@ public class TaskCreator {
tags.add((String) value);
} else if (key.equals(GoogleTask.KEY)) {
task.putTransitory(key, value);
} else if (key.equals(CaldavTask.KEY)) {
task.putTransitory(key, value);
} else {
if (value instanceof String) {
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.timers.TimerFilterExposer;
import org.tasks.caldav.CalDAVFilterExposer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.inject.Inject;
@ -18,17 +21,18 @@ public class FilterProvider {
private final CustomFilterExposer customFilterExposer;
private final TagFilterExposer tagFilterExposer;
private final GtasksFilterExposer gtasksFilterExposer;
private final CalDAVFilterExposer calDAVFilterExposer;
@Inject
public FilterProvider(BuiltInFilterExposer builtInFilterExposer, TimerFilterExposer timerFilterExposer,
CustomFilterExposer customFilterExposer, TagFilterExposer tagFilterExposer,
GtasksFilterExposer gtasksFilterExposer) {
GtasksFilterExposer gtasksFilterExposer, CalDAVFilterExposer calDAVFilterExposer) {
this.builtInFilterExposer = builtInFilterExposer;
this.timerFilterExposer = timerFilterExposer;
this.customFilterExposer = customFilterExposer;
this.tagFilterExposer = tagFilterExposer;
this.gtasksFilterExposer = gtasksFilterExposer;
this.calDAVFilterExposer = calDAVFilterExposer;
}
public Filter getMyTasksFilter() {
@ -50,4 +54,8 @@ public class FilterProvider {
public List<Filter> getGoogleTaskFilters() {
return gtasksFilterExposer.getFilters();
}
public List<Filter> getCalDAVFilters() {
return calDAVFilterExposer.getFilters();
}
}

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

Loading…
Cancel
Save