diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index e182d28b4..8b42855a2 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -1531,6 +1531,7 @@
customizing your avatar
Error
There was an error loading gems
+ Clear Database
- You
diff --git a/Habitica/res/xml/preferences_fragment.xml b/Habitica/res/xml/preferences_fragment.xml
index ac3a7a5e9..21f2c50b3 100644
--- a/Habitica/res/xml/preferences_fragment.xml
+++ b/Habitica/res/xml/preferences_fragment.xml
@@ -404,5 +404,10 @@
android:entries="@array/server_urls"
android:entryValues="@array/server_urls"
android:layout="@layout/preference_child_summary" />
+
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt
index 5d4bedd05..8591bfa63 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt
@@ -318,12 +318,16 @@ abstract class HabiticaBaseApplication : Application(), Application.ActivityLife
return context.applicationContext as? HabiticaBaseApplication
}
+ fun deleteDatabase(context: Context) {
+ val realm = Realm.getDefaultInstance()
+ getInstance(context)?.deleteDatabase(realm.path)
+ realm.close()
+ }
+
fun logout(context: Context) {
MainScope().launchCatching {
getInstance(context)?.pushNotificationManager?.removePushDeviceUsingStoredToken()
- val realm = Realm.getDefaultInstance()
- getInstance(context)?.deleteDatabase(realm.path)
- realm.close()
+ deleteDatabase(context)
val preferences = PreferenceManager.getDefaultSharedPreferences(context)
val useReminder = preferences.getBoolean("use_reminder", false)
val reminderTime = preferences.getString("reminder_time", "19:00")
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt
index a34850163..98db95d23 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt
@@ -109,6 +109,9 @@ class PreferencesFragment :
serverUrlPreference?.summary =
preferenceManager.sharedPreferences?.getString("server_url", "")
+ val clearDatabasePreference = findPreference("clear_database") as? Preference
+ clearDatabasePreference?.isVisible = false
+
val themePreference = findPreference("theme_name") as? ListPreference
themePreference?.summary = themePreference?.entry ?: "Default"
val themeModePreference = findPreference("theme_mode") as? ListPreference
@@ -215,12 +218,23 @@ class PreferencesFragment :
)
reloadContent(true)
}
+
+
+ "clear_database" -> {
+ context?.let { context ->
+ HabiticaBaseApplication.deleteDatabase(context)
+ lifecycleScope.launchCatching {
+ userRepository.retrieveUser(true, true)
+ reloadContent(true)
+ }
+ }
+ }
}
return super.onPreferenceTreeClick(preference)
}
private fun reloadContent(withConfirmation: Boolean) {
- lifecycleScope.launch(ExceptionHandler.coroutine()) {
+ lifecycleScope.launchCatching {
contentRepository.retrieveContent(true)
if (withConfirmation) {
(activity as? SnackbarActivity)?.showSnackbar(
@@ -583,6 +597,9 @@ class PreferencesFragment :
if (configManager.testingLevel() == AppTestingLevel.STAFF || BuildConfig.DEBUG) {
serverUrlPreference?.isVisible = true
taskListPreference?.isVisible = true
+
+ val clearDatabasePreference = findPreference("clear_database") as? Preference
+ clearDatabasePreference?.isVisible = true
}
}
}