Caldav subtasks requires lollipop

pull/848/head^2
Alex Baker 6 years ago
parent e44e6ce2c4
commit 40b952408d

@ -1,5 +1,7 @@
package com.todoroo.astrid.adapter; package com.todoroo.astrid.adapter;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastLollipop;
import android.content.Context; import android.content.Context;
import android.text.TextUtils; import android.text.TextUtils;
import com.todoroo.astrid.api.CaldavFilter; import com.todoroo.astrid.api.CaldavFilter;
@ -78,7 +80,7 @@ public class TaskAdapterProvider {
CaldavFilter caldavFilter = (CaldavFilter) filter; CaldavFilter caldavFilter = (CaldavFilter) filter;
CaldavCalendar calendar = caldavDao.getCalendarByUuid(caldavFilter.getUuid()); CaldavCalendar calendar = caldavDao.getCalendarByUuid(caldavFilter.getUuid());
if (calendar != null) { if (calendar != null) {
return new CaldavTaskAdapter(taskDao, caldavDao); return atLeastLollipop() ? new CaldavTaskAdapter(taskDao, caldavDao) : new TaskAdapter();
} }
} else { } else {
return subtasksHelper.shouldUseSubtasksFragmentForFilter(filter) return subtasksHelper.shouldUseSubtasksFragmentForFilter(filter)

@ -1,5 +1,7 @@
package org.tasks.data; package org.tasks.data;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastLollipop;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.room.Dao; import androidx.room.Dao;
import androidx.room.Delete; import androidx.room.Delete;
@ -7,6 +9,7 @@ import androidx.room.Insert;
import androidx.room.Query; import androidx.room.Query;
import androidx.room.Update; import androidx.room.Update;
import io.reactivex.Single; import io.reactivex.Single;
import java.util.Collections;
import java.util.List; import java.util.List;
import org.tasks.filters.CaldavFilters; import org.tasks.filters.CaldavFilters;
@ -114,6 +117,12 @@ public abstract class CaldavDao {
@Query("UPDATE caldav_tasks SET cd_parent = IFNULL((SELECT cd_task FROM caldav_tasks AS p WHERE p.cd_remote_id = caldav_tasks.cd_remote_parent), cd_parent) WHERE cd_calendar = :calendar AND cd_remote_parent IS NOT NULL and cd_remote_parent != ''") @Query("UPDATE caldav_tasks SET cd_parent = IFNULL((SELECT cd_task FROM caldav_tasks AS p WHERE p.cd_remote_id = caldav_tasks.cd_remote_parent), cd_parent) WHERE cd_calendar = :calendar AND cd_remote_parent IS NOT NULL and cd_remote_parent != ''")
public abstract void updateParents(String calendar); public abstract void updateParents(String calendar);
public List<Long> getChildren(List<Long> ids) {
return atLeastLollipop()
? getChildrenRecursive(ids)
: Collections.emptyList();
}
@Query("WITH RECURSIVE " @Query("WITH RECURSIVE "
+ " recursive_caldav (cd_task) AS ( " + " recursive_caldav (cd_task) AS ( "
+ " SELECT cd_task " + " SELECT cd_task "
@ -132,5 +141,5 @@ public abstract class CaldavDao {
+ " WHERE tasks.deleted = 0 " + " WHERE tasks.deleted = 0 "
+ " ) " + " ) "
+ "SELECT cd_task FROM recursive_caldav") + "SELECT cd_task FROM recursive_caldav")
public abstract List<Long> getChildren(List<Long> ids); abstract List<Long> getChildrenRecursive(List<Long> ids);
} }

@ -2,6 +2,7 @@ package org.tasks.ui;
import static com.todoroo.andlib.sql.Field.field; import static com.todoroo.andlib.sql.Field.field;
import static com.todoroo.andlib.utility.AndroidUtilities.assertMainThread; import static com.todoroo.andlib.utility.AndroidUtilities.assertMainThread;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastLollipop;
import static com.todoroo.astrid.activity.TaskListFragment.CALDAV_METADATA_JOIN; import static com.todoroo.astrid.activity.TaskListFragment.CALDAV_METADATA_JOIN;
import static com.todoroo.astrid.activity.TaskListFragment.GTASK_METADATA_JOIN; import static com.todoroo.astrid.activity.TaskListFragment.GTASK_METADATA_JOIN;
import static com.todoroo.astrid.activity.TaskListFragment.TAGS_METADATA_JOIN; import static com.todoroo.astrid.activity.TaskListFragment.TAGS_METADATA_JOIN;
@ -126,7 +127,7 @@ public class TaskListViewModel extends ViewModel implements Observer<PagedList<T
Criterion.and(caldavJoinCriterion, field(CALDAV_METADATA_JOIN + ".cd_calendar").eq(uuid)); Criterion.and(caldavJoinCriterion, field(CALDAV_METADATA_JOIN + ".cd_calendar").eq(uuid));
} }
if (filter instanceof CaldavFilter) { if (filter instanceof CaldavFilter && atLeastLollipop()) {
// TODO This is in some ways a proof of concept demonstrating a recursive query used to pull // TODO This is in some ways a proof of concept demonstrating a recursive query used to pull
// in CalDAV tasks providing parenting across different sort modes. Tags are implemented // in CalDAV tasks providing parenting across different sort modes. Tags are implemented
// as a subquery, which is ugly, but aggregate recursive queries aren't supported. The // as a subquery, which is ugly, but aggregate recursive queries aren't supported. The

Loading…
Cancel
Save