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