Rename import/export buttons, display last backup

pull/1122/head
Alex Baker 5 years ago
parent a1e239eee5
commit bd08287c4c

@ -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)

@ -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<Long>? = 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()
}
}

@ -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)
}
)
}

@ -6,8 +6,8 @@
<string name="display_name">Display name</string>
<string name="enter_filter_name">Enter filter name</string>
<string name="backup_BPr_header">Backups</string>
<string name="backup_BAc_import">Import tasks</string>
<string name="backup_BAc_export">Export tasks</string>
<string name="backup_BAc_export">Backup now</string>
<string name="backup_BAc_import">Import backup</string>
<string name="export_toast">Backed up %1$s to %2$s.</string>
<string name="export_toast_no_tasks">No tasks to export.</string>
<string name="import_summary_title">Restore summary</string>
@ -316,7 +316,7 @@ File %1$s contained %2$s.\n\n
<string name="quiet_hours">Quiet hours</string>
<string name="attachment_directory">Attachment folder</string>
<string name="backup_directory">Backup folder</string>
<string name="google_drive_backup">Copy to Google Drive</string>
<string name="google_drive_backup">Google Drive backup</string>
<string name="miscellaneous">Miscellaneous</string>
<string name="synchronization">Synchronization</string>
<string name="subtasks">Subtasks</string>

@ -17,14 +17,14 @@
android:title="@string/backup_directory"
app:allowDividerAbove="true" />
<Preference
android:key="@string/backup_BAc_import"
android:title="@string/backup_BAc_import" />
<Preference
android:key="@string/backup_BAc_export"
android:title="@string/backup_BAc_export" />
<Preference
android:key="@string/backup_BAc_import"
android:title="@string/backup_BAc_import" />
<PreferenceCategory
android:title="@string/automatic_backups">

Loading…
Cancel
Save