@ -2,15 +2,19 @@ package org.tasks.backup
import android.app.backup.BackupAgentHelper
import android.app.backup.BackupAgentHelper
import android.app.backup.BackupDataInput
import android.app.backup.BackupDataInput
import android.app.backup.BackupDataOutput
import android.app.backup.FileBackupHelper
import android.app.backup.FileBackupHelper
import android.net.Uri
import android.net.Uri
import android.os.ParcelFileDescriptor
import android.os.ParcelFileDescriptor
import com.todoroo.andlib.utility.DateUtilities.now
import com.todoroo.astrid.backup.BackupConstants
import com.todoroo.astrid.backup.BackupConstants
import dagger.hilt.EntryPoint
import dagger.hilt.EntryPoint
import dagger.hilt.InstallIn
import dagger.hilt.InstallIn
import dagger.hilt.android.EntryPointAccessors
import dagger.hilt.android.EntryPointAccessors
import dagger.hilt.android.components.ApplicationComponent
import dagger.hilt.android.components.ApplicationComponent
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.runBlocking
import org.tasks.R
import org.tasks.preferences.Preferences
import timber.log.Timber
import timber.log.Timber
import java.io.File
import java.io.File
import java.io.IOException
import java.io.IOException
@ -20,14 +24,25 @@ class TasksBackupAgent : BackupAgentHelper() {
@InstallIn ( ApplicationComponent :: class )
@InstallIn ( ApplicationComponent :: class )
internal interface TasksBackupAgentEntryPoint {
internal interface TasksBackupAgentEntryPoint {
val tasksJsonImporter : TasksJsonImporter
val tasksJsonImporter : TasksJsonImporter
val preferences : Preferences
}
}
private lateinit var importer : TasksJsonImporter
private lateinit var importer : TasksJsonImporter
private lateinit var preferences : Preferences
private val enabled : Boolean
get ( ) = preferences . getBoolean ( R . string . p _backups _android _backup _enabled , true )
override fun onCreate ( ) {
override fun onCreate ( ) {
val hilt = EntryPointAccessors . fromApplication ( applicationContext , TasksBackupAgentEntryPoint :: class . java )
EntryPointAccessors
importer = hilt . tasksJsonImporter
. fromApplication ( applicationContext , TasksBackupAgentEntryPoint :: class . java )
addHelper ( BACKUP _KEY , FileBackupHelper ( this , BackupConstants . INTERNAL _BACKUP ) )
. let {
importer = it . tasksJsonImporter
preferences = it . preferences
}
if ( enabled ) {
addHelper ( BACKUP _KEY , FileBackupHelper ( this , BackupConstants . INTERNAL _BACKUP ) )
}
}
}
@Throws ( IOException :: class )
@Throws ( IOException :: class )
@ -44,6 +59,14 @@ class TasksBackupAgent : BackupAgentHelper() {
}
}
}
}
override fun onBackup ( oldState : ParcelFileDescriptor ? , data : BackupDataOutput ? , newState : ParcelFileDescriptor ? ) {
super . onBackup ( oldState , data , newState )
if ( enabled ) {
preferences . setLong ( R . string . p _backups _android _backup _last , now ( ) )
}
}
override fun onQuotaExceeded ( backupDataBytes : Long , quotaBytes : Long ) {
override fun onQuotaExceeded ( backupDataBytes : Long , quotaBytes : Long ) {
Timber . e ( " onQuotaExceeded(%s, %s) " , backupDataBytes , quotaBytes )
Timber . e ( " onQuotaExceeded(%s, %s) " , backupDataBytes , quotaBytes )
}
}