From 813d40ace1a453ed3b24d55ecb2e9d4b07e8730f Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 27 Jun 2024 14:49:37 +0200 Subject: [PATCH] add option to clear database --- Habitica/res/values/strings.xml | 1 + Habitica/res/xml/preferences_fragment.xml | 5 +++++ .../habitica/HabiticaBaseApplication.kt | 10 +++++++--- .../preferences/PreferencesFragment.kt | 19 ++++++++++++++++++- 4 files changed, 31 insertions(+), 4 deletions(-) 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 } } }