Fix for crashes with widget, milk data service, and reminders not getting set properly

pull/14/head
Tim Su 14 years ago
parent 1cb6d9d3cc
commit 14bb13f023

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.timsu.astrid"
android:versionName="3.0.0-beta" android:versionCode="137">
android:versionName="3.0.0-beta2" android:versionCode="137">
<!-- ================================================== Used Permissions = -->
@ -50,8 +50,7 @@
<supports-screens />
<application android:icon="@drawable/icon"
android:label="@string/app_name"
android:debuggable="true">
android:label="@string/app_name">
<!-- android:installLocation="auto"> -->
<!-- ====================================================== Activities = -->

@ -9,9 +9,9 @@ import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.util.Log;
import com.todoroo.andlib.data.Property.PropertyVisitor;
@ -158,6 +158,8 @@ abstract public class AbstractDatabase {
* @return sql database. opens database if not yet open
*/
private synchronized final SQLiteDatabase getDatabase() {
if(database == null)
openForWriting();
return database;
}

@ -21,7 +21,6 @@ import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.model.Task;
@ -40,6 +39,7 @@ public final class ReminderService {
// --- constants
private static final Property<?>[] PROPERTIES = new Property<?>[] {
Task.ID,
Task.DUE_DATE,
Task.REMINDER_FLAGS,
Task.REMINDER_PERIOD,
@ -62,9 +62,6 @@ public final class ReminderService {
@Autowired
private TaskDao taskDao;
@Autowired
private Database database;
private AlarmScheduler scheduler = new ReminderAlarmScheduler();
public ReminderService() {
@ -103,7 +100,6 @@ public final class ReminderService {
* Schedules all alarms
*/
public void scheduleAllAlarms() {
TodorooCursor<Task> cursor = getTasksWithReminders(PROPERTIES);
try {
Task task = new Task();
@ -284,7 +280,7 @@ public final class ReminderService {
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,
intent, 0);
if(Constants.DEBUG)
if(Constants.DEBUG || true)
Log.e("Astrid", "Alarm (" + task.getId() + ", " + type +
") set for " + new Date(time));
am.set(AlarmManager.RTC_WAKEUP, time, pendingIntent);
@ -299,9 +295,8 @@ public final class ReminderService {
* @return todoroo cursor. PLEASE CLOSE THIS CURSOR!
*/
private TodorooCursor<Task> getTasksWithReminders(Property<?>... properties) {
database.openForReading();
return taskDao.query(Query.select(properties).where(Criterion.and(TaskCriteria.isActive(),
Task.REMINDER_FLAGS.gt(0))));
Criterion.or(Task.REMINDER_FLAGS.gt(0), Task.REMINDER_PERIOD.gt(0)))));
}

@ -4,6 +4,7 @@
package com.todoroo.astrid.rmilk.data;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
@ -12,8 +13,8 @@ import android.content.Context;
import com.todoroo.andlib.data.GenericDao;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.Property.CountProperty;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.data.Property.CountProperty;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.DependencyInjectionService;
@ -24,8 +25,8 @@ import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.SoftHashMap;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.model.Metadata;
import com.todoroo.astrid.model.Task;
@ -207,7 +208,8 @@ public final class MilkDataService {
// --- list methods
private final SoftHashMap<Long, String> listCache = new SoftHashMap<Long, String>();
private final Map<Long, String> listCache =
Collections.synchronizedMap(new SoftHashMap<Long, String>());
/**
* Get list name by list id

@ -116,8 +116,10 @@ public class TasksWidget extends AppWidgetProvider {
views.setTextColor(textIDs[i], textColor);
}
for(int i = cursor.getCount() - 1; i < separatorIDs.length; i++)
views.setViewVisibility(separatorIDs[i], View.INVISIBLE);
for(int i = cursor.getCount() - 1; i < separatorIDs.length; i++) {
if(i >= 0)
views.setViewVisibility(separatorIDs[i], View.INVISIBLE);
}
} catch (Exception e) {
// can happen if database is not ready
Log.e("WIDGET-UPDATE", "Error updating widget", e);

Loading…
Cancel
Save