From a85367ab189f1d6c40add04c1303e83a8bbeff16 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Tue, 12 Nov 2019 15:10:20 -0600 Subject: [PATCH] Display caldav and google task subtasks on widget --- .../com/todoroo/astrid/core/SortHelper.java | 4 -- .../java/com/todoroo/astrid/dao/TaskDao.java | 7 +- .../java/org/tasks/ui/TaskListViewModel.java | 4 +- .../tasks/widget/ScrollableViewsFactory.java | 69 ++++++++----------- 4 files changed, 32 insertions(+), 52 deletions(-) diff --git a/app/src/main/java/com/todoroo/astrid/core/SortHelper.java b/app/src/main/java/com/todoroo/astrid/core/SortHelper.java index 5e82fe1d5..9c73205b6 100644 --- a/app/src/main/java/com/todoroo/astrid/core/SortHelper.java +++ b/app/src/main/java/com/todoroo/astrid/core/SortHelper.java @@ -28,7 +28,6 @@ public class SortHelper { public static final int SORT_DUE = 2; public static final int SORT_IMPORTANCE = 3; public static final int SORT_MODIFIED = 4; - public static final int SORT_WIDGET = 5; private static final String ADJUSTED_DUE_DATE = "(CASE WHEN (dueDate / 1000) % 60 > 0 THEN dueDate ELSE (dueDate + 43140000) END)"; private static final Order ORDER_TITLE = Order.asc(Functions.upper(Task.TITLE)); @@ -97,7 +96,6 @@ public class SortHelper { case SORT_MODIFIED: order = Order.desc(Task.MODIFICATION_DATE); break; - case SORT_WIDGET: default: order = Order.asc( @@ -136,7 +134,6 @@ public class SortHelper { case SORT_MODIFIED: select = "tasks.modified AS sort_modified"; break; - case SORT_WIDGET: default: select ="(CASE WHEN (tasks.dueDate=0) " + // if no due date @@ -167,7 +164,6 @@ public class SortHelper { case SORT_MODIFIED: order = Order.desc("sort_modified"); break; - case SORT_WIDGET: default: order = Order.asc("sort_smart"); } diff --git a/app/src/main/java/com/todoroo/astrid/dao/TaskDao.java b/app/src/main/java/com/todoroo/astrid/dao/TaskDao.java index 2e876ed42..2e941b35d 100644 --- a/app/src/main/java/com/todoroo/astrid/dao/TaskDao.java +++ b/app/src/main/java/com/todoroo/astrid/dao/TaskDao.java @@ -16,7 +16,6 @@ import androidx.room.Query; import androidx.room.RawQuery; import androidx.room.Update; import androidx.sqlite.db.SimpleSQLiteQuery; -import com.todoroo.andlib.data.Property; import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Functions; import com.todoroo.astrid.api.Filter; @@ -216,12 +215,8 @@ public abstract class TaskDao { } private Cursor getCursor(String queryTemplate) { - return getCursor(queryTemplate, Task.PROPERTIES); - } - - public Cursor getCursor(String queryTemplate, Property... properties) { com.todoroo.andlib.sql.Query query = - com.todoroo.andlib.sql.Query.select(properties) + com.todoroo.andlib.sql.Query.select(Task.PROPERTIES) .withQueryTemplate(PermaSql.replacePlaceholdersForQuery(queryTemplate)); String queryString = query.from(Task.TABLE).toString(); if (BuildConfig.DEBUG) { diff --git a/app/src/main/java/org/tasks/ui/TaskListViewModel.java b/app/src/main/java/org/tasks/ui/TaskListViewModel.java index ad3ea6951..bbc07aabf 100644 --- a/app/src/main/java/org/tasks/ui/TaskListViewModel.java +++ b/app/src/main/java/org/tasks/ui/TaskListViewModel.java @@ -100,7 +100,7 @@ public class TaskListViewModel extends ViewModel implements Observer fields = Lists.newArrayList(TASKS, GTASK, CALDAV, GEOFENCE, PLACE); Criterion tagsJoinCriterion = Criterion.and(Task.ID.eq(field(TAGS_METADATA_JOIN + ".task"))); @@ -233,7 +233,7 @@ public class TaskListViewModel extends ViewModel implements Observer tasks = new ArrayList<>(); ScrollableViewsFactory( SubtasksHelper subtasksHelper, @@ -68,9 +70,10 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory { this.taskDao = taskDao; this.defaultFilterProvider = defaultFilterProvider; this.themeCache = themeCache; - widgetPreferences = new WidgetPreferences(context, preferences, widgetId); - + DisplayMetrics metrics = context.getResources().getDisplayMetrics(); + widgetPadding = (int)(10 * metrics.density); + indentPadding = (int)(20 * metrics.density); updateSettings(); } @@ -79,22 +82,18 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory { @Override public void onDataSetChanged() { - if (cursor != null) { - cursor.close(); - } - cursor = getCursor(); + updateSettings(); + String query = getQuery(filter); + tasks = taskDao.fetchTasks(new SimpleSQLiteQuery(query)); } @Override public void onDestroy() { - if (cursor != null) { - cursor.close(); - } } @Override public int getCount() { - return cursor == null ? 0 : cursor.getCount(); + return tasks.size(); } @Override @@ -114,7 +113,7 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory { @Override public long getItemId(int position) { - Task task = getTask(position); + TaskContainer task = getTask(position); return task == null ? 0 : task.getId(); } @@ -129,10 +128,11 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory { private RemoteViews buildUpdate(int position) { try { - Task task = getTask(position); - if (task == null) { + TaskContainer taskContainer = getTask(position); + if (taskContainer == null) { return null; } + Task task = taskContainer.getTask(); String textContent; int textColorTitle = textColorPrimary; @@ -179,6 +179,12 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory { row.setInt( R.id.widget_row, "setLayoutDirection", Locale.getInstance(context).getDirectionality()); } + row.setViewPadding( + R.id.widget_row, + widgetPadding + taskContainer.getIndent() * indentPadding, + 0, + widgetPadding, + 0); return row; } catch (Exception e) { @@ -188,20 +194,11 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory { return null; } - private Cursor getCursor() { - updateSettings(); - return taskDao.getCursor(getQuery(filter), getProperties(filter)); - } - - private Task getTask(int position) { - return cursor != null && cursor.moveToPosition(position) ? new Task(cursor) : null; + private TaskContainer getTask(int position) { + return position < tasks.size() ? tasks.get(position) : null; } private String getQuery(Filter filter) { - int sort = preferences.getSortMode(); - if (sort == 0) { - sort = SortHelper.SORT_WIDGET; - } AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.scrollable_widget); rv.setTextViewText(R.id.widget_title, filter.listingTitle); @@ -209,18 +206,10 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory { rv.setInt(R.id.widget, "setLayoutDirection", Locale.getInstance(context).getDirectionality()); } appWidgetManager.partiallyUpdateAppWidget(widgetId, rv); - String query = - SortHelper.adjustQueryForFlagsAndSort(preferences, filter.getSqlQuery(), sort) - .replaceAll("LIMIT \\d+", ""); + String query = TaskListViewModel.getQuery(preferences, filter); return subtasksHelper.applySubtasksToWidgetFilter(filter, query); } - private Property[] getProperties(Filter filter) { - return filter instanceof GtasksFilter - ? ObjectArrays.concat(Task.PROPERTIES, new Property[] {GoogleTask.ORDER}, Property.class) - : Task.PROPERTIES; - } - private void formatDueDate(RemoteViews row, Task task) { if (task.hasDueDate()) { row.setViewVisibility(R.id.widget_due_date, View.VISIBLE);