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)); } }