mirror of https://github.com/tasks/tasks
Add CaldavFilter
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;
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue