Add CalDAV accounts to remote list picker

pull/645/head
Alex Baker 8 years ago
parent 4e74362b89
commit 1277948bf9

@ -7,6 +7,7 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
import com.todoroo.astrid.api.CaldavFilter;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.GtasksFilter; import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.data.SyncFlags; import com.todoroo.astrid.data.SyncFlags;
@ -15,10 +16,10 @@ import com.todoroo.astrid.gtasks.GtasksListService;
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.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.GoogleTaskList;
import org.tasks.injection.FragmentComponent; import org.tasks.injection.FragmentComponent;
import org.tasks.preferences.DefaultFilterProvider; import org.tasks.preferences.DefaultFilterProvider;
@ -42,6 +43,7 @@ public class RemoteListFragment extends TaskEditControlFragment {
@Inject GtasksListService gtasksListService; @Inject GtasksListService gtasksListService;
@Inject GoogleTaskDao googleTaskDao; @Inject GoogleTaskDao googleTaskDao;
@Inject CaldavDao caldavDao;
@Inject Tracker tracker; @Inject Tracker tracker;
@Inject DefaultFilterProvider defaultFilterProvider; @Inject DefaultFilterProvider defaultFilterProvider;
@ -57,15 +59,23 @@ public class RemoteListFragment extends TaskEditControlFragment {
selectedList = savedInstanceState.getParcelable(EXTRA_SELECTED_LIST); selectedList = savedInstanceState.getParcelable(EXTRA_SELECTED_LIST);
} else { } else {
if (task.isNew()) { if (task.isNew()) {
originalList = task.hasTransitory(GoogleTask.KEY) if (task.hasTransitory(GoogleTask.KEY)) {
? new GtasksFilter(gtasksListService.getList(task.getTransitory(GoogleTask.KEY))) originalList = new GtasksFilter(gtasksListService.getList(task.getTransitory(GoogleTask.KEY)));
: defaultFilterProvider.getDefaultRemoteList(); } else if (task.hasTransitory(CaldavTask.KEY)) {
originalList = new CaldavFilter(caldavDao.getByUuid(task.getTransitory(CaldavTask.KEY)));
} else {
originalList = defaultFilterProvider.getDefaultRemoteList();
}
} else { } else {
GoogleTask googleTask = googleTaskDao.getByTaskId(task.getId()); GoogleTask googleTask = googleTaskDao.getByTaskId(task.getId());
CaldavTask caldavTask = caldavDao.getTask(task.getId());
if (googleTask != null) { if (googleTask != null) {
originalList = new GtasksFilter(gtasksListService.getList(googleTask.getListId())); originalList = new GtasksFilter(gtasksListService.getList(googleTask.getListId()));
} else if (caldavTask != null) {
originalList = new CaldavFilter(caldavDao.getByUuid(caldavTask.getAccount()));
} }
} }
selectedList = originalList; selectedList = originalList;
} }
@ -109,19 +119,28 @@ public class RemoteListFragment extends TaskEditControlFragment {
@Override @Override
public void apply(Task task) { public void apply(Task task) {
GoogleTask googleTask = googleTaskDao.getByTaskId(task.getId()); GoogleTask googleTask = googleTaskDao.getByTaskId(task.getId());
if (googleTask != null && selectedList != null && googleTask.getListId().equals(((GtasksFilter) selectedList).getRemoteId())) { if (googleTask != null && selectedList instanceof GtasksFilter && googleTask.getListId().equals(((GtasksFilter) selectedList).getRemoteId())) {
return; return;
} }
CaldavTask caldavTask = caldavDao.getTask(task.getId());
if (caldavTask != null && selectedList instanceof CaldavFilter && caldavTask.getAccount().equals(((CaldavFilter) selectedList).getUuid())) {
return;
}
task.putTransitory(SyncFlags.FORCE_SYNC, true);
if (googleTask != null) { if (googleTask != null) {
tracker.reportEvent(Tracking.Events.GTASK_MOVE);
task.putTransitory(SyncFlags.FORCE_SYNC, true);
googleTask.setDeleted(now()); googleTask.setDeleted(now());
googleTaskDao.update(googleTask); googleTaskDao.update(googleTask);
} }
if (selectedList != null) { if (caldavTask != null) {
caldavTask.setDeleted(now());
caldavDao.update(caldavTask);
}
if (selectedList instanceof GtasksFilter) {
googleTaskDao.insert(new GoogleTask(task.getId(), ((GtasksFilter) selectedList).getRemoteId())); googleTaskDao.insert(new GoogleTask(task.getId(), ((GtasksFilter) selectedList).getRemoteId()));
} else if (selectedList instanceof CaldavFilter) {
caldavDao.insert(new CaldavTask(task.getId(), ((CaldavFilter) selectedList).getUuid()));
} }
} }
@ -138,7 +157,7 @@ public class RemoteListFragment extends TaskEditControlFragment {
public void setList(Filter list) { public void setList(Filter list) {
if (list == null) { if (list == null) {
this.selectedList = null; this.selectedList = null;
} else if (list instanceof GtasksFilter) { } else if (list instanceof GtasksFilter || list instanceof CaldavFilter) {
this.selectedList = list; this.selectedList = list;
} else { } else {
throw new RuntimeException("Unhandled filter type"); throw new RuntimeException("Unhandled filter type");

@ -270,6 +270,8 @@ public class FilterAdapter extends ArrayAdapter<FilterListItem> {
} }
addSubMenu(title, filterProvider.getGoogleTaskFilters(), true); addSubMenu(title, filterProvider.getGoogleTaskFilters(), true);
addSubMenu(R.string.CalDAV, filterProvider.getCalDAVFilters(), true);
notifyDataSetChanged(); notifyDataSetChanged();
} }

@ -10,6 +10,7 @@ import android.os.Bundle;
import android.preference.Preference; import android.preference.Preference;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import com.todoroo.astrid.api.CaldavFilter;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.GtasksFilter; import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.gtasks.GtasksPreferenceService; import com.todoroo.astrid.gtasks.GtasksPreferenceService;
@ -119,8 +120,8 @@ public class DefaultsPreferences extends InjectingPreferenceActivity implements
tracker.reportEvent(Tracking.Events.DEFAULT_REMOTE_LIST); tracker.reportEvent(Tracking.Events.DEFAULT_REMOTE_LIST);
if (list == null) { if (list == null) {
preferences.setString(R.string.p_default_remote_list, null); preferences.setString(R.string.p_default_remote_list, null);
} else if (list instanceof GtasksFilter) { } else if (list instanceof GtasksFilter || list instanceof CaldavFilter) {
defaultFilterProvider.setDefaultFilter(list); defaultFilterProvider.setDefaultRemoteList(list);
} else { } else {
throw new RuntimeException("Unhandled filter type"); throw new RuntimeException("Unhandled filter type");
} }

Loading…
Cancel
Save