From 1277948bf90b190b2eff33699ac3dff5711210c1 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Thu, 8 Mar 2018 14:29:47 -0600 Subject: [PATCH] Add CalDAV accounts to remote list picker --- .../java/org/tasks/ui/RemoteListFragment.java | 41 ++++++++++++++----- .../todoroo/astrid/adapter/FilterAdapter.java | 2 + .../astrid/core/DefaultsPreferences.java | 5 ++- 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/app/src/googleplay/java/org/tasks/ui/RemoteListFragment.java b/app/src/googleplay/java/org/tasks/ui/RemoteListFragment.java index 488c5e547..95d0ec250 100644 --- a/app/src/googleplay/java/org/tasks/ui/RemoteListFragment.java +++ b/app/src/googleplay/java/org/tasks/ui/RemoteListFragment.java @@ -7,6 +7,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; +import com.todoroo.astrid.api.CaldavFilter; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.GtasksFilter; import com.todoroo.astrid.data.SyncFlags; @@ -15,10 +16,10 @@ import com.todoroo.astrid.gtasks.GtasksListService; 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.GoogleTaskList; import org.tasks.injection.FragmentComponent; import org.tasks.preferences.DefaultFilterProvider; @@ -42,6 +43,7 @@ public class RemoteListFragment extends TaskEditControlFragment { @Inject GtasksListService gtasksListService; @Inject GoogleTaskDao googleTaskDao; + @Inject CaldavDao caldavDao; @Inject Tracker tracker; @Inject DefaultFilterProvider defaultFilterProvider; @@ -57,15 +59,23 @@ public class RemoteListFragment extends TaskEditControlFragment { selectedList = savedInstanceState.getParcelable(EXTRA_SELECTED_LIST); } else { if (task.isNew()) { - originalList = task.hasTransitory(GoogleTask.KEY) - ? new GtasksFilter(gtasksListService.getList(task.getTransitory(GoogleTask.KEY))) - : defaultFilterProvider.getDefaultRemoteList(); + if (task.hasTransitory(GoogleTask.KEY)) { + originalList = new GtasksFilter(gtasksListService.getList(task.getTransitory(GoogleTask.KEY))); + } else if (task.hasTransitory(CaldavTask.KEY)) { + originalList = new CaldavFilter(caldavDao.getByUuid(task.getTransitory(CaldavTask.KEY))); + } else { + originalList = defaultFilterProvider.getDefaultRemoteList(); + } } else { GoogleTask googleTask = googleTaskDao.getByTaskId(task.getId()); + CaldavTask caldavTask = caldavDao.getTask(task.getId()); if (googleTask != null) { originalList = new GtasksFilter(gtasksListService.getList(googleTask.getListId())); + } else if (caldavTask != null) { + originalList = new CaldavFilter(caldavDao.getByUuid(caldavTask.getAccount())); } } + selectedList = originalList; } @@ -109,19 +119,28 @@ public class RemoteListFragment extends TaskEditControlFragment { @Override public void apply(Task task) { 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; } - + 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) { - tracker.reportEvent(Tracking.Events.GTASK_MOVE); - task.putTransitory(SyncFlags.FORCE_SYNC, true); googleTask.setDeleted(now()); 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())); + } 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) { if (list == null) { this.selectedList = null; - } else if (list instanceof GtasksFilter) { + } else if (list instanceof GtasksFilter || list instanceof CaldavFilter) { this.selectedList = list; } else { throw new RuntimeException("Unhandled filter type"); diff --git a/app/src/main/java/com/todoroo/astrid/adapter/FilterAdapter.java b/app/src/main/java/com/todoroo/astrid/adapter/FilterAdapter.java index 6187b6575..c40bde2ed 100644 --- a/app/src/main/java/com/todoroo/astrid/adapter/FilterAdapter.java +++ b/app/src/main/java/com/todoroo/astrid/adapter/FilterAdapter.java @@ -270,6 +270,8 @@ public class FilterAdapter extends ArrayAdapter { } addSubMenu(title, filterProvider.getGoogleTaskFilters(), true); + addSubMenu(R.string.CalDAV, filterProvider.getCalDAVFilters(), true); + notifyDataSetChanged(); } diff --git a/app/src/main/java/com/todoroo/astrid/core/DefaultsPreferences.java b/app/src/main/java/com/todoroo/astrid/core/DefaultsPreferences.java index 0a9d2b425..529728a94 100644 --- a/app/src/main/java/com/todoroo/astrid/core/DefaultsPreferences.java +++ b/app/src/main/java/com/todoroo/astrid/core/DefaultsPreferences.java @@ -10,6 +10,7 @@ import android.os.Bundle; import android.preference.Preference; import android.support.annotation.NonNull; +import com.todoroo.astrid.api.CaldavFilter; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.GtasksFilter; import com.todoroo.astrid.gtasks.GtasksPreferenceService; @@ -119,8 +120,8 @@ public class DefaultsPreferences extends InjectingPreferenceActivity implements tracker.reportEvent(Tracking.Events.DEFAULT_REMOTE_LIST); if (list == null) { preferences.setString(R.string.p_default_remote_list, null); - } else if (list instanceof GtasksFilter) { - defaultFilterProvider.setDefaultFilter(list); + } else if (list instanceof GtasksFilter || list instanceof CaldavFilter) { + defaultFilterProvider.setDefaultRemoteList(list); } else { throw new RuntimeException("Unhandled filter type"); }