diff --git a/app/src/main/java/com/todoroo/astrid/dao/Database.java b/app/src/main/java/com/todoroo/astrid/dao/Database.java
index d3a6e4811..33be6a07e 100644
--- a/app/src/main/java/com/todoroo/astrid/dao/Database.java
+++ b/app/src/main/java/com/todoroo/astrid/dao/Database.java
@@ -11,6 +11,8 @@ import android.database.Cursor;
import com.todoroo.astrid.data.Task;
+import org.tasks.analytics.Tracker;
+import org.tasks.analytics.Tracking;
import org.tasks.data.Alarm;
import org.tasks.data.AlarmDao;
import org.tasks.data.Filter;
@@ -78,6 +80,7 @@ public abstract class Database extends RoomDatabase {
public static final String NAME = "database";
private SupportSQLiteDatabase database;
+ private Tracker tracker;
private Runnable onDatabaseUpdated;
// --- implementation
@@ -86,7 +89,8 @@ public abstract class Database extends RoomDatabase {
return NAME;
}
- public Database setOnDatabaseUpdated(Runnable onDatabaseUpdated) {
+ public Database init(Tracker tracker, Runnable onDatabaseUpdated) {
+ this.tracker = tracker;
this.onDatabaseUpdated = onDatabaseUpdated;
return this;
}
@@ -108,19 +112,10 @@ public abstract class Database extends RoomDatabase {
try {
database = getOpenHelper().getWritableDatabase();
- } catch (NullPointerException e) {
+ } catch (Exception e) {
+ tracker.reportEvent(Tracking.Events.DB_OPEN_FAILED, e.getMessage());
Timber.e(e, e.getMessage());
throw new IllegalStateException(e);
- } catch (final RuntimeException original) {
- Timber.e(original, original.getMessage());
- try {
- // provide read-only database
- openForReading();
- } catch (Exception readException) {
- Timber.e(readException, readException.getMessage());
- // throw original write exception
- throw original;
- }
}
}
diff --git a/app/src/main/java/com/todoroo/astrid/service/TaskCreator.java b/app/src/main/java/com/todoroo/astrid/service/TaskCreator.java
index 283153ae5..e92060b23 100644
--- a/app/src/main/java/com/todoroo/astrid/service/TaskCreator.java
+++ b/app/src/main/java/com/todoroo/astrid/service/TaskCreator.java
@@ -15,6 +15,8 @@ import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.utility.TitleParser;
import org.tasks.R;
+import org.tasks.analytics.Tracker;
+import org.tasks.analytics.Tracking;
import org.tasks.data.GoogleTask;
import org.tasks.data.GoogleTaskDao;
import org.tasks.data.Tag;
@@ -38,13 +40,15 @@ public class TaskCreator {
private final Preferences preferences;
private final TagDao tagDao;
private final GoogleTaskDao googleTaskDao;
+ private final Tracker tracker;
private final TagDataDao tagDataDao;
private final TaskDao taskDao;
private final TagService tagService;
@Inject
public TaskCreator(GCalHelper gcalHelper, Preferences preferences, TagDataDao tagDataDao,
- TaskDao taskDao, TagService tagService, TagDao tagDao, GoogleTaskDao googleTaskDao) {
+ TaskDao taskDao, TagService tagService, TagDao tagDao,
+ GoogleTaskDao googleTaskDao, Tracker tracker) {
this.gcalHelper = gcalHelper;
this.preferences = preferences;
this.tagDataDao = tagDataDao;
@@ -52,6 +56,7 @@ public class TaskCreator {
this.tagService = tagService;
this.tagDao = tagDao;
this.googleTaskDao = googleTaskDao;
+ this.tracker = tracker;
}
public Task basicQuickAddTask(String title) {
@@ -109,17 +114,18 @@ public class TaskCreator {
tags.add((String) value);
} else if (key.equals(GoogleTask.KEY)) {
task.putTransitory(key, value);
- } else if (value instanceof String) {
- value = PermaSql.replacePlaceholders((String) value);
+ } else {
+ if (value instanceof String) {
+ value = PermaSql.replacePlaceholders((String) value);
+ }
+
if (key.equals("dueDate")) {
task.setDueDate(Long.valueOf((String) value));
} else if (key.equals("importance")) {
task.setImportance(Integer.valueOf((String) value));
} else {
- throw new RuntimeException("Unhandled key: " + key);
+ tracker.reportEvent(Tracking.Events.TASK_CREATION_FAILED, "Unhandled key: " + key);
}
- } else {
- throw new RuntimeException("Unhandled key: " + key);
}
}
}
diff --git a/app/src/main/java/org/tasks/analytics/Tracking.java b/app/src/main/java/org/tasks/analytics/Tracking.java
index f76d111f6..9e4678683 100644
--- a/app/src/main/java/org/tasks/analytics/Tracking.java
+++ b/app/src/main/java/org/tasks/analytics/Tracking.java
@@ -27,6 +27,8 @@ public class Tracking {
MULTISELECT_CLONE(R.string.tracking_category_event, R.string.tracking_event_multiselect_clone),
CLEAR_COMPLETED(R.string.tracking_category_event, R.string.tracking_action_clear_completed),
UPGRADE(R.string.tracking_category_event, R.string.tracking_event_upgrade),
+ DB_OPEN_FAILED(R.string.tracking_category_error, R.string.tracking_event_db_open),
+ TASK_CREATION_FAILED(R.string.tracking_category_error, R.string.tracking_event_task_creation),
NIGHT_MODE_MISMATCH(R.string.tracking_category_event, R.string.tracking_event_night_mode_mismatch),
SET_PREFERENCE(R.string.tracking_category_preferences, 0),
PLAY_SERVICES_WARNING(R.string.tracking_category_event, R.string.tracking_event_play_services_error),
diff --git a/app/src/main/java/org/tasks/injection/ApplicationModule.java b/app/src/main/java/org/tasks/injection/ApplicationModule.java
index 5da761f10..c9fcbd136 100644
--- a/app/src/main/java/org/tasks/injection/ApplicationModule.java
+++ b/app/src/main/java/org/tasks/injection/ApplicationModule.java
@@ -58,13 +58,13 @@ public class ApplicationModule {
@Provides
@ApplicationScope
- public Database getAppDatabase() {
+ public Database getAppDatabase(Tracker tracker) {
return Room
.databaseBuilder(context, Database.class, Database.NAME)
.allowMainThreadQueries() // TODO: remove me
.addMigrations(Migrations.MIGRATIONS)
.build()
- .setOnDatabaseUpdated(() -> Astrid2TaskProvider.notifyDatabaseModification(context));
+ .init(tracker, () -> Astrid2TaskProvider.notifyDatabaseModification(context));
}
@Provides
diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml
index 65fa509a9..a1995ac90 100644
--- a/app/src/main/res/values/keys.xml
+++ b/app/src/main/res/values/keys.xml
@@ -229,6 +229,7 @@
Recurrence
Gtask
Event
+ Error
Tasker
Add
Start
@@ -248,6 +249,8 @@
Night Mismatch
Play Services Error
Upgrade
+ DB open
+ Task creation
Multiselect delete
Multiselect clone
badges_enabled