diff --git a/app/src/main/java/org/isoron/uhabits/activities/BaseActivity.java b/app/src/main/java/org/isoron/uhabits/activities/BaseActivity.java index 2a92a0ff0..311749159 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/BaseActivity.java +++ b/app/src/main/java/org/isoron/uhabits/activities/BaseActivity.java @@ -27,6 +27,8 @@ import android.view.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.habits.list.*; +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.models.sqlite.*; import static android.R.anim.*; @@ -125,6 +127,14 @@ abstract public class BaseActivity extends AppCompatActivity // ignored } + if (ex.getCause() instanceof InconsistentDatabaseException) + { + HabitsApplication app = (HabitsApplication) getApplication(); + HabitList habits = app.getComponent().getHabitList(); + habits.repair(); + System.exit(0); + } + if (androidExceptionHandler != null) androidExceptionHandler.uncaughtException(thread, ex); else System.exit(1); diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java index 1b6b74163..af89c14ff 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java @@ -27,7 +27,6 @@ import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.models.*; -import org.isoron.uhabits.models.sqlite.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.tasks.*; import org.isoron.uhabits.utils.*; @@ -160,19 +159,7 @@ public class ListHabitsController public void onRepairDB() { taskRunner.execute(() -> { - for(Habit h : habitList) - { - h.getCheckmarks().invalidateNewerThan(0); - h.getStreaks().invalidateNewerThan(0); - h.getScores().invalidateNewerThan(0); - } - - if(habitList instanceof SQLiteHabitList) - { - SQLiteHabitList sqlList = (SQLiteHabitList) habitList; - sqlList.rebuildOrder(); - } - + habitList.repair(); screen.showMessage(R.string.database_repaired); }); } diff --git a/app/src/main/java/org/isoron/uhabits/models/HabitList.java b/app/src/main/java/org/isoron/uhabits/models/HabitList.java index b63cd33e8..dd2b81f23 100644 --- a/app/src/main/java/org/isoron/uhabits/models/HabitList.java +++ b/app/src/main/java/org/isoron/uhabits/models/HabitList.java @@ -147,6 +147,16 @@ public abstract class HabitList implements Iterable */ public abstract void reorder(Habit from, Habit to); + public void repair() + { + for(Habit h : this) + { + h.getCheckmarks().invalidateNewerThan(0); + h.getStreaks().invalidateNewerThan(0); + h.getScores().invalidateNewerThan(0); + } + } + /** * Returns the number of habits in this list. * diff --git a/app/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteHabitList.java b/app/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteHabitList.java index 50b3ef4aa..6541a81d3 100644 --- a/app/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteHabitList.java +++ b/app/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteHabitList.java @@ -282,4 +282,11 @@ public class SQLiteHabitList extends HabitList appendOrderBy(query); return query.toString(); } + + @Override + public void repair() + { + super.repair(); + rebuildOrder(); + } }