Widget backed by cursor again

pull/645/head
Alex Baker 8 years ago
parent 4478594ac3
commit 08a6557467

@ -256,12 +256,7 @@ public abstract class TaskDao {
} }
public List<Task> fetchFiltered(String queryTemplate) { public List<Task> fetchFiltered(String queryTemplate) {
Query query = Query.select(Task.PROPERTIES).withQueryTemplate(PermaSql.replacePlaceholders(queryTemplate)); Cursor cursor = getCursor(queryTemplate);
String queryString = query.from(Task.TABLE).toString();
if (BuildConfig.DEBUG) {
Timber.v(queryString);
}
Cursor cursor = database.rawQuery(queryString);
List<Task> result = new ArrayList<>(); List<Task> result = new ArrayList<>();
try { try {
for (cursor.moveToFirst() ; !cursor.isAfterLast() ; cursor.moveToNext()) { for (cursor.moveToFirst() ; !cursor.isAfterLast() ; cursor.moveToNext()) {
@ -273,6 +268,15 @@ public abstract class TaskDao {
} }
} }
public Cursor getCursor(String queryTemplate) {
Query query = Query.select(Task.PROPERTIES).withQueryTemplate(PermaSql.replacePlaceholders(queryTemplate));
String queryString = query.from(Task.TABLE).toString();
if (BuildConfig.DEBUG) {
Timber.v(queryString);
}
return database.rawQuery(queryString);
}
public LimitOffsetDataSource getLimitOffsetDataSource(String queryTemplate, Property<?>... properties) { public LimitOffsetDataSource getLimitOffsetDataSource(String queryTemplate, Property<?>... properties) {
String query = Query String query = Query
.select(properties) .select(properties)

@ -4,6 +4,7 @@ import android.appwidget.AppWidgetManager;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.res.Resources; import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Paint; import android.graphics.Paint;
import android.text.TextUtils; import android.text.TextUtils;
@ -14,7 +15,6 @@ import android.widget.RemoteViewsService;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.core.SortHelper; import com.todoroo.astrid.core.SortHelper;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.subtasks.SubtasksHelper; import com.todoroo.astrid.subtasks.SubtasksHelper;
@ -40,7 +40,6 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
private final WidgetCheckBoxes checkBoxes; private final WidgetCheckBoxes checkBoxes;
private final ThemeCache themeCache; private final ThemeCache themeCache;
private final int widgetId; private final int widgetId;
private final Database database;
private final TaskDao taskDao; private final TaskDao taskDao;
private final DefaultFilterProvider defaultFilterProvider; private final DefaultFilterProvider defaultFilterProvider;
private final SubtasksHelper subtasksHelper; private final SubtasksHelper subtasksHelper;
@ -56,14 +55,13 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
private int textColorPrimary; private int textColorPrimary;
private int textColorSecondary; private int textColorSecondary;
private List<Task> tasks; private Cursor cursor;
ScrollableViewsFactory( ScrollableViewsFactory(
SubtasksHelper subtasksHelper, SubtasksHelper subtasksHelper,
Preferences preferences, Preferences preferences,
Context context, Context context,
int widgetId, int widgetId,
Database database,
TaskDao taskDao, TaskDao taskDao,
DefaultFilterProvider defaultFilterProvider, DefaultFilterProvider defaultFilterProvider,
WidgetCheckBoxes checkBoxes, WidgetCheckBoxes checkBoxes,
@ -72,7 +70,6 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
this.preferences = preferences; this.preferences = preferences;
this.context = context; this.context = context;
this.widgetId = widgetId; this.widgetId = widgetId;
this.database = database;
this.taskDao = taskDao; this.taskDao = taskDao;
this.defaultFilterProvider = defaultFilterProvider; this.defaultFilterProvider = defaultFilterProvider;
this.checkBoxes = checkBoxes; this.checkBoxes = checkBoxes;
@ -85,22 +82,27 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
@Override @Override
public void onCreate() { public void onCreate() {
database.openForReading(); cursor = getCursor();
tasks = getTasks();
} }
@Override @Override
public void onDataSetChanged() { public void onDataSetChanged() {
tasks = getTasks(); if (cursor != null) {
cursor.close();
}
cursor = getCursor();
} }
@Override @Override
public void onDestroy() { public void onDestroy() {
if (cursor != null) {
cursor.close();
}
} }
@Override @Override
public int getCount() { public int getCount() {
return tasks.size(); return cursor.getCount();
} }
@Override @Override
@ -199,13 +201,12 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
return null; return null;
} }
private List<Task> getTasks() { private Cursor getCursor() {
String query = getQuery(); return taskDao.getCursor(getQuery());
return taskDao.fetchFiltered(query);
} }
private Task getTask(int position) { private Task getTask(int position) {
return position < tasks.size() ? tasks.get(position) : null; return cursor.moveToPosition(position) ? new Task(cursor) : null;
} }
private String getQuery() { private String getQuery() {

@ -5,7 +5,6 @@ import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.widget.RemoteViewsService; import android.widget.RemoteViewsService;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.subtasks.SubtasksHelper; import com.todoroo.astrid.subtasks.SubtasksHelper;
@ -20,7 +19,6 @@ import javax.inject.Inject;
public class ScrollableWidgetUpdateService extends RemoteViewsService { public class ScrollableWidgetUpdateService extends RemoteViewsService {
@Inject Database database;
@Inject TaskDao taskDao; @Inject TaskDao taskDao;
@Inject Preferences preferences; @Inject Preferences preferences;
@Inject SubtasksHelper subtasksHelper; @Inject SubtasksHelper subtasksHelper;
@ -58,6 +56,6 @@ public class ScrollableWidgetUpdateService extends RemoteViewsService {
int widgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID); int widgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
return new ScrollableViewsFactory(subtasksHelper, preferences, locale.createConfigurationContext(getApplicationContext()), return new ScrollableViewsFactory(subtasksHelper, preferences, locale.createConfigurationContext(getApplicationContext()),
widgetId, database, taskDao, defaultFilterProvider, widgetCheckBoxes, themeCache); widgetId, taskDao, defaultFilterProvider, widgetCheckBoxes, themeCache);
} }
} }

Loading…
Cancel
Save