Don't crash when storage app gets uninstalled
diff --git a/app/src/main/java/com/stevesoltys/seedvault/settings/SettingsViewModel.kt b/app/src/main/java/com/stevesoltys/seedvault/settings/SettingsViewModel.kt
index aadf712..10a4523 100644
--- a/app/src/main/java/com/stevesoltys/seedvault/settings/SettingsViewModel.kt
+++ b/app/src/main/java/com/stevesoltys/seedvault/settings/SettingsViewModel.kt
@@ -8,6 +8,7 @@
 import android.net.NetworkRequest
 import android.net.Uri
 import android.provider.Settings
+import android.util.Log
 import android.widget.Toast
 import android.widget.Toast.LENGTH_LONG
 import androidx.annotation.UiThread
@@ -27,6 +28,7 @@
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
 
+private const val TAG = "SettingsViewModel"
 private const val USER_FULL_DATA_BACKUP_AWARE = "user_full_data_backup_aware"
 
 internal class SettingsViewModel(
@@ -93,8 +95,14 @@
         val storage = settingsManager.getStorage() ?: return
 
         // register storage observer
-        contentResolver.unregisterContentObserver(storageObserver)
-        contentResolver.registerContentObserver(storage.uri, false, storageObserver)
+        try {
+            contentResolver.unregisterContentObserver(storageObserver)
+            contentResolver.registerContentObserver(storage.uri, false, storageObserver)
+        } catch (e: SecurityException) {
+            // This can happen if the app providing the storage was uninstalled.
+            // validLocationIsSet() gets called elsewhere and prompts for a new storage location.
+            Log.e(TAG, "Error registering content observer for ${storage.uri}", e)
+        }
 
         // register network observer if needed
         if (networkCallback.registered && !storage.requiresNetwork) {