diff --git a/app/src/main/java/com/todoroo/astrid/backup/BackupConstants.kt b/app/src/main/java/com/todoroo/astrid/backup/BackupConstants.kt index b15475ab6..d697cf9dd 100755 --- a/app/src/main/java/com/todoroo/astrid/backup/BackupConstants.kt +++ b/app/src/main/java/com/todoroo/astrid/backup/BackupConstants.kt @@ -5,6 +5,7 @@ */ package com.todoroo.astrid.backup +import androidx.documentfile.provider.DocumentFile import com.google.api.services.drive.model.File import org.tasks.time.DateTime import java.util.regex.Pattern @@ -52,6 +53,10 @@ object BackupConstants { return getTimestampFromFilename(file.name) ?: file.modifiedTime.value } + fun getTimestamp(file: DocumentFile): Long { + return file.name?.let { getTimestampFromFilename(it) } ?: file.lastModified() + } + private fun getTimestampFromFilename(name: String): Long? { return MATCHER .matcher(name) diff --git a/app/src/main/java/org/tasks/backup/BackupHelper.kt b/app/src/main/java/org/tasks/backup/BackupHelper.kt new file mode 100644 index 000000000..56694a1a9 --- /dev/null +++ b/app/src/main/java/org/tasks/backup/BackupHelper.kt @@ -0,0 +1,39 @@ +package org.tasks.backup + +import android.content.ContentResolver +import android.content.Context +import androidx.documentfile.provider.DocumentFile +import com.todoroo.astrid.backup.BackupConstants +import dagger.hilt.android.qualifiers.ApplicationContext +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import org.tasks.preferences.Preferences +import java.io.File +import javax.inject.Inject + +class BackupHelper @Inject constructor( + @param:ApplicationContext private val context: Context, + private val preferences: Preferences +) { + suspend fun getLastBackup(): Long? { + val uri = preferences.backupDirectory + val timestamps: List? = withContext(Dispatchers.IO) { + when (uri?.scheme) { + ContentResolver.SCHEME_CONTENT -> { + DocumentFile.fromTreeUri(context, uri) + ?.listFiles() + ?.filter { BackupConstants.isBackupFile(it.name!!) } + ?.map { BackupConstants.getTimestamp(it) } + } + ContentResolver.SCHEME_FILE -> { + File(uri.path!!) + .listFiles() + ?.filter { BackupConstants.isBackupFile(it.name) } + ?.map { BackupConstants.getTimestamp(it) } + } + else -> emptyList() + } + } + return timestamps?.maxOrNull() + } +} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/preferences/fragments/Backups.kt b/app/src/main/java/org/tasks/preferences/fragments/Backups.kt index b2402f2a6..500a0321c 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/Backups.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/Backups.kt @@ -13,6 +13,7 @@ import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch import org.tasks.PermissionUtil import org.tasks.R +import org.tasks.backup.BackupHelper import org.tasks.dialogs.ExportTasksDialog import org.tasks.dialogs.ImportTasksDialog import org.tasks.drive.DriveInvoker @@ -42,6 +43,7 @@ class Backups : InjectingPreferenceFragment() { @Inject lateinit var googleAccountManager: GoogleAccountManager @Inject lateinit var locale: Locale @Inject lateinit var driveInvoker: DriveInvoker + @Inject lateinit var backupHelper: BackupHelper override fun getPreferenceXml() = R.xml.preferences_backups @@ -97,14 +99,25 @@ class Backups : InjectingPreferenceFragment() { } } - val lastBackup = preferences.getLong(R.string.p_backups_android_backup_last, 0L) + lifecycleScope.launch { + findPreference(R.string.backup_BAc_export).summary = + getString( + R.string.last_backup, + backupHelper.getLastBackup() + ?.takeIf { it > 0 } + ?.let { DateUtilities.getLongDateStringWithTime(it, locale) } + ?: getString(R.string.last_backup_never) + ) + } + + val lastAndroidBackup = 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) { + if (lastAndroidBackup == 0L) { getString(R.string.last_backup_never) } else { - DateUtilities.getLongDateStringWithTime(lastBackup, locale) + DateUtilities.getLongDateStringWithTime(lastAndroidBackup, locale) } ) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9fe80f745..ddd3dd310 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -6,8 +6,8 @@ Display name Enter filter name Backups - Import tasks - Export tasks + Backup now + Import backup Backed up %1$s to %2$s. No tasks to export. Restore summary @@ -316,7 +316,7 @@ File %1$s contained %2$s.\n\n Quiet hours Attachment folder Backup folder - Copy to Google Drive + Google Drive backup Miscellaneous Synchronization Subtasks diff --git a/app/src/main/res/xml/preferences_backups.xml b/app/src/main/res/xml/preferences_backups.xml index 733df2930..fc949b796 100644 --- a/app/src/main/res/xml/preferences_backups.xml +++ b/app/src/main/res/xml/preferences_backups.xml @@ -17,14 +17,14 @@ android:title="@string/backup_directory" app:allowDividerAbove="true" /> - - + +