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