Merge pull request #692 from grote/679-consider-other-transports

Better scheduling co-existence with other transport
This commit is contained in:
Torsten Grote 2024-07-08 15:32:24 -03:00 committed by GitHub
commit b07bb6bc48
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 14 additions and 5 deletions

View file

@ -33,6 +33,7 @@ import com.stevesoltys.seedvault.settings.AppListRetriever
import com.stevesoltys.seedvault.settings.SettingsManager import com.stevesoltys.seedvault.settings.SettingsManager
import com.stevesoltys.seedvault.settings.SettingsViewModel import com.stevesoltys.seedvault.settings.SettingsViewModel
import com.stevesoltys.seedvault.storage.storageModule import com.stevesoltys.seedvault.storage.storageModule
import com.stevesoltys.seedvault.transport.TRANSPORT_ID
import com.stevesoltys.seedvault.transport.backup.backupModule import com.stevesoltys.seedvault.transport.backup.backupModule
import com.stevesoltys.seedvault.transport.restore.restoreModule import com.stevesoltys.seedvault.transport.restore.restoreModule
import com.stevesoltys.seedvault.ui.files.FileSelectionViewModel import com.stevesoltys.seedvault.ui.files.FileSelectionViewModel
@ -185,12 +186,14 @@ open class App : Application() {
return return
} }
backupManager.setFrameworkSchedulingEnabledForUser(UserHandle.myUserId(), false) if (backupManager.currentTransport == TRANSPORT_ID) {
if (backupManager.isBackupEnabled && !pluginManager.isOnRemovableDrive) { backupManager.setFrameworkSchedulingEnabledForUser(UserHandle.myUserId(), false)
AppBackupWorker.schedule(applicationContext, settingsManager, UPDATE) if (backupManager.isBackupEnabled && !pluginManager.isOnRemovableDrive) {
AppBackupWorker.schedule(applicationContext, settingsManager, UPDATE)
}
// cancel old D2D worker
WorkManager.getInstance(this).cancelUniqueWork("APP_BACKUP")
} }
// cancel old D2D worker
WorkManager.getInstance(this).cancelUniqueWork("APP_BACKUP")
} }
private fun isFrameworkSchedulingEnabled(): Boolean = Settings.Secure.getInt( private fun isFrameworkSchedulingEnabled(): Boolean = Settings.Secure.getInt(

View file

@ -18,6 +18,7 @@ import android.net.NetworkRequest
import android.net.Uri import android.net.Uri
import android.os.BadParcelableException import android.os.BadParcelableException
import android.os.Process.myUid import android.os.Process.myUid
import android.os.UserHandle
import android.provider.Settings import android.provider.Settings
import android.util.Log import android.util.Log
import android.widget.Toast import android.widget.Toast
@ -308,6 +309,8 @@ internal class SettingsViewModel(
} }
fun scheduleAppBackup(existingWorkPolicy: ExistingPeriodicWorkPolicy) { fun scheduleAppBackup(existingWorkPolicy: ExistingPeriodicWorkPolicy) {
// disable framework scheduling, because another transport may have enabled it
backupManager.setFrameworkSchedulingEnabledForUser(UserHandle.myUserId(), false)
if (!pluginManager.isOnRemovableDrive && backupManager.isBackupEnabled) { if (!pluginManager.isOnRemovableDrive && backupManager.isBackupEnabled) {
AppBackupWorker.schedule(app, settingsManager, existingWorkPolicy) AppBackupWorker.schedule(app, settingsManager, existingWorkPolicy)
} }

View file

@ -8,6 +8,7 @@ package com.stevesoltys.seedvault.ui.storage
import android.app.Application import android.app.Application
import android.app.backup.IBackupManager import android.app.backup.IBackupManager
import android.app.job.JobInfo import android.app.job.JobInfo
import android.os.UserHandle
import android.util.Log import android.util.Log
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import androidx.work.ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE import androidx.work.ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE
@ -100,6 +101,8 @@ internal class BackupStorageViewModel(
private fun scheduleBackupWorkers() { private fun scheduleBackupWorkers() {
val storage = storagePluginManager.storageProperties ?: error("no storage available") val storage = storagePluginManager.storageProperties ?: error("no storage available")
// disable framework scheduling, because another transport may have enabled it
backupManager.setFrameworkSchedulingEnabledForUser(UserHandle.myUserId(), false)
if (!storage.isUsb) { if (!storage.isUsb) {
if (backupManager.isBackupEnabled) { if (backupManager.isBackupEnabled) {
AppBackupWorker.schedule(app, settingsManager, CANCEL_AND_REENQUEUE) AppBackupWorker.schedule(app, settingsManager, CANCEL_AND_REENQUEUE)