Explain better how we force initialization via the SettingsManager

This commit is contained in:
Torsten Grote 2020-08-13 15:29:53 -03:00 committed by Chirayu Desai
parent 3a717b109d
commit 25962ed307
3 changed files with 19 additions and 2 deletions

View file

@ -32,6 +32,7 @@ internal class DocumentsProviderBackupPlugin(
// check if storage is already initialized
if (storage.isInitialized()) return false
// TODO consider not creating new RestoreSets, but continue working within the existing one.
// reset current storage
storage.reset(newToken)

View file

@ -1,11 +1,13 @@
package com.stevesoltys.seedvault.settings
import android.app.backup.RestoreSet
import android.content.Context
import android.hardware.usb.UsbDevice
import android.net.Uri
import androidx.annotation.UiThread
import androidx.documentfile.provider.DocumentFile
import androidx.preference.PreferenceManager
import com.stevesoltys.seedvault.transport.ConfigurableBackupTransport
import java.util.concurrent.ConcurrentSkipListSet
import java.util.concurrent.atomic.AtomicBoolean
@ -44,7 +46,6 @@ class SettingsManager(context: Context) {
.putString(PREF_KEY_STORAGE_NAME, storage.name)
.putBoolean(PREF_KEY_STORAGE_IS_USB, storage.isUsb)
.apply()
isStorageChanging.set(true)
}
fun getStorage(): Storage? {
@ -56,7 +57,21 @@ class SettingsManager(context: Context) {
return Storage(uri, name, isUsb)
}
// TODO find a better solution for this hack abusing the settings manager
/**
* When [ConfigurableBackupTransport.initializeDevice] we try to avoid deleting all stored data,
* as this gets frequently called after network errors by SAF cloud providers.
*
* This method allows us to force a re-initialization of the underlying storage root
* when we change to a new storage provider.
* Currently, this causes us to create a new [RestoreSet].
*
* As part of the initialization, [getAndResetIsStorageChanging] should get called
* to prevent future calls from causing re-initializations.
*/
fun forceStorageInitialization() {
isStorageChanging.set(true)
}
fun getAndResetIsStorageChanging(): Boolean {
return isStorageChanging.getAndSet(false)
}

View file

@ -24,6 +24,7 @@ internal class BackupStorageViewModel(
override fun onLocationSet(uri: Uri) {
val isUsb = saveStorage(uri)
settingsManager.forceStorageInitialization()
// initialize the new location, will also generate a new backup token
val observer = InitializationObserver()