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 baa95e137..4315c8081 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
@@ -80,7 +80,8 @@ public class ListHabitsController
@NonNull ReminderScheduler reminderScheduler,
@NonNull TaskRunner taskRunner,
@NonNull WidgetUpdater widgetUpdater,
- @NonNull ImportDataTaskFactory importTaskFactory,
+ @NonNull
+ ImportDataTaskFactory importTaskFactory,
@NonNull ExportCSVTaskFactory exportCSVFactory)
{
this.adapter = adapter;
@@ -155,6 +156,18 @@ public class ListHabitsController
screen.showMessage(R.string.long_press_to_toggle);
}
+ public void onRepairDB()
+ {
+ taskRunner.execute(() -> {
+ for(Habit h : habitList) {
+ h.getCheckmarks().invalidateNewerThan(0);
+ h.getStreaks().invalidateNewerThan(0);
+ h.getScores().invalidateNewerThan(0);
+ }
+ screen.showMessage(R.string.database_repaired);
+ });
+ }
+
public void onSendBugReport()
{
try
diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java
index 295cb1678..3fb92e817 100644
--- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java
+++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java
@@ -46,6 +46,8 @@ public class ListHabitsScreen extends BaseScreen
public static final int RESULT_EXPORT_DB = 3;
+ public static final int RESULT_REPAIR_DB = 5;
+
public static final int RESULT_IMPORT_DATA = 1;
@Nullable
@@ -143,6 +145,10 @@ public class ListHabitsScreen extends BaseScreen
case RESULT_BUG_REPORT:
controller.onSendBugReport();
break;
+
+ case RESULT_REPAIR_DB:
+ controller.onRepairDB();
+ break;
}
}
diff --git a/app/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java b/app/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java
index 680f2720f..9b71bc153 100644
--- a/app/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java
+++ b/app/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java
@@ -57,6 +57,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
setResultOnPreferenceClick("importData", ListHabitsScreen.RESULT_IMPORT_DATA);
setResultOnPreferenceClick("exportCSV", ListHabitsScreen.RESULT_EXPORT_CSV);
setResultOnPreferenceClick("exportDB", ListHabitsScreen.RESULT_EXPORT_DB);
+ setResultOnPreferenceClick("repairDB", ListHabitsScreen.RESULT_REPAIR_DB);
setResultOnPreferenceClick("bugReport", ListHabitsScreen.RESULT_BUG_REPORT);
updateRingtoneDescription();
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5c42c0963..03ceda6c3 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -188,4 +188,6 @@
Make notifications sticky
Prevents notifications from being swiped away.
+ Repair database
+ Database repaired.
\ No newline at end of file
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 16b874cc2..6b5502414 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -100,8 +100,11 @@
-
+ android:title="@string/generate_bug_report"/>
+
+
diff --git a/app/src/test/java/org/isoron/uhabits/utils/DateUtilsTest.java b/app/src/test/java/org/isoron/uhabits/utils/DateUtilsTest.java
index 910b251b5..dbb0df07e 100644
--- a/app/src/test/java/org/isoron/uhabits/utils/DateUtilsTest.java
+++ b/app/src/test/java/org/isoron/uhabits/utils/DateUtilsTest.java
@@ -139,9 +139,12 @@ public class DateUtilsTest extends BaseUnitTest
public void test_getDaysBetween()
{
long t1 = timestamp(2016, JANUARY, 1);
- long t2 = timestamp(2016, DECEMBER, 31);
- int expected = 365;
- assertThat(DateUtils.getDaysBetween(t1, t2), equalTo(expected));
- assertThat(DateUtils.getDaysBetween(t2, t1), equalTo(expected));
+ long t2 = timestamp(2016, JANUARY, 10);
+ long t3 = timestamp(2016, DECEMBER, 31);
+
+ assertThat(DateUtils.getDaysBetween(t1, t1), equalTo(0));
+ assertThat(DateUtils.getDaysBetween(t1, t2), equalTo(9));
+ assertThat(DateUtils.getDaysBetween(t1, t3), equalTo(365));
+ assertThat(DateUtils.getDaysBetween(t3, t1), equalTo(365));
}
}