Add Android Backup Service settings

* Add option to disable upload to backup service
* Display date of last upload
pull/1122/head
Alex Baker 5 years ago
parent 63931c789e
commit ddf9f79b18

@ -123,6 +123,7 @@
<application
android:allowBackup="true"
android:backupAgent="org.tasks.backup.TasksBackupAgent"
android:backupInForeground="true"
android:networkSecurityConfig="@xml/network_security_config"
android:icon="@mipmap/ic_launcher_blue"
android:label="@string/app_name"

@ -2,15 +2,19 @@ package org.tasks.backup
import android.app.backup.BackupAgentHelper
import android.app.backup.BackupDataInput
import android.app.backup.BackupDataOutput
import android.app.backup.FileBackupHelper
import android.net.Uri
import android.os.ParcelFileDescriptor
import com.todoroo.andlib.utility.DateUtilities.now
import com.todoroo.astrid.backup.BackupConstants
import dagger.hilt.EntryPoint
import dagger.hilt.InstallIn
import dagger.hilt.android.EntryPointAccessors
import dagger.hilt.android.components.ApplicationComponent
import kotlinx.coroutines.runBlocking
import org.tasks.R
import org.tasks.preferences.Preferences
import timber.log.Timber
import java.io.File
import java.io.IOException
@ -20,14 +24,25 @@ class TasksBackupAgent : BackupAgentHelper() {
@InstallIn(ApplicationComponent::class)
internal interface TasksBackupAgentEntryPoint {
val tasksJsonImporter: TasksJsonImporter
val preferences: Preferences
}
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() {
val hilt = EntryPointAccessors.fromApplication(applicationContext, TasksBackupAgentEntryPoint::class.java)
importer = hilt.tasksJsonImporter
addHelper(BACKUP_KEY, FileBackupHelper(this, BackupConstants.INTERNAL_BACKUP))
EntryPointAccessors
.fromApplication(applicationContext, TasksBackupAgentEntryPoint::class.java)
.let {
importer = it.tasksJsonImporter
preferences = it.preferences
}
if (enabled) {
addHelper(BACKUP_KEY, FileBackupHelper(this, BackupConstants.INTERNAL_BACKUP))
}
}
@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) {
Timber.e("onQuotaExceeded(%s, %s)", backupDataBytes, quotaBytes)
}

@ -258,6 +258,7 @@ class TasksJsonImporter @Inject constructor(
companion object {
private val ignorePrefs = intArrayOf(
R.string.p_current_version,
R.string.p_backups_android_backup_last
)
}
}

@ -6,7 +6,7 @@ import android.os.Bundle
import androidx.preference.Preference
import androidx.preference.SwitchPreferenceCompat
import com.google.api.services.drive.DriveScopes
import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity
import com.todoroo.andlib.utility.DateUtilities
import dagger.hilt.android.AndroidEntryPoint
import org.tasks.PermissionUtil
import org.tasks.R
@ -20,6 +20,7 @@ import org.tasks.preferences.FragmentPermissionRequestor
import org.tasks.preferences.PermissionRequestor
import org.tasks.preferences.Preferences
import org.tasks.ui.Toaster
import java.util.*
import javax.inject.Inject
private const val REQUEST_CODE_BACKUP_DIR = 10001
@ -35,6 +36,7 @@ class Backups : InjectingPreferenceFragment() {
@Inject lateinit var permissionRequestor: FragmentPermissionRequestor
@Inject lateinit var toaster: Toaster
@Inject lateinit var googleAccountManager: GoogleAccountManager
@Inject lateinit var locale: Locale
override fun getPreferenceXml() = R.xml.preferences_backups
@ -62,6 +64,17 @@ class Backups : InjectingPreferenceFragment() {
super.onResume()
updateGoogleDriveCheckbox()
val lastBackup = preferences.getLong(R.string.p_backups_android_backup_last, 0L)
findPreference(R.string.p_backups_android_backup_enabled).summary =
getString(
R.string.last_backup,
if (lastBackup == 0L) {
getString(R.string.last_backup_never)
} else {
DateUtilities.getLongDateStringWithTime(lastBackup, locale)
}
)
}
override fun onRequestPermissionsResult(

@ -373,6 +373,8 @@
<string name="p_show_whats_new">show_whats_new</string>
<string name="p_just_updated">just_updated</string>
<string name="p_clicked_rate">clicked_rate</string>
<string name="p_backups_android_backup_enabled">backups_android_backup_enabled</string>
<string name="p_backups_android_backup_last">backups_android_backup_last</string>
<string name="p_current_version">cv</string>
<string name="event_whats_new">whats_new</string>

@ -637,4 +637,9 @@ File %1$s contained %2$s.\n\n
<string name="reset_sort_order">Reset sort order</string>
<string name="permission_read_tasks">Full access to Tasks database</string>
<string name="account_not_found">Account not found</string>
<string name="android_auto_backup">Android Backup Service</string>
<string name="android_auto_backup_device_summary">You must also opt in to backup service through your device settings. Not all devices provide backup service.</string>
<string name="last_backup">Last backup: %s</string>
<string name="last_backup_never">never</string>
<string name="device_settings">Device settings</string>
</resources>

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<Preference
android:key="@string/p_backup_dir"
@ -17,4 +18,21 @@
android:key="@string/backup_BAc_export"
android:title="@string/backup_BAc_export" />
<PreferenceCategory
android:title="@string/android_auto_backup">
<SwitchPreferenceCompat
android:defaultValue="true"
android:key="@string/p_backups_android_backup_enabled"
android:title="@string/enabled" />
<Preference
android:title="@string/device_settings"
android:summary="@string/android_auto_backup_device_summary"
app:icon="@drawable/ic_open_in_new_24px">
<intent android:action="android.settings.SETTINGS" />
</Preference>
</PreferenceCategory>
</PreferenceScreen>
Loading…
Cancel
Save