Merge pull request #771 from grote/770-backup-start
Unify code to start new backup
This commit is contained in:
commit
a9df9a2d2f
4 changed files with 36 additions and 32 deletions
|
@ -20,14 +20,11 @@ import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.provider.DocumentsContract
|
import android.provider.DocumentsContract
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.core.content.ContextCompat.startForegroundService
|
|
||||||
import com.stevesoltys.seedvault.metadata.MetadataManager
|
import com.stevesoltys.seedvault.metadata.MetadataManager
|
||||||
import com.stevesoltys.seedvault.settings.FlashDrive
|
import com.stevesoltys.seedvault.settings.FlashDrive
|
||||||
import com.stevesoltys.seedvault.settings.SettingsManager
|
import com.stevesoltys.seedvault.settings.SettingsManager
|
||||||
import com.stevesoltys.seedvault.storage.StorageBackupService
|
|
||||||
import com.stevesoltys.seedvault.storage.StorageBackupService.Companion.EXTRA_START_APP_BACKUP
|
|
||||||
import com.stevesoltys.seedvault.ui.storage.AUTHORITY_STORAGE
|
import com.stevesoltys.seedvault.ui.storage.AUTHORITY_STORAGE
|
||||||
import com.stevesoltys.seedvault.worker.AppBackupWorker
|
import com.stevesoltys.seedvault.worker.BackupRequester.Companion.requestFilesAndAppBackup
|
||||||
import org.koin.core.context.GlobalContext.get
|
import org.koin.core.context.GlobalContext.get
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
|
|
||||||
|
@ -64,16 +61,7 @@ class UsbIntentReceiver : UsbMonitor() {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStatusChanged(context: Context, action: String, device: UsbDevice) {
|
override fun onStatusChanged(context: Context, action: String, device: UsbDevice) {
|
||||||
if (settingsManager.isStorageBackupEnabled()) {
|
requestFilesAndAppBackup(context, settingsManager, backupManager)
|
||||||
val i = Intent(context, StorageBackupService::class.java)
|
|
||||||
// this starts an app backup afterwards
|
|
||||||
i.putExtra(EXTRA_START_APP_BACKUP, true)
|
|
||||||
startForegroundService(context, i)
|
|
||||||
} else if (backupManager.isBackupEnabled) {
|
|
||||||
AppBackupWorker.scheduleNow(context, reschedule = false)
|
|
||||||
} else {
|
|
||||||
Log.d(TAG, "Neither files nor app backup enabled, do nothing.")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,6 @@ import android.app.Application
|
||||||
import android.app.backup.IBackupManager
|
import android.app.backup.IBackupManager
|
||||||
import android.app.job.JobInfo.NETWORK_TYPE_NONE
|
import android.app.job.JobInfo.NETWORK_TYPE_NONE
|
||||||
import android.app.job.JobInfo.NETWORK_TYPE_UNMETERED
|
import android.app.job.JobInfo.NETWORK_TYPE_UNMETERED
|
||||||
import android.content.Intent
|
|
||||||
import android.database.ContentObserver
|
import android.database.ContentObserver
|
||||||
import android.net.ConnectivityManager
|
import android.net.ConnectivityManager
|
||||||
import android.net.Network
|
import android.net.Network
|
||||||
|
@ -24,7 +23,6 @@ import android.util.Log
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import android.widget.Toast.LENGTH_LONG
|
import android.widget.Toast.LENGTH_LONG
|
||||||
import androidx.annotation.UiThread
|
import androidx.annotation.UiThread
|
||||||
import androidx.core.content.ContextCompat.startForegroundService
|
|
||||||
import androidx.lifecycle.LiveData
|
import androidx.lifecycle.LiveData
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import androidx.lifecycle.liveData
|
import androidx.lifecycle.liveData
|
||||||
|
@ -42,14 +40,13 @@ import com.stevesoltys.seedvault.metadata.MetadataManager
|
||||||
import com.stevesoltys.seedvault.permitDiskReads
|
import com.stevesoltys.seedvault.permitDiskReads
|
||||||
import com.stevesoltys.seedvault.backend.BackendManager
|
import com.stevesoltys.seedvault.backend.BackendManager
|
||||||
import com.stevesoltys.seedvault.storage.StorageBackupJobService
|
import com.stevesoltys.seedvault.storage.StorageBackupJobService
|
||||||
import com.stevesoltys.seedvault.storage.StorageBackupService
|
|
||||||
import com.stevesoltys.seedvault.storage.StorageBackupService.Companion.EXTRA_START_APP_BACKUP
|
|
||||||
import com.stevesoltys.seedvault.transport.backup.BackupInitializer
|
import com.stevesoltys.seedvault.transport.backup.BackupInitializer
|
||||||
import com.stevesoltys.seedvault.ui.LiveEvent
|
import com.stevesoltys.seedvault.ui.LiveEvent
|
||||||
import com.stevesoltys.seedvault.ui.MutableLiveEvent
|
import com.stevesoltys.seedvault.ui.MutableLiveEvent
|
||||||
import com.stevesoltys.seedvault.ui.RequireProvisioningViewModel
|
import com.stevesoltys.seedvault.ui.RequireProvisioningViewModel
|
||||||
import com.stevesoltys.seedvault.worker.AppBackupWorker
|
import com.stevesoltys.seedvault.worker.AppBackupWorker
|
||||||
import com.stevesoltys.seedvault.worker.AppBackupWorker.Companion.UNIQUE_WORK_NAME
|
import com.stevesoltys.seedvault.worker.AppBackupWorker.Companion.UNIQUE_WORK_NAME
|
||||||
|
import com.stevesoltys.seedvault.worker.BackupRequester.Companion.requestFilesAndAppBackup
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.SharingStarted
|
import kotlinx.coroutines.flow.SharingStarted
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
|
@ -224,17 +221,8 @@ internal class SettingsViewModel(
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun backupNow() {
|
internal fun backupNow() {
|
||||||
viewModelScope.launch(Dispatchers.IO) {
|
val reschedule = !backendManager.isOnRemovableDrive
|
||||||
val isAppBackupEnabled = backupManager.isBackupEnabled
|
requestFilesAndAppBackup(app, settingsManager, backupManager, reschedule)
|
||||||
if (settingsManager.isStorageBackupEnabled()) {
|
|
||||||
val i = Intent(app, StorageBackupService::class.java)
|
|
||||||
// this starts an app backup afterwards (if enabled)
|
|
||||||
i.putExtra(EXTRA_START_APP_BACKUP, isAppBackupEnabled)
|
|
||||||
startForegroundService(app, i)
|
|
||||||
} else if (isAppBackupEnabled) {
|
|
||||||
AppBackupWorker.scheduleNow(app, reschedule = !backendManager.isOnRemovableDrive)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getAppStatusResult(): LiveData<AppStatusResult> = liveData(Dispatchers.Default) {
|
private fun getAppStatusResult(): LiveData<AppStatusResult> = liveData(Dispatchers.Default) {
|
||||||
|
|
|
@ -21,6 +21,7 @@ import com.stevesoltys.seedvault.settings.SettingsManager
|
||||||
import com.stevesoltys.seedvault.storage.StorageBackupJobService
|
import com.stevesoltys.seedvault.storage.StorageBackupJobService
|
||||||
import com.stevesoltys.seedvault.transport.backup.BackupInitializer
|
import com.stevesoltys.seedvault.transport.backup.BackupInitializer
|
||||||
import com.stevesoltys.seedvault.worker.AppBackupWorker
|
import com.stevesoltys.seedvault.worker.AppBackupWorker
|
||||||
|
import com.stevesoltys.seedvault.worker.BackupRequester.Companion.requestFilesAndAppBackup
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.calyxos.backup.storage.api.StorageBackup
|
import org.calyxos.backup.storage.api.StorageBackup
|
||||||
|
@ -70,8 +71,6 @@ internal class BackupStorageViewModel(
|
||||||
viewModelScope.launch(Dispatchers.IO) {
|
viewModelScope.launch(Dispatchers.IO) {
|
||||||
try {
|
try {
|
||||||
// remove old storage snapshots and clear cache
|
// remove old storage snapshots and clear cache
|
||||||
// TODO For SAF, this also does create all 255 chunk folders which takes time
|
|
||||||
// pass a flag to getCurrentBackupSnapshots() to not create missing folders?
|
|
||||||
storageBackup.init()
|
storageBackup.init()
|
||||||
// initialize the new location (if backups are enabled)
|
// initialize the new location (if backups are enabled)
|
||||||
if (backupManager.isBackupEnabled) {
|
if (backupManager.isBackupEnabled) {
|
||||||
|
@ -83,7 +82,7 @@ internal class BackupStorageViewModel(
|
||||||
val requestBackup = isUsb && !isSetupWizard
|
val requestBackup = isUsb && !isSetupWizard
|
||||||
if (requestBackup) {
|
if (requestBackup) {
|
||||||
Log.i(TAG, "Requesting a backup now, because we use USB storage")
|
Log.i(TAG, "Requesting a backup now, because we use USB storage")
|
||||||
AppBackupWorker.scheduleNow(app, reschedule = false)
|
requestFilesAndAppBackup(app, settingsManager, backupManager)
|
||||||
}
|
}
|
||||||
// notify the UI that the location has been set
|
// notify the UI that the location has been set
|
||||||
mLocationChecked.postEvent(LocationResult())
|
mLocationChecked.postEvent(LocationResult())
|
||||||
|
|
|
@ -8,9 +8,15 @@ package com.stevesoltys.seedvault.worker
|
||||||
import android.app.backup.BackupManager
|
import android.app.backup.BackupManager
|
||||||
import android.app.backup.IBackupManager
|
import android.app.backup.IBackupManager
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
import android.os.RemoteException
|
import android.os.RemoteException
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import androidx.annotation.UiThread
|
||||||
import androidx.annotation.WorkerThread
|
import androidx.annotation.WorkerThread
|
||||||
|
import androidx.core.content.ContextCompat.startForegroundService
|
||||||
|
import com.stevesoltys.seedvault.settings.SettingsManager
|
||||||
|
import com.stevesoltys.seedvault.storage.StorageBackupService
|
||||||
|
import com.stevesoltys.seedvault.storage.StorageBackupService.Companion.EXTRA_START_APP_BACKUP
|
||||||
import com.stevesoltys.seedvault.BackupMonitor
|
import com.stevesoltys.seedvault.BackupMonitor
|
||||||
import com.stevesoltys.seedvault.transport.backup.PackageService
|
import com.stevesoltys.seedvault.transport.backup.PackageService
|
||||||
import com.stevesoltys.seedvault.ui.notification.BackupNotificationManager
|
import com.stevesoltys.seedvault.ui.notification.BackupNotificationManager
|
||||||
|
@ -35,6 +41,29 @@ internal class BackupRequester(
|
||||||
val packageService: PackageService,
|
val packageService: PackageService,
|
||||||
) : KoinComponent {
|
) : KoinComponent {
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
@UiThread
|
||||||
|
fun requestFilesAndAppBackup(
|
||||||
|
context: Context,
|
||||||
|
settingsManager: SettingsManager,
|
||||||
|
backupManager: IBackupManager,
|
||||||
|
reschedule: Boolean = false,
|
||||||
|
) {
|
||||||
|
val appBackupEnabled = backupManager.isBackupEnabled
|
||||||
|
// TODO eventually, we could think about running files and app backup simultaneously
|
||||||
|
if (settingsManager.isStorageBackupEnabled()) {
|
||||||
|
val i = Intent(context, StorageBackupService::class.java)
|
||||||
|
// this starts an app backup afterwards
|
||||||
|
i.putExtra(EXTRA_START_APP_BACKUP, appBackupEnabled)
|
||||||
|
startForegroundService(context, i)
|
||||||
|
} else if (appBackupEnabled) {
|
||||||
|
AppBackupWorker.scheduleNow(context, reschedule)
|
||||||
|
} else {
|
||||||
|
Log.d(TAG, "Neither files nor app backup enabled, do nothing.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val isBackupEnabled: Boolean get() = backupManager.isBackupEnabled
|
val isBackupEnabled: Boolean get() = backupManager.isBackupEnabled
|
||||||
|
|
||||||
private val packages = packageService.eligiblePackages
|
private val packages = packageService.eligiblePackages
|
||||||
|
|
Loading…
Reference in a new issue